diff --git a/.common.mk b/.common.mk index 97f096e8dc3..66578828b27 100644 --- a/.common.mk +++ b/.common.mk @@ -4,7 +4,7 @@ # follows (taken from src/Makefile.boot): # # ocaml-output/%.ml: -# @echo "[EXTRACT $(notdir $@)]" +# $(call msg, "EXTRACT", $(notdir $@)) # $(Q)$(BENCHMARK_PRE) $(FSTAR_C) $(SIL) $(notdir $(subst .checked.lax,,$<)) \ # --codegen OCaml \ # --extract_module $(basename $(notdir $(subst .checked.lax,,$<))) @@ -17,10 +17,6 @@ # # Besides that, when not using V=1, F* receives the --silent flag to # reduce non-critical output. -# -# It would be nice to define a function to print messages instead of -# copying the same echo invocation everywhere, but AFAIK that would mean -# we require GNU make. Q?=@ SIL?=--silent @@ -37,6 +33,10 @@ runlim not found: You can get it from: [https://github.com/arminbiere/runlim] endef +define msg = +@printf " %-8s %s\n" $(1) $(2) +endef + # Passing RESOURCEMONITOR=1 will create .runlim files through the source tree with # information about the time and space taken by each F* invocation. ifneq ($(RESOURCEMONITOR),) diff --git a/.completion/fish/fstar.exe.fish b/.completion/fish/fstar.exe.fish index 42c2f01ece8..e830d977333 100644 --- a/.completion/fish/fstar.exe.fish +++ b/.completion/fish/fstar.exe.fish @@ -49,7 +49,6 @@ complete -c fstar.exe -l max_ifuel --description "non-negative integer Number o complete -c fstar.exe -l MLish --description "Trigger various specializations for compiling the F* compiler itself (not meant for user code)" complete -c fstar.exe -l no_default_includes --description "Ignore the default module search paths" complete -c fstar.exe -l no_extract --description "module name Deprecated: use --extract instead; Do not extract code from this module" -complete -c fstar.exe -l no_load_fstartaclib --description "Do not attempt to load fstartaclib by default" complete -c fstar.exe -l no_location_info --description "Suppress location information in the generated OCaml output (only relevant with --codegen OCaml)" complete -c fstar.exe -l no_smt --description "Do not send any queries to the SMT solver, and fail on them instead" complete -c fstar.exe -l normalize_pure_terms_for_extraction --description "Extract top-level pure terms after normalizing them. This can lead to very large code, but can result in more partial evaluation and compile-time specialization." diff --git a/.docker/build/build_funs.sh b/.docker/build/build_funs.sh index 1f9e6e4d361..cefe285c21b 100644 --- a/.docker/build/build_funs.sh +++ b/.docker/build/build_funs.sh @@ -103,9 +103,15 @@ function update_version_number () { git commit -m "[CI] bump version number to $version_number" } +function git_add_fstar_snapshot () { + if ! git diff-index --quiet --cached HEAD -- ocaml/*/generated ; then + git ls-files ocaml/*/generated | xargs git add + fi +} + function refresh_fstar_hints() { [[ -n "$DZOMO_GITHUB_TOKEN" ]] && - refresh_hints "https://$DZOMO_GITHUB_TOKEN@github.com/FStarLang/FStar.git" "git ls-files src/ocaml-output/ | xargs git add" "regenerate hints + ocaml snapshot" "." + refresh_hints "https://$DZOMO_GITHUB_TOKEN@github.com/FStarLang/FStar.git" "git_add_fstar_snapshot" "regenerate hints + ocaml snapshot" "." } # Note: this performs an _approximate_ refresh of the hints, in the sense that @@ -194,8 +200,7 @@ function fstar_binary_build () { function fstar_docs_build () { # First - get fstar built # Second - run fstar with the --doc flag - make -C src/ocaml-output clean && \ - make -C src/ocaml-output -j $threads && \ + OTHERFLAGS='--admit_smt_queries true' make -j $threads && \ .ci/fsdoc.sh && \ echo true >$status_file } @@ -213,7 +218,7 @@ function fstar_default_build () { fi & # Build F*, along with fstarlib - if ! make -C src -j $threads utest-prelude; then + if ! make -j $threads ci-utest-prelude; then echo Warm-up failed echo Failure >$result_file return 1 @@ -232,13 +237,13 @@ function fstar_default_build () { fi # Once F* is built, run its main regression suite. - $gnutime make -C src -j $threads -k $localTarget && echo true >$status_file + $gnutime make -j $threads -k ci-$localTarget && echo true >$status_file echo Done building FStar # Make it a hard failure if there's a git diff. Note: FStar_Version.ml is in the # .gitignore. - echo "Searching for a diff in src/ocaml-output" - if ! git diff --exit-code src/ocaml-output; then + echo "Searching for a diff in ocaml/*/generated" + if ! git diff --exit-code ocaml/*/generated ; then echo "GIT DIFF: the files in the list above have a git diff" echo false >$status_file fi diff --git a/.docker/opam.Dockerfile b/.docker/opam.Dockerfile index 1f5e960e9f3..d3bc57154f3 100644 --- a/.docker/opam.Dockerfile +++ b/.docker/opam.Dockerfile @@ -6,12 +6,19 @@ FROM ocaml/opam:ubuntu-ocaml-$ocaml_version # FIXME: the `opam depext` command should be unnecessary with opam 2.1 RUN opam depext conf-gmp z3.4.8.5 conf-m4 +ADD --chown=opam:opam ./fstar.opam fstar.opam +RUN opam install --deps-only ./fstar.opam +RUN rm fstar.opam + ADD --chown=opam:opam ./ FStar/ -RUN rm -rf FStar/.git -RUN opam install --deps-only FStar/fstar.opam ARG opamthreads=24 RUN opam install -j $opamthreads -v -v -v FStar/fstar.opam -RUN eval $(opam env) && make -C $(opam config var fstar:share)/examples -j $opamthreads -RUN eval $(opam env) && make -C $(opam config var fstar:share)/tutorial -j $opamthreads regressions +RUN rm -rf FStar +# NOTE: I need to copy examples and tutorial from share/ because +# opam uninstall will balk at removing files created there during the test +RUN cp -p -r $(opam config var fstar:share)/examples $HOME/examples +RUN cp -p -r $(opam config var fstar:share)/doc $HOME/doc +RUN eval $(opam env) && make -C $HOME/examples -j $opamthreads +RUN eval $(opam env) && make -C $HOME/doc/tutorial -j $opamthreads regressions RUN opam uninstall -v -v -v fstar diff --git a/.docker/package.Dockerfile b/.docker/package.Dockerfile index e7b722f96ed..41eee91a605 100644 --- a/.docker/package.Dockerfile +++ b/.docker/package.Dockerfile @@ -4,54 +4,45 @@ # Build the package ARG ocaml_version=4.12 -FROM ocaml/opam:ubuntu-20.04-ocaml-$ocaml_version AS fstardep +ARG opamthreads=24 + +FROM ocaml/opam:ubuntu-20.04-ocaml-$ocaml_version AS fstarbuild # FIXME: the `opam depext` command should be unnecessary with opam 2.1 RUN opam depext conf-gmp z3.4.8.5 conf-m4 -ADD --chown=opam:opam ./ FStar/ +ADD --chown=opam:opam ./fstar.opam fstar.opam # Install opam dependencies only -RUN opam install --deps-only FStar/fstar.opam +RUN opam install --deps-only ./fstar.opam -ARG opamthreads=24 +# Install .NET +RUN sudo apt-get update && sudo apt-get install --yes --no-install-recommends \ + libicu66 -FROM fstardep AS fstarbuild +# (for .NET, cf. https://aka.ms/dotnet-missing-libicu ) +# CI dependencies: .NET Core +# Repository install may incur some (transient?) failures (see for instance https://github.com/dotnet/sdk/issues/27082 ) +# So, we use manual install instead, from https://docs.microsoft.com/en-us/dotnet/core/install/linux-scripted-manual#manual-install +ENV DOTNET_ROOT /home/opam/dotnet +RUN sudo apt-get install --yes --no-install-recommends \ + wget -# Build the package, -RUN eval $(opam env) && env Z3_LICENSE="$(opam config expand '%{prefix}%')/.opam-switch/sources/z3.4.8.5/LICENSE.txt" OTHERFLAGS='--admit_smt_queries true' make -C FStar -j $opamthreads package_unknown_platform +RUN wget https://download.visualstudio.microsoft.com/download/pr/cd0d0a4d-2a6a-4d0d-b42e-dfd3b880e222/008a93f83aba6d1acf75ded3d2cfba24/dotnet-sdk-6.0.400-linux-x64.tar.gz && \ + mkdir -p $DOTNET_ROOT && \ + tar xf dotnet-sdk-6.0.400-linux-x64.tar.gz -C $DOTNET_ROOT -# Create a separate image to test the package -FROM fstardep AS fstarbin +ENV PATH=${PATH}:$DOTNET_ROOT:$DOTNET_ROOT/tools -# Remove F* sources (keep deps) -RUN mv FStar FStar.todelete && rm -rf FStar.todelete +ADD --chown=opam:opam ./ FStar/ -# Copy the F* binary package -COPY --from=fstarbuild /home/opam/FStar/src/ocaml-output/fstar.tar.gz /home/opam/fstar.tar.gz -RUN tar xzf fstar.tar.gz -ENV FSTAR_HOME /home/opam/fstar -ENV PATH="${FSTAR_HOME}/bin:${PATH}" +# Build the package, +RUN eval $(opam env) && env Z3_LICENSE="$(opam config expand '%{prefix}%')/.opam-switch/sources/z3.4.8.5/LICENSE.txt" OTHERFLAGS='--admit_smt_queries true' make -C FStar -j $opamthreads package_unknown_platform -# Copy examples and docs -ADD --chown=opam:opam examples/ fstar_examples/ -ADD --chown=opam:opam doc/ fstar_doc/ +# Create a separate image to test the package # Test the F* binary package -# Case 1: test the fresh package -FROM fstarbin -RUN eval $(opam env) && make -C fstar_examples -j $opamthreads -RUN eval $(opam env) && make -C fstar_doc/tutorial -j $opamthreads regressions - -# Case 2: rebuild ulib and test again -FROM fstarbin -RUN eval $(opam env) && make -C $FSTAR_HOME/ulib rebuild -j $opamthreads -RUN eval $(opam env) && make -C fstar_examples/hello -j $opamthreads -RUN eval $(opam env) && make -C $FSTAR_HOME/ulib clean_checked && make -C $FSTAR_HOME/ulib -j $opamthreads -RUN eval $(opam env) && make -C fstar_examples -j $opamthreads -RUN eval $(opam env) && make -C fstar_doc/tutorial -j $opamthreads regressions - # Test the fresh package without OCaml FROM ubuntu:20.04 AS fstarnoocaml ENV DEBIAN_FRONTEND=noninteractive @@ -71,24 +62,29 @@ SHELL ["/bin/bash", "--login", "-c"] # Copy the package COPY --from=fstarbuild /home/opam/FStar/src/ocaml-output/fstar.tar.gz /home/test/fstar.tar.gz RUN tar xzf fstar.tar.gz -ENV FSTAR_HOME /home/test/fstar -ENV PATH="${FSTAR_HOME}/bin:${PATH}" # Copy tests, examples and docs ADD --chown=test:test examples/ fstar_examples/ ADD --chown=test:test doc/ fstar_doc/ # Case 3: test F* package without OCaml -FROM fstarnoocaml -RUN make -C fstar_examples -j $opamthreads -RUN make -C fstar_doc/tutorial -j $opamthreads regressions -# Case 4: test F* package without OCaml, but recheck ulib +# Test the package with FSTAR_HOME defined +# Move z3 elsewhere +# FROM fstarnoocaml +# ENV FSTAR_HOME=$HOME/fstar +# RUN mkdir -p $HOME/bin && ln -s $FSTAR_HOME/bin/z3 $HOME/bin/ +# ENV PATH="${HOME}/bin:${PATH}" +# RUN make -C fstar_examples -j $opamthreads +# RUN make -C fstar_doc/tutorial -j $opamthreads regressions + +# Test the package with F* in the PATH instead FROM fstarnoocaml -RUN make -C $FSTAR_HOME/ulib clean_checked && make -C $FSTAR_HOME/ulib -j $opamthreads +ENV PATH="/home/test/fstar/bin:${PATH}" RUN make -C fstar_examples -j $opamthreads RUN make -C fstar_doc/tutorial -j $opamthreads regressions +FROM fstarnoocaml # This is the last image. So we can also copy the file that contains # the desired filename for the package, to be extracted via # `docker cp` diff --git a/.gitattributes b/.gitattributes index c921b00431a..fdd22e41bfd 100644 --- a/.gitattributes +++ b/.gitattributes @@ -4,6 +4,7 @@ *.fsti linguist-language=FStar *.fsti linguist-documentation=false /src/ocaml-output/FStar_*.ml linguist-vendored +/ocaml/fstar-lib/generated/FStar_*.ml linguist-vendored # Line endings *.fs* eol=lf @@ -24,6 +25,8 @@ karamel_ref eol=lf # does not show diffs in the CLI nor GitHub. /src/ocaml-output/FStar_*.ml -diff -merge /src/ocaml-output/FStar_*.ml linguist-generated=true +/ocaml/fstar-lib/generated/FStar_*.ml -diff -merge +/ocaml/fstar-lib/generated/FStar_*.ml linguist-generated=true *.hints -diff -merge *.hints linguist-generated=true diff --git a/.gitignore b/.gitignore index be7534922fa..b4a48b2a281 100644 --- a/.gitignore +++ b/.gitignore @@ -31,6 +31,8 @@ cache/ /bin/z3-x64.exe /src/*/obj +/lib + examples/*/*.ml examples/crypto/CntProtocol.exe examples/wysteria/ocaml-output/* @@ -43,6 +45,8 @@ _build/ /ulib/fs/obj /ulib/fs/bin +/release + *.native *.byte @@ -60,6 +64,7 @@ dump *.cmxs *.cmxa *.o +fstar.install .depend .depend.rsp diff --git a/.nix/README.md b/.nix/README.md index e60dc12fb9c..3da4f792cd0 100644 --- a/.nix/README.md +++ b/.nix/README.md @@ -43,11 +43,6 @@ To build/run/install/... `fstar-bootsrap`, just use `github:FStarLang/FStar#fstar-bootsrap` instead of `github:FStarLang/FStar`. -## Building custom version of F\* - -The file `.nix/lib.nix` provides a fined grained Nix API to build -custom F\*. - ## Hacking on F\* Just run `nix develop` in your local clone of F\*, you will be dropped diff --git a/.nix/bootstrap.nix b/.nix/bootstrap.nix new file mode 100644 index 00000000000..374dbc7c492 --- /dev/null +++ b/.nix/bootstrap.nix @@ -0,0 +1,25 @@ +{ fstar, fstar-dune, fstar-ocaml-snapshot, fstar-ulib, stdenv }: + +let + ocaml-src = stdenv.mkDerivation { + name = "src"; + src = fstar-ocaml-snapshot; + dontBuild = true; + installPhase = '' + mkdir -p $out/ocaml + mv ./* $out/ocaml + cp ${../version.txt} $out/version.txt + ''; + }; + fstar-dune-bootstrap = fstar-dune.overrideAttrs (_: { + pname = "fstar-bootstrap-dune"; + src = ocaml-src; + }); + fstar-ulib-bootstrap = (fstar-ulib.override + (_: { fstar-dune = fstar-dune-bootstrap; })).overrideAttrs + (_: { pname = "fstar-bootstrap-ulib"; }); + +in (fstar.override (_: { + fstar-dune = fstar-dune-bootstrap; + fstar-ulib = fstar-ulib-bootstrap; +})).overrideAttrs (_: { pname = "fstar-bootstrap"; }) diff --git a/.nix/fstar.nix b/.nix/fstar.nix new file mode 100644 index 00000000000..20785dfcfeb --- /dev/null +++ b/.nix/fstar.nix @@ -0,0 +1,42 @@ +{ callPackage, fstar-dune, fstar-ulib, installShellFiles, lib, makeWrapper +, stdenv, version, z3 }: + +stdenv.mkDerivation { + pname = "fstar"; + inherit version; + + buildInputs = [ installShellFiles makeWrapper ]; + + src = lib.sourceByRegex ./.. [ + ".common.mk" + "doc.*" + "examples.*" + "src(/ocaml-output(/Makefile)?)?" + "ucontrib.*" + ]; + + dontBuild = true; + + installPhase = '' + mkdir $out + + CP="cp -r --no-preserve=mode" + $CP ${fstar-dune}/* $out + $CP ${fstar-ulib}/* $out + + PREFIX=$out make -C src/ocaml-output install-sides + + for binary in $out/bin/* + do + chmod +x $binary + wrapProgram $binary --prefix PATH ":" ${z3}/bin + done + + cd $out + installShellCompletion --bash ${../.completion/bash/fstar.exe.bash} + installShellCompletion --fish ${../.completion/fish/fstar.exe.fish} + installShellCompletion --zsh --name _fstar.exe ${ + ../.completion/zsh/__fstar.exe + } + ''; +} diff --git a/.nix/lib.nix b/.nix/lib.nix deleted file mode 100644 index fcb277f4401..00000000000 --- a/.nix/lib.nix +++ /dev/null @@ -1,239 +0,0 @@ -/* Provides derivations that operate on F* source trees. - - Those derivations realizes F* bootstraping. F* is bootsrapped via - OCaml; F* source trees are assumed to provide an OCaml snapshot (in - [src/ocaml-output]). - - - [ml-extraction-of-fstar]: given an F* source tree [src] and an - existing F* binary [existing-fstar], [ml-extraction-of-fstar {src, - existing-fstar, ...}] extracts F* sources (written in F*) as an - OCaml snapshot. - - - [binary-of-ml-snapshot]: given an F* source tree [src] and a bunch - of build options[1] [opts], [binary-of-ml-snapshot {src, opts, ...}] - builds the OCaml snapshot [${src}/src/ocaml-output]. - - - [binary-of-fstar] is basically the composition - [binary-of-ml-snapshot ∘ ml-extraction-of-fstar ∘ binary-of-ml-snapshot], - that is the full bootrapping of the compiler. - - [1]: Options are given as a set composed of the following keys: - • [keep-sources] (defaults to [false]) - Whether the folder [src] is kept during [installPhase] - (keep in mind OCaml snapshots live under [src]) - • [compile-fstar] (defaults to [true] ) - Wether [bin/fstar.exe] is built - • [compile-bytecode] (defaults to [false]) - Wether [bin/fstar.ocaml] is built - • [compile-tests] (defaults to [true]) - Wether [bin/test.exe] is built - • [compile-comp-lib] (defaults to [true] ) - Wether F*'s compiler OCaml library is built & installed - • [compile-ulib] (defaults to [true] ) - Wether F*'s [ulib] OCaml library is built & installed -*/ -{ stdenv, lib, makeWrapper, installShellFiles, which, z3, ocamlPackages, sphinx, python39Packages, removeReferencesTo }: -let - /* Following [https://github.com/FStarLang/FStar/blob/master/fstar.opam], - `ocamlBuildInputs` is the list of OCaml packages necessary to build F* snapshots. - */ - ocamlNativeBuildInputs = with ocamlPackages; [ - ocaml - ocamlbuild - findlib - menhir - ]; - ocamlBuildInputs = with ocamlPackages; [ - batteries - zarith - stdint - yojson - fileutils - menhirLib - pprint - sedlex - ppxlib - ppx_deriving - ppx_deriving_yojson - process - ]; - preBuild = { pname, version }: '' - echo "echo ${lib.escapeShellArg pname}-${version}" > src/tools/get_commit - patchShebangs src/tools ulib/gen_mllib.sh bin - substituteInPlace src/ocaml-output/Makefile --replace '$(COMMIT)' '${version}' - ''; - # Default options. (camel case because those are injected as bash variables) - defaults = { - keepSources = false; - compileFStar = true; - compileBytecode = false; - compileTests = true; - compileCompLib = true; - compileUlib = true; - }; - - binary-of-ml-snapshot = { src, pname ? src.pname, version ? src.version, opts ? defaults }: - let pkg = - stdenv.mkDerivation (defaults // opts // { - inherit pname version src; - - nativeBuildInputs = [ makeWrapper installShellFiles z3 removeReferencesTo ] ++ ocamlNativeBuildInputs; - buildInputs = ocamlBuildInputs; - strictDeps = true; - - preBuildPhases = [ "preparePhase" ]; - preparePhase = preBuild { inherit pname version; }; - - # Triggers [make] rules according to [opts] contents - buildPhase = '' - MAKE_FLAGS="-j$NIX_BUILD_CORES" - [ -z "$compileFStar" ] || make $MAKE_FLAGS -C src/ocaml-output ../../bin/fstar.exe - [ -z "$compileBytecode" ] || make $MAKE_FLAGS -C src/ocaml-output ../../bin/fstar.ocaml - [ -z "$compileTests" ] || make $MAKE_FLAGS -C src/ocaml-output ../../bin/tests.exe - [ -z "$compileCompLib" ] || make $MAKE_FLAGS -C src/ocaml-output install-compiler-lib - [ -z "$compileUlib" ] || { make $MAKE_FLAGS -C ulib/ml && make $MAKE_FLAGS -C ulib; } - ''; - - OCAML_VERSION = ocamlPackages.ocaml.version; - Z3_PATH = lib.getBin z3; - # Installs binaries and libraries according to [opts] contents - installPhase = '' - SITE_LIB="$out/lib/ocaml/$OCAML_VERSION/site-lib" - copyBin () { cp "bin/$1" $out/bin - # OCaml leaves it's full store path in produced binaries - # Thus we need to remove any reference to the path of OCaml in the store - remove-references-to -t '${ocamlPackages.ocaml}' $out/bin/$1 - wrapProgram "$out/bin/$1" --prefix PATH ":" "$Z3_PATH/bin" - } - instLib () { mkdir -p "$SITE_LIB" - cp -r "bin/$1" "$out/bin/$1" - ln -s "$out/bin/$1" "$SITE_LIB/$1" - } - mkdir $out/{,ulib,bin} - cp -r ./ulib/ $out/ - [ -z "$compileFStar" ] || copyBin fstar.exe - [ -z "$compileBytecode" ] || copyBin fstar.ocaml - [ -z "$compileTests" ] || copyBin tests.exe - [ -z "$keepSources" ] || cp -r ./src/ $out/ - [ -z "$compileUlib" ] || { instLib fstarlib - instLib fstar-tactics-lib ; } - [ -z "$compileCompLib" ] || { instLib fstar-compiler-lib; } - - # remove ocamlbuild artifacts - find $out -name _build -type d | xargs -I{} rm -rf "{}" - - installShellCompletion --bash .completion/bash/fstar.exe.bash - installShellCompletion --fish .completion/fish/fstar.exe.fish - installShellCompletion --zsh --name _fstar.exe .completion/zsh/__fstar.exe - ''; - - dontFixup = true; - - meta.mainProgram = "fstar.exe"; - }); - in pkg; - - # Helper derivation that prepares an F* source tree with an existing F* binary/ - with-existing-fstar = { src, pname, version, existing-fstar, patches ? [ ], }: - stdenv.mkDerivation { - inherit src pname patches version; - EXISTING_FSTAR = existing-fstar; - nativeBuildInputs = [ z3 which existing-fstar ]; - preBuildPhases = [ "preparePhase" "copyBinPhase" ]; - preparePhase = preBuild { inherit pname version; }; - copyBinPhase = '' - cd bin - # Next line is required when building F* before commit [6dbcdc1bce] - rm fstar-any.sh 2>/dev/null && ln -s "$EXISTING_FSTAR/bin/fstar.exe" fstar-any.sh - for f in "$EXISTING_FSTAR"/bin/*; do - file=$(basename -- "$f") - test -f "$file" && rm "$file" - ln -s "$f" ./ - done - cd .. - ''; - dontFixup = true; - }; - ml-extraction-of-fstar = opts: - (with-existing-fstar opts).overrideAttrs (o: { - buildFlags = [ "ocaml" "-C" "src" ]; - installPhase = "cp -r . $out"; - }); - /* F* tests are twofold: - - the binary [tests.exe] runs "internal" tests; - - the folder [tests] holds number of test cases under the shape of F* modules. - [check-fstar] runs both. - - TODO: the statement above is wrong, the [example] and [ucontrib] folders are also - part of the F* tests. - */ - check-fstar = opts: - (with-existing-fstar opts).overrideAttrs (o: { - buildPhase = '' - ./bin/tests.exe - substituteInPlace tests/machine_integers/Makefile --replace "/bin/echo" "echo" - for file in ./ulib/gmake/Makefile.tmpl ./ulib/ml/Makefile.include; do - # [OCAMLPATH] is already correctly set, disable override - substituteInPlace "$file" --replace "OCAMLPATH=" "IGNOREME=" - done - make -j$NIX_BUILD_CORES -C tests - ''; - installPhase = "touch $out"; - nativeBuildInputs = o.nativeBuildInputs ++ ocamlNativeBuildInputs; - buildInputs = ocamlBuildInputs; - }); - binary-of-fstar = { src, pname, version, patches ? [ ], existing-fstar ? - binary-of-ml-snapshot { - inherit src version; - pname = "${pname}-bin-of-snapshot"; - opts = { - keepSources = false; - compileFStar = true; - compileBytecode = false; - compileTests = false; - compileCompLib = false; - compileUlib = false; - }; - }, opts ? defaults }: - let - extraction = ml-extraction-of-fstar { - inherit src existing-fstar patches; - pname = "${pname}-ml-extraction"; - inherit version; - }; - bin = binary-of-ml-snapshot { - inherit pname version opts; - src = extraction; - }; - in - bin.overrideAttrs (old: { - passthru = (old.passthru or {}) // { - bootstrap.zero = existing-fstar; - bootstrap.one = extraction; - book = book-of-fstar { - inherit src; - pname = "${pname}-book"; - }; - tests = check-fstar { - inherit src; - pname = "${pname}-tests"; - rev = src.rev; - existing-fstar = bin; - }; - }; - }); - book-of-fstar = { src, pname }: stdenv.mkDerivation { - name = "${pname}-book"; - src = src + "/doc/book"; - buildInputs = [ sphinx python39Packages.sphinx_rtd_theme ]; - installPhase = '' - mkdir -p "$out"/nix-support - echo "doc manual $out/book" >> $out/nix-support/hydra-build-products - mv _build/html $out/book - ''; - }; -in { - inherit binary-of-fstar ml-extraction-of-fstar binary-of-ml-snapshot check-fstar - with-existing-fstar ocamlBuildInputs ocamlNativeBuildInputs; - defaultOptions = defaults; -} diff --git a/.scripts/process_build.sh b/.scripts/process_build.sh index 12f3e641fdd..8b586b0c2b0 100755 --- a/.scripts/process_build.sh +++ b/.scripts/process_build.sh @@ -6,110 +6,8 @@ # Creates a tag, if necessary . "`dirname $0`/release-pre.sh" -# We need two FSTAR_HOMEs in this script: one for the host (from where -# we build F*) and one for the package (from where we test the -# obtained binary). FSTAR_HOST_HOME is the former. -cd "$FSTAR_HOST_HOME" - -# Constants for showing color in output window -RED='\033[0;31m' -YELLOW='\033[0;33m' -GREEN='\033[0;32m' -NC='\033[0m' # No Color - -diag () { - echo -e "${YELLOW}$1${NC}" -} - -diag "*** Make package (clean build directory first) ***" -cd src/ocaml-output -git clean -ffdx -make -j6 -C ../.. package - -diag "*** Unzip and verify the Package ***" -TIME_STAMP=$(date +%Y%m%d%H%M) -COMMIT=_$(git rev-parse --short HEAD) - -mkdir "$FSTAR_HOST_HOME/release" - -TYPE="_Windows_x64.zip" -MAJOR_ZIP_FILE=fstar_$CURRENT_VERSION$TYPE -if [[ -f $MAJOR_ZIP_FILE ]]; then - unzip -o $MAJOR_ZIP_FILE - BUILD_PACKAGE="$MAJOR_ZIP_FILE" - cp $MAJOR_ZIP_FILE "$FSTAR_HOST_HOME/release/$BUILD_PACKAGE" -else - TYPE="_Linux_x86_64.tar.gz" - MAJOR_TAR_FILE=fstar_$CURRENT_VERSION$TYPE - if [[ -f $MAJOR_TAR_FILE ]]; then - tar -x -f $MAJOR_TAR_FILE - BUILD_PACKAGE="$MAJOR_TAR_FILE" - cp $MAJOR_TAR_FILE "$FSTAR_HOST_HOME/release/$BUILD_PACKAGE" - else - echo -e "* ${RED}FAIL!${NC} src/ocaml-output/make package did not create ${MAJOR_ZIP_FILE} or ${MAJOR_TAR_FILE}" - exit 1 - fi -fi - -diag "*** Test the binary package ***" -cd fstar - -# We need two FSTAR_HOMEs in this script: one for the host (from where -# we build F*) and one for the package (from where we test the -# obtained binary). FSTAR_HOME is the latter. Most examples will -# anyway redefine and overwrite FSTAR_HOME according to their location -# within the package, *except* one: stringprinter in examples/tactics, -# which needs KaRaMeL, which needs some FSTAR_HOME defined. So we have -# to export it from here. -export FSTAR_HOME="$PWD" - -# Copy tests and examples to the tmp directory, since they are no -# longer included in the package. We copy them elsewhere since we -# don't want to rely on relative paths in their Makefiles. -rm -rf /tmp/fstar_examples /tmp/fstar_doc -cp -r $FSTAR_HOST_HOME/examples /tmp/fstar_examples -cp -r $FSTAR_HOST_HOME/doc /tmp/fstar_doc - -diag "-- Versions --" -bin/fstar.exe --version -bin/z3 --version - -diag "-- Execute examples/hello via OCaml -- should output Hello F*! --" -make -C /tmp/fstar_examples/hello hello | tee HelloOcamlOutput.log -if [ $? -ne 0 ]; then - echo -e "* ${RED}FAIL!${NC} for examples/hello - make failed withexit code $?" - exit 1 -elif ! egrep -q 'Hello F\*!' HelloOcamlOutput.log; then - echo -e "* ${RED}FAIL!${NC} for examples/hello - 'Hello F*!' was not found in HelloOcamlOutput.log" - exit 1 -else - echo -e "* ${GREEN}PASSED!${NC} for examples/hello" -fi - -diag "-- Rebuilding ulib/ml (to make sure it works) --" -make -C ulib rebuild -if [ $? -ne 0 ]; then - echo -e "* ${RED}FAIL!${NC} for install-fstarlib - make returned $?" - exit 1 -else - echo -e "* ${GREEN}PASSED!${NC} for install-fstarlib" -fi - -diag "-- Verify all examples --" -make -j6 -C /tmp/fstar_examples -if [ $? -ne 0 ]; then - echo -e "* ${RED}FAIL!${NC} for all examples - make returned $?" - exit 1 -else - echo -e "* ${GREEN}PASSED!${NC} for all examples" -fi - -# Cleanup -rm -rf /tmp/fstar_examples /tmp/fstar_doc - -# From this point on, we should no longer need FSTAR_HOME. -export FSTAR_HOME= - +# Build and test the package +. "`dirname $0`/test_package.sh" # Push the binary package(s) to the release. . "$FSTAR_HOST_HOME/.scripts/release-post.sh" diff --git a/.scripts/test_package.sh b/.scripts/test_package.sh new file mode 100755 index 00000000000..43903937815 --- /dev/null +++ b/.scripts/test_package.sh @@ -0,0 +1,99 @@ +#!/usr/bin/env bash + +set -e +set -o pipefail +set -x + +# We need two FSTAR_HOMEs in this script: one for the host (from where +# we build F*) and one for the package (from where we test the +# obtained binary). FSTAR_HOST_HOME is the former. +if [[ -z "$FSTAR_HOST_HOME" ]] ; then + FSTAR_HOST_HOME=$(cd `dirname $0`/.. && pwd) +fi +cd "$FSTAR_HOST_HOME" + +# Constants for showing color in output window +RED='\033[0;31m' +YELLOW='\033[0;33m' +GREEN='\033[0;32m' +NC='\033[0m' # No Color + +diag () { + echo -e "${YELLOW}$1${NC}" +} + +diag "*** Make package (clean build directory first) ***" +git clean -ffdx src/ocaml-output release +make -j6 package +cd src/ocaml-output + +if [[ -z "$CURRENT_VERSION" ]] ; then + CURRENT_VERSION=$(cat fstar/version.txt | sed 's!^v!!' | sed 's!'"\r"'$!!') +fi + +diag "*** Unzip and verify the Package ***" +TIME_STAMP=$(date +%Y%m%d%H%M) +COMMIT=_$(git rev-parse --short HEAD) + +mkdir "$FSTAR_HOST_HOME/release" + +rm -rf /tmp/fstar_package +mkdir /tmp/fstar_package +cd /tmp/fstar_package +TYPE="_Windows_x64.zip" +BUILD_PACKAGE_FILENAME=fstar_$CURRENT_VERSION$TYPE +BUILD_PACKAGE="$FSTAR_HOST_HOME/src/ocaml-output/$BUILD_PACKAGE_FILENAME" +if [[ -f $BUILD_PACKAGE ]] ; then + unzip -o $BUILD_PACKAGE +else + echo -e "src/ocaml-output/make package did not create ${BUILD_PACKAGE_FILENAME}" + TYPE="_Linux_x86_64.tar.gz" + BUILD_PACKAGE_FILENAME=fstar_$CURRENT_VERSION$TYPE + BUILD_PACKAGE="$FSTAR_HOST_HOME/src/ocaml-output/$BUILD_PACKAGE_FILENAME" + if [[ -f $BUILD_PACKAGE ]] ; then + tar xf $BUILD_PACKAGE + else + echo -e "src/ocaml-output/make package did not create ${BUILD_PACKAGE_FILENAME}" + echo -e "* ${RED}FAIL!${NC}" + exit 1 + fi +fi +NEW_BUILD_PACKAGE="$FSTAR_HOST_HOME/release/$BUILD_PACKAGE_FILENAME" +cp "$BUILD_PACKAGE" "$NEW_BUILD_PACKAGE" +BUILD_PACKAGE="$NEW_BUILD_PACKAGE" + +diag "*** Test the binary package ***" + +# We need two FSTAR_HOMEs in this script: one for the host (from where +# we build F*) and one for the package (from where we test the +# obtained binary). FSTAR_HOME is the latter. +cd fstar +export FSTAR_HOME="$PWD" + +# Move doc and examples to the tmp directory. +# We move them elsewhere since we +# don't want to rely on relative paths in their Makefiles. +rm -rf /tmp/fstar_examples /tmp/fstar_doc +mv share/fstar/examples /tmp/fstar_examples +mv share/fstar/doc /tmp/fstar_doc + +diag "-- Versions --" +bin/fstar.exe --version +bin/z3 --version + +diag "-- Verify all examples --" +make -j6 -C /tmp/fstar_examples && make -j6 -C /tmp/fstar_doc/tutorial regressions +if [ $? -ne 0 ]; then + echo -e "* ${RED}FAIL!${NC} for all examples - make returned $?" + exit 1 +else + echo -e "* ${GREEN}PASSED!${NC} for all examples" +fi + +cd $FSTAR_HOST_HOME + +# Cleanup +rm -rf /tmp/fstar_examples /tmp/fstar_doc + +# From this point on, we should no longer need FSTAR_HOME. +export FSTAR_HOME= diff --git a/INSTALL.md b/INSTALL.md index cd17f0fb191..cc42b3c68e3 100644 --- a/INSTALL.md +++ b/INSTALL.md @@ -4,7 +4,6 @@ * [OPAM package](#opam-package) * [Binary package](#binary-package) * [Installing a binary package](#installing-a-binary-package) - * [Using a binary package to compile OCaml code generated by F*](#using-a-binary-package-to-compile-ocaml-code-generated-by-f) * [Testing a binary package](#testing-a-binary-package) * [Running F* from a docker image](#running-f-from-a-docker-image) * [Chocolatey Package on Windows](#chocolatey-package-on-windows) @@ -91,38 +90,6 @@ need to perform the following step before your first use: `/path/to/fstar` directory, then both `fstar.exe` and the right version of `z3` are in the `path/to/fstar/bin` directory. -### Using a binary package to compile OCaml code generated by F* ### - -**Note:** To compile OCaml code generated by F*, using a F* binary -package is **not** the preferred method. You should install F* via -OPAM instead. Indeed, if you use the binary package, you will need to -use the same version of OCaml as the one that was used to build F* -itself: currently F* binary packages for 2021.x are built with OCaml -4.12, and binary packages for previous versions were built with OCaml -4.09, or 4.05 for even older binary packages. - -1. If you want to compile OCaml code generated by F*, you need to - obtain a working OCaml setup. Please read [the corresponding - section below](#prerequisites-working-ocaml-setup), especially - steps 0 to 3 to first install OCaml and OPAM on your OS; then use - the following command to install the packages required to compile - OCaml programs extracted from F\* code: - - $ opam install ocamlfind batteries stdint zarith ppx_deriving_yojson pprint 'ppxlib>=0.22.0' ocaml-compiler-libs - - For more on extracting to OCaml, check out - [the documentation on extracting and executing F\* code](https://github.com/FStarLang/FStar/wiki/Executing-F*-code). - -2. If you want to compile OCaml code generated by F* with a binary - package of version 0.9.7.x or older, then you will need to - rebuild our [OCaml support - library](https://github.com/FStarLang/FStar/wiki/Executing-F*-code): - - $ make -C ulib install-fstarlib - - That library is already compiled and present in the binary package - starting from 0.9.8.x onwards. - ### Testing a binary package ### After installing a F* binary package as described above, you can test @@ -138,12 +105,18 @@ commands. (Note: On Windows this requires Cygwin and `make`) take a long time, use a lot of resources, and there are also some quirks explained in the notes below. - $ make -C examples -j6 + $ make -C examples -j6 HAS_OCAML= $ echo $? # non-zero means build failed! scroll up for error message! Note: Some of the examples need to generate and compile OCaml - code. Thus, they require having OCaml installed. If OCaml is - absent, then these examples will be skipped. + code. The `HAS_OCAML=` argument to `make` disables those + parts of those examples that rely on OCaml. If, however, you + remove that option, then you will most likely encounter + version discrepancies between the OCaml support libraries + included in the F\* binary packages and the OCaml libraries + and packages installed on your system. This is why, to avoid + such discrepancies, you should install F\* via opam if you + are interested in compiling these examples. Note: Some of the examples currently require having [KaRaMeL](https://github.com/FStarLang/karamel) installed and the `KRML_HOME` variable pointing to its location. @@ -217,8 +190,7 @@ F\* from the sources on GitHub (the `master` branch). **Short version**: Once you have a [working OCaml setup](#prerequisites-working-ocaml-setup), simply run `make -j 6` from the `master` branch of the clone. -This build process is explained in smaller steps [below](#step-1-building-f-from-the-ocaml-snapshot), -but first we explain how to get a working OCaml setup on your machine. +First we explain how to get a working OCaml setup on your machine. **Note:** To compile and use F\* from its sources, you will also need to [get a particular version of @@ -226,7 +198,7 @@ but first we explain how to get a working OCaml setup on your machine. ### Prerequisites: Working OCaml setup ### -The steps require a working OCaml setup. OCaml version from 4.07.0 to 4.14.X should work. +The steps require a working OCaml setup. OCaml version from 4.08.0 to 4.14.X should work. #### Instructions for Windows #### @@ -320,11 +292,17 @@ your machine): $ make -j N -This does three things: +This does two things: 1. As explained in more detail [below](#bootstrapping-f-in-ocaml), a snapshot of the F\* sources extracted to OCaml is checked in the F\* repo and regularly - updated, and the command above will simply build an F\* binary out of that snapshot. + updated, and the command above will simply build an F\* binary out of that snapshot. + + That snapshot also contains the extracted OCaml code of the various + OCaml libraries needed for building OCaml code extracted from F\*, + native tactics, etc., so this step also compiles them. + + This step can be isolatedly run with `make dune-fstar` **Note:** On Windows this generates a *native* F\* binary, that is, a binary that does *not* depend on `cygwin1.dll`, since [the installer above](#instructions-for-windows) @@ -336,12 +314,11 @@ This does three things: special `flexlink` technology for this. See `examples/crypto` and `contrib/CoreCrypto/ml` for examples. -2. It builds the various OCaml libraries (`fstar-compiler-lib`, `fstarlib`, - `fstartaclib`), needed for building OCaml code extracted from F\*, native - tactics, etc. - -3. It verifies the F\* standard library, producing `.checked` files that cache - definitions to speed up subsequent usage. +2. The command above verifies the F\* standard library, producing + `.checked` files that cache definitions to speed up subsequent + usage. + + This step can be isolatedly run with `make verify-ulib` ## Bootstrapping F\* in OCaml @@ -350,7 +327,7 @@ Therefore, the standard bootstrap build process of F\* involves the following th **Step 1.** Build F\* using the OCaml compiler from the (possibly outdated) checked-in generated OCaml snapshot. - **Step 2b.** Extract the sources of F\* itself to OCaml using the F\* binary produced at step 1. + **Step 2.** Extract the sources of F\* itself to OCaml using the F\* binary produced at step 1. **Repeat step 1**: Rebuild F\* from the newly generated OCaml code in the previous step. @@ -358,13 +335,27 @@ A convenience Makefile target is available to run all three steps: $ make boot -j6 +If you already compiled F\*, you can do Step 2 then Step 1, by +skipping the first Step 1 (but not its repeat after Step 2) and using +your existing F\* to perform Step 2. To do so, just run `make +dune-bootstrap` instead of `make boot`. + +Those rules support parallelism and incrementality (by virtue of the +snapshot being compiled with dune). However, in some cases, it is +necessary to regenerate the whole snapshot by fully erasing it before +extracting it again. This may be needed for instance if some modules +in the F\* sources or in the standard library are renamed or +deleted. To this end, you can use `make dune-full-bootstrap` instead +of `make boot`. This command does `make clean-full-dune-snapshot` to +erase the extracted snapshot. + ### Step 1. Build an F\* binary from OCaml snapshot ### -[Get an F\* binary using the the OCaml build process](#step-1-building-f-from-the-ocaml-snapshot): +[Get an F\* binary using the OCaml build process](#building-f-and-its-libraries): - $ make 1 -j6 + $ make -j6 -### Step 2b. Extract the sources of F\* itself to OCaml ### +### Step 2. Extract the sources of F\* itself to OCaml ### 1. Make sure you follow the instructions above to get a [working OCaml setup](#prerequisites-working-ocaml-setup). @@ -372,7 +363,7 @@ A convenience Makefile target is available to run all three steps: 2. Once you satisfy the prerequisites for your platform, translate the F\* sources to OCaml using F\* by running: - $ make ocaml -C src -j6 + $ make dune-extract-all -j6 ### Repeat [Step 1](#step-1-build-an-f-binary-from-ocaml-snapshot) diff --git a/Makefile b/Makefile index 81480a8b6c8..82ed3db8d6d 100644 --- a/Makefile +++ b/Makefile @@ -1,27 +1,82 @@ -.PHONY: all package clean boot 0 1 2 3 hints bench libs output install uninstall package_unknown_platform no-ulib-checked +.PHONY: all package clean boot 1 2 3 hints bench output install uninstall package_unknown_platform include .common.mk -all: - $(Q)+$(MAKE) -C src/ocaml-output - $(Q)+$(MAKE) -C ulib/ml - $(Q)+$(MAKE) -C ulib +all: dune -install: - $(Q)+$(MAKE) -C src/ocaml-output install +DUNE_SNAPSHOT ?= $(CURDIR)/ocaml # The directory where we install files when doing "make install". # Overridden via the command-line by the OPAM invocation. -PREFIX=$(shell pwd)/fstar +PREFIX ?= /usr/local + +ifeq ($(OS),Windows_NT) + # On Cygwin, the `--prefix` option to dune only + # supports Windows paths. + FSTAR_CURDIR=$(shell cygpath -m $(CURDIR)) +else + FSTAR_CURDIR=$(CURDIR) +endif + +.PHONY: dune dune-fstar verify-ulib +dune-fstar: + $(Q)cp version.txt $(DUNE_SNAPSHOT)/ + @# Call Dune to build the snapshot. + @echo " DUNE BUILD" + $(Q)cd $(DUNE_SNAPSHOT) && dune build --profile release + @echo " DUNE INSTALL" + $(Q)cd $(DUNE_SNAPSHOT) && dune install --prefix=$(FSTAR_CURDIR) + +verify-ulib: + +$(MAKE) -C ulib + +dune: dune-fstar + +$(MAKE) verify-ulib + +.PHONY: clean-dune-snapshot + +# Removes all generated files (including the whole generated snapshot, +# and .checked files), except the object files, so that the snapshot +# can be rebuilt with an existing fstar.exe +clean-dune-snapshot: clean-intermediate + cd $(DUNE_SNAPSHOT) && { dune clean || true ; } + rm -rf $(DUNE_SNAPSHOT)/fstar-lib/generated/* + rm -rf $(DUNE_SNAPSHOT)/fstar-lib/dynamic/* + +.PHONY: dune-extract-all + +dune-extract-all: + +$(MAKE) -C src/ocaml-output dune-snapshot + +# This rule is not incremental, by design. +dune-full-bootstrap: + +$(MAKE) dune-fstar + +$(MAKE) clean-dune-snapshot + +$(MAKE) dune-bootstrap + +.PHONY: dune-bootstrap +dune-bootstrap: + +$(MAKE) dune-extract-all + +$(MAKE) dune + +.PHONY: boot + +boot: + +$(MAKE) dune + +$(MAKE) dune-bootstrap + +install: + $(Q)+$(MAKE) -C src/ocaml-output install + +# The `uninstall` rule is only necessary for users who manually ran +# `make install`. It is not needed if F* was installed with opam, +# since `opam remove` can uninstall packages automatically with its +# own way. uninstall: - ocamlfind remove fstarlib - ocamlfind remove fstar-compiler-lib - ocamlfind remove fstar-tactics-lib rm -rf \ $(PREFIX)/lib/fstar \ - $(PREFIX)/doc/fstar \ - $(PREFIX)/etc/fstar \ + $(PREFIX)/bin/fstar_tests.exe \ $(PREFIX)/bin/fstar.exe \ $(PREFIX)/share/fstar @@ -31,56 +86,24 @@ package: all package_unknown_platform: all $(Q)+$(MAKE) -C src/ocaml-output package_unknown_platform -clean: - $(Q)+$(MAKE) -C ulib clean - $(Q)+$(MAKE) -C src/ocaml-output clean - -# Shortcuts for developers - -# Build the OCaml snapshot. NOTE: This will not build the standard library, -# nor tests, and native tactics will not run -1: - $(Q)+$(MAKE) -C src/ocaml-output ../../bin/fstar.exe - -# Bootstrap just the compiler, not the library and tests; -# fastest way to incrementally build a patch to the compiler -boot: - $(Q)+$(MAKE) -C src/ ocaml - $(Q)+$(MAKE) -C src/ocaml-output ../../bin/fstar.exe - -boot_tests: - $(Q)+$(MAKE) -C src/ ocaml - $(Q)+$(MAKE) -C src/ocaml-output ../../bin/tests.exe +.PHONY: clean-intermediate -boot_libs: boot - $(Q)+$(MAKE) libs +# Removes everything created by `make all`. MUST NOT be used when +# bootstrapping. +clean: clean-intermediate + cd $(DUNE_SNAPSHOT) && { dune uninstall --prefix=$(FSTAR_CURDIR) || true ; } && { dune clean || true ; } -boot.ocaml: - $(Q)+$(MAKE) -C src/ ocaml - $(Q)+$(MAKE) -C src/ocaml-output ../../bin/fstar.ocaml - -# Alias for boot -2: boot - -# Build the snapshot and then regen, i.e. 1 + 2 -3: - $(Q)+$(MAKE) -C src/ocaml-output ../../bin/fstar.exe - $(Q)+$(MAKE) -C src/ ocaml - $(Q)+$(MAKE) -C src/ocaml-output ../../bin/fstar.exe - -# Build the binary libraries: fstar-compiler-lib, fstarlib, fstartaclib -# Removes the .mgen files to trigger rebuild of the libraries if needed. -# This does NOT verify the library modules. -libs: - $(Q)+$(MAKE) -C src/ocaml-output - $(Q)rm -f ulib/*.mgen - $(Q)+$(MAKE) -C ulib/ml +# Removes all .checked files and other intermediate files +# Does not remove the object files from the dune snapshot, +# because otherwise dune can't uninstall properly +clean-intermediate: + $(Q)+$(MAKE) -C ulib clean + $(Q)+$(MAKE) -C src clean # Regenerate all hints for the standard library and regression test suite hints: +$(Q)OTHERFLAGS=--record_hints $(MAKE) -C ulib/ - +$(Q)OTHERFLAGS=--record_hints $(MAKE) -C ulib/ml - +$(Q)OTHERFLAGS=--record_hints $(MAKE) -C src/ uregressions + +$(Q)OTHERFLAGS=--record_hints $(MAKE) ci-uregressions bench: ./bin/run_benchmark.sh @@ -91,3 +114,31 @@ output: $(Q)+$(MAKE) -C tests/error-messages accept $(Q)+$(MAKE) -C tests/interactive accept $(Q)+$(MAKE) -C tests/bug-reports output-accept + +.PHONY: ci-utest-prelude + +ci-utest-prelude: dune + $(Q)+$(MAKE) dune-bootstrap + $(Q)+$(MAKE) -C src ocaml-unit-tests + $(Q)+$(MAKE) -C ulib ulib-in-fsharp #build ulibfs + +.PHONY: ci-uregressions ci-uregressions-ulong + +ci-uregressions: + $(Q)+$(MAKE) -C src uregressions + +ci-uregressions-ulong: + $(Q)+$(MAKE) -C src uregressions-ulong + +# Shortcuts: + +1: dune-fstar + +2: + +$(MAKE) -C src ocaml + +$(MAKE) dune-fstar + +3: + +$(MAKE) dune-fstar + +$(MAKE) -C src ocaml + +$(MAKE) dune-fstar diff --git a/_tags b/_tags deleted file mode 100644 index 044dad7b8db..00000000000 --- a/_tags +++ /dev/null @@ -1,74 +0,0 @@ -# Warnings: -# 8 Partial match: missing cases in pattern-matching. -# 11 Redundant case in a pattern matching (unused match case). -# 20 This argument will not be used by the function. -# 21 Non-returning statement. -# 26 Suspicious unused variable: unused variable that is bound with let or as, and doesn’t start with an underscore (_) character. -# 28 Wildcard pattern given as argument to a constant constructor. - -true: \ - thread, -traverse, \ - package(batteries), \ - package(zarith), \ - package(ppx_deriving.std), \ - package(ppx_deriving_yojson), \ - package(stdint) - -# ADL: the new unicode lexer -"src/parser/ml/FStar_Parser_LexFStar.ml": package(sedlex.ppx) - -# ADL: Please do not enable compiler-libs unless absolutely necessary - or : \ - package(compiler-libs), \ - package(compiler-libs.common), \ - package(menhirLib), \ - package(dynlink), \ - package(pprint), \ - package(sedlex), \ - package(stdint), \ - package(yojson), \ - package(ppxlib), \ - package(process) - -# This ensures that main.native bundles its dependencies, which dynlinked tactics might need. -"src/fstar/ml/main.native": \ - linkall - -# Turn off warnings for extracted files - or or or : \ - warn(-8-11-20-21-26-28) - - or "ulib/ml/fstarlib.cma": \ - package(stdint) - -: \ - package(fstar-compiler-lib) - -<**/FStar_Monotonic_Seq.ml>: \ - principal - - -# -# To use landmarks to profile ocaml code: -# - make sure landmarks is installed with opam (opam install landmarks) -# - enable the landmarks and landmarks.ppx packages -# - select the modules for auto-instrumentation -# - build the compiler -# - run the compiler with OCAML_LANDMARKS='on,output=landmarks.out' -# -# Uncomment the following to add the packages: -# -# true: \ -# package(landmarks), \ -# package(landmarks.ppx) -# -# Uncomment the following to profile specific modules: -# -# : \ -# ppx(`ocamlfind query landmarks.ppx`/ppx.exe --as-ppx --auto) -# -# -# NB: the fully inclusive landmarks ppx on ocaml-output/**/*.ml files can cause a stack overflow -# : \ -# ppx(`ocamlfind query landmarks.ppx`/ppx.exe --as-ppx --auto) -# diff --git a/bin/run_benchmark.sh b/bin/run_benchmark.sh index e014e0bace3..9b37ed57b11 100755 --- a/bin/run_benchmark.sh +++ b/bin/run_benchmark.sh @@ -20,6 +20,8 @@ set -o pipefail # informative stats. This script automates the process of running with # orun and summarizing the results. +# FIXME: recast those benchmarks + help () { cat <$@ 2>&1 %.fsti.output: %.fsti - @echo "[OUTPUT $(basename $(notdir $@))]" + $(call msg, "OUTPUT", $(basename $(notdir $@))) $(Q)$(VERBOSE_FSTAR) -f --print_expected_failures $< >$@ 2>&1 clean: @@ -106,5 +106,5 @@ clean: #extract F* files to OCaml $(OUTPUT_DIRECTORY)/%.ml: - @echo "[EXTRACT $(basename $(notdir $@))]" + $(call msg, "EXTRACT", $(basename $(notdir $@))) $(Q)$(MY_FSTAR) $(subst .checked,,$(notdir $<)) --codegen OCaml --extract_module $(subst .fst.checked,,$(notdir $<)) diff --git a/examples/Makefile.include b/examples/Makefile.include index 05524c08bd7..7299a570bf7 100644 --- a/examples/Makefile.include +++ b/examples/Makefile.include @@ -1,7 +1,7 @@ # -------------------------------------------------------------------- ifdef FSTAR_HOME - include $(FSTAR_HOME)/.common.mk - FSTAR_ULIB=$(FSTAR_HOME)/ulib + -include $(FSTAR_HOME)/.common.mk + FSTAR_ULIB=$(shell if test -d $(FSTAR_HOME)/ulib ; then echo $(FSTAR_HOME)/ulib ; else echo $(FSTAR_HOME)/lib/fstar ; fi) else # FSTAR_HOME not defined, assume fstar.exe installed through opam # or binary package, and reachable from PATH diff --git a/examples/algorithms/Makefile b/examples/algorithms/Makefile index 1a9b2d5b1e4..34be326b25f 100644 --- a/examples/algorithms/Makefile +++ b/examples/algorithms/Makefile @@ -9,6 +9,8 @@ uall: BinarySearch.uver IntSort.uver InsertionSort.uver MergeSort.uver QuickSort downgrade: QuickSort.Array.fst downgrade.fst $(FSTAR) --include $(FSTAR_ULIB)/reclaimable downgrade.fst +# TODO: restore this OCaml extraction + include $(FSTAR_ULIB)/ml/Makefile.include huffman-ocaml: out Huffman.fst diff --git a/examples/crypto/Makefile b/examples/crypto/Makefile index 98b2ee87edc..821c7424cf1 100644 --- a/examples/crypto/Makefile +++ b/examples/crypto/Makefile @@ -34,7 +34,7 @@ HyE.CCA2.fst \ HyE.HCCA2.fst \ ifdef FSTAR_HOME -FSTAR_UCONTRIB = $(FSTAR_HOME)/ucontrib +FSTAR_UCONTRIB = $(shell if test -d $(FSTAR_HOME)/ucontrib ; then echo $(FSTAR_HOME)/ucontrib ; else echo $(FSTAR_HOME)/share/fstar/contrib ; fi) else # FSTAR_HOME not defined, assume fstar.exe installed through opam # or binary package, and reachable from PATH @@ -89,9 +89,6 @@ CONTRIB_LIBS=$(FSTAR_UCONTRIB)/CoreCrypto/ml/CoreCrypto.cmxa include $(FSTAR_ULIB)/ml/Makefile.include -#OCAMLOPT automatically contains fstarlib -SUPPORT_LIBS=$(FSTARLIB_DIR)/fstarlib.cmxa - $(CONTRIB_LIBS): +$(MAKE) -C $(FSTAR_UCONTRIB) diff --git a/examples/crypto/Makefile.oplss b/examples/crypto/Makefile.oplss index f41da35edd8..9ff1e6362bf 100755 --- a/examples/crypto/Makefile.oplss +++ b/examples/crypto/Makefile.oplss @@ -2,7 +2,7 @@ VALIDITY_AXIOMS= FSTAR_FILES=OPLSS.AE.fst ifdef FSTAR_HOME - FSTAR_ULIB=$(FSTAR_HOME)/ulib + FSTAR_ULIB=$(shell if test -d $(FSTAR_HOME)/ulib ; then echo $(FSTAR_HOME)/ulib ; else echo $(FSTAR_HOME)/lib/fstar ; fi) else FSTAR_ULIB=$(dir $(shell which fstar.exe))/../lib/fstar endif diff --git a/examples/hello/multifile/Makefile b/examples/hello/multifile/Makefile index a14467be973..44525233084 100644 --- a/examples/hello/multifile/Makefile +++ b/examples/hello/multifile/Makefile @@ -1,22 +1,25 @@ .PHONY: all clean -FSTAR_HOME?=../../.. ROOTS=$(wildcard *.fst) #scan these files for dependences OUTPUT_DIR=output MAIN=Main.fst #this is the main entry point file of your project EXECUTABLE=$(subst .fst,.exe, $(MAIN)) INCLUDE_PATHS= -ifeq ($(OS),Windows_NT) - FSTAR_EXE := $(shell cygpath -m $(FSTAR_HOME)/bin/fstar.exe) +ifdef FSTAR_HOME + ifeq ($(OS),Windows_NT) + FSTAR_EXE := $(shell cygpath -m $(FSTAR_HOME)/bin/fstar.exe) + else + FSTAR_EXE := $(FSTAR_HOME)/bin/fstar.exe + endif else - FSTAR_EXE := $(FSTAR_HOME)/bin/fstar.exe + FSTAR_EXE := fstar.exe endif #cache_dir: where to find checked files #odir: where to put all output artifacts #include: where to find source and checked files -#already_cached: fstarlib is already built +#already_cached: fstar ulib is already built FSTAR=$(FSTAR_EXE) \ --cache_dir $(OUTPUT_DIR) \ diff --git a/examples/hello/multifile/output/Makefile b/examples/hello/multifile/output/Makefile index 6f61890b9d7..ba844749181 100644 --- a/examples/hello/multifile/output/Makefile +++ b/examples/hello/multifile/output/Makefile @@ -1,9 +1,10 @@ -FSTAR_HOME?=../../../../../FStar -ifeq ($(OS),Windows_NT) - OCAMLPATH := $(shell cygpath -m $(FSTAR_HOME)/bin);$(OCAMLPATH) -else - OCAMLPATH := $(FSTAR_HOME)/bin:$(OCAMLPATH) +ifdef FSTAR_HOME + ifeq ($(OS),Windows_NT) + OCAMLPATH := $(shell cygpath -m $(FSTAR_HOME)/lib);$(OCAMLPATH) + else + OCAMLPATH := $(FSTAR_HOME)/lib:$(OCAMLPATH) + endif endif # with dune @@ -13,7 +14,7 @@ Main.exe: $(wildcard *.ml) #with ocamlbuild Main.native: $(wildcard *.ml) - OCAMLPATH="$(OCAMLPATH)" ocamlbuild -tag thread -use-ocamlfind -quiet -pkg batteries -pkg fstarlib -cflags -w,-8 Main.native + OCAMLPATH="$(OCAMLPATH)" ocamlbuild -tag thread -use-ocamlfind -quiet -pkg batteries -pkg fstar.lib -cflags -w,-8 Main.native clean: rm -rf _build Main.native Main.exe diff --git a/examples/hello/multifile/output/dune b/examples/hello/multifile/output/dune index 83a9bf7f581..c03a06e02b0 100644 --- a/examples/hello/multifile/output/dune +++ b/examples/hello/multifile/output/dune @@ -3,7 +3,7 @@ (name Main) (libraries batteries - fstarlib + fstar.lib ) (preprocess (pps ppx_deriving_yojson)) (flags (:standard -w -8-9-11-26-27-33-39)) diff --git a/examples/native_tactics/Makefile b/examples/native_tactics/Makefile index d6417ef7bba..ee5890ee6b4 100644 --- a/examples/native_tactics/Makefile +++ b/examples/native_tactics/Makefile @@ -1,6 +1,5 @@ FSTAR_HOME=../.. FSTAR=$(FSTAR_HOME)/bin/fstar.exe $(OTHERFLAGS) -FSTARTACLIB=$(FSTAR_HOME)/bin/fstar-tactics-lib/fstartaclib.cmxs # Tests for which the native tactics used in module named Sample.Test.fst are # declared in a corresponding module named Sample.fst @@ -53,7 +52,7 @@ all: $(addsuffix .sep.test, $(TAC_MODULES)) $(addsuffix .test, $(ALL)) touch $@ %.sep.test: %.fst %.ml - $(FSTAR) $*.Test.fst --load $* + $(FSTAR) $*.Test.fst --load $* --debug $* --debug_level tactics touch $@ %.ml: %.fst diff --git a/examples/native_tactics/Makefile.bench b/examples/native_tactics/Makefile.bench index 0ddb673223b..1d6adaa3576 100755 --- a/examples/native_tactics/Makefile.bench +++ b/examples/native_tactics/Makefile.bench @@ -1,6 +1,5 @@ FSTAR_HOME=../.. FSTAR=$(FSTAR_HOME)/bin/fstar.exe $(OTHERFLAGS) -FSTARTACLIB=$(FSTAR_HOME)/bin/fstar-tactics-lib/fstartaclib.cmxs .SECONDARY: .PRECIOUS: diff --git a/examples/sample_project/Makefile b/examples/sample_project/Makefile index 780aee1d9c4..69d21b6ad28 100644 --- a/examples/sample_project/Makefile +++ b/examples/sample_project/Makefile @@ -43,8 +43,9 @@ _tags: $(OUTPUT_DIRECTORY)/%.ml: $(FSTAR) $(subst .checked,,$<) --codegen OCaml --extract_module $(subst .fst.checked,,$<) +# FIXME: ocamlbuild is deprecated, use dune instead $(OCAML_EXE): _tags $(ML_FILES) $(TOP_LEVEL_FILE) - OCAMLPATH="$(FSTAR_HOME)/bin" ocamlbuild -I $(OUTPUT_DIRECTORY) -use-ocamlfind -pkg fstarlib $(subst .ml,.native,$(TOP_LEVEL_FILE)) + OCAMLPATH="$(FSTAR_HOME)/lib" ocamlbuild -I $(OUTPUT_DIRECTORY) -use-ocamlfind -pkg fstar.lib $(subst .ml,.native,$(TOP_LEVEL_FILE)) mv _build/$(subst .ml,.native,$(TOP_LEVEL_FILE)) $@ test.ocaml: $(OCAML_EXE) diff --git a/examples/semiring/Makefile b/examples/semiring/Makefile index a40e12b9372..ce251324abc 100644 --- a/examples/semiring/Makefile +++ b/examples/semiring/Makefile @@ -1,7 +1,7 @@ FSTAR_HOME=../.. FSTAR=$(FSTAR_HOME)/bin/fstar.exe $(OTHERFLAGS) -OCAMLOPT=OCAMLPATH="$(FSTAR_HOME)/bin" ocamlfind opt +OCAMLOPT=OCAMLPATH="$(FSTAR_HOME)/lib" ocamlfind opt .PHONY: %.native %.interpreted .PRECIOUS: %.fst.checked %.ml %.cmxs @@ -16,7 +16,7 @@ all: CanonCommSemiring.interpreted CanonCommSemiring.native cat $*.ml.fixup >> $*.ml %.cmxs: %.ml - $(OCAMLOPT) -shared -package fstar-tactics-lib -o $@ $*.ml + $(OCAMLOPT) -shared -package fstar.lib -o $@ $*.ml # REMARK: --load will compile $*.ml if $*.cmxs does not exist, but we compile it before %.native: %.cmxs diff --git a/examples/steel/Makefile b/examples/steel/Makefile index 3bec6bf0644..118b3a23a80 100644 --- a/examples/steel/Makefile +++ b/examples/steel/Makefile @@ -17,7 +17,7 @@ ifdef HAS_OCAML OCAML_DEFAULT_FLAGS += -I $(OUTPUT_DIRECTORY) -w -31 counter: _output/OWGCounter.ml OWGCounterTest.ml | verify-all - $(OCAMLC) -thread -o counter.exe $^ + $(OCAMLOPT) -thread -o counter.exe $^ else diff --git a/examples/tactics/Makefile b/examples/tactics/Makefile index f475bcf32df..bc1bb545e70 100644 --- a/examples/tactics/Makefile +++ b/examples/tactics/Makefile @@ -37,14 +37,15 @@ else stringprintertest: endif -FStar.Tactics.CanonCommSemiring.cmxs FStar.Tactics.CanonCommMonoid.cmxs: - $(FSTAR) --cache_checked_modules --codegen Plugin --extract 'FStar.Tactics.CanonCommSemiring FStar.Tactics.CanonCommMonoid FStar.Tactics.CanonCommSwaps' FStar.Tactics.CanonCommSemiring.fst - rm -f ./*.cmxs - cat FStar.Tactics.CanonCommMonoid.ml.fixup >> FStar.Tactics.CanonCommMonoid.ml - cat FStar.Tactics.CanonCommSemiring.ml.fixup >> FStar.Tactics.CanonCommSemiring.ml - env OCAMLPATH="../../bin/" ocamlfind ocamlopt -shared -I . -package fstar-tactics-lib -o ./FStar.Tactics.CanonCommMonoid.cmxs ./FStar.Tactics.CanonCommSwaps.ml ./FStar.Tactics.CanonCommMonoid.ml - env OCAMLPATH="../../bin/" ocamlfind ocamlopt -shared -I . -package fstar-tactics-lib -o ./FStar.Tactics.CanonCommSemiring.cmxs ./FStar.Tactics.CanonCommSwaps.ml ./FStar.Tactics.CanonCommMonoid.ml ./FStar.Tactics.CanonCommSemiring.ml - -canon-native: FStar.Tactics.CanonCommSemiring.cmxs FStar.Tactics.CanonCommMonoid.cmxs - $(FSTAR) --load FStar.Tactics.CanonCommMonoid FStar.Tactics.CanonCommMonoid.fst - $(FSTAR) --load FStar.Tactics.CanonCommSemiring FStar.Tactics.CanonCommSemiring.fst +# FIXME: is this still needed? +# FStar.Tactics.CanonCommSemiring.cmxs FStar.Tactics.CanonCommMonoid.cmxs: +# $(FSTAR) --cache_checked_modules --codegen Plugin --extract 'FStar.Tactics.CanonCommSemiring FStar.Tactics.CanonCommMonoid FStar.Tactics.CanonCommSwaps' FStar.Tactics.CanonCommSemiring.fst +# rm -f ./*.cmxs +# cat FStar.Tactics.CanonCommMonoid.ml.fixup >> FStar.Tactics.CanonCommMonoid.ml +# cat FStar.Tactics.CanonCommSemiring.ml.fixup >> FStar.Tactics.CanonCommSemiring.ml +# env OCAMLPATH="../../bin/" ocamlfind ocamlopt -shared -I . -package fstar-tactics-lib -o ./FStar.Tactics.CanonCommMonoid.cmxs ./FStar.Tactics.CanonCommSwaps.ml ./FStar.Tactics.CanonCommMonoid.ml +# env OCAMLPATH="../../bin/" ocamlfind ocamlopt -shared -I . -package fstar-tactics-lib -o ./FStar.Tactics.CanonCommSemiring.cmxs ./FStar.Tactics.CanonCommSwaps.ml ./FStar.Tactics.CanonCommMonoid.ml ./FStar.Tactics.CanonCommSemiring.ml + +# canon-native: FStar.Tactics.CanonCommSemiring.cmxs FStar.Tactics.CanonCommMonoid.cmxs +# $(FSTAR) --load FStar.Tactics.CanonCommMonoid FStar.Tactics.CanonCommMonoid.fst +# $(FSTAR) --load FStar.Tactics.CanonCommSemiring FStar.Tactics.CanonCommSemiring.fst diff --git a/examples/tactics/Makefile.Bane b/examples/tactics/Makefile.Bane index 186837f37da..6d49e6c04c3 100644 --- a/examples/tactics/Makefile.Bane +++ b/examples/tactics/Makefile.Bane @@ -14,7 +14,6 @@ include .depend %.fsti.checked: $(FSTAR) $< -FSTARTACLIB=$(FSTAR_HOME)/bin/fstar-tactics-lib/fstartaclib.cmxs CACHE = _cache %.cmxs: %.Lib.fst.checked diff --git a/examples/tactics/eci19/Makefile b/examples/tactics/eci19/Makefile index 268ee1a4ad3..880cc9bcef7 100644 --- a/examples/tactics/eci19/Makefile +++ b/examples/tactics/eci19/Makefile @@ -1,4 +1,3 @@ -FSTAR_HOME?=../../.. EXCLUDED_FSTAR_FILES= FSTAR_FILES = $(filter-out $(EXCLUDED_FSTAR_FILES), $(wildcard *.fst)) diff --git a/flake.nix b/flake.nix index 7b59abd99ef..0256435e7ba 100644 --- a/flake.nix +++ b/flake.nix @@ -12,61 +12,44 @@ pkgs = import nixpkgs { inherit system; }; ocamlPackages = pkgs.ocaml-ng.ocamlPackages_4_14; z3 = pkgs.callPackage (import ./.nix/z3.nix) { }; - lib = pkgs.callPackage (import ./.nix/lib.nix) { inherit z3; }; - pname = "fstar"; - sourceByDenyRegex = src: regexes: - let - isFiltered = src ? _isLibCleanSourceWith; - origSrc = if isFiltered then src.origSrc else src; - in pkgs.lib.cleanSourceWith { - filter = (path: type: - let - relPath = pkgs.lib.removePrefix (toString origSrc + "/") - (toString path); - in pkgs.lib.all (re: builtins.match re relPath == null) regexes); - inherit src; - }; - src = sourceByDenyRegex ./. [ - # Markdown files at the root - "^[a-zA-Z]+\\.md$" - # Nix files - "^flake\\.lock$" - ".*\\.nix$" - ]; + version = self.rev or "dirty"; + fstar-dune = ocamlPackages.callPackage ./ocaml { inherit version; }; + fstar-ulib = pkgs.callPackage ./ulib { inherit fstar-dune version z3; }; + fstar = pkgs.callPackage ./.nix/fstar.nix { + inherit fstar-dune fstar-ulib version z3; + }; + fstar-ocaml-snapshot = + pkgs.callPackage ./src { inherit fstar ocamlPackages version; }; + fstar-bootstrap = pkgs.callPackage ./.nix/bootstrap.nix { + inherit fstar fstar-dune fstar-ocaml-snapshot fstar-ulib; + }; + emacs = pkgs.writeScriptBin "emacs-fstar" '' + #!${pkgs.stdenv.shell} + export PATH="${fstar}/bin:$PATH" + export EMACSLOADPATH= + ${ + (pkgs.emacsPackagesFor pkgs.emacs).emacsWithPackages + (epkgs: with epkgs.melpaPackages; [ fstar-mode ]) + }/bin/emacs -q "$@" + ''; in rec { packages = { inherit z3 ocamlPackages; - fstar-bootstrap = lib.binary-of-fstar { - inherit src pname; - version = "master"; - }; - fstar = lib.binary-of-ml-snapshot { - inherit src pname; - version = "master-snap"; - }; - default = packages.fstar; - emacs = pkgs.writeScriptBin "emacs-fstar" '' - #!${pkgs.stdenv.shell} - export PATH="${packages.fstar}/bin:$PATH" - export EMACSLOADPATH= - ${ - (pkgs.emacsPackagesFor pkgs.emacs).emacsWithPackages - (epkgs: with epkgs.melpaPackages; [ fstar-mode ]) - }/bin/emacs -q "$@" - ''; + inherit fstar fstar-dune fstar-ocaml-snapshot fstar-bootstrap; + inherit emacs; + default = fstar; }; apps.emacs = { type = "app"; - program = "${packages.emacs}/bin/emacs-fstar"; + program = "${emacs}/bin/emacs-fstar"; }; devShells.default = pkgs.mkShell { - name = "${packages.fstar.name}-dev"; - inputsFrom = [ packages.fstar ]; + name = "${fstar.name}-dev"; + inputsFrom = [ fstar fstar-dune ]; shellHook = '' export FSTAR_SOURCES_ROOT="$(pwd)" export PATH="$FSTAR_SOURCES_ROOT/bin/:$PATH" ''; }; - inherit lib; }); } diff --git a/fstar.opam b/fstar.opam index 8b74527f153..3b7b4eab727 100644 --- a/fstar.opam +++ b/fstar.opam @@ -6,20 +6,18 @@ homepage: "http://fstar-lang.org" license: "Apache-2.0" depends: [ "ocaml" {>= "4.08.0"} - "ocamlfind" "batteries" "zarith" "stdint" "yojson" - "ocamlbuild" {build} - "fileutils" - "menhir" {>= "20161115" build} - "pprint" {build} - "sedlex" {build} + "dune" {build & >= "3.2.0"} + "menhirLib" + "pprint" + "sedlex" "ppxlib" {>= "0.27.0"} - "ppx_deriving" - "ppx_deriving_yojson" "process" + "ppx_deriving" {build} + "ppx_deriving_yojson" {build} "z3" {= "4.8.5"} ] depexts: ["coreutils"] {os = "macos" & os-distribution = "homebrew"} @@ -29,9 +27,6 @@ build: [ install: [ [make "PREFIX=%{prefix}%" "install"] ] -remove: [ - [make "PREFIX=%{prefix}%" "uninstall"] -] dev-repo: "git://github.com/FStarLang/FStar" bug-reports: "https://github.com/FStarLang/FStar/issues" synopsis: "Verification system for effectful programs" diff --git a/ocaml/.gitignore b/ocaml/.gitignore new file mode 100644 index 00000000000..9e6e65c9f82 --- /dev/null +++ b/ocaml/.gitignore @@ -0,0 +1,2 @@ +# copied from the root +version.txt diff --git a/ocaml/default.nix b/ocaml/default.nix new file mode 100644 index 00000000000..720b77c4a3e --- /dev/null +++ b/ocaml/default.nix @@ -0,0 +1,51 @@ +{ batteries, buildDunePackage, includeBinaryAnnotations ? false +, installShellFiles, lib, makeWrapper, menhirLib, ocaml, pprint, ppxlib +, ppx_deriving, ppx_deriving_yojson, process, removeReferencesTo, sedlex, stdint +, version, yojson, zarith }: + +buildDunePackage { + pname = "fstar"; + inherit version; + + duneVersion = "3"; + + src = lib.sourceByRegex ../. [ "ocaml.*" "version.txt" ]; + + prePatch = '' + cd ocaml + patchShebangs fstar-lib/make_fstar_version.sh + ''; + + nativeBuildInputs = [ installShellFiles makeWrapper removeReferencesTo ]; + + buildInputs = [ + batteries + menhirLib + pprint + ppx_deriving + ppx_deriving_yojson + ppxlib + process + sedlex + stdint + yojson + zarith + ]; + + enableParallelBuilding = true; + + postFixup = '' + # OCaml leaves its full store path in produced binaries + # Thus we remove every reference to the path of OCaml + for binary in $out/bin/* + do + remove-references-to -t '${ocaml}' $binary + done + '' + (if includeBinaryAnnotations then + "" + else '' + # Binary annotations are useful only for nice IDE integration while developping OCaml programs that depend on the F* library + # Meanwhile, they add a dependency to the OCaml compiler and are thus removed by default + rm $out/lib/ocaml/${ocaml.version}/site-lib/fstar/lib/*.cmt + ''); +} diff --git a/ocaml/dune b/ocaml/dune new file mode 100644 index 00000000000..20938d260ef --- /dev/null +++ b/ocaml/dune @@ -0,0 +1,3 @@ +(env + (release + (flags (:standard -w -A)))) diff --git a/ocaml/dune-project b/ocaml/dune-project new file mode 100644 index 00000000000..4f4737d6678 --- /dev/null +++ b/ocaml/dune-project @@ -0,0 +1,8 @@ +(lang dune 3.2) +(name fstar) +(generate_opam_files false) + +(package + (name fstar) + (synopsis "The F* programming language and proof assistant") +) diff --git a/ocaml/fstar-lib/.gitignore b/ocaml/fstar-lib/.gitignore new file mode 100644 index 00000000000..25dee37f486 --- /dev/null +++ b/ocaml/fstar-lib/.gitignore @@ -0,0 +1 @@ +dynamic/ diff --git a/ulib/ml/FStar_All.ml b/ocaml/fstar-lib/FStar_All.ml similarity index 100% rename from ulib/ml/FStar_All.ml rename to ocaml/fstar-lib/FStar_All.ml diff --git a/ulib/ml/FStar_BaseTypes.ml b/ocaml/fstar-lib/FStar_BaseTypes.ml similarity index 100% rename from ulib/ml/FStar_BaseTypes.ml rename to ocaml/fstar-lib/FStar_BaseTypes.ml diff --git a/src/basic/ml/FStar_BigInt.ml b/ocaml/fstar-lib/FStar_BigInt.ml similarity index 100% rename from src/basic/ml/FStar_BigInt.ml rename to ocaml/fstar-lib/FStar_BigInt.ml diff --git a/ulib/ml/FStar_Buffer.ml b/ocaml/fstar-lib/FStar_Buffer.ml similarity index 100% rename from ulib/ml/FStar_Buffer.ml rename to ocaml/fstar-lib/FStar_Buffer.ml diff --git a/ulib/ml/FStar_Bytes.ml b/ocaml/fstar-lib/FStar_Bytes.ml similarity index 100% rename from ulib/ml/FStar_Bytes.ml rename to ocaml/fstar-lib/FStar_Bytes.ml diff --git a/ulib/ml/FStar_Char.ml b/ocaml/fstar-lib/FStar_Char.ml similarity index 100% rename from ulib/ml/FStar_Char.ml rename to ocaml/fstar-lib/FStar_Char.ml diff --git a/ulib/ml/FStar_CommonST.ml b/ocaml/fstar-lib/FStar_CommonST.ml similarity index 100% rename from ulib/ml/FStar_CommonST.ml rename to ocaml/fstar-lib/FStar_CommonST.ml diff --git a/src/basic/ml/FStar_Compiler_Bytes.ml b/ocaml/fstar-lib/FStar_Compiler_Bytes.ml similarity index 100% rename from src/basic/ml/FStar_Compiler_Bytes.ml rename to ocaml/fstar-lib/FStar_Compiler_Bytes.ml diff --git a/src/basic/ml/FStar_Compiler_Dyn.ml b/ocaml/fstar-lib/FStar_Compiler_Dyn.ml similarity index 100% rename from src/basic/ml/FStar_Compiler_Dyn.ml rename to ocaml/fstar-lib/FStar_Compiler_Dyn.ml diff --git a/src/basic/ml/FStar_Compiler_Effect.ml b/ocaml/fstar-lib/FStar_Compiler_Effect.ml similarity index 100% rename from src/basic/ml/FStar_Compiler_Effect.ml rename to ocaml/fstar-lib/FStar_Compiler_Effect.ml diff --git a/src/basic/ml/FStar_Compiler_List.ml b/ocaml/fstar-lib/FStar_Compiler_List.ml similarity index 100% rename from src/basic/ml/FStar_Compiler_List.ml rename to ocaml/fstar-lib/FStar_Compiler_List.ml diff --git a/src/basic/ml/FStar_Compiler_Util.ml b/ocaml/fstar-lib/FStar_Compiler_Util.ml similarity index 100% rename from src/basic/ml/FStar_Compiler_Util.ml rename to ocaml/fstar-lib/FStar_Compiler_Util.ml diff --git a/ulib/ml/FStar_Constructive.ml b/ocaml/fstar-lib/FStar_Constructive.ml similarity index 100% rename from ulib/ml/FStar_Constructive.ml rename to ocaml/fstar-lib/FStar_Constructive.ml diff --git a/ulib/ml/FStar_Date.ml b/ocaml/fstar-lib/FStar_Date.ml similarity index 100% rename from ulib/ml/FStar_Date.ml rename to ocaml/fstar-lib/FStar_Date.ml diff --git a/ulib/ml/FStar_Dyn.ml b/ocaml/fstar-lib/FStar_Dyn.ml similarity index 100% rename from ulib/ml/FStar_Dyn.ml rename to ocaml/fstar-lib/FStar_Dyn.ml diff --git a/ulib/ml/FStar_Exn.ml b/ocaml/fstar-lib/FStar_Exn.ml similarity index 100% rename from ulib/ml/FStar_Exn.ml rename to ocaml/fstar-lib/FStar_Exn.ml diff --git a/src/extraction/ml/FStar_Extraction_ML_PrintML.ml b/ocaml/fstar-lib/FStar_Extraction_ML_PrintML.ml similarity index 100% rename from src/extraction/ml/FStar_Extraction_ML_PrintML.ml rename to ocaml/fstar-lib/FStar_Extraction_ML_PrintML.ml diff --git a/ulib/ml/FStar_Float.ml b/ocaml/fstar-lib/FStar_Float.ml similarity index 100% rename from ulib/ml/FStar_Float.ml rename to ocaml/fstar-lib/FStar_Float.ml diff --git a/src/basic/ml/FStar_Getopt.ml b/ocaml/fstar-lib/FStar_Getopt.ml similarity index 100% rename from src/basic/ml/FStar_Getopt.ml rename to ocaml/fstar-lib/FStar_Getopt.ml diff --git a/ulib/ml/FStar_Ghost.ml b/ocaml/fstar-lib/FStar_Ghost.ml similarity index 100% rename from ulib/ml/FStar_Ghost.ml rename to ocaml/fstar-lib/FStar_Ghost.ml diff --git a/src/basic/ml/FStar_Hash.ml b/ocaml/fstar-lib/FStar_Hash.ml similarity index 100% rename from src/basic/ml/FStar_Hash.ml rename to ocaml/fstar-lib/FStar_Hash.ml diff --git a/ulib/ml/FStar_Heap.ml b/ocaml/fstar-lib/FStar_Heap.ml similarity index 100% rename from ulib/ml/FStar_Heap.ml rename to ocaml/fstar-lib/FStar_Heap.ml diff --git a/ulib/ml/FStar_HyperStack_All.ml b/ocaml/fstar-lib/FStar_HyperStack_All.ml similarity index 100% rename from ulib/ml/FStar_HyperStack_All.ml rename to ocaml/fstar-lib/FStar_HyperStack_All.ml diff --git a/ulib/ml/FStar_HyperStack_IO.ml b/ocaml/fstar-lib/FStar_HyperStack_IO.ml similarity index 100% rename from ulib/ml/FStar_HyperStack_IO.ml rename to ocaml/fstar-lib/FStar_HyperStack_IO.ml diff --git a/ulib/ml/FStar_HyperStack_ST.ml b/ocaml/fstar-lib/FStar_HyperStack_ST.ml similarity index 100% rename from ulib/ml/FStar_HyperStack_ST.ml rename to ocaml/fstar-lib/FStar_HyperStack_ST.ml diff --git a/ulib/ml/FStar_IO.ml b/ocaml/fstar-lib/FStar_IO.ml similarity index 100% rename from ulib/ml/FStar_IO.ml rename to ocaml/fstar-lib/FStar_IO.ml diff --git a/ulib/ml/FStar_ImmutableArray.ml b/ocaml/fstar-lib/FStar_ImmutableArray.ml similarity index 100% rename from ulib/ml/FStar_ImmutableArray.ml rename to ocaml/fstar-lib/FStar_ImmutableArray.ml diff --git a/ulib/ml/FStar_ImmutableArray_Base.ml b/ocaml/fstar-lib/FStar_ImmutableArray_Base.ml similarity index 100% rename from ulib/ml/FStar_ImmutableArray_Base.ml rename to ocaml/fstar-lib/FStar_ImmutableArray_Base.ml diff --git a/ulib/ml/FStar_List.ml b/ocaml/fstar-lib/FStar_List.ml similarity index 100% rename from ulib/ml/FStar_List.ml rename to ocaml/fstar-lib/FStar_List.ml diff --git a/ulib/ml/FStar_List_Tot_Base.ml b/ocaml/fstar-lib/FStar_List_Tot_Base.ml similarity index 100% rename from ulib/ml/FStar_List_Tot_Base.ml rename to ocaml/fstar-lib/FStar_List_Tot_Base.ml diff --git a/ulib/ml/FStar_Monotonic_Heap.ml b/ocaml/fstar-lib/FStar_Monotonic_Heap.ml similarity index 100% rename from ulib/ml/FStar_Monotonic_Heap.ml rename to ocaml/fstar-lib/FStar_Monotonic_Heap.ml diff --git a/ulib/ml/FStar_Mul.ml b/ocaml/fstar-lib/FStar_Mul.ml similarity index 100% rename from ulib/ml/FStar_Mul.ml rename to ocaml/fstar-lib/FStar_Mul.ml diff --git a/ulib/ml/FStar_Option.ml b/ocaml/fstar-lib/FStar_Option.ml similarity index 100% rename from ulib/ml/FStar_Option.ml rename to ocaml/fstar-lib/FStar_Option.ml diff --git a/src/parser/ml/FStar_Parser_LexFStar.ml b/ocaml/fstar-lib/FStar_Parser_LexFStar.ml similarity index 100% rename from src/parser/ml/FStar_Parser_LexFStar.ml rename to ocaml/fstar-lib/FStar_Parser_LexFStar.ml diff --git a/src/parser/ml/FStar_Parser_ParseIt.ml b/ocaml/fstar-lib/FStar_Parser_ParseIt.ml similarity index 100% rename from src/parser/ml/FStar_Parser_ParseIt.ml rename to ocaml/fstar-lib/FStar_Parser_ParseIt.ml diff --git a/src/parser/ml/FStar_Parser_Utf8.ml b/ocaml/fstar-lib/FStar_Parser_Utf8.ml similarity index 100% rename from src/parser/ml/FStar_Parser_Utf8.ml rename to ocaml/fstar-lib/FStar_Parser_Utf8.ml diff --git a/src/parser/ml/FStar_Parser_Util.ml b/ocaml/fstar-lib/FStar_Parser_Util.ml similarity index 100% rename from src/parser/ml/FStar_Parser_Util.ml rename to ocaml/fstar-lib/FStar_Parser_Util.ml diff --git a/ulib/ml/FStar_Pervasives_Native.ml b/ocaml/fstar-lib/FStar_Pervasives_Native.ml similarity index 100% rename from ulib/ml/FStar_Pervasives_Native.ml rename to ocaml/fstar-lib/FStar_Pervasives_Native.ml diff --git a/src/basic/ml/FStar_Platform.ml b/ocaml/fstar-lib/FStar_Platform.ml similarity index 100% rename from src/basic/ml/FStar_Platform.ml rename to ocaml/fstar-lib/FStar_Platform.ml diff --git a/src/prettyprint/ml/FStar_Pprint.ml b/ocaml/fstar-lib/FStar_Pprint.ml similarity index 100% rename from src/prettyprint/ml/FStar_Pprint.ml rename to ocaml/fstar-lib/FStar_Pprint.ml diff --git a/ulib/tactics_ml/FStar_Range.ml b/ocaml/fstar-lib/FStar_Range.ml similarity index 100% rename from ulib/tactics_ml/FStar_Range.ml rename to ocaml/fstar-lib/FStar_Range.ml diff --git a/ulib/tactics_ml/FStar_Reflection_Builtins.ml b/ocaml/fstar-lib/FStar_Reflection_Builtins.ml similarity index 100% rename from ulib/tactics_ml/FStar_Reflection_Builtins.ml rename to ocaml/fstar-lib/FStar_Reflection_Builtins.ml diff --git a/ulib/tactics_ml/FStar_Reflection_Types.ml b/ocaml/fstar-lib/FStar_Reflection_Types.ml similarity index 100% rename from ulib/tactics_ml/FStar_Reflection_Types.ml rename to ocaml/fstar-lib/FStar_Reflection_Types.ml diff --git a/ulib/ml/FStar_ST.ml b/ocaml/fstar-lib/FStar_ST.ml similarity index 100% rename from ulib/ml/FStar_ST.ml rename to ocaml/fstar-lib/FStar_ST.ml diff --git a/src/parser/ml/FStar_Sedlexing.ml b/ocaml/fstar-lib/FStar_Sedlexing.ml similarity index 100% rename from src/parser/ml/FStar_Sedlexing.ml rename to ocaml/fstar-lib/FStar_Sedlexing.ml diff --git a/ulib/ml/FStar_String.ml b/ocaml/fstar-lib/FStar_String.ml similarity index 100% rename from ulib/ml/FStar_String.ml rename to ocaml/fstar-lib/FStar_String.ml diff --git a/src/basic/ml/FStar_StringBuffer.ml b/ocaml/fstar-lib/FStar_StringBuffer.ml similarity index 100% rename from src/basic/ml/FStar_StringBuffer.ml rename to ocaml/fstar-lib/FStar_StringBuffer.ml diff --git a/src/basic/ml/FStar_Syntax_TermHashTable.ml b/ocaml/fstar-lib/FStar_Syntax_TermHashTable.ml similarity index 100% rename from src/basic/ml/FStar_Syntax_TermHashTable.ml rename to ocaml/fstar-lib/FStar_Syntax_TermHashTable.ml diff --git a/ulib/tactics_ml/FStar_Tactics_Builtins.ml b/ocaml/fstar-lib/FStar_Tactics_Builtins.ml similarity index 100% rename from ulib/tactics_ml/FStar_Tactics_Builtins.ml rename to ocaml/fstar-lib/FStar_Tactics_Builtins.ml diff --git a/src/tactics/ml/FStar_Tactics_Load.ml b/ocaml/fstar-lib/FStar_Tactics_Load.ml similarity index 59% rename from src/tactics/ml/FStar_Tactics_Load.ml rename to ocaml/fstar-lib/FStar_Tactics_Load.ml index 904358ab026..f35514dca55 100644 --- a/src/tactics/ml/FStar_Tactics_Load.ml +++ b/ocaml/fstar-lib/FStar_Tactics_Load.ml @@ -7,41 +7,16 @@ module O = FStar_Options let perr s = if O.debug_any () then U.print_error s let perr1 s x = if O.debug_any () then U.print1_error s x -let find_taclib () = - let default = FStar_Options.fstar_bin_directory ^ "/fstar-tactics-lib" in - try - begin - let r = Process.run "ocamlfind" [| "query"; "fstar-tactics-lib" |] in - match r with - | { Process.Output.exit_status = Process.Exit.Exit 0; stdout; _ } -> - String.trim (List.hd stdout) - | _ -> default - end - with _ -> default - let dynlink fname = try perr ("Attempting to load " ^ fname ^ "\n"); Dynlink.loadfile fname with Dynlink.Error e -> - failwith (U.format2 "Dynlinking %s failed: %s" fname (Dynlink.error_message e)) - -let load_lib : unit -> unit = - let already_loaded = ref false in - fun () -> - if not (!already_loaded) then begin - dynlink (find_taclib () ^ "/fstartaclib.cmxs"); - already_loaded := true; - perr "Loaded fstartaclib successfully\n" - end - -let try_load_lib () = - (* It might not be there, just try to load it and ignore if not *) - try load_lib () - with | _ -> perr "Did NOT load fstartaclib\n" + let msg = U.format2 "Dynlinking %s failed: %s" fname (Dynlink.error_message e) in + perr msg; + failwith msg let load_tactic tac = - load_lib (); dynlink tac; perr1 "Loaded %s\n" tac @@ -58,20 +33,36 @@ let load_tactics_dir dir = let compile_modules dir ms = let compile m = - let packages = ["fstar-tactics-lib"] in + let packages = [ "fstar.lib" ] in let pkg pname = "-package " ^ pname in let args = ["ocamlopt"; "-shared"] (* FIXME shell injection *) @ ["-I"; dir] @ (List.map pkg packages) @ ["-o"; m ^ ".cmxs"; m ^ ".ml"] in (* Note: not useful when in an OPAM setting *) - let env_setter = U.format1 "env OCAMLPATH=\"%s/\"" FStar_Options.fstar_bin_directory in + let ocamlpath_sep = match FStar_Platform.system with + | Windows -> ";" + | Posix -> ":" + in + let old_ocamlpath = try Sys.getenv "OCAMLPATH" with Not_found -> "" in + let env_setter = U.format5 "env OCAMLPATH=\"%s/../lib/%s%s/%s%s\"" + FStar_Options.fstar_bin_directory + ocamlpath_sep + FStar_Options.fstar_bin_directory + ocamlpath_sep + old_ocamlpath + in let cmd = String.concat " " (env_setter :: "ocamlfind" :: args) in let rc = Sys.command cmd in if rc <> 0 then E.raise_err (E.Fatal_FailToCompileNativeTactic, (U.format2 "Failed to compile native tactic. Command\n`%s`\nreturned with exit code %s" cmd (string_of_int rc))) else () - in ms + in + try + ms |> List.map (fun m -> dir ^ "/" ^ m) |> List.iter compile + with e -> + perr (U.format1 "Failed to load native tactic: %s\n" (Printexc.to_string e)); + raise e diff --git a/src/tactics/ml/FStar_Tactics_Native.ml b/ocaml/fstar-lib/FStar_Tactics_Native.ml similarity index 100% rename from src/tactics/ml/FStar_Tactics_Native.ml rename to ocaml/fstar-lib/FStar_Tactics_Native.ml diff --git a/ulib/ml/FStar_Tcp.ml b/ocaml/fstar-lib/FStar_Tcp.ml similarity index 100% rename from ulib/ml/FStar_Tcp.ml rename to ocaml/fstar-lib/FStar_Tcp.ml diff --git a/ulib/ml/FStar_UInt8.ml b/ocaml/fstar-lib/FStar_UInt8.ml similarity index 100% rename from ulib/ml/FStar_UInt8.ml rename to ocaml/fstar-lib/FStar_UInt8.ml diff --git a/ulib/ml/FStar_Udp.ml b/ocaml/fstar-lib/FStar_Udp.ml similarity index 100% rename from ulib/ml/FStar_Udp.ml rename to ocaml/fstar-lib/FStar_Udp.ml diff --git a/src/basic/ml/FStar_Unionfind.ml b/ocaml/fstar-lib/FStar_Unionfind.ml similarity index 100% rename from src/basic/ml/FStar_Unionfind.ml rename to ocaml/fstar-lib/FStar_Unionfind.ml diff --git a/ulib/experimental/ml/Steel_Common.ml b/ocaml/fstar-lib/Steel_Common.ml similarity index 100% rename from ulib/experimental/ml/Steel_Common.ml rename to ocaml/fstar-lib/Steel_Common.ml diff --git a/ulib/experimental/ml/Steel_Effect.ml b/ocaml/fstar-lib/Steel_Effect.ml similarity index 100% rename from ulib/experimental/ml/Steel_Effect.ml rename to ocaml/fstar-lib/Steel_Effect.ml diff --git a/ulib/experimental/ml/Steel_HigherReference.ml b/ocaml/fstar-lib/Steel_HigherReference.ml similarity index 100% rename from ulib/experimental/ml/Steel_HigherReference.ml rename to ocaml/fstar-lib/Steel_HigherReference.ml diff --git a/ulib/experimental/ml/Steel_MonotonicHigherReference.ml b/ocaml/fstar-lib/Steel_MonotonicHigherReference.ml similarity index 100% rename from ulib/experimental/ml/Steel_MonotonicHigherReference.ml rename to ocaml/fstar-lib/Steel_MonotonicHigherReference.ml diff --git a/ulib/experimental/ml/Steel_Primitive_ForkJoin.ml b/ocaml/fstar-lib/Steel_Primitive_ForkJoin.ml similarity index 100% rename from ulib/experimental/ml/Steel_Primitive_ForkJoin.ml rename to ocaml/fstar-lib/Steel_Primitive_ForkJoin.ml diff --git a/ulib/experimental/ml/Steel_Reference.ml b/ocaml/fstar-lib/Steel_Reference.ml similarity index 100% rename from ulib/experimental/ml/Steel_Reference.ml rename to ocaml/fstar-lib/Steel_Reference.ml diff --git a/ulib/experimental/ml/Steel_SpinLock.ml b/ocaml/fstar-lib/Steel_SpinLock.ml similarity index 100% rename from ulib/experimental/ml/Steel_SpinLock.ml rename to ocaml/fstar-lib/Steel_SpinLock.ml diff --git a/ocaml/fstar-lib/dune b/ocaml/fstar-lib/dune new file mode 100644 index 00000000000..d256deaaa98 --- /dev/null +++ b/ocaml/fstar-lib/dune @@ -0,0 +1,31 @@ +(include_subdirs unqualified) +(library + (name fstar_lib) + (public_name fstar.lib) + (libraries + batteries + zarith + stdint + yojson + ppxlib + dynlink + menhirLib + pprint + process + sedlex + ) + (modes native) + (wrapped false) + (preprocess (pps ppx_deriving.show ppx_deriving_yojson sedlex.ppx)) +) + +(rule + (target FStar_Version.ml) + (deps (:script make_fstar_version.sh) + (:version ../../version.txt)) + (action + (progn + (copy %{version} version.txt) + (with-stdout-to + FStar_Version.ml + (run bash %{script}))))) diff --git a/ocaml/fstar-lib/generated/FStar_Algebra_CommMonoid.ml b/ocaml/fstar-lib/generated/FStar_Algebra_CommMonoid.ml new file mode 100644 index 00000000000..39e8f47163b --- /dev/null +++ b/ocaml/fstar-lib/generated/FStar_Algebra_CommMonoid.ml @@ -0,0 +1,14 @@ +open Prims +type 'a cm = + | CM of 'a * ('a -> 'a -> 'a) * unit * unit * unit +let uu___is_CM : 'a . 'a cm -> Prims.bool = fun projectee -> true +let __proj__CM__item__unit : 'a . 'a cm -> 'a = + fun projectee -> + match projectee with + | CM (unit, mult, identity, associativity, commutativity) -> unit +let __proj__CM__item__mult : 'a . 'a cm -> 'a -> 'a -> 'a = + fun projectee -> + match projectee with + | CM (unit, mult, identity, associativity, commutativity) -> mult +let (int_plus_cm : Prims.int cm) = CM (Prims.int_zero, (+), (), (), ()) +let (int_multiply_cm : Prims.int cm) = CM (Prims.int_one, ( * ), (), (), ()) \ No newline at end of file diff --git a/ocaml/fstar-lib/generated/FStar_Algebra_CommMonoid_Equiv.ml b/ocaml/fstar-lib/generated/FStar_Algebra_CommMonoid_Equiv.ml new file mode 100644 index 00000000000..1ae7447d3e5 --- /dev/null +++ b/ocaml/fstar-lib/generated/FStar_Algebra_CommMonoid_Equiv.ml @@ -0,0 +1,26 @@ +open Prims +type 'a equiv = + | EQ of unit * unit * unit * unit +let uu___is_EQ : 'a . 'a equiv -> Prims.bool = fun projectee -> true +let equality_equiv : 'a . unit -> 'a equiv = fun uu___ -> EQ ((), (), (), ()) +type ('a, 'eq) cm = + | CM of 'a * ('a -> 'a -> 'a) * unit * unit * unit * unit +let uu___is_CM : 'a . 'a equiv -> ('a, unit) cm -> Prims.bool = + fun eq -> fun projectee -> true +let __proj__CM__item__unit : 'a . 'a equiv -> ('a, unit) cm -> 'a = + fun eq -> + fun projectee -> + match projectee with + | CM (unit, mult, identity, associativity, commutativity, congruence) + -> unit +let __proj__CM__item__mult : 'a . 'a equiv -> ('a, unit) cm -> 'a -> 'a -> 'a + = + fun eq -> + fun projectee -> + match projectee with + | CM (unit, mult, identity, associativity, commutativity, congruence) + -> mult +let (int_plus_cm : (Prims.int, unit) cm) = + CM (Prims.int_zero, (+), (), (), (), ()) +let (int_multiply_cm : (Prims.int, unit) cm) = + CM (Prims.int_one, ( * ), (), (), (), ()) \ No newline at end of file diff --git a/ocaml/fstar-lib/generated/FStar_Algebra_CommMonoid_Fold.ml b/ocaml/fstar-lib/generated/FStar_Algebra_CommMonoid_Fold.ml new file mode 100644 index 00000000000..1e2139dfc12 --- /dev/null +++ b/ocaml/fstar-lib/generated/FStar_Algebra_CommMonoid_Fold.ml @@ -0,0 +1,29 @@ +open Prims +let init_func_from_expr : + 'c . + Prims.int -> + unit FStar_IntegerIntervals.not_less_than -> + ((unit, unit) FStar_IntegerIntervals.ifrom_ito -> 'c) -> + (unit, unit) FStar_IntegerIntervals.ifrom_ito -> + (unit, unit) FStar_IntegerIntervals.ifrom_ito -> + (unit, unit, (unit, unit) FStar_IntegerIntervals.ifrom_ito) + FStar_IntegerIntervals.counter_for -> 'c + = fun n0 -> fun nk -> fun expr -> fun a -> fun b -> fun i -> expr (n0 + i) +let rec fold : + 'c . + 'c FStar_Algebra_CommMonoid_Equiv.equiv -> + ('c, unit) FStar_Algebra_CommMonoid_Equiv.cm -> + Prims.int -> + unit FStar_IntegerIntervals.not_less_than -> + ((unit, unit) FStar_IntegerIntervals.ifrom_ito -> 'c) -> 'c + = + fun eq -> + fun cm -> + fun a -> + fun b -> + fun expr -> + if b = a + then expr b + else + FStar_Algebra_CommMonoid_Equiv.__proj__CM__item__mult eq cm + (fold eq cm a (b - Prims.int_one) expr) (expr b) \ No newline at end of file diff --git a/ocaml/fstar-lib/generated/FStar_Algebra_CommMonoid_Fold_Nested.ml b/ocaml/fstar-lib/generated/FStar_Algebra_CommMonoid_Fold_Nested.ml new file mode 100644 index 00000000000..a760f02b628 --- /dev/null +++ b/ocaml/fstar-lib/generated/FStar_Algebra_CommMonoid_Fold_Nested.ml @@ -0,0 +1,48 @@ +open Prims +let transpose_generator : + 'c . + Prims.int -> + Prims.int -> + Prims.int -> + Prims.int -> + ((unit, unit) FStar_IntegerIntervals.ifrom_ito -> + (unit, unit) FStar_IntegerIntervals.ifrom_ito -> 'c) + -> + (unit, unit) FStar_IntegerIntervals.ifrom_ito -> + (unit, unit) FStar_IntegerIntervals.ifrom_ito -> 'c + = + fun m0 -> + fun mk -> fun n0 -> fun nk -> fun gen -> fun j -> fun i -> gen i j +let double_fold : + 'c . + 'c FStar_Algebra_CommMonoid_Equiv.equiv -> + Prims.int -> + unit FStar_IntegerIntervals.not_less_than -> + Prims.int -> + unit FStar_IntegerIntervals.not_less_than -> + ('c, unit) FStar_Algebra_CommMonoid_Equiv.cm -> + ((unit, unit) FStar_IntegerIntervals.ifrom_ito -> + (unit, unit) FStar_IntegerIntervals.ifrom_ito -> 'c) + -> 'c + = + fun eq -> + fun a0 -> + fun ak -> + fun b0 -> + fun bk -> + fun cm -> + fun g -> + FStar_Algebra_CommMonoid_Fold.fold eq cm a0 ak + (fun i -> + FStar_Algebra_CommMonoid_Fold.fold eq cm b0 bk (g i)) +let matrix_seq : + 'c . + Prims.pos -> + Prims.pos -> + ('c, unit, unit) FStar_Matrix.matrix_generator -> + 'c FStar_Seq_Base.seq + = + fun m -> + fun r -> + fun generator -> + FStar_Matrix.seq_of_matrix m r (FStar_Matrix.init m r generator) \ No newline at end of file diff --git a/ocaml/fstar-lib/generated/FStar_Algebra_Monoid.ml b/ocaml/fstar-lib/generated/FStar_Algebra_Monoid.ml new file mode 100644 index 00000000000..8acc87020c2 --- /dev/null +++ b/ocaml/fstar-lib/generated/FStar_Algebra_Monoid.ml @@ -0,0 +1,86 @@ +open Prims +type ('m, 'u, 'mult) right_unitality_lemma = unit +type ('m, 'u, 'mult) left_unitality_lemma = unit +type ('m, 'mult) associativity_lemma = unit +type 'm monoid = + | Monoid of 'm * ('m -> 'm -> 'm) * unit * unit * unit +let uu___is_Monoid : 'm . 'm monoid -> Prims.bool = fun projectee -> true +let __proj__Monoid__item__unit : 'm . 'm monoid -> 'm = + fun projectee -> + match projectee with + | Monoid (unit, mult, right_unitality, left_unitality, associativity) -> + unit +let __proj__Monoid__item__mult : 'm . 'm monoid -> 'm -> 'm -> 'm = + fun projectee -> + match projectee with + | Monoid (unit, mult, right_unitality, left_unitality, associativity) -> + mult +let intro_monoid : 'm . 'm -> ('m -> 'm -> 'm) -> 'm monoid = + fun u -> fun mult -> Monoid (u, mult, (), (), ()) +let (nat_plus_monoid : Prims.nat monoid) = + let add x y = x + y in intro_monoid Prims.int_zero add +let (int_plus_monoid : Prims.int monoid) = intro_monoid Prims.int_zero (+) +let (conjunction_monoid : unit monoid) = + intro_monoid () (fun uu___1 -> fun uu___ -> ()) +let (disjunction_monoid : unit monoid) = + intro_monoid () (fun uu___1 -> fun uu___ -> ()) +let (bool_and_monoid : Prims.bool monoid) = + let and_ b1 b2 = b1 && b2 in intro_monoid true and_ +let (bool_or_monoid : Prims.bool monoid) = + let or_ b1 b2 = b1 || b2 in intro_monoid false or_ +let (bool_xor_monoid : Prims.bool monoid) = + let xor b1 b2 = (b1 || b2) && (Prims.op_Negation (b1 && b2)) in + intro_monoid false xor +let lift_monoid_option : + 'a . 'a monoid -> 'a FStar_Pervasives_Native.option monoid = + fun m -> + let mult x y = + match (x, y) with + | (FStar_Pervasives_Native.Some x0, FStar_Pervasives_Native.Some y0) -> + FStar_Pervasives_Native.Some (__proj__Monoid__item__mult m x0 y0) + | (uu___, uu___1) -> FStar_Pervasives_Native.None in + intro_monoid + (FStar_Pervasives_Native.Some (__proj__Monoid__item__unit m)) mult +type ('a, 'b, 'f, 'ma, 'mb) monoid_morphism_unit_lemma = unit +type ('a, 'b, 'f, 'ma, 'mb) monoid_morphism_mult_lemma = unit +type ('a, 'b, 'f, 'ma, 'mb) monoid_morphism = + | MonoidMorphism of unit * unit +let uu___is_MonoidMorphism : + 'a 'b . + ('a -> 'b) -> + 'a monoid -> + 'b monoid -> ('a, 'b, unit, unit, unit) monoid_morphism -> Prims.bool + = fun f -> fun ma -> fun mb -> fun projectee -> true +let intro_monoid_morphism : + 'a 'b . + ('a -> 'b) -> + 'a monoid -> 'b monoid -> ('a, 'b, unit, unit, unit) monoid_morphism + = fun f -> fun ma -> fun mb -> MonoidMorphism ((), ()) +let (embed_nat_int : Prims.nat -> Prims.int) = fun n -> n +let (uu___181 : (Prims.nat, Prims.int, unit, unit, unit) monoid_morphism) = + intro_monoid_morphism embed_nat_int nat_plus_monoid int_plus_monoid +type 'p neg = unit +let (uu___183 : (unit, unit, unit neg, unit, unit) monoid_morphism) = + intro_monoid_morphism (fun uu___ -> ()) conjunction_monoid + disjunction_monoid +let (uu___192 : (unit, unit, unit neg, unit, unit) monoid_morphism) = + intro_monoid_morphism (fun uu___ -> ()) disjunction_monoid + conjunction_monoid +type ('m, 'a, 'mult, 'act) mult_act_lemma = unit +type ('m, 'a, 'u, 'act) unit_act_lemma = unit +type ('m, 'mm, 'a) left_action = + | LAct of ('m -> 'a -> 'a) * unit * unit +let uu___is_LAct : + 'm . 'm monoid -> unit -> ('m, unit, Obj.t) left_action -> Prims.bool = + fun mm -> fun a -> fun projectee -> true +let __proj__LAct__item__act : + 'm . + 'm monoid -> + unit -> ('m, unit, Obj.t) left_action -> 'm -> Obj.t -> Obj.t + = + fun mm -> + fun a -> + fun projectee -> + match projectee with | LAct (act, mult_lemma, unit_lemma) -> act +type ('a, 'b, 'ma, 'mb, 'f, 'mf, 'mma, 'mmb, 'la, 'lb) left_action_morphism = + unit \ No newline at end of file diff --git a/ocaml/fstar-lib/generated/FStar_BV.ml b/ocaml/fstar-lib/generated/FStar_BV.ml new file mode 100644 index 00000000000..65f5896e699 --- /dev/null +++ b/ocaml/fstar-lib/generated/FStar_BV.ml @@ -0,0 +1,43 @@ +open Prims +type 'n bv_t = unit FStar_BitVector.bv_t +let (bv_uext : + Prims.pos -> Prims.pos -> unit bv_t -> Prims.bool FStar_Seq_Base.seq) = + fun n -> + fun i -> fun a -> FStar_Seq_Base.append (FStar_Seq_Base.create i false) a +let (int2bv : Prims.pos -> unit FStar_UInt.uint_t -> unit bv_t) = + FStar_UInt.to_vec +let (bv2int : Prims.pos -> unit bv_t -> unit FStar_UInt.uint_t) = + FStar_UInt.from_vec +let (list2bv : Prims.pos -> Prims.bool Prims.list -> unit bv_t) = + fun n -> fun l -> FStar_Seq_Properties.seq_of_list l +let (bv2list : Prims.pos -> unit bv_t -> Prims.bool Prims.list) = + fun n -> fun s -> FStar_Seq_Properties.seq_to_list s +let (bvand : Prims.pos -> unit bv_t -> unit bv_t -> unit bv_t) = + FStar_BitVector.logand_vec +let (bvxor : Prims.pos -> unit bv_t -> unit bv_t -> unit bv_t) = + FStar_BitVector.logxor_vec +let (bvor : Prims.pos -> unit bv_t -> unit bv_t -> unit bv_t) = + FStar_BitVector.logor_vec +let (bvnot : Prims.pos -> unit bv_t -> unit bv_t) = + FStar_BitVector.lognot_vec +let (bvshl : Prims.pos -> unit bv_t -> Prims.nat -> unit bv_t) = + FStar_BitVector.shift_left_vec +let (bvshr : Prims.pos -> unit bv_t -> Prims.nat -> unit bv_t) = + FStar_BitVector.shift_right_vec +let (bv_zero : Prims.pos -> unit bv_t) = fun n -> int2bv n Prims.int_zero +let (bvult : Prims.pos -> unit bv_t -> unit bv_t -> Prims.bool) = + fun n -> fun a -> fun b -> (bv2int n a) < (bv2int n b) +let (bvadd : Prims.pos -> unit bv_t -> unit bv_t -> unit bv_t) = + fun n -> + fun a -> + fun b -> int2bv n (FStar_UInt.add_mod n (bv2int n a) (bv2int n b)) +let (bvsub : Prims.pos -> unit bv_t -> unit bv_t -> unit bv_t) = + fun n -> + fun a -> + fun b -> int2bv n (FStar_UInt.sub_mod n (bv2int n a) (bv2int n b)) +let (bvdiv : Prims.pos -> unit bv_t -> unit FStar_UInt.uint_t -> unit bv_t) = + fun n -> fun a -> fun b -> int2bv n (FStar_UInt.udiv n (bv2int n a) b) +let (bvmod : Prims.pos -> unit bv_t -> unit FStar_UInt.uint_t -> unit bv_t) = + fun n -> fun a -> fun b -> int2bv n (FStar_UInt.mod1 n (bv2int n a) b) +let (bvmul : Prims.pos -> unit bv_t -> unit FStar_UInt.uint_t -> unit bv_t) = + fun n -> fun a -> fun b -> int2bv n (FStar_UInt.mul_mod n (bv2int n a) b) \ No newline at end of file diff --git a/ocaml/fstar-lib/generated/FStar_BigOps.ml b/ocaml/fstar-lib/generated/FStar_BigOps.ml new file mode 100644 index 00000000000..3fa8e91f913 --- /dev/null +++ b/ocaml/fstar-lib/generated/FStar_BigOps.ml @@ -0,0 +1,13 @@ +open Prims +let normal : 'a . 'a -> 'a = fun x -> x +type ('a, 'f, 'l) big_and' = Obj.t +type ('a, 'f, 'l) big_and = Obj.t +type ('a, 'f, 'l) big_or' = Obj.t +type ('a, 'f, 'l) big_or = Obj.t +type ('a, 'f) symmetric = unit +type ('a, 'f) reflexive = unit +type ('a, 'f) anti_reflexive = unit +type ('a, 'f, 'l) pairwise_and' = Obj.t +type ('a, 'f, 'l) pairwise_and = Obj.t +type ('a, 'f, 'l) pairwise_or' = Obj.t +type ('a, 'f, 'l) pairwise_or = Obj.t \ No newline at end of file diff --git a/ocaml/fstar-lib/generated/FStar_BitVector.ml b/ocaml/fstar-lib/generated/FStar_BitVector.ml new file mode 100644 index 00000000000..e5881773b8b --- /dev/null +++ b/ocaml/fstar-lib/generated/FStar_BitVector.ml @@ -0,0 +1,113 @@ +open Prims +type 'n bv_t = Prims.bool FStar_Seq_Base.seq +let (zero_vec : Prims.pos -> unit bv_t) = + fun n -> FStar_Seq_Base.create n false +let (elem_vec : Prims.pos -> Prims.nat -> unit bv_t) = + fun n -> fun i -> FStar_Seq_Base.upd (FStar_Seq_Base.create n false) i true +let (ones_vec : Prims.pos -> unit bv_t) = + fun n -> FStar_Seq_Base.create n true +let rec (logand_vec : Prims.pos -> unit bv_t -> unit bv_t -> unit bv_t) = + fun n -> + fun a -> + fun b -> + if n = Prims.int_one + then + FStar_Seq_Base.create Prims.int_one + ((FStar_Seq_Base.index a Prims.int_zero) && + (FStar_Seq_Base.index b Prims.int_zero)) + else + FStar_Seq_Base.append + (FStar_Seq_Base.create Prims.int_one + ((FStar_Seq_Base.index a Prims.int_zero) && + (FStar_Seq_Base.index b Prims.int_zero))) + (logand_vec (n - Prims.int_one) + (FStar_Seq_Base.slice a Prims.int_one n) + (FStar_Seq_Base.slice b Prims.int_one n)) +let rec (logxor_vec : Prims.pos -> unit bv_t -> unit bv_t -> unit bv_t) = + fun n -> + fun a -> + fun b -> + if n = Prims.int_one + then + FStar_Seq_Base.create Prims.int_one + ((FStar_Seq_Base.index a Prims.int_zero) <> + (FStar_Seq_Base.index b Prims.int_zero)) + else + FStar_Seq_Base.append + (FStar_Seq_Base.create Prims.int_one + ((FStar_Seq_Base.index a Prims.int_zero) <> + (FStar_Seq_Base.index b Prims.int_zero))) + (logxor_vec (n - Prims.int_one) + (FStar_Seq_Base.slice a Prims.int_one n) + (FStar_Seq_Base.slice b Prims.int_one n)) +let rec (logor_vec : Prims.pos -> unit bv_t -> unit bv_t -> unit bv_t) = + fun n -> + fun a -> + fun b -> + if n = Prims.int_one + then + FStar_Seq_Base.create Prims.int_one + ((FStar_Seq_Base.index a Prims.int_zero) || + (FStar_Seq_Base.index b Prims.int_zero)) + else + FStar_Seq_Base.append + (FStar_Seq_Base.create Prims.int_one + ((FStar_Seq_Base.index a Prims.int_zero) || + (FStar_Seq_Base.index b Prims.int_zero))) + (logor_vec (n - Prims.int_one) + (FStar_Seq_Base.slice a Prims.int_one n) + (FStar_Seq_Base.slice b Prims.int_one n)) +let rec (lognot_vec : Prims.pos -> unit bv_t -> unit bv_t) = + fun n -> + fun a -> + if n = Prims.int_one + then + FStar_Seq_Base.create Prims.int_one + (Prims.op_Negation (FStar_Seq_Base.index a Prims.int_zero)) + else + FStar_Seq_Base.append + (FStar_Seq_Base.create Prims.int_one + (Prims.op_Negation (FStar_Seq_Base.index a Prims.int_zero))) + (lognot_vec (n - Prims.int_one) + (FStar_Seq_Base.slice a Prims.int_one n)) +type ('n, 'a, 'b) is_subset_vec = unit +type ('n, 'a, 'b) is_superset_vec = unit +let (shift_left_vec : Prims.pos -> unit bv_t -> Prims.nat -> unit bv_t) = + fun n -> + fun a -> + fun s -> + if s >= n + then zero_vec n + else + if s = Prims.int_zero + then a + else + FStar_Seq_Base.append (FStar_Seq_Base.slice a s n) (zero_vec s) +let (shift_right_vec : Prims.pos -> unit bv_t -> Prims.nat -> unit bv_t) = + fun n -> + fun a -> + fun s -> + if s >= n + then zero_vec n + else + if s = Prims.int_zero + then a + else + FStar_Seq_Base.append (zero_vec s) + (FStar_Seq_Base.slice a Prims.int_zero (n - s)) +let (shift_arithmetic_right_vec : + Prims.pos -> unit bv_t -> Prims.nat -> unit bv_t) = + fun n -> + fun a -> + fun s -> + if FStar_Seq_Base.index a Prims.int_zero + then + (if s >= n + then ones_vec n + else + if s = Prims.int_zero + then a + else + FStar_Seq_Base.append (ones_vec s) + (FStar_Seq_Base.slice a Prims.int_zero (n - s))) + else shift_right_vec n a s \ No newline at end of file diff --git a/ocaml/fstar-lib/generated/FStar_Calc.ml b/ocaml/fstar-lib/generated/FStar_Calc.ml new file mode 100644 index 00000000000..cd377cd8d98 --- /dev/null +++ b/ocaml/fstar-lib/generated/FStar_Calc.ml @@ -0,0 +1,86 @@ +open Prims +type ('a, 'dummyV0, 'dummyV1, 'dummyV2) calc_chain = + | CalcRefl of 'a + | CalcStep of unit Prims.list * unit * 'a * 'a * 'a * ('a, unit, unit, + unit) calc_chain * unit +let uu___is_CalcRefl : + 'a . + unit Prims.list -> + 'a -> 'a -> ('a, unit, unit, unit) calc_chain -> Prims.bool + = + fun uu___ -> + fun uu___1 -> + fun uu___2 -> + fun projectee -> + match projectee with | CalcRefl x -> true | uu___3 -> false +let __proj__CalcRefl__item__x : + 'a . unit Prims.list -> 'a -> 'a -> ('a, unit, unit, unit) calc_chain -> 'a + = + fun uu___ -> + fun uu___1 -> + fun uu___2 -> fun projectee -> match projectee with | CalcRefl x -> x +let uu___is_CalcStep : + 'a . + unit Prims.list -> + 'a -> 'a -> ('a, unit, unit, unit) calc_chain -> Prims.bool + = + fun uu___ -> + fun uu___1 -> + fun uu___2 -> + fun projectee -> + match projectee with + | CalcStep (rs, p, x, y, z, _5, _6) -> true + | uu___3 -> false +let __proj__CalcStep__item__rs : + 'a . + unit Prims.list -> + 'a -> 'a -> ('a, unit, unit, unit) calc_chain -> unit Prims.list + = + fun uu___ -> + fun uu___1 -> + fun uu___2 -> + fun projectee -> + match projectee with | CalcStep (rs, p, x, y, z, _5, _6) -> rs +let __proj__CalcStep__item__x : + 'a . unit Prims.list -> 'a -> 'a -> ('a, unit, unit, unit) calc_chain -> 'a + = + fun uu___ -> + fun uu___1 -> + fun uu___2 -> + fun projectee -> + match projectee with | CalcStep (rs, p, x, y, z, _5, _6) -> x +let __proj__CalcStep__item__y : + 'a . unit Prims.list -> 'a -> 'a -> ('a, unit, unit, unit) calc_chain -> 'a + = + fun uu___ -> + fun uu___1 -> + fun uu___2 -> + fun projectee -> + match projectee with | CalcStep (rs, p, x, y, z, _5, _6) -> y +let __proj__CalcStep__item__z : + 'a . unit Prims.list -> 'a -> 'a -> ('a, unit, unit, unit) calc_chain -> 'a + = + fun uu___ -> + fun uu___1 -> + fun uu___2 -> + fun projectee -> + match projectee with | CalcStep (rs, p, x, y, z, _5, _6) -> z +let __proj__CalcStep__item___5 : + 'a . + unit Prims.list -> + 'a -> + 'a -> + ('a, unit, unit, unit) calc_chain -> + ('a, unit, unit, unit) calc_chain + = + fun uu___ -> + fun uu___1 -> + fun uu___2 -> + fun projectee -> + match projectee with | CalcStep (rs, p, x, y, z, _5, _6) -> _5 +type ('a, 'rs, 'x, 'y) calc_chain_related = Obj.t +type ('t, 'rs, 'p) calc_chain_compatible = unit +type ('a, 'rs, 'x, 'y) calc_pack = unit +let _calc_init : 'a . 'a -> ('a, unit, unit, unit) calc_chain = + fun x -> CalcRefl x + diff --git a/src/ocaml-output/FStar_CheckedFiles.ml b/ocaml/fstar-lib/generated/FStar_CheckedFiles.ml similarity index 99% rename from src/ocaml-output/FStar_CheckedFiles.ml rename to ocaml/fstar-lib/generated/FStar_CheckedFiles.ml index 97d8ee5af75..af7a952de9f 100644 --- a/src/ocaml-output/FStar_CheckedFiles.ml +++ b/ocaml/fstar-lib/generated/FStar_CheckedFiles.ml @@ -441,7 +441,7 @@ let (load_module_from_cache : let cache_file = FStar_Parser_Dep.cache_file_name fn1 in let fail msg cache_file1 = let suppress_warning = - (FStar_Options.should_verify_file fn1) || + (FStar_Options.should_check_file fn1) || (FStar_Compiler_Effect.op_Bang already_failed) in if Prims.op_Negation suppress_warning then diff --git a/ocaml/fstar-lib/generated/FStar_Classical.ml b/ocaml/fstar-lib/generated/FStar_Classical.ml new file mode 100644 index 00000000000..9737d41291c --- /dev/null +++ b/ocaml/fstar-lib/generated/FStar_Classical.ml @@ -0,0 +1,6 @@ +open Prims +let get_squashed : 'b 'a . unit -> 'a = + fun uu___ -> (fun uu___ -> Obj.magic ()) uu___ + + + diff --git a/ocaml/fstar-lib/generated/FStar_Classical_Sugar.ml b/ocaml/fstar-lib/generated/FStar_Classical_Sugar.ml new file mode 100644 index 00000000000..e8306abedb2 --- /dev/null +++ b/ocaml/fstar-lib/generated/FStar_Classical_Sugar.ml @@ -0,0 +1 @@ +open Prims \ No newline at end of file diff --git a/src/ocaml-output/FStar_Common.ml b/ocaml/fstar-lib/generated/FStar_Common.ml similarity index 100% rename from src/ocaml-output/FStar_Common.ml rename to ocaml/fstar-lib/generated/FStar_Common.ml diff --git a/src/ocaml-output/FStar_Compiler_Option.ml b/ocaml/fstar-lib/generated/FStar_Compiler_Option.ml similarity index 100% rename from src/ocaml-output/FStar_Compiler_Option.ml rename to ocaml/fstar-lib/generated/FStar_Compiler_Option.ml diff --git a/src/ocaml-output/FStar_Compiler_Range.ml b/ocaml/fstar-lib/generated/FStar_Compiler_Range.ml similarity index 100% rename from src/ocaml-output/FStar_Compiler_Range.ml rename to ocaml/fstar-lib/generated/FStar_Compiler_Range.ml diff --git a/src/ocaml-output/FStar_Const.ml b/ocaml/fstar-lib/generated/FStar_Const.ml similarity index 100% rename from src/ocaml-output/FStar_Const.ml rename to ocaml/fstar-lib/generated/FStar_Const.ml diff --git a/src/ocaml-output/FStar_Dependencies.ml b/ocaml/fstar-lib/generated/FStar_Dependencies.ml similarity index 100% rename from src/ocaml-output/FStar_Dependencies.ml rename to ocaml/fstar-lib/generated/FStar_Dependencies.ml diff --git a/ocaml/fstar-lib/generated/FStar_DependentMap.ml b/ocaml/fstar-lib/generated/FStar_DependentMap.ml new file mode 100644 index 00000000000..c4ae061c786 --- /dev/null +++ b/ocaml/fstar-lib/generated/FStar_DependentMap.ml @@ -0,0 +1,77 @@ +open Prims +type ('key, 'value) t = + { + mappings: ('key, 'value) FStar_FunctionalExtensionality.restricted_t } +let __proj__Mkt__item__mappings : + 'key 'value . + ('key, 'value) t -> + ('key, 'value) FStar_FunctionalExtensionality.restricted_t + = fun projectee -> match projectee with | { mappings;_} -> mappings +let create : 'key 'value . ('key -> 'value) -> ('key, 'value) t = + fun f -> { mappings = (FStar_FunctionalExtensionality.on_domain f) } +let sel : 'key 'value . ('key, 'value) t -> 'key -> 'value = + fun m -> fun k -> m.mappings k +let upd : + 'key 'value . ('key, 'value) t -> 'key -> 'value -> ('key, 'value) t = + fun m -> + fun k -> + fun v -> + { + mappings = + (FStar_FunctionalExtensionality.on_domain + (fun k' -> if k' = k then v else m.mappings k')) + } +type ('key, 'value, 'm1, 'm2) equal = unit +let restrict : 'key 'value 'p . ('key, 'value) t -> ('key, 'value) t = + fun m -> + { mappings = (FStar_FunctionalExtensionality.on_domain m.mappings) } +type ('key1, 'value1, 'key2, 'value2, 'k) concat_value = Obj.t +let concat_mappings : + 'key1 'value1 'key2 'value2 . + ('key1 -> 'value1) -> + ('key2 -> 'value2) -> ('key1, 'key2) FStar_Pervasives.either -> Obj.t + = + fun m1 -> + fun m2 -> + fun k -> + match k with + | FStar_Pervasives.Inl k1 -> Obj.repr (m1 k1) + | FStar_Pervasives.Inr k2 -> Obj.repr (m2 k2) +let concat : + 'key1 'value1 'key2 'value2 . + ('key1, 'value1) t -> + ('key2, 'value2) t -> (('key1, 'key2) FStar_Pervasives.either, Obj.t) t + = + fun m1 -> + fun m2 -> + { + mappings = + (FStar_FunctionalExtensionality.on_domain + (concat_mappings m1.mappings m2.mappings)) + } +type ('key1, 'value1, 'key2, 'ren, 'k) rename_value = 'value1 +let rename : + 'key1 'value1 . + ('key1, 'value1) t -> + unit -> + (Obj.t -> 'key1) -> + (Obj.t, ('key1, 'value1, Obj.t, unit, unit) rename_value) t + = + fun m -> + fun key2 -> + fun ren -> + { + mappings = + (FStar_FunctionalExtensionality.on_domain + (fun k2 -> m.mappings (ren k2))) + } +let map : + 'key 'value1 'value2 . + ('key -> 'value1 -> 'value2) -> ('key, 'value1) t -> ('key, 'value2) t + = + fun f -> + fun m -> + { + mappings = + (FStar_FunctionalExtensionality.on_domain (fun k -> f k (sel m k))) + } \ No newline at end of file diff --git a/ocaml/fstar-lib/generated/FStar_Endianness.ml b/ocaml/fstar-lib/generated/FStar_Endianness.ml new file mode 100644 index 00000000000..8f1c8d04db5 --- /dev/null +++ b/ocaml/fstar-lib/generated/FStar_Endianness.ml @@ -0,0 +1,135 @@ +open Prims +type bytes = FStar_UInt8.t FStar_Seq_Base.seq +let rec (le_to_n : bytes -> Prims.nat) = + fun b -> + if (FStar_Seq_Base.length b) = Prims.int_zero + then Prims.int_zero + else + (FStar_UInt8.v (FStar_Seq_Properties.head b)) + + ((Prims.pow2 (Prims.of_int (8))) * + (le_to_n (FStar_Seq_Properties.tail b))) +let rec (be_to_n : bytes -> Prims.nat) = + fun b -> + if (FStar_Seq_Base.length b) = Prims.int_zero + then Prims.int_zero + else + (FStar_UInt8.v (FStar_Seq_Properties.last b)) + + ((Prims.pow2 (Prims.of_int (8))) * + (be_to_n + (FStar_Seq_Base.slice b Prims.int_zero + ((FStar_Seq_Base.length b) - Prims.int_one)))) +let rec (n_to_le : Prims.nat -> Prims.nat -> bytes) = + fun len -> + fun n -> + if len = Prims.int_zero + then FStar_Seq_Base.empty () + else + (let len1 = len - Prims.int_one in + let byte = FStar_UInt8.uint_to_t (n mod (Prims.of_int (256))) in + let n' = n / (Prims.of_int (256)) in + let b' = n_to_le len1 n' in + let b = FStar_Seq_Properties.cons byte b' in b) +let rec (n_to_be : Prims.nat -> Prims.nat -> bytes) = + fun len -> + fun n -> + if len = Prims.int_zero + then FStar_Seq_Base.empty () + else + (let len1 = len - Prims.int_one in + let byte = FStar_UInt8.uint_to_t (n mod (Prims.of_int (256))) in + let n' = n / (Prims.of_int (256)) in + let b' = n_to_be len1 n' in + let b'' = FStar_Seq_Base.create Prims.int_one byte in + let b = FStar_Seq_Base.append b' b'' in b) +let (uint32_of_le : bytes -> FStar_UInt32.t) = + fun b -> let n = le_to_n b in FStar_UInt32.uint_to_t n +let (le_of_uint32 : FStar_UInt32.t -> bytes) = + fun x -> n_to_le (Prims.of_int (4)) (FStar_UInt32.v x) +let (uint32_of_be : bytes -> FStar_UInt32.t) = + fun b -> let n = be_to_n b in FStar_UInt32.uint_to_t n +let (be_of_uint32 : FStar_UInt32.t -> bytes) = + fun x -> n_to_be (Prims.of_int (4)) (FStar_UInt32.v x) +let (uint64_of_le : bytes -> FStar_UInt64.t) = + fun b -> let n = le_to_n b in FStar_UInt64.uint_to_t n +let (le_of_uint64 : FStar_UInt64.t -> bytes) = + fun x -> n_to_le (Prims.of_int (8)) (FStar_UInt64.v x) +let (uint64_of_be : bytes -> FStar_UInt64.t) = + fun b -> let n = be_to_n b in FStar_UInt64.uint_to_t n +let (be_of_uint64 : FStar_UInt64.t -> bytes) = + fun x -> n_to_be (Prims.of_int (8)) (FStar_UInt64.v x) +let rec (seq_uint32_of_le : + Prims.nat -> bytes -> FStar_UInt32.t FStar_Seq_Base.seq) = + fun l -> + fun b -> + if (FStar_Seq_Base.length b) = Prims.int_zero + then FStar_Seq_Base.empty () + else + (let uu___1 = FStar_Seq_Properties.split b (Prims.of_int (4)) in + match uu___1 with + | (hd, tl) -> + FStar_Seq_Properties.cons (uint32_of_le hd) + (seq_uint32_of_le (l - Prims.int_one) tl)) +let rec (le_of_seq_uint32 : FStar_UInt32.t FStar_Seq_Base.seq -> bytes) = + fun s -> + if (FStar_Seq_Base.length s) = Prims.int_zero + then FStar_Seq_Base.empty () + else + FStar_Seq_Base.append (le_of_uint32 (FStar_Seq_Properties.head s)) + (le_of_seq_uint32 (FStar_Seq_Properties.tail s)) +let rec (seq_uint32_of_be : + Prims.nat -> bytes -> FStar_UInt32.t FStar_Seq_Base.seq) = + fun l -> + fun b -> + if (FStar_Seq_Base.length b) = Prims.int_zero + then FStar_Seq_Base.empty () + else + (let uu___1 = FStar_Seq_Properties.split b (Prims.of_int (4)) in + match uu___1 with + | (hd, tl) -> + FStar_Seq_Properties.cons (uint32_of_be hd) + (seq_uint32_of_be (l - Prims.int_one) tl)) +let rec (be_of_seq_uint32 : FStar_UInt32.t FStar_Seq_Base.seq -> bytes) = + fun s -> + if (FStar_Seq_Base.length s) = Prims.int_zero + then FStar_Seq_Base.empty () + else + FStar_Seq_Base.append (be_of_uint32 (FStar_Seq_Properties.head s)) + (be_of_seq_uint32 (FStar_Seq_Properties.tail s)) +let rec (seq_uint64_of_le : + Prims.nat -> bytes -> FStar_UInt64.t FStar_Seq_Base.seq) = + fun l -> + fun b -> + if (FStar_Seq_Base.length b) = Prims.int_zero + then FStar_Seq_Base.empty () + else + (let uu___1 = FStar_Seq_Properties.split b (Prims.of_int (8)) in + match uu___1 with + | (hd, tl) -> + FStar_Seq_Properties.cons (uint64_of_le hd) + (seq_uint64_of_le (l - Prims.int_one) tl)) +let rec (le_of_seq_uint64 : FStar_UInt64.t FStar_Seq_Base.seq -> bytes) = + fun s -> + if (FStar_Seq_Base.length s) = Prims.int_zero + then FStar_Seq_Base.empty () + else + FStar_Seq_Base.append (le_of_uint64 (FStar_Seq_Properties.head s)) + (le_of_seq_uint64 (FStar_Seq_Properties.tail s)) +let rec (seq_uint64_of_be : + Prims.nat -> bytes -> FStar_UInt64.t FStar_Seq_Base.seq) = + fun l -> + fun b -> + if (FStar_Seq_Base.length b) = Prims.int_zero + then FStar_Seq_Base.empty () + else + (let uu___1 = FStar_Seq_Properties.split b (Prims.of_int (8)) in + match uu___1 with + | (hd, tl) -> + FStar_Seq_Properties.cons (uint64_of_be hd) + (seq_uint64_of_be (l - Prims.int_one) tl)) +let rec (be_of_seq_uint64 : FStar_UInt64.t FStar_Seq_Base.seq -> bytes) = + fun s -> + if (FStar_Seq_Base.length s) = Prims.int_zero + then FStar_Seq_Base.empty () + else + FStar_Seq_Base.append (be_of_uint64 (FStar_Seq_Properties.head s)) + (be_of_seq_uint64 (FStar_Seq_Properties.tail s)) \ No newline at end of file diff --git a/ocaml/fstar-lib/generated/FStar_ErasedLogic.ml b/ocaml/fstar-lib/generated/FStar_ErasedLogic.ml new file mode 100644 index 00000000000..e4f44df3662 --- /dev/null +++ b/ocaml/fstar-lib/generated/FStar_ErasedLogic.ml @@ -0,0 +1,3 @@ +open Prims +type ('a, 'p) sig_ = unit +type ('a, 'p) ex = unit \ No newline at end of file diff --git a/ocaml/fstar-lib/generated/FStar_Error.ml b/ocaml/fstar-lib/generated/FStar_Error.ml new file mode 100644 index 00000000000..936a0485d73 --- /dev/null +++ b/ocaml/fstar-lib/generated/FStar_Error.ml @@ -0,0 +1,18 @@ +open Prims +type ('a, 'b) optResult = + | Error of 'a + | Correct of 'b +let uu___is_Error : 'a 'b . ('a, 'b) optResult -> Prims.bool = + fun projectee -> match projectee with | Error _0 -> true | uu___ -> false +let __proj__Error__item___0 : 'a 'b . ('a, 'b) optResult -> 'a = + fun projectee -> match projectee with | Error _0 -> _0 +let uu___is_Correct : 'a 'b . ('a, 'b) optResult -> Prims.bool = + fun projectee -> match projectee with | Correct _0 -> true | uu___ -> false +let __proj__Correct__item___0 : 'a 'b . ('a, 'b) optResult -> 'b = + fun projectee -> match projectee with | Correct _0 -> _0 +let (perror : Prims.string -> Prims.int -> Prims.string -> Prims.string) = + fun file -> fun line -> fun text -> text +let correct : 'a 'r . 'r -> ('a, 'r) optResult = fun x -> Correct x +let rec unexpected : 'a . Prims.string -> 'a = fun s -> unexpected s +let rec unreachable : 'a . Prims.string -> 'a = fun s -> unreachable s +let if_ideal : 'a . (unit -> 'a) -> 'a -> 'a = fun f -> fun x -> x \ No newline at end of file diff --git a/src/ocaml-output/FStar_Errors.ml b/ocaml/fstar-lib/generated/FStar_Errors.ml similarity index 100% rename from src/ocaml-output/FStar_Errors.ml rename to ocaml/fstar-lib/generated/FStar_Errors.ml diff --git a/src/ocaml-output/FStar_Extraction_Krml.ml b/ocaml/fstar-lib/generated/FStar_Extraction_Krml.ml similarity index 100% rename from src/ocaml-output/FStar_Extraction_Krml.ml rename to ocaml/fstar-lib/generated/FStar_Extraction_Krml.ml diff --git a/src/ocaml-output/FStar_Extraction_ML_Code.ml b/ocaml/fstar-lib/generated/FStar_Extraction_ML_Code.ml similarity index 100% rename from src/ocaml-output/FStar_Extraction_ML_Code.ml rename to ocaml/fstar-lib/generated/FStar_Extraction_ML_Code.ml diff --git a/src/ocaml-output/FStar_Extraction_ML_Modul.ml b/ocaml/fstar-lib/generated/FStar_Extraction_ML_Modul.ml similarity index 100% rename from src/ocaml-output/FStar_Extraction_ML_Modul.ml rename to ocaml/fstar-lib/generated/FStar_Extraction_ML_Modul.ml diff --git a/src/ocaml-output/FStar_Extraction_ML_RemoveUnusedParameters.ml b/ocaml/fstar-lib/generated/FStar_Extraction_ML_RemoveUnusedParameters.ml similarity index 100% rename from src/ocaml-output/FStar_Extraction_ML_RemoveUnusedParameters.ml rename to ocaml/fstar-lib/generated/FStar_Extraction_ML_RemoveUnusedParameters.ml diff --git a/src/ocaml-output/FStar_Extraction_ML_Syntax.ml b/ocaml/fstar-lib/generated/FStar_Extraction_ML_Syntax.ml similarity index 100% rename from src/ocaml-output/FStar_Extraction_ML_Syntax.ml rename to ocaml/fstar-lib/generated/FStar_Extraction_ML_Syntax.ml diff --git a/src/ocaml-output/FStar_Extraction_ML_Term.ml b/ocaml/fstar-lib/generated/FStar_Extraction_ML_Term.ml similarity index 100% rename from src/ocaml-output/FStar_Extraction_ML_Term.ml rename to ocaml/fstar-lib/generated/FStar_Extraction_ML_Term.ml diff --git a/src/ocaml-output/FStar_Extraction_ML_UEnv.ml b/ocaml/fstar-lib/generated/FStar_Extraction_ML_UEnv.ml similarity index 100% rename from src/ocaml-output/FStar_Extraction_ML_UEnv.ml rename to ocaml/fstar-lib/generated/FStar_Extraction_ML_UEnv.ml diff --git a/src/ocaml-output/FStar_Extraction_ML_Util.ml b/ocaml/fstar-lib/generated/FStar_Extraction_ML_Util.ml similarity index 99% rename from src/ocaml-output/FStar_Extraction_ML_Util.ml rename to ocaml/fstar-lib/generated/FStar_Extraction_ML_Util.ml index 93a9c476da9..d50999e9d73 100644 --- a/src/ocaml-output/FStar_Extraction_ML_Util.ml +++ b/ocaml/fstar-lib/generated/FStar_Extraction_ML_Util.ml @@ -85,10 +85,16 @@ let (mlexpr_of_range : FStar_Compiler_Effect.op_Bar_Greater uu___ (FStar_Extraction_ML_Syntax.with_ty FStar_Extraction_ML_Syntax.ml_string_ty) in + let drop_path s = + match FStar_String.split [47] s with + | [] -> s + | l -> FStar_Compiler_List.last l in let uu___ = let uu___1 = let uu___2 = - let uu___3 = FStar_Compiler_Range.file_of_range r in + let uu___3 = + let uu___4 = FStar_Compiler_Range.file_of_range r in + FStar_Compiler_Effect.op_Bar_Greater uu___4 drop_path in FStar_Compiler_Effect.op_Bar_Greater uu___3 cstr in let uu___3 = let uu___4 = diff --git a/ocaml/fstar-lib/generated/FStar_Fin.ml b/ocaml/fstar-lib/generated/FStar_Fin.ml new file mode 100644 index 00000000000..c2c3f8a0bb7 --- /dev/null +++ b/ocaml/fstar-lib/generated/FStar_Fin.ml @@ -0,0 +1,93 @@ +open Prims +type 'n fin = Prims.int +type 'p under = Prims.nat +type ('n, 'a) vect = 'a Prims.list +type ('n, 'a) seqn = 'a FStar_Seq_Base.seq +type ('a, 's) in_ = Prims.nat +let rec find : + 'a . + 'a FStar_Seq_Base.seq -> + ('a -> Prims.bool) -> + Prims.nat -> Prims.nat FStar_Pervasives_Native.option + = + fun s -> + fun p -> + fun i -> + if p (FStar_Seq_Base.index s i) + then FStar_Pervasives_Native.Some i + else + if (i + Prims.int_one) < (FStar_Seq_Base.length s) + then find s p (i + Prims.int_one) + else FStar_Pervasives_Native.None +let rec (pigeonhole : + Prims.pos -> Prims.nat FStar_Seq_Base.seq -> (Prims.nat * Prims.nat)) = + fun n -> + fun s -> + if n = Prims.int_one + then (Prims.int_zero, Prims.int_one) + else + (let k0 = FStar_Seq_Base.index s Prims.int_zero in + match find s (fun k -> k = k0) Prims.int_one with + | FStar_Pervasives_Native.Some i -> (Prims.int_zero, i) + | FStar_Pervasives_Native.None -> + let uu___1 = + pigeonhole (n - Prims.int_one) + (FStar_Seq_Base.init n + (fun i -> + let k = FStar_Seq_Base.index s (i + Prims.int_one) in + if k < k0 then k else k - Prims.int_one)) in + (match uu___1 with + | (i1, i2) -> ((i1 + Prims.int_one), (i2 + Prims.int_one)))) +type 'a binary_relation = 'a -> 'a -> Prims.bool +type ('a, 'r) is_reflexive = unit +type ('a, 'r) is_symmetric = unit +type ('a, 'r) is_transitive = unit +type 'a equivalence_relation = 'a -> 'a -> Prims.bool +type ('a, 'eq, 's, 'x) contains_eq = unit +type ('a, 'eq, 's) items_of = 'a +let rec find_eq : + 'a . 'a equivalence_relation -> 'a FStar_Seq_Base.seq -> 'a -> Prims.nat = + fun eq -> + fun s -> + fun x -> + if (FStar_Seq_Base.length s) = Prims.int_one + then Prims.int_zero + else + if eq x (FStar_Seq_Base.index s Prims.int_zero) + then Prims.int_zero + else + (let ieq = find_eq eq (FStar_Seq_Properties.tail s) x in + Prims.int_one + ieq) +let rec pigeonhole_eq : + 'a . + 'a equivalence_relation -> + 'a FStar_Seq_Base.seq -> + ('a, unit, unit) items_of FStar_Seq_Base.seq -> + (Prims.nat * Prims.nat) + = + fun eq -> + fun holes -> + fun pigeons -> + if (FStar_Seq_Base.length holes) = Prims.int_one + then (Prims.int_zero, Prims.int_one) + else + (let first_pigeon = FStar_Seq_Base.index pigeons Prims.int_zero in + match find pigeons (fun k -> eq k first_pigeon) Prims.int_one with + | FStar_Pervasives_Native.Some i -> (Prims.int_zero, i) + | FStar_Pervasives_Native.None -> + let index_of_first_pigeon = find_eq eq holes first_pigeon in + let holes_except_first_pigeon = + FStar_Seq_Base.append + (FStar_Seq_Base.slice holes Prims.int_zero + index_of_first_pigeon) + (FStar_Seq_Base.slice holes + (index_of_first_pigeon + Prims.int_one) + (FStar_Seq_Base.length holes)) in + let uu___1 = + pigeonhole_eq eq holes_except_first_pigeon + (FStar_Seq_Base.init + ((FStar_Seq_Base.length pigeons) - Prims.int_one) + (fun i -> + FStar_Seq_Base.index pigeons (i + Prims.int_one))) in + (match uu___1 with + | (i1, i2) -> ((i1 + Prims.int_one), (i2 + Prims.int_one)))) \ No newline at end of file diff --git a/ocaml/fstar-lib/generated/FStar_FiniteMap_Ambient.ml b/ocaml/fstar-lib/generated/FStar_FiniteMap_Ambient.ml new file mode 100644 index 00000000000..e8306abedb2 --- /dev/null +++ b/ocaml/fstar-lib/generated/FStar_FiniteMap_Ambient.ml @@ -0,0 +1 @@ +open Prims \ No newline at end of file diff --git a/ocaml/fstar-lib/generated/FStar_FiniteMap_Base.ml b/ocaml/fstar-lib/generated/FStar_FiniteMap_Base.ml new file mode 100644 index 00000000000..d278427f7f1 --- /dev/null +++ b/ocaml/fstar-lib/generated/FStar_FiniteMap_Base.ml @@ -0,0 +1,106 @@ +open Prims +type ('a, 'b, 's) setfun_t = + ('a, 'b FStar_Pervasives_Native.option) + FStar_FunctionalExtensionality.restricted_t +type ('a, 'b) map = + ('a FStar_FiniteSet_Base.set, ('a, 'b, unit) setfun_t) Prims.dtuple2 +let domain : 'a 'b . ('a, 'b) map -> 'a FStar_FiniteSet_Base.set = + fun m -> + let uu___ = m in + match uu___ with | Prims.Mkdtuple2 (keys, uu___1) -> keys +let elements : 'a 'b . ('a, 'b) map -> ('a, 'b, unit) setfun_t = + fun m -> + let uu___ = m in match uu___ with | Prims.Mkdtuple2 (uu___1, f) -> f +let mem : 'a 'b . 'a -> ('a, 'b) map -> Prims.bool = + fun key -> fun m -> FStar_FiniteSet_Base.mem key (domain m) +let rec key_in_item_list : 'a 'b . 'a -> ('a * 'b) Prims.list -> Prims.bool = + fun key -> + fun items -> + match items with + | [] -> false + | (k, v)::tl -> (key = k) || (key_in_item_list key tl) +let rec item_list_doesnt_repeat_keys : + 'a 'b . ('a * 'b) Prims.list -> Prims.bool = + fun items -> + match items with + | [] -> true + | (k, v)::tl -> + (Prims.op_Negation (key_in_item_list k tl)) && + (item_list_doesnt_repeat_keys tl) +let lookup : 'a 'b . 'a -> ('a, 'b) map -> 'b = + fun key -> + fun m -> FStar_Pervasives_Native.__proj__Some__item__v (elements m key) +type ('a, 'b, 'm) values = unit +type ('a, 'b, 'm) items = unit +let emptymap : 'a 'b . unit -> ('a, 'b) map = + fun uu___ -> + Prims.Mkdtuple2 + ((FStar_FiniteSet_Base.emptyset ()), + (FStar_FunctionalExtensionality.on_domain + (fun key -> FStar_Pervasives_Native.None))) +let glue : + 'a 'b . + 'a FStar_FiniteSet_Base.set -> ('a, 'b, unit) setfun_t -> ('a, 'b) map + = fun keys -> fun f -> Prims.Mkdtuple2 (keys, f) +let insert : 'a 'b . 'a -> 'b -> ('a, 'b) map -> ('a, 'b) map = + fun k -> + fun v -> + fun m -> + let keys' = FStar_FiniteSet_Base.insert k (domain m) in + let f' = + FStar_FunctionalExtensionality.on_domain + (fun key -> + if key = k + then FStar_Pervasives_Native.Some v + else elements m key) in + Prims.Mkdtuple2 (keys', f') +let merge : 'a 'b . ('a, 'b) map -> ('a, 'b) map -> ('a, 'b) map = + fun m1 -> + fun m2 -> + let keys' = FStar_FiniteSet_Base.union (domain m1) (domain m2) in + let f' = + FStar_FunctionalExtensionality.on_domain + (fun key -> + if FStar_FiniteSet_Base.mem key (domain m2) + then elements m2 key + else elements m1 key) in + Prims.Mkdtuple2 (keys', f') +let subtract : + 'a 'b . ('a, 'b) map -> 'a FStar_FiniteSet_Base.set -> ('a, 'b) map = + fun m -> + fun s -> + let keys' = FStar_FiniteSet_Base.difference (domain m) s in + let f' = + FStar_FunctionalExtensionality.on_domain + (fun key -> + if FStar_FiniteSet_Base.mem key keys' + then elements m key + else FStar_Pervasives_Native.None) in + Prims.Mkdtuple2 (keys', f') +type ('a, 'b, 'm1, 'm2) equal = unit +type ('a, 'b, 'm1, 'm2) disjoint = unit +let remove : 'a 'b . 'a -> ('a, 'b) map -> ('a, 'b) map = + fun key -> fun m -> subtract m (FStar_FiniteSet_Base.singleton key) +let notin : 'a 'b . 'a -> ('a, 'b) map -> Prims.bool = + fun key -> fun m -> Prims.op_Negation (mem key m) +type cardinality_zero_iff_empty_fact = unit +type empty_or_domain_occupied_fact = unit +type empty_or_values_occupied_fact = unit +type empty_or_items_occupied_fact = unit +type map_cardinality_matches_domain_fact = unit +type values_contains_fact = unit +type items_contains_fact = unit +type empty_domain_empty_fact = unit +type glue_domain_fact = unit +type glue_elements_fact = unit +type insert_elements_fact = unit +type insert_member_cardinality_fact = unit +type insert_nonmember_cardinality_fact = unit +type merge_domain_is_union_fact = unit +type merge_element_fact = unit +type subtract_domain_fact = unit +type subtract_element_fact = unit +type map_equal_fact = unit +type map_extensionality_fact = unit +type disjoint_fact = unit +type all_finite_map_facts = unit \ No newline at end of file diff --git a/ocaml/fstar-lib/generated/FStar_FiniteSet_Ambient.ml b/ocaml/fstar-lib/generated/FStar_FiniteSet_Ambient.ml new file mode 100644 index 00000000000..e8306abedb2 --- /dev/null +++ b/ocaml/fstar-lib/generated/FStar_FiniteSet_Ambient.ml @@ -0,0 +1 @@ +open Prims \ No newline at end of file diff --git a/ocaml/fstar-lib/generated/FStar_FiniteSet_Base.ml b/ocaml/fstar-lib/generated/FStar_FiniteSet_Base.ml new file mode 100644 index 00000000000..59afa81e01a --- /dev/null +++ b/ocaml/fstar-lib/generated/FStar_FiniteSet_Base.ml @@ -0,0 +1,118 @@ +open Prims +type ('a, 'f, 'xs) has_elements = unit +type 'a set = ('a, Prims.bool) FStar_FunctionalExtensionality.restricted_t +let mem : 'a . 'a -> 'a set -> Prims.bool = fun x -> fun s -> s x +let rec list_nonrepeating : 'a . 'a Prims.list -> Prims.bool = + fun xs -> + match xs with + | [] -> true + | hd::tl -> + (Prims.op_Negation (FStar_List_Tot_Base.mem hd tl)) && + (list_nonrepeating tl) +let rec remove_repeats : 'a . 'a Prims.list -> 'a Prims.list = + fun xs -> + match xs with + | [] -> [] + | hd::tl -> + let tl' = remove_repeats tl in + if FStar_List_Tot_Base.mem hd tl then tl' else hd :: tl' +let intro_set : + 'a . + ('a, Prims.bool) FStar_FunctionalExtensionality.restricted_t -> + unit -> 'a set + = fun f -> fun xs -> f +let emptyset : 'a . unit -> 'a set = + fun uu___ -> + intro_set + (FStar_FunctionalExtensionality.on_domain (fun uu___1 -> false)) () +let insert : 'a . 'a -> 'a set -> 'a set = + fun x -> + fun s -> + intro_set + (FStar_FunctionalExtensionality.on_domain + (fun x' -> (x = x') || (s x'))) () +let singleton : 'a . 'a -> 'a set = fun x -> insert x (emptyset ()) +let rec union_lists : 'a . 'a Prims.list -> 'a Prims.list -> 'a Prims.list = + fun xs -> + fun ys -> match xs with | [] -> ys | hd::tl -> hd :: (union_lists tl ys) +let union : 'a . 'a set -> 'a set -> 'a set = + fun s1 -> + fun s2 -> + intro_set + (FStar_FunctionalExtensionality.on_domain (fun x -> (s1 x) || (s2 x))) + () +let rec intersect_lists : + 'a . 'a Prims.list -> 'a Prims.list -> 'a Prims.list = + fun xs -> + fun ys -> + match xs with + | [] -> [] + | hd::tl -> + let zs' = intersect_lists tl ys in + if FStar_List_Tot_Base.mem hd ys then hd :: zs' else zs' +let intersection : 'a . 'a set -> 'a set -> 'a set = + fun s1 -> + fun s2 -> + intro_set + (FStar_FunctionalExtensionality.on_domain (fun x -> (s1 x) && (s2 x))) + () +let rec difference_lists : + 'a . 'a Prims.list -> 'a Prims.list -> 'a Prims.list = + fun xs -> + fun ys -> + match xs with + | [] -> [] + | hd::tl -> + let zs' = difference_lists tl ys in + if FStar_List_Tot_Base.mem hd ys then zs' else hd :: zs' +let difference : 'a . 'a set -> 'a set -> 'a set = + fun s1 -> + fun s2 -> + intro_set + (FStar_FunctionalExtensionality.on_domain + (fun x -> (s1 x) && (Prims.op_Negation (s2 x)))) () +type ('a, 's1, 's2) subset = unit +type ('a, 's1, 's2) equal = unit +type ('a, 's1, 's2) disjoint = unit +let remove : 'a . 'a -> 'a set -> 'a set = + fun x -> fun s -> difference s (singleton x) +let notin : 'a . 'a -> 'a set -> Prims.bool = + fun x -> fun s -> Prims.op_Negation (mem x s) +type empty_set_contains_no_elements_fact = unit +type length_zero_fact = unit +type singleton_contains_argument_fact = unit +type singleton_contains_fact = unit +type singleton_cardinality_fact = unit +type insert_fact = unit +type insert_contains_argument_fact = unit +type insert_contains_fact = unit +type insert_member_cardinality_fact = unit +type insert_nonmember_cardinality_fact = unit +type union_contains_fact = unit +type union_contains_element_from_first_argument_fact = unit +type union_contains_element_from_second_argument_fact = unit +type union_of_disjoint_fact = unit +type intersection_contains_fact = unit +type union_idempotent_right_fact = unit +type union_idempotent_left_fact = unit +type intersection_idempotent_right_fact = unit +type intersection_idempotent_left_fact = unit +type intersection_cardinality_fact = unit +type difference_contains_fact = unit +type difference_doesnt_include_fact = unit +type difference_cardinality_fact = unit +type subset_fact = unit +type equal_fact = unit +type equal_extensionality_fact = unit +type disjoint_fact = unit +type insert_remove_fact = unit +type remove_insert_fact = unit +type set_as_list_cardinality_fact = unit +type all_finite_set_facts = unit +let rec remove_from_nonrepeating_list : + 'a . 'a -> 'a Prims.list -> 'a Prims.list = + fun x -> + fun xs -> + match xs with + | hd::tl -> + if x = hd then tl else hd :: (remove_from_nonrepeating_list x tl) \ No newline at end of file diff --git a/ocaml/fstar-lib/generated/FStar_FunctionalExtensionality.ml b/ocaml/fstar-lib/generated/FStar_FunctionalExtensionality.ml new file mode 100644 index 00000000000..95a5418d64f --- /dev/null +++ b/ocaml/fstar-lib/generated/FStar_FunctionalExtensionality.ml @@ -0,0 +1,19 @@ +open Prims +type ('a, 'b) arrow = 'a -> 'b +type ('a, 'b) efun = 'a -> 'b +type ('a, 'b, 'f, 'g) feq = unit +let on_domain : 'a 'b . ('a -> 'b) -> 'a -> 'b = fun f -> fun x -> f x +type ('a, 'b, 'f) is_restricted = unit +type ('a, 'b) restricted_t = 'a -> 'b +type ('a, 'b) op_Hat_Subtraction_Greater = ('a, 'b) restricted_t +let on_dom : 'a 'b . ('a -> 'b) -> ('a, 'b) restricted_t = + fun f -> fun x -> f x +let on : 'a 'b . ('a -> 'b) -> ('a, 'b) restricted_t = fun f -> fun x -> f x +type ('a, 'b) arrow_g = unit +type ('a, 'b) efun_g = unit +type ('a, 'b, 'f, 'g) feq_g = unit + +type ('a, 'b, 'f) is_restricted_g = unit +type ('a, 'b) restricted_g_t = unit +type ('a, 'b) op_Hat_Subtraction_Greater_Greater = unit + diff --git a/ocaml/fstar-lib/generated/FStar_GSet.ml b/ocaml/fstar-lib/generated/FStar_GSet.ml new file mode 100644 index 00000000000..27aaacec689 --- /dev/null +++ b/ocaml/fstar-lib/generated/FStar_GSet.ml @@ -0,0 +1,12 @@ +open Prims +type 'a set = unit +type ('a, 's1, 's2) equal = unit + + + + + + + +type ('a, 's1, 's2) disjoint = unit +type ('a, 's1, 's2) subset = unit diff --git a/ocaml/fstar-lib/generated/FStar_HyperStack.ml b/ocaml/fstar-lib/generated/FStar_HyperStack.ml new file mode 100644 index 00000000000..b87442d7ff3 --- /dev/null +++ b/ocaml/fstar-lib/generated/FStar_HyperStack.ml @@ -0,0 +1,7 @@ +open Prims +type 'a reference = ('a, unit) FStar_Monotonic_HyperStack.mreference +type 'a stackref = ('a, unit) FStar_Monotonic_HyperStack.mstackref +type 'a ref = ('a, unit) FStar_Monotonic_HyperStack.mref +type 'a mmstackref = ('a, unit) FStar_Monotonic_HyperStack.mmmstackref +type 'a mmref = ('a, unit) FStar_Monotonic_HyperStack.mmmref +type ('i, 'a) s_ref = (unit, 'a, unit) FStar_Monotonic_HyperStack.s_mref \ No newline at end of file diff --git a/ocaml/fstar-lib/generated/FStar_IFC.ml b/ocaml/fstar-lib/generated/FStar_IFC.ml new file mode 100644 index 00000000000..75cc7ebc776 --- /dev/null +++ b/ocaml/fstar-lib/generated/FStar_IFC.ml @@ -0,0 +1,38 @@ +open Prims +type ('a, 'f) associative = unit +type ('a, 'f) commutative = unit +type ('a, 'f) idempotent = unit +type semilattice = + | SemiLattice of unit * Obj.t * (Obj.t -> Obj.t -> Obj.t) +let (uu___is_SemiLattice : semilattice -> Prims.bool) = fun projectee -> true +let (__proj__SemiLattice__item__top : semilattice -> Obj.t) = + fun projectee -> + match projectee with | SemiLattice (carrier, top, lub) -> top +let (__proj__SemiLattice__item__lub : semilattice -> Obj.t -> Obj.t -> Obj.t) + = + fun projectee -> + match projectee with | SemiLattice (carrier, top, lub) -> lub +type sl = unit +type 'sl1 lattice_element = unit + +type ('sl1, 'l, 'b) protected = 'b +let (hide : unit -> unit -> unit -> Obj.t -> Obj.t) = + fun sl1 -> fun l -> fun b -> fun x -> x +let (return : unit -> unit -> unit -> Obj.t -> Obj.t) = + fun sl1 -> fun a -> fun l -> fun x -> hide () () () x +let map : + 'a 'b . + unit -> + unit -> + (unit, unit, 'a) protected -> + ('a -> 'b) -> (unit, unit, 'b) protected + = fun sl1 -> fun l -> fun x -> fun f -> f x +let (join : unit -> unit -> unit -> unit -> Obj.t -> Obj.t) = + fun sl1 -> fun l1 -> fun l2 -> fun a -> fun x -> x +let (op_let_Greater_Greater : + unit -> unit -> unit -> Obj.t -> unit -> unit -> (Obj.t -> Obj.t) -> Obj.t) + = + fun sl1 -> + fun l1 -> + fun a -> + fun x -> fun l2 -> fun b -> fun f -> join () () () () (map () () x f) \ No newline at end of file diff --git a/src/ocaml-output/FStar_Ident.ml b/ocaml/fstar-lib/generated/FStar_Ident.ml similarity index 100% rename from src/ocaml-output/FStar_Ident.ml rename to ocaml/fstar-lib/generated/FStar_Ident.ml diff --git a/ocaml/fstar-lib/generated/FStar_IndefiniteDescription.ml b/ocaml/fstar-lib/generated/FStar_IndefiniteDescription.ml new file mode 100644 index 00000000000..e8306abedb2 --- /dev/null +++ b/ocaml/fstar-lib/generated/FStar_IndefiniteDescription.ml @@ -0,0 +1 @@ +open Prims \ No newline at end of file diff --git a/ocaml/fstar-lib/generated/FStar_Int.ml b/ocaml/fstar-lib/generated/FStar_Int.ml new file mode 100644 index 00000000000..49f3a859391 --- /dev/null +++ b/ocaml/fstar-lib/generated/FStar_Int.ml @@ -0,0 +1,130 @@ +open Prims +let (max_int : Prims.pos -> Prims.int) = + fun n -> (Prims.pow2 (n - Prims.int_one)) - Prims.int_one +let (min_int : Prims.pos -> Prims.int) = + fun n -> - (Prims.pow2 (n - Prims.int_one)) +let (fits : Prims.int -> Prims.pos -> Prims.bool) = + fun x -> fun n -> ((min_int n) <= x) && (x <= (max_int n)) +type ('x, 'n) size = unit +type 'n int_t = Prims.int +let (op_Slash : Prims.int -> Prims.int -> Prims.int) = + fun a -> + fun b -> + if + ((a >= Prims.int_zero) && (b < Prims.int_zero)) || + ((a < Prims.int_zero) && (b >= Prims.int_zero)) + then - ((Prims.abs a) / (Prims.abs b)) + else (Prims.abs a) / (Prims.abs b) +let (op_At_Percent : Prims.int -> Prims.int -> Prims.int) = + fun v -> + fun p -> + let m = v mod p in + if m >= (op_Slash p (Prims.of_int (2))) then m - p else m +let (zero : Prims.pos -> unit int_t) = fun n -> Prims.int_zero +let (pow2_n : Prims.pos -> Prims.nat -> unit int_t) = + fun n -> fun p -> Prims.pow2 p +let (pow2_minus_one : Prims.pos -> Prims.nat -> unit int_t) = + fun n -> fun m -> (Prims.pow2 m) - Prims.int_one +let (one : Prims.pos -> unit int_t) = fun n -> Prims.int_one +let (ones : Prims.pos -> unit int_t) = fun n -> (Prims.of_int (-1)) +let (incr : Prims.pos -> unit int_t -> unit int_t) = + fun n -> fun a -> a + Prims.int_one +let (decr : Prims.pos -> unit int_t -> unit int_t) = + fun n -> fun a -> a - Prims.int_one +let (incr_underspec : Prims.pos -> unit int_t -> unit int_t) = + fun n -> + fun a -> if a < (max_int n) then a + Prims.int_one else Prims.int_zero +let (decr_underspec : Prims.pos -> unit int_t -> unit int_t) = + fun n -> + fun a -> if a > (min_int n) then a - Prims.int_one else Prims.int_zero +let (incr_mod : Prims.pos -> unit int_t -> unit int_t) = + fun n -> fun a -> (a + Prims.int_one) mod (Prims.pow2 (n - Prims.int_one)) +let (decr_mod : Prims.pos -> unit int_t -> unit int_t) = + fun n -> fun a -> (a - Prims.int_one) mod (Prims.pow2 (n - Prims.int_one)) +let (add : Prims.pos -> unit int_t -> unit int_t -> unit int_t) = + fun n -> fun a -> fun b -> a + b +let (add_underspec : Prims.pos -> unit int_t -> unit int_t -> unit int_t) = + fun n -> fun a -> fun b -> if fits (a + b) n then a + b else Prims.int_zero +let (add_mod : Prims.pos -> unit int_t -> unit int_t -> unit int_t) = + fun n -> fun a -> fun b -> op_At_Percent (a + b) (Prims.pow2 n) +let (sub : Prims.pos -> unit int_t -> unit int_t -> unit int_t) = + fun n -> fun a -> fun b -> a - b +let (sub_underspec : Prims.pos -> unit int_t -> unit int_t -> unit int_t) = + fun n -> fun a -> fun b -> if fits (a - b) n then a - b else Prims.int_zero +let (sub_mod : Prims.pos -> unit int_t -> unit int_t -> unit int_t) = + fun n -> fun a -> fun b -> op_At_Percent (a - b) (Prims.pow2 n) +let (mul : Prims.pos -> unit int_t -> unit int_t -> unit int_t) = + fun n -> fun a -> fun b -> a * b +let (mul_underspec : Prims.pos -> unit int_t -> unit int_t -> unit int_t) = + fun n -> fun a -> fun b -> if fits (a * b) n then a * b else Prims.int_zero +let (mul_mod : Prims.pos -> unit int_t -> unit int_t -> unit int_t) = + fun n -> fun a -> fun b -> op_At_Percent (a * b) (Prims.pow2 n) +let (div : Prims.pos -> unit int_t -> unit int_t -> unit int_t) = + fun n -> fun a -> fun b -> op_Slash a b +let (div_underspec : Prims.pos -> unit int_t -> unit int_t -> unit int_t) = + fun n -> + fun a -> + fun b -> if fits (op_Slash a b) n then op_Slash a b else Prims.int_zero +let (udiv : Prims.pos -> unit int_t -> unit int_t -> unit int_t) = + fun n -> fun a -> fun b -> op_Slash a b +let (mod1 : Prims.pos -> unit int_t -> unit int_t -> unit int_t) = + fun n -> fun a -> fun b -> a - ((op_Slash a b) * b) +let (eq : Prims.pos -> unit int_t -> unit int_t -> Prims.bool) = + fun n -> fun a -> fun b -> a = b +let (gt : Prims.pos -> unit int_t -> unit int_t -> Prims.bool) = + fun n -> fun a -> fun b -> a > b +let (gte : Prims.pos -> unit int_t -> unit int_t -> Prims.bool) = + fun n -> fun a -> fun b -> a >= b +let (lt : Prims.pos -> unit int_t -> unit int_t -> Prims.bool) = + fun n -> fun a -> fun b -> a < b +let (lte : Prims.pos -> unit int_t -> unit int_t -> Prims.bool) = + fun n -> fun a -> fun b -> a <= b +let (to_uint : Prims.pos -> unit int_t -> unit FStar_UInt.uint_t) = + fun n -> fun x -> if Prims.int_zero <= x then x else x + (Prims.pow2 n) +let (from_uint : Prims.pos -> unit FStar_UInt.uint_t -> unit int_t) = + fun n -> fun x -> if x <= (max_int n) then x else x - (Prims.pow2 n) +let (to_int_t : Prims.pos -> Prims.int -> unit int_t) = + fun m -> fun a -> op_At_Percent a (Prims.pow2 m) +let (to_vec : Prims.pos -> unit int_t -> unit FStar_BitVector.bv_t) = + fun n -> fun num -> FStar_UInt.to_vec n (to_uint n num) +let (from_vec : Prims.pos -> unit FStar_BitVector.bv_t -> unit int_t) = + fun n -> + fun vec -> + let x = FStar_UInt.from_vec n vec in + if (max_int n) < x then x - (Prims.pow2 n) else x +let (nth : Prims.pos -> unit int_t -> Prims.nat -> Prims.bool) = + fun n -> fun a -> fun i -> FStar_Seq_Base.index (to_vec n a) i +let (logand : Prims.pos -> unit int_t -> unit int_t -> unit int_t) = + fun n -> + fun a -> + fun b -> + from_vec n (FStar_BitVector.logand_vec n (to_vec n a) (to_vec n b)) +let (logxor : Prims.pos -> unit int_t -> unit int_t -> unit int_t) = + fun n -> + fun a -> + fun b -> + from_vec n (FStar_BitVector.logxor_vec n (to_vec n a) (to_vec n b)) +let (logor : Prims.pos -> unit int_t -> unit int_t -> unit int_t) = + fun n -> + fun a -> + fun b -> + from_vec n (FStar_BitVector.logor_vec n (to_vec n a) (to_vec n b)) +let (lognot : Prims.pos -> unit int_t -> unit int_t) = + fun n -> fun a -> from_vec n (FStar_BitVector.lognot_vec n (to_vec n a)) +let (minus : Prims.pos -> unit int_t -> unit int_t) = + fun n -> fun a -> add_mod n (lognot n a) Prims.int_one +let (shift_left : Prims.pos -> unit int_t -> Prims.nat -> unit int_t) = + fun n -> + fun a -> + fun s -> from_vec n (FStar_BitVector.shift_left_vec n (to_vec n a) s) +let (shift_right : Prims.pos -> unit int_t -> Prims.nat -> unit int_t) = + fun n -> + fun a -> + fun s -> from_vec n (FStar_BitVector.shift_right_vec n (to_vec n a) s) +let (shift_arithmetic_right : + Prims.pos -> unit int_t -> Prims.nat -> unit int_t) = + fun n -> + fun a -> + fun s -> + from_vec n + (FStar_BitVector.shift_arithmetic_right_vec n (to_vec n a) s) \ No newline at end of file diff --git a/ocaml/fstar-lib/generated/FStar_Int128.ml b/ocaml/fstar-lib/generated/FStar_Int128.ml new file mode 100644 index 00000000000..8f6fabf749a --- /dev/null +++ b/ocaml/fstar-lib/generated/FStar_Int128.ml @@ -0,0 +1,81 @@ +open Prims +let (n : Prims.int) = (Prims.of_int (128)) +type t = + | Mk of unit FStar_Int.int_t +let (uu___is_Mk : t -> Prims.bool) = fun projectee -> true +let (__proj__Mk__item__v : t -> unit FStar_Int.int_t) = + fun projectee -> match projectee with | Mk v -> v +let (v : t -> unit FStar_Int.int_t) = fun x -> __proj__Mk__item__v x +let (int_to_t : unit FStar_Int.int_t -> t) = fun x -> Mk x +let (zero : t) = int_to_t Prims.int_zero +let (one : t) = int_to_t Prims.int_one +let (add : t -> t -> t) = + fun a -> fun b -> Mk (FStar_Int.add (Prims.of_int (128)) (v a) (v b)) +let (sub : t -> t -> t) = + fun a -> fun b -> Mk (FStar_Int.sub (Prims.of_int (128)) (v a) (v b)) +let (mul : t -> t -> t) = + fun a -> fun b -> Mk (FStar_Int.mul (Prims.of_int (128)) (v a) (v b)) +let (div : t -> t -> t) = + fun a -> fun b -> Mk (FStar_Int.div (Prims.of_int (128)) (v a) (v b)) +let (rem : t -> t -> t) = + fun a -> fun b -> Mk (FStar_Int.mod1 (Prims.of_int (128)) (v a) (v b)) +let (logand : t -> t -> t) = + fun x -> fun y -> Mk (FStar_Int.logand (Prims.of_int (128)) (v x) (v y)) +let (logxor : t -> t -> t) = + fun x -> fun y -> Mk (FStar_Int.logxor (Prims.of_int (128)) (v x) (v y)) +let (logor : t -> t -> t) = + fun x -> fun y -> Mk (FStar_Int.logor (Prims.of_int (128)) (v x) (v y)) +let (lognot : t -> t) = + fun x -> Mk (FStar_Int.lognot (Prims.of_int (128)) (v x)) +let (shift_right : t -> FStar_UInt32.t -> t) = + fun a -> + fun s -> + Mk + (FStar_Int.shift_right (Prims.of_int (128)) (v a) (FStar_UInt32.v s)) +let (shift_left : t -> FStar_UInt32.t -> t) = + fun a -> + fun s -> + Mk (FStar_Int.shift_left (Prims.of_int (128)) (v a) (FStar_UInt32.v s)) +let (shift_arithmetic_right : t -> FStar_UInt32.t -> t) = + fun a -> + fun s -> + Mk + (FStar_Int.shift_arithmetic_right (Prims.of_int (128)) (v a) + (FStar_UInt32.v s)) +let (eq : t -> t -> Prims.bool) = + fun a -> fun b -> FStar_Int.eq (Prims.of_int (128)) (v a) (v b) +let (gt : t -> t -> Prims.bool) = + fun a -> fun b -> FStar_Int.gt (Prims.of_int (128)) (v a) (v b) +let (gte : t -> t -> Prims.bool) = + fun a -> fun b -> FStar_Int.gte (Prims.of_int (128)) (v a) (v b) +let (lt : t -> t -> Prims.bool) = + fun a -> fun b -> FStar_Int.lt (Prims.of_int (128)) (v a) (v b) +let (lte : t -> t -> Prims.bool) = + fun a -> fun b -> FStar_Int.lte (Prims.of_int (128)) (v a) (v b) +let (op_Plus_Hat : t -> t -> t) = add +let (op_Subtraction_Hat : t -> t -> t) = sub +let (op_Star_Hat : t -> t -> t) = mul +let (op_Slash_Hat : t -> t -> t) = div +let (op_Percent_Hat : t -> t -> t) = rem +let (op_Hat_Hat : t -> t -> t) = logxor +let (op_Amp_Hat : t -> t -> t) = logand +let (op_Bar_Hat : t -> t -> t) = logor +let (op_Less_Less_Hat : t -> FStar_UInt32.t -> t) = shift_left +let (op_Greater_Greater_Hat : t -> FStar_UInt32.t -> t) = shift_right +let (op_Greater_Greater_Greater_Hat : t -> FStar_UInt32.t -> t) = + shift_arithmetic_right +let (op_Equals_Hat : t -> t -> Prims.bool) = eq +let (op_Greater_Hat : t -> t -> Prims.bool) = gt +let (op_Greater_Equals_Hat : t -> t -> Prims.bool) = gte +let (op_Less_Hat : t -> t -> Prims.bool) = lt +let (op_Less_Equals_Hat : t -> t -> Prims.bool) = lte +let (ct_abs : t -> t) = + fun a -> + let mask = + shift_arithmetic_right a (FStar_UInt32.uint_to_t (Prims.of_int (127))) in + sub (logxor a mask) mask +let (to_string : t -> Prims.string) = fun uu___ -> Prims.admit () +let (of_string : Prims.string -> t) = fun uu___ -> Prims.admit () +let (__int_to_t : Prims.int -> t) = fun x -> int_to_t x +let (mul_wide : FStar_Int64.t -> FStar_Int64.t -> t) = + fun a -> fun b -> Mk ((FStar_Int64.v a) * (FStar_Int64.v b)) \ No newline at end of file diff --git a/ocaml/fstar-lib/generated/FStar_Int16.ml b/ocaml/fstar-lib/generated/FStar_Int16.ml new file mode 100644 index 00000000000..2d50e807f19 --- /dev/null +++ b/ocaml/fstar-lib/generated/FStar_Int16.ml @@ -0,0 +1,105 @@ +(* !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! *) +(* THIS IS AN AUTOGENERATED FILE! See ulib/ml/Makefile *) +(* !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! *) + +(* This file is meant to be concatenated to FStar_Ints.ml.body *) +module M = Stdint.Int16 +type int16 = M.t +type t = M.t +let n = Prims.of_int 16 + +let int_to_t x = M.of_string (Z.to_string x) +let __int_to_t = int_to_t +(* This .ml.body file is concatenated to every .ml.prefix file in this + * directory (ulib/ml/) to generate the OCaml realizations for machine + * integers, as they all pretty much share their definitions and are + * based on Stdint. *) + +let v (x:t) : Prims.int = Prims.parse_int (M.to_string x) + +let zero = M.zero +let one = M.one +let ones = M.pred M.zero + +(* Reexport add, plus aliases *) +let add = M.add +let add_underspec = M.add +let add_mod = M.add + +(* Reexport sub, plus aliases *) +let sub = M.sub +let sub_underspec = M.sub +let sub_mod = M.sub + +(* Reexport mul, plus aliases *) +let mul = M.mul +let mul_underspec = M.mul +let mul_mod = M.mul + +(* Conversions to Zarith's int *) +let to_int (x:t) : Z.t = Z.of_string (M.to_string x) +let of_int (x:Z.t) : t = M.of_string (Z.to_string x) + +(* Conversion to native ints; these are potentially unsafe and not part + * of the interface: they are meant to be called only from OCaml code + * that is doing the right thing *) +let of_native_int (x:int) : t = M.of_int x +let to_native_int (x:t) : int = M.to_int x + +(* Just reexport these *) +let div = M.div +let rem = M.rem +let logand = M.logand +let logxor = M.logxor +let logor = M.logor +let lognot = M.lognot +let to_string = M.to_string +let of_string = M.of_string + +let to_string_hex = M.to_string_hex + +let to_string_hex_pad i = + let s0 = M.to_string_hex i in + let len = (String.length s0 - 2) in + let s1 = String.sub s0 2 len in (* Remove leading "0x" *) + let zeroes = String.make ((Z.to_int n / 4) - len) '0' in + zeroes ^ s1 + +(* The shifts take a uint32 argument, so we need to convert *) +let shift_right n i = M.shift_right n (Stdint.Uint32.to_int i) +let shift_left n i = M.shift_left n (Stdint.Uint32.to_int i) +let shift_arithmetic_right = shift_right + +(* Comparison operators *) +let eq (a:t) (b:t) : bool = a = b +let gt (a:t) (b:t) : bool = a > b +let gte (a:t) (b:t) : bool = a >= b +let lt (a:t) (b:t) : bool = a < b +let lte (a:t) (b:t) : bool = a <= b + +(* NOT Constant time operators *) +let eq_mask (a:t) (b:t) : t = if a = b then ones else zero +let gte_mask (a:t) (b:t) : t = if a >= b then ones else zero + +(* Infix notations *) +let op_Plus_Hat = add +let op_Plus_Question_Hat = add_underspec +let op_Plus_Percent_Hat = add_mod +let op_Subtraction_Hat = sub +let op_Subtraction_Question_Hat = sub_underspec +let op_Subtraction_Percent_Hat = sub_mod +let op_Star_Hat = mul +let op_Star_Question_Hat = mul_underspec +let op_Star_Percent_Hat = mul_mod +let op_Slash_Hat = div +let op_Percent_Hat = rem +let op_Hat_Hat = logxor +let op_Amp_Hat = logand +let op_Bar_Hat = logor +let op_Less_Less_Hat = shift_left +let op_Greater_Greater_Hat = shift_right +let op_Equals_Hat = eq +let op_Greater_Hat = gt +let op_Greater_Equals_Hat = gte +let op_Less_Hat = lt +let op_Less_Equals_Hat = lte diff --git a/ocaml/fstar-lib/generated/FStar_Int32.ml b/ocaml/fstar-lib/generated/FStar_Int32.ml new file mode 100644 index 00000000000..07bfb0ee7ff --- /dev/null +++ b/ocaml/fstar-lib/generated/FStar_Int32.ml @@ -0,0 +1,104 @@ +(* !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! *) +(* THIS IS AN AUTOGENERATED FILE! See ulib/ml/Makefile *) +(* !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! *) + +module M = Stdint.Int32 +type int32 = M.t +type t = M.t +let n = Prims.of_int 32 + +let int_to_t x = M.of_string (Z.to_string x) +let __int_to_t = int_to_t +(* This .ml.body file is concatenated to every .ml.prefix file in this + * directory (ulib/ml/) to generate the OCaml realizations for machine + * integers, as they all pretty much share their definitions and are + * based on Stdint. *) + +let v (x:t) : Prims.int = Prims.parse_int (M.to_string x) + +let zero = M.zero +let one = M.one +let ones = M.pred M.zero + +(* Reexport add, plus aliases *) +let add = M.add +let add_underspec = M.add +let add_mod = M.add + +(* Reexport sub, plus aliases *) +let sub = M.sub +let sub_underspec = M.sub +let sub_mod = M.sub + +(* Reexport mul, plus aliases *) +let mul = M.mul +let mul_underspec = M.mul +let mul_mod = M.mul + +(* Conversions to Zarith's int *) +let to_int (x:t) : Z.t = Z.of_string (M.to_string x) +let of_int (x:Z.t) : t = M.of_string (Z.to_string x) + +(* Conversion to native ints; these are potentially unsafe and not part + * of the interface: they are meant to be called only from OCaml code + * that is doing the right thing *) +let of_native_int (x:int) : t = M.of_int x +let to_native_int (x:t) : int = M.to_int x + +(* Just reexport these *) +let div = M.div +let rem = M.rem +let logand = M.logand +let logxor = M.logxor +let logor = M.logor +let lognot = M.lognot +let to_string = M.to_string +let of_string = M.of_string + +let to_string_hex = M.to_string_hex + +let to_string_hex_pad i = + let s0 = M.to_string_hex i in + let len = (String.length s0 - 2) in + let s1 = String.sub s0 2 len in (* Remove leading "0x" *) + let zeroes = String.make ((Z.to_int n / 4) - len) '0' in + zeroes ^ s1 + +(* The shifts take a uint32 argument, so we need to convert *) +let shift_right n i = M.shift_right n (Stdint.Uint32.to_int i) +let shift_left n i = M.shift_left n (Stdint.Uint32.to_int i) +let shift_arithmetic_right = shift_right + +(* Comparison operators *) +let eq (a:t) (b:t) : bool = a = b +let gt (a:t) (b:t) : bool = a > b +let gte (a:t) (b:t) : bool = a >= b +let lt (a:t) (b:t) : bool = a < b +let lte (a:t) (b:t) : bool = a <= b + +(* NOT Constant time operators *) +let eq_mask (a:t) (b:t) : t = if a = b then ones else zero +let gte_mask (a:t) (b:t) : t = if a >= b then ones else zero + +(* Infix notations *) +let op_Plus_Hat = add +let op_Plus_Question_Hat = add_underspec +let op_Plus_Percent_Hat = add_mod +let op_Subtraction_Hat = sub +let op_Subtraction_Question_Hat = sub_underspec +let op_Subtraction_Percent_Hat = sub_mod +let op_Star_Hat = mul +let op_Star_Question_Hat = mul_underspec +let op_Star_Percent_Hat = mul_mod +let op_Slash_Hat = div +let op_Percent_Hat = rem +let op_Hat_Hat = logxor +let op_Amp_Hat = logand +let op_Bar_Hat = logor +let op_Less_Less_Hat = shift_left +let op_Greater_Greater_Hat = shift_right +let op_Equals_Hat = eq +let op_Greater_Hat = gt +let op_Greater_Equals_Hat = gte +let op_Less_Hat = lt +let op_Less_Equals_Hat = lte diff --git a/ocaml/fstar-lib/generated/FStar_Int64.ml b/ocaml/fstar-lib/generated/FStar_Int64.ml new file mode 100644 index 00000000000..33d2e008278 --- /dev/null +++ b/ocaml/fstar-lib/generated/FStar_Int64.ml @@ -0,0 +1,105 @@ +(* !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! *) +(* THIS IS AN AUTOGENERATED FILE! See ulib/ml/Makefile *) +(* !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! *) + +(* This file is meant to be concatenated to FStar_Ints.ml.body *) +module M = Stdint.Int64 +type int64 = M.t +type t = M.t +let n = Prims.of_int 64 + +let int_to_t x = M.of_string (Z.to_string x) +let __int_to_t = int_to_t +(* This .ml.body file is concatenated to every .ml.prefix file in this + * directory (ulib/ml/) to generate the OCaml realizations for machine + * integers, as they all pretty much share their definitions and are + * based on Stdint. *) + +let v (x:t) : Prims.int = Prims.parse_int (M.to_string x) + +let zero = M.zero +let one = M.one +let ones = M.pred M.zero + +(* Reexport add, plus aliases *) +let add = M.add +let add_underspec = M.add +let add_mod = M.add + +(* Reexport sub, plus aliases *) +let sub = M.sub +let sub_underspec = M.sub +let sub_mod = M.sub + +(* Reexport mul, plus aliases *) +let mul = M.mul +let mul_underspec = M.mul +let mul_mod = M.mul + +(* Conversions to Zarith's int *) +let to_int (x:t) : Z.t = Z.of_string (M.to_string x) +let of_int (x:Z.t) : t = M.of_string (Z.to_string x) + +(* Conversion to native ints; these are potentially unsafe and not part + * of the interface: they are meant to be called only from OCaml code + * that is doing the right thing *) +let of_native_int (x:int) : t = M.of_int x +let to_native_int (x:t) : int = M.to_int x + +(* Just reexport these *) +let div = M.div +let rem = M.rem +let logand = M.logand +let logxor = M.logxor +let logor = M.logor +let lognot = M.lognot +let to_string = M.to_string +let of_string = M.of_string + +let to_string_hex = M.to_string_hex + +let to_string_hex_pad i = + let s0 = M.to_string_hex i in + let len = (String.length s0 - 2) in + let s1 = String.sub s0 2 len in (* Remove leading "0x" *) + let zeroes = String.make ((Z.to_int n / 4) - len) '0' in + zeroes ^ s1 + +(* The shifts take a uint32 argument, so we need to convert *) +let shift_right n i = M.shift_right n (Stdint.Uint32.to_int i) +let shift_left n i = M.shift_left n (Stdint.Uint32.to_int i) +let shift_arithmetic_right = shift_right + +(* Comparison operators *) +let eq (a:t) (b:t) : bool = a = b +let gt (a:t) (b:t) : bool = a > b +let gte (a:t) (b:t) : bool = a >= b +let lt (a:t) (b:t) : bool = a < b +let lte (a:t) (b:t) : bool = a <= b + +(* NOT Constant time operators *) +let eq_mask (a:t) (b:t) : t = if a = b then ones else zero +let gte_mask (a:t) (b:t) : t = if a >= b then ones else zero + +(* Infix notations *) +let op_Plus_Hat = add +let op_Plus_Question_Hat = add_underspec +let op_Plus_Percent_Hat = add_mod +let op_Subtraction_Hat = sub +let op_Subtraction_Question_Hat = sub_underspec +let op_Subtraction_Percent_Hat = sub_mod +let op_Star_Hat = mul +let op_Star_Question_Hat = mul_underspec +let op_Star_Percent_Hat = mul_mod +let op_Slash_Hat = div +let op_Percent_Hat = rem +let op_Hat_Hat = logxor +let op_Amp_Hat = logand +let op_Bar_Hat = logor +let op_Less_Less_Hat = shift_left +let op_Greater_Greater_Hat = shift_right +let op_Equals_Hat = eq +let op_Greater_Hat = gt +let op_Greater_Equals_Hat = gte +let op_Less_Hat = lt +let op_Less_Equals_Hat = lte diff --git a/ocaml/fstar-lib/generated/FStar_Int8.ml b/ocaml/fstar-lib/generated/FStar_Int8.ml new file mode 100644 index 00000000000..5b0ca3d51fa --- /dev/null +++ b/ocaml/fstar-lib/generated/FStar_Int8.ml @@ -0,0 +1,105 @@ +(* !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! *) +(* THIS IS AN AUTOGENERATED FILE! See ulib/ml/Makefile *) +(* !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! *) + +(* This file is meant to be concatenated to FStar_Ints.ml.body *) +module M = Stdint.Int8 +type int8 = M.t +type t = M.t +let n = Prims.of_int 8 + +let int_to_t x = M.of_string (Z.to_string x) +let __int_to_t = int_to_t +(* This .ml.body file is concatenated to every .ml.prefix file in this + * directory (ulib/ml/) to generate the OCaml realizations for machine + * integers, as they all pretty much share their definitions and are + * based on Stdint. *) + +let v (x:t) : Prims.int = Prims.parse_int (M.to_string x) + +let zero = M.zero +let one = M.one +let ones = M.pred M.zero + +(* Reexport add, plus aliases *) +let add = M.add +let add_underspec = M.add +let add_mod = M.add + +(* Reexport sub, plus aliases *) +let sub = M.sub +let sub_underspec = M.sub +let sub_mod = M.sub + +(* Reexport mul, plus aliases *) +let mul = M.mul +let mul_underspec = M.mul +let mul_mod = M.mul + +(* Conversions to Zarith's int *) +let to_int (x:t) : Z.t = Z.of_string (M.to_string x) +let of_int (x:Z.t) : t = M.of_string (Z.to_string x) + +(* Conversion to native ints; these are potentially unsafe and not part + * of the interface: they are meant to be called only from OCaml code + * that is doing the right thing *) +let of_native_int (x:int) : t = M.of_int x +let to_native_int (x:t) : int = M.to_int x + +(* Just reexport these *) +let div = M.div +let rem = M.rem +let logand = M.logand +let logxor = M.logxor +let logor = M.logor +let lognot = M.lognot +let to_string = M.to_string +let of_string = M.of_string + +let to_string_hex = M.to_string_hex + +let to_string_hex_pad i = + let s0 = M.to_string_hex i in + let len = (String.length s0 - 2) in + let s1 = String.sub s0 2 len in (* Remove leading "0x" *) + let zeroes = String.make ((Z.to_int n / 4) - len) '0' in + zeroes ^ s1 + +(* The shifts take a uint32 argument, so we need to convert *) +let shift_right n i = M.shift_right n (Stdint.Uint32.to_int i) +let shift_left n i = M.shift_left n (Stdint.Uint32.to_int i) +let shift_arithmetic_right = shift_right + +(* Comparison operators *) +let eq (a:t) (b:t) : bool = a = b +let gt (a:t) (b:t) : bool = a > b +let gte (a:t) (b:t) : bool = a >= b +let lt (a:t) (b:t) : bool = a < b +let lte (a:t) (b:t) : bool = a <= b + +(* NOT Constant time operators *) +let eq_mask (a:t) (b:t) : t = if a = b then ones else zero +let gte_mask (a:t) (b:t) : t = if a >= b then ones else zero + +(* Infix notations *) +let op_Plus_Hat = add +let op_Plus_Question_Hat = add_underspec +let op_Plus_Percent_Hat = add_mod +let op_Subtraction_Hat = sub +let op_Subtraction_Question_Hat = sub_underspec +let op_Subtraction_Percent_Hat = sub_mod +let op_Star_Hat = mul +let op_Star_Question_Hat = mul_underspec +let op_Star_Percent_Hat = mul_mod +let op_Slash_Hat = div +let op_Percent_Hat = rem +let op_Hat_Hat = logxor +let op_Amp_Hat = logand +let op_Bar_Hat = logor +let op_Less_Less_Hat = shift_left +let op_Greater_Greater_Hat = shift_right +let op_Equals_Hat = eq +let op_Greater_Hat = gt +let op_Greater_Equals_Hat = gte +let op_Less_Hat = lt +let op_Less_Equals_Hat = lte diff --git a/ocaml/fstar-lib/generated/FStar_Int_Cast.ml b/ocaml/fstar-lib/generated/FStar_Int_Cast.ml new file mode 100644 index 00000000000..9d6a9fe0212 --- /dev/null +++ b/ocaml/fstar-lib/generated/FStar_Int_Cast.ml @@ -0,0 +1,197 @@ +open Prims +let (op_At_Percent : Prims.int -> Prims.int -> Prims.int) = + FStar_Int.op_At_Percent +let (uint8_to_uint64 : FStar_UInt8.t -> FStar_UInt64.t) = + fun a -> FStar_UInt64.uint_to_t (FStar_UInt8.v a) +let (uint8_to_uint32 : FStar_UInt8.t -> FStar_UInt32.t) = + fun x -> FStar_UInt32.uint_to_t (FStar_UInt8.v x) +let (uint8_to_uint16 : FStar_UInt8.t -> FStar_UInt16.t) = + fun x -> FStar_UInt16.uint_to_t (FStar_UInt8.v x) +let (uint16_to_uint64 : FStar_UInt16.t -> FStar_UInt64.t) = + fun x -> FStar_UInt64.uint_to_t (FStar_UInt16.v x) +let (uint16_to_uint32 : FStar_UInt16.t -> FStar_UInt32.t) = + fun x -> FStar_UInt32.uint_to_t (FStar_UInt16.v x) +let (uint16_to_uint8 : FStar_UInt16.t -> FStar_UInt8.t) = + fun x -> + FStar_UInt8.uint_to_t + ((FStar_UInt16.v x) mod (Prims.pow2 (Prims.of_int (8)))) +let (uint32_to_uint64 : FStar_UInt32.t -> FStar_UInt64.t) = + fun x -> FStar_UInt64.uint_to_t (FStar_UInt32.v x) +let (uint32_to_uint16 : FStar_UInt32.t -> FStar_UInt16.t) = + fun x -> + FStar_UInt16.uint_to_t + ((FStar_UInt32.v x) mod (Prims.pow2 (Prims.of_int (16)))) +let (uint32_to_uint8 : FStar_UInt32.t -> FStar_UInt8.t) = + fun x -> + FStar_UInt8.uint_to_t + ((FStar_UInt32.v x) mod (Prims.pow2 (Prims.of_int (8)))) +let (uint64_to_uint32 : FStar_UInt64.t -> FStar_UInt32.t) = + fun x -> + FStar_UInt32.uint_to_t + ((FStar_UInt64.v x) mod (Prims.pow2 (Prims.of_int (32)))) +let (uint64_to_uint16 : FStar_UInt64.t -> FStar_UInt16.t) = + fun x -> + FStar_UInt16.uint_to_t + ((FStar_UInt64.v x) mod (Prims.pow2 (Prims.of_int (16)))) +let (uint64_to_uint8 : FStar_UInt64.t -> FStar_UInt8.t) = + fun x -> + FStar_UInt8.uint_to_t + ((FStar_UInt64.v x) mod (Prims.pow2 (Prims.of_int (8)))) +let (int8_to_int64 : FStar_Int8.t -> FStar_Int64.t) = + fun x -> FStar_Int64.int_to_t (FStar_Int8.v x) +let (int8_to_int32 : FStar_Int8.t -> FStar_Int32.t) = + fun x -> FStar_Int32.int_to_t (FStar_Int8.v x) +let (int8_to_int16 : FStar_Int8.t -> FStar_Int16.t) = + fun x -> FStar_Int16.int_to_t (FStar_Int8.v x) +let (int16_to_int64 : FStar_Int16.t -> FStar_Int64.t) = + fun x -> + FStar_Int64.int_to_t + (op_At_Percent (FStar_Int16.v x) (Prims.pow2 (Prims.of_int (64)))) +let (int16_to_int32 : FStar_Int16.t -> FStar_Int32.t) = + fun x -> + FStar_Int32.int_to_t + (op_At_Percent (FStar_Int16.v x) (Prims.pow2 (Prims.of_int (32)))) +let (int16_to_int8 : FStar_Int16.t -> FStar_Int8.t) = + fun x -> + FStar_Int8.int_to_t + (op_At_Percent (FStar_Int16.v x) (Prims.pow2 (Prims.of_int (8)))) +let (int32_to_int64 : FStar_Int32.t -> FStar_Int64.t) = + fun x -> + FStar_Int64.int_to_t + (op_At_Percent (FStar_Int32.v x) (Prims.pow2 (Prims.of_int (64)))) +let (int32_to_int16 : FStar_Int32.t -> FStar_Int16.t) = + fun x -> + FStar_Int16.int_to_t + (op_At_Percent (FStar_Int32.v x) (Prims.pow2 (Prims.of_int (16)))) +let (int32_to_int8 : FStar_Int32.t -> FStar_Int8.t) = + fun x -> + FStar_Int8.int_to_t + (op_At_Percent (FStar_Int32.v x) (Prims.pow2 (Prims.of_int (8)))) +let (int64_to_int32 : FStar_Int64.t -> FStar_Int32.t) = + fun x -> + FStar_Int32.int_to_t + (op_At_Percent (FStar_Int64.v x) (Prims.pow2 (Prims.of_int (32)))) +let (int64_to_int16 : FStar_Int64.t -> FStar_Int16.t) = + fun x -> + FStar_Int16.int_to_t + (op_At_Percent (FStar_Int64.v x) (Prims.pow2 (Prims.of_int (16)))) +let (int64_to_int8 : FStar_Int64.t -> FStar_Int8.t) = + fun x -> + FStar_Int8.int_to_t + (op_At_Percent (FStar_Int64.v x) (Prims.pow2 (Prims.of_int (8)))) +let (uint8_to_int64 : FStar_UInt8.t -> FStar_Int64.t) = + fun x -> FStar_Int64.int_to_t (FStar_UInt8.v x) +let (uint8_to_int32 : FStar_UInt8.t -> FStar_Int32.t) = + fun x -> FStar_Int32.int_to_t (FStar_UInt8.v x) +let (uint8_to_int16 : FStar_UInt8.t -> FStar_Int16.t) = + fun x -> FStar_Int16.int_to_t (FStar_UInt8.v x) +let (uint8_to_int8 : FStar_UInt8.t -> FStar_Int8.t) = + fun x -> + FStar_Int8.int_to_t + (op_At_Percent (FStar_UInt8.v x) (Prims.pow2 (Prims.of_int (8)))) +let (uint16_to_int64 : FStar_UInt16.t -> FStar_Int64.t) = + fun x -> FStar_Int64.int_to_t (FStar_UInt16.v x) +let (uint16_to_int32 : FStar_UInt16.t -> FStar_Int32.t) = + fun x -> FStar_Int32.int_to_t (FStar_UInt16.v x) +let (uint16_to_int16 : FStar_UInt16.t -> FStar_Int16.t) = + fun x -> + FStar_Int16.int_to_t + (op_At_Percent (FStar_UInt16.v x) (Prims.pow2 (Prims.of_int (16)))) +let (uint16_to_int8 : FStar_UInt16.t -> FStar_Int8.t) = + fun x -> + FStar_Int8.int_to_t + (op_At_Percent (FStar_UInt16.v x) (Prims.pow2 (Prims.of_int (8)))) +let (uint32_to_int64 : FStar_UInt32.t -> FStar_Int64.t) = + fun x -> FStar_Int64.int_to_t (FStar_UInt32.v x) +let (uint32_to_int32 : FStar_UInt32.t -> FStar_Int32.t) = + fun x -> + FStar_Int32.int_to_t + (op_At_Percent (FStar_UInt32.v x) (Prims.pow2 (Prims.of_int (32)))) +let (uint32_to_int16 : FStar_UInt32.t -> FStar_Int16.t) = + fun x -> + FStar_Int16.int_to_t + (op_At_Percent (FStar_UInt32.v x) (Prims.pow2 (Prims.of_int (16)))) +let (uint32_to_int8 : FStar_UInt32.t -> FStar_Int8.t) = + fun x -> + FStar_Int8.int_to_t + (op_At_Percent (FStar_UInt32.v x) (Prims.pow2 (Prims.of_int (8)))) +let (uint64_to_int64 : FStar_UInt64.t -> FStar_Int64.t) = + fun x -> + FStar_Int64.int_to_t + (op_At_Percent (FStar_UInt64.v x) (Prims.pow2 (Prims.of_int (64)))) +let (uint64_to_int32 : FStar_UInt64.t -> FStar_Int32.t) = + fun x -> + FStar_Int32.int_to_t + (op_At_Percent (FStar_UInt64.v x) (Prims.pow2 (Prims.of_int (32)))) +let (uint64_to_int16 : FStar_UInt64.t -> FStar_Int16.t) = + fun x -> + FStar_Int16.int_to_t + (op_At_Percent (FStar_UInt64.v x) (Prims.pow2 (Prims.of_int (16)))) +let (uint64_to_int8 : FStar_UInt64.t -> FStar_Int8.t) = + fun x -> + FStar_Int8.int_to_t + (op_At_Percent (FStar_UInt64.v x) (Prims.pow2 (Prims.of_int (8)))) +let (int8_to_uint64 : FStar_Int8.t -> FStar_UInt64.t) = + fun x -> + FStar_UInt64.uint_to_t + ((FStar_Int8.v x) mod (Prims.pow2 (Prims.of_int (64)))) +let (int8_to_uint32 : FStar_Int8.t -> FStar_UInt32.t) = + fun x -> + FStar_UInt32.uint_to_t + ((FStar_Int8.v x) mod (Prims.pow2 (Prims.of_int (32)))) +let (int8_to_uint16 : FStar_Int8.t -> FStar_UInt16.t) = + fun x -> + FStar_UInt16.uint_to_t + ((FStar_Int8.v x) mod (Prims.pow2 (Prims.of_int (16)))) +let (int8_to_uint8 : FStar_Int8.t -> FStar_UInt8.t) = + fun x -> + FStar_UInt8.uint_to_t + ((FStar_Int8.v x) mod (Prims.pow2 (Prims.of_int (8)))) +let (int16_to_uint64 : FStar_Int16.t -> FStar_UInt64.t) = + fun x -> + FStar_UInt64.uint_to_t + ((FStar_Int16.v x) mod (Prims.pow2 (Prims.of_int (64)))) +let (int16_to_uint32 : FStar_Int16.t -> FStar_UInt32.t) = + fun x -> + FStar_UInt32.uint_to_t + ((FStar_Int16.v x) mod (Prims.pow2 (Prims.of_int (32)))) +let (int16_to_uint16 : FStar_Int16.t -> FStar_UInt16.t) = + fun x -> + FStar_UInt16.uint_to_t + ((FStar_Int16.v x) mod (Prims.pow2 (Prims.of_int (16)))) +let (int16_to_uint8 : FStar_Int16.t -> FStar_UInt8.t) = + fun x -> + FStar_UInt8.uint_to_t + ((FStar_Int16.v x) mod (Prims.pow2 (Prims.of_int (8)))) +let (int32_to_uint64 : FStar_Int32.t -> FStar_UInt64.t) = + fun x -> + FStar_UInt64.uint_to_t + ((FStar_Int32.v x) mod (Prims.pow2 (Prims.of_int (64)))) +let (int32_to_uint32 : FStar_Int32.t -> FStar_UInt32.t) = + fun x -> + FStar_UInt32.uint_to_t + ((FStar_Int32.v x) mod (Prims.pow2 (Prims.of_int (32)))) +let (int32_to_uint16 : FStar_Int32.t -> FStar_UInt16.t) = + fun x -> + FStar_UInt16.uint_to_t + ((FStar_Int32.v x) mod (Prims.pow2 (Prims.of_int (16)))) +let (int32_to_uint8 : FStar_Int32.t -> FStar_UInt8.t) = + fun x -> + FStar_UInt8.uint_to_t + ((FStar_Int32.v x) mod (Prims.pow2 (Prims.of_int (8)))) +let (int64_to_uint64 : FStar_Int64.t -> FStar_UInt64.t) = + fun x -> + FStar_UInt64.uint_to_t + ((FStar_Int64.v x) mod (Prims.pow2 (Prims.of_int (64)))) +let (int64_to_uint32 : FStar_Int64.t -> FStar_UInt32.t) = + fun x -> + FStar_UInt32.uint_to_t + ((FStar_Int64.v x) mod (Prims.pow2 (Prims.of_int (32)))) +let (int64_to_uint16 : FStar_Int64.t -> FStar_UInt16.t) = + fun x -> + FStar_UInt16.uint_to_t + ((FStar_Int64.v x) mod (Prims.pow2 (Prims.of_int (16)))) +let (int64_to_uint8 : FStar_Int64.t -> FStar_UInt8.t) = + fun x -> + FStar_UInt8.uint_to_t + ((FStar_Int64.v x) mod (Prims.pow2 (Prims.of_int (8)))) \ No newline at end of file diff --git a/ocaml/fstar-lib/generated/FStar_Int_Cast_Full.ml b/ocaml/fstar-lib/generated/FStar_Int_Cast_Full.ml new file mode 100644 index 00000000000..e8306abedb2 --- /dev/null +++ b/ocaml/fstar-lib/generated/FStar_Int_Cast_Full.ml @@ -0,0 +1 @@ +open Prims \ No newline at end of file diff --git a/ocaml/fstar-lib/generated/FStar_IntegerIntervals.ml b/ocaml/fstar-lib/generated/FStar_IntegerIntervals.ml new file mode 100644 index 00000000000..766fefec965 --- /dev/null +++ b/ocaml/fstar-lib/generated/FStar_IntegerIntervals.ml @@ -0,0 +1,25 @@ +open Prims +type 'k less_than = Prims.int +type 'k greater_than = Prims.int +type 'x not_less_than = unit greater_than +type 'x not_greater_than = unit less_than +let (coerce_to_less_than : + Prims.int -> unit not_greater_than -> unit less_than) = fun n -> fun x -> x +let (coerce_to_not_less_than : + Prims.int -> unit greater_than -> unit not_less_than) = fun n -> fun x -> x +let (interval_condition : Prims.int -> Prims.int -> Prims.int -> Prims.bool) + = fun x -> fun y -> fun t -> (x <= t) && (t < y) +type ('x, 'y) interval_type = unit +type ('x, 'y) interval = Prims.int +type ('x, 'y) efrom_eto = (unit, unit) interval +type ('x, 'y) efrom_ito = (unit, unit) interval +type ('x, 'y) ifrom_eto = (unit, unit) interval +type ('x, 'y) ifrom_ito = (unit, unit) interval +type 'k under = (unit, unit) interval +let (interval_size : Prims.int -> Prims.int -> unit -> Prims.nat) = + fun x -> fun y -> fun interval1 -> if y >= x then y - x else Prims.int_zero +type ('x, 'y, 'interval1) counter_for = unit under +let (closed_interval_size : Prims.int -> Prims.int -> Prims.nat) = + fun x -> fun y -> interval_size x (y + Prims.int_one) () +let (indices_seq : Prims.nat -> unit under FStar_Seq_Base.seq) = + fun n -> FStar_Seq_Base.init n (fun x -> x) \ No newline at end of file diff --git a/ocaml/fstar-lib/generated/FStar_Integers.ml b/ocaml/fstar-lib/generated/FStar_Integers.ml new file mode 100644 index 00000000000..988173e5a68 --- /dev/null +++ b/ocaml/fstar-lib/generated/FStar_Integers.ml @@ -0,0 +1,75 @@ +open Prims +let norm : 'a . 'a -> 'a = fun x -> x +type width = + | W8 + | W16 + | W32 + | W64 + | W128 + | Winfinite +let (uu___is_W8 : width -> Prims.bool) = + fun projectee -> match projectee with | W8 -> true | uu___ -> false +let (uu___is_W16 : width -> Prims.bool) = + fun projectee -> match projectee with | W16 -> true | uu___ -> false +let (uu___is_W32 : width -> Prims.bool) = + fun projectee -> match projectee with | W32 -> true | uu___ -> false +let (uu___is_W64 : width -> Prims.bool) = + fun projectee -> match projectee with | W64 -> true | uu___ -> false +let (uu___is_W128 : width -> Prims.bool) = + fun projectee -> match projectee with | W128 -> true | uu___ -> false +let (uu___is_Winfinite : width -> Prims.bool) = + fun projectee -> match projectee with | Winfinite -> true | uu___ -> false +let (nat_of_width : width -> Prims.int FStar_Pervasives_Native.option) = + fun uu___ -> + match uu___ with + | W8 -> FStar_Pervasives_Native.Some (Prims.of_int (8)) + | W16 -> FStar_Pervasives_Native.Some (Prims.of_int (16)) + | W32 -> FStar_Pervasives_Native.Some (Prims.of_int (32)) + | W64 -> FStar_Pervasives_Native.Some (Prims.of_int (64)) + | W128 -> FStar_Pervasives_Native.Some (Prims.of_int (128)) + | Winfinite -> FStar_Pervasives_Native.None +type fixed_width = width +let (nat_of_fixed_width : fixed_width -> Prims.int) = + fun w -> match nat_of_width w with | FStar_Pervasives_Native.Some v -> v +type signed_width = + | Signed of width + | Unsigned of fixed_width +let (uu___is_Signed : signed_width -> Prims.bool) = + fun projectee -> match projectee with | Signed _0 -> true | uu___ -> false +let (__proj__Signed__item___0 : signed_width -> width) = + fun projectee -> match projectee with | Signed _0 -> _0 +let (uu___is_Unsigned : signed_width -> Prims.bool) = + fun projectee -> + match projectee with | Unsigned _0 -> true | uu___ -> false +let (__proj__Unsigned__item___0 : signed_width -> fixed_width) = + fun projectee -> match projectee with | Unsigned _0 -> _0 +let (width_of_sw : signed_width -> width) = + fun uu___ -> match uu___ with | Signed w -> w | Unsigned w -> w +type ('sw, 'x) within_bounds = Obj.t +type uint_8 = FStar_UInt8.t +type uint_16 = FStar_UInt16.t +type uint_32 = FStar_UInt32.t +type uint_64 = FStar_UInt64.t +type int = Prims.int +type int_8 = FStar_Int8.t +type int_16 = FStar_Int16.t +type int_32 = FStar_Int32.t +type int_64 = FStar_Int64.t +type int_128 = FStar_Int128.t +type ('sw, 'op, 'x, 'y) ok = Obj.t +type nat = Prims.int +type pos = Prims.int +let (f_int : Prims.int -> Prims.int -> Prims.int) = fun x -> fun y -> x + y +let (f_nat : Prims.int -> Prims.int -> Prims.int) = fun x -> fun y -> x + y +let (f_nat_int_pos : Prims.int -> Prims.int -> Prims.int -> Prims.int) = + fun x -> fun y -> fun z -> (x + y) + z +let (f_uint_8 : FStar_UInt8.t -> FStar_UInt8.t -> FStar_UInt8.t) = + fun x -> fun y -> FStar_UInt8.add x y +let (f_int_16 : FStar_Int16.t -> FStar_Int16.t -> FStar_Int16.t) = + fun x -> fun y -> FStar_Int16.add x y +let (g : FStar_UInt32.t -> FStar_UInt32.t -> FStar_UInt32.t) = + fun x -> fun y -> FStar_UInt32.add x (FStar_UInt32.mul y y) +let (h : Prims.nat -> Prims.nat -> Prims.int) = fun x -> fun y -> x + y +let (i : Prims.nat -> Prims.nat -> Prims.int) = fun x -> fun y -> x + y +let (j : Prims.int -> Prims.nat -> Prims.int) = fun x -> fun y -> x - y +let (k : Prims.int -> Prims.int -> Prims.int) = fun x -> fun y -> x * y \ No newline at end of file diff --git a/ocaml/fstar-lib/generated/FStar_InteractiveHelpers.ml b/ocaml/fstar-lib/generated/FStar_InteractiveHelpers.ml new file mode 100644 index 00000000000..e8306abedb2 --- /dev/null +++ b/ocaml/fstar-lib/generated/FStar_InteractiveHelpers.ml @@ -0,0 +1 @@ +open Prims \ No newline at end of file diff --git a/ocaml/fstar-lib/generated/FStar_InteractiveHelpers_Base.ml b/ocaml/fstar-lib/generated/FStar_InteractiveHelpers_Base.ml new file mode 100644 index 00000000000..bea6412242a --- /dev/null +++ b/ocaml/fstar-lib/generated/FStar_InteractiveHelpers_Base.ml @@ -0,0 +1,4146 @@ +open Prims +let (bv_eq : + FStar_Reflection_Types.bv -> FStar_Reflection_Types.bv -> Prims.bool) = + fun bv1 -> + fun bv2 -> + let bvv1 = FStar_Reflection_Builtins.inspect_bv bv1 in + let bvv2 = FStar_Reflection_Builtins.inspect_bv bv2 in + (bvv1.FStar_Reflection_Data.bv_ppname = + bvv2.FStar_Reflection_Data.bv_ppname) + && + (bvv1.FStar_Reflection_Data.bv_index = + bvv2.FStar_Reflection_Data.bv_index) +let (fv_eq : + FStar_Reflection_Types.fv -> FStar_Reflection_Types.fv -> Prims.bool) = + fun fv1 -> + fun fv2 -> + let n1 = FStar_Reflection_Builtins.inspect_fv fv1 in + let n2 = FStar_Reflection_Builtins.inspect_fv fv2 in n1 = n2 +let (fv_eq_name : + FStar_Reflection_Types.fv -> FStar_Reflection_Types.name -> Prims.bool) = + fun fv -> + fun n -> let fvn = FStar_Reflection_Builtins.inspect_fv fv in fvn = n +let opt_apply : + 'a 'b . + ('a -> 'b) -> + 'a FStar_Pervasives_Native.option -> 'b FStar_Pervasives_Native.option + = + fun f -> + fun x -> + match x with + | FStar_Pervasives_Native.None -> FStar_Pervasives_Native.None + | FStar_Pervasives_Native.Some x' -> + FStar_Pervasives_Native.Some (f x') +let opt_tapply : + 'a 'b . + ('a -> ('b, unit) FStar_Tactics_Effect.tac_repr) -> + 'a FStar_Pervasives_Native.option -> + ('b FStar_Pervasives_Native.option, unit) + FStar_Tactics_Effect.tac_repr + = + fun uu___1 -> + fun uu___ -> + (fun f -> + fun x -> + match x with + | FStar_Pervasives_Native.None -> + Obj.magic + (Obj.repr + (FStar_Tactics_Effect.lift_div_tac + (fun uu___ -> FStar_Pervasives_Native.None))) + | FStar_Pervasives_Native.Some x' -> + Obj.magic + (Obj.repr + (FStar_Tactics_Effect.tac_bind + (Prims.mk_range "FStar.InteractiveHelpers.Base.fst" + (Prims.of_int (42)) (Prims.of_int (20)) + (Prims.of_int (42)) (Prims.of_int (26))) + (Prims.mk_range "FStar.InteractiveHelpers.Base.fst" + (Prims.of_int (42)) (Prims.of_int (15)) + (Prims.of_int (42)) (Prims.of_int (26))) + (Obj.magic (f x')) + (fun uu___ -> + FStar_Tactics_Effect.lift_div_tac + (fun uu___1 -> FStar_Pervasives_Native.Some uu___))))) + uu___1 uu___ +let option_to_string : + 'a . + ('a -> (Prims.string, unit) FStar_Tactics_Effect.tac_repr) -> + 'a FStar_Pervasives_Native.option -> + (Prims.string, unit) FStar_Tactics_Effect.tac_repr + = + fun uu___1 -> + fun uu___ -> + (fun f -> + fun x -> + match x with + | FStar_Pervasives_Native.None -> + Obj.magic + (Obj.repr + (FStar_Tactics_Effect.lift_div_tac (fun uu___ -> "None"))) + | FStar_Pervasives_Native.Some x' -> + Obj.magic + (Obj.repr + (FStar_Tactics_Effect.tac_bind + (Prims.mk_range "FStar.InteractiveHelpers.Base.fst" + (Prims.of_int (48)) (Prims.of_int (26)) + (Prims.of_int (48)) (Prims.of_int (36))) + (Prims.mk_range "prims.fst" (Prims.of_int (606)) + (Prims.of_int (19)) (Prims.of_int (606)) + (Prims.of_int (31))) + (Obj.magic + (FStar_Tactics_Effect.tac_bind + (Prims.mk_range + "FStar.InteractiveHelpers.Base.fst" + (Prims.of_int (48)) (Prims.of_int (26)) + (Prims.of_int (48)) (Prims.of_int (30))) + (Prims.mk_range "prims.fst" (Prims.of_int (606)) + (Prims.of_int (19)) (Prims.of_int (606)) + (Prims.of_int (31))) (Obj.magic (f x')) + (fun uu___ -> + FStar_Tactics_Effect.lift_div_tac + (fun uu___1 -> Prims.strcat uu___ ")")))) + (fun uu___ -> + FStar_Tactics_Effect.lift_div_tac + (fun uu___1 -> Prims.strcat "Some (" uu___))))) + uu___1 uu___ +let opt_cons : + 'a . 'a FStar_Pervasives_Native.option -> 'a Prims.list -> 'a Prims.list = + fun opt_x -> + fun ls -> + match opt_x with + | FStar_Pervasives_Native.Some x -> x :: ls + | FStar_Pervasives_Native.None -> ls +let list_to_string : + 'a . + ('a -> (Prims.string, unit) FStar_Tactics_Effect.tac_repr) -> + 'a Prims.list -> (Prims.string, unit) FStar_Tactics_Effect.tac_repr + = + fun f -> + fun ls -> + FStar_Tactics_Effect.tac_bind + (Prims.mk_range "FStar.InteractiveHelpers.Base.fst" + (Prims.of_int (58)) (Prims.of_int (2)) (Prims.of_int (58)) + (Prims.of_int (68))) + (Prims.mk_range "prims.fst" (Prims.of_int (606)) (Prims.of_int (19)) + (Prims.of_int (606)) (Prims.of_int (31))) + (Obj.magic + (FStar_Tactics_Util.fold_left + (fun s -> + fun x -> + FStar_Tactics_Effect.tac_bind + (Prims.mk_range "FStar.InteractiveHelpers.Base.fst" + (Prims.of_int (58)) (Prims.of_int (42)) + (Prims.of_int (58)) (Prims.of_int (59))) + (Prims.mk_range "prims.fst" (Prims.of_int (606)) + (Prims.of_int (19)) (Prims.of_int (606)) + (Prims.of_int (31))) + (Obj.magic + (FStar_Tactics_Effect.tac_bind + (Prims.mk_range + "FStar.InteractiveHelpers.Base.fst" + (Prims.of_int (58)) (Prims.of_int (49)) + (Prims.of_int (58)) (Prims.of_int (59))) + (Prims.mk_range "prims.fst" (Prims.of_int (606)) + (Prims.of_int (19)) (Prims.of_int (606)) + (Prims.of_int (31))) + (Obj.magic + (FStar_Tactics_Effect.tac_bind + (Prims.mk_range + "FStar.InteractiveHelpers.Base.fst" + (Prims.of_int (58)) (Prims.of_int (49)) + (Prims.of_int (58)) (Prims.of_int (52))) + (Prims.mk_range "prims.fst" + (Prims.of_int (606)) (Prims.of_int (19)) + (Prims.of_int (606)) (Prims.of_int (31))) + (Obj.magic (f x)) + (fun uu___ -> + FStar_Tactics_Effect.lift_div_tac + (fun uu___1 -> Prims.strcat uu___ ");")))) + (fun uu___ -> + FStar_Tactics_Effect.lift_div_tac + (fun uu___1 -> Prims.strcat " (" uu___)))) + (fun uu___ -> + FStar_Tactics_Effect.lift_div_tac + (fun uu___1 -> Prims.strcat s uu___))) "[" ls)) + (fun uu___ -> + FStar_Tactics_Effect.lift_div_tac + (fun uu___1 -> Prims.strcat uu___ "]")) +let (mk_app_norm : + FStar_Reflection_Types.env -> + FStar_Reflection_Types.term -> + FStar_Reflection_Types.term Prims.list -> + (FStar_Reflection_Types.term, unit) FStar_Tactics_Effect.tac_repr) + = + fun e -> + fun t -> + fun params -> + FStar_Tactics_Effect.tac_bind + (Prims.mk_range "FStar.InteractiveHelpers.Base.fst" + (Prims.of_int (65)) (Prims.of_int (11)) (Prims.of_int (65)) + (Prims.of_int (28))) + (Prims.mk_range "FStar.InteractiveHelpers.Base.fst" + (Prims.of_int (66)) (Prims.of_int (2)) (Prims.of_int (67)) + (Prims.of_int (4))) + (FStar_Tactics_Effect.lift_div_tac + (fun uu___ -> FStar_Reflection_Derived.mk_e_app t params)) + (fun uu___ -> + (fun t1 -> + Obj.magic + (FStar_Tactics_Effect.tac_bind + (Prims.mk_range "FStar.InteractiveHelpers.Base.fst" + (Prims.of_int (66)) (Prims.of_int (11)) + (Prims.of_int (66)) (Prims.of_int (32))) + (Prims.mk_range "FStar.InteractiveHelpers.Base.fst" + (Prims.of_int (66)) (Prims.of_int (6)) + (Prims.of_int (66)) (Prims.of_int (8))) + (Obj.magic + (FStar_Tactics_Builtins.norm_term_env e [] t1)) + (fun t2 -> + FStar_Tactics_Effect.lift_div_tac (fun uu___ -> t2)))) + uu___) +let (opt_mk_app_norm : + FStar_Reflection_Types.env -> + FStar_Reflection_Types.term FStar_Pervasives_Native.option -> + FStar_Reflection_Types.term Prims.list -> + (FStar_Reflection_Types.term FStar_Pervasives_Native.option, + unit) FStar_Tactics_Effect.tac_repr) + = + fun e -> + fun opt_t -> + fun params -> opt_tapply (fun t -> mk_app_norm e t params) opt_t +let rec unzip : + 'a 'b . ('a * 'b) Prims.list -> ('a Prims.list * 'b Prims.list) = + fun l -> + match l with + | [] -> ([], []) + | (hd1, hd2)::tl -> + let uu___ = unzip tl in + (match uu___ with | (tl1, tl2) -> ((hd1 :: tl1), (hd2 :: tl2))) +let (abv_to_string : + FStar_Reflection_Types.bv -> + (Prims.string, unit) FStar_Tactics_Effect.tac_repr) + = + fun bv -> + FStar_Tactics_Effect.tac_bind + (Prims.mk_range "FStar.InteractiveHelpers.Base.fst" (Prims.of_int (84)) + (Prims.of_int (12)) (Prims.of_int (84)) (Prims.of_int (25))) + (Prims.mk_range "FStar.InteractiveHelpers.Base.fst" (Prims.of_int (85)) + (Prims.of_int (2)) (Prims.of_int (86)) (Prims.of_int (28))) + (FStar_Tactics_Effect.lift_div_tac + (fun uu___ -> FStar_Reflection_Builtins.inspect_bv bv)) + (fun uu___ -> + (fun bvv -> + Obj.magic + (FStar_Tactics_Effect.tac_bind + (Prims.mk_range "FStar.InteractiveHelpers.Base.fst" + (Prims.of_int (85)) (Prims.of_int (18)) + (Prims.of_int (86)) (Prims.of_int (28))) + (Prims.mk_range "prims.fst" (Prims.of_int (606)) + (Prims.of_int (19)) (Prims.of_int (606)) + (Prims.of_int (31))) + (Obj.magic + (FStar_Tactics_Effect.tac_bind + (Prims.mk_range "FStar.InteractiveHelpers.Base.fst" + (Prims.of_int (85)) (Prims.of_int (26)) + (Prims.of_int (86)) (Prims.of_int (28))) + (Prims.mk_range "prims.fst" (Prims.of_int (606)) + (Prims.of_int (19)) (Prims.of_int (606)) + (Prims.of_int (31))) + (Obj.magic + (FStar_Tactics_Effect.tac_bind + (Prims.mk_range + "FStar.InteractiveHelpers.Base.fst" + (Prims.of_int (85)) (Prims.of_int (57)) + (Prims.of_int (86)) (Prims.of_int (28))) + (Prims.mk_range "prims.fst" (Prims.of_int (606)) + (Prims.of_int (19)) (Prims.of_int (606)) + (Prims.of_int (31))) + (Obj.magic + (FStar_Tactics_Effect.tac_bind + (Prims.mk_range + "FStar.InteractiveHelpers.Base.fst" + (Prims.of_int (86)) (Prims.of_int (2)) + (Prims.of_int (86)) (Prims.of_int (28))) + (Prims.mk_range "prims.fst" + (Prims.of_int (606)) + (Prims.of_int (19)) + (Prims.of_int (606)) + (Prims.of_int (31))) + (Obj.magic + (FStar_Tactics_Builtins.term_to_string + bvv.FStar_Reflection_Data.bv_sort)) + (fun uu___ -> + FStar_Tactics_Effect.lift_div_tac + (fun uu___1 -> + Prims.strcat ") : " uu___)))) + (fun uu___ -> + FStar_Tactics_Effect.lift_div_tac + (fun uu___1 -> + Prims.strcat + (Prims.string_of_int + bvv.FStar_Reflection_Data.bv_index) + uu___)))) + (fun uu___ -> + FStar_Tactics_Effect.lift_div_tac + (fun uu___1 -> Prims.strcat " (%" uu___)))) + (fun uu___ -> + FStar_Tactics_Effect.lift_div_tac + (fun uu___1 -> + Prims.strcat bvv.FStar_Reflection_Data.bv_ppname + uu___)))) uu___) +let (print_binder_info : + Prims.bool -> + FStar_Reflection_Types.binder -> + (unit, unit) FStar_Tactics_Effect.tac_repr) + = + fun full -> + fun b -> + FStar_Tactics_Effect.tac_bind + (Prims.mk_range "FStar.InteractiveHelpers.Base.fst" + (Prims.of_int (89)) (Prims.of_int (24)) (Prims.of_int (89)) + (Prims.of_int (40))) + (Prims.mk_range "FStar.InteractiveHelpers.Base.fst" + (Prims.of_int (89)) (Prims.of_int (2)) (Prims.of_int (107)) + (Prims.of_int (33))) + (FStar_Tactics_Effect.lift_div_tac + (fun uu___ -> FStar_Reflection_Builtins.inspect_binder b)) + (fun uu___ -> + (fun uu___ -> + match uu___ with + | (bv, (a, _attrs)) -> + Obj.magic + (FStar_Tactics_Effect.tac_bind + (Prims.mk_range "FStar.InteractiveHelpers.Base.fst" + (Prims.of_int (90)) (Prims.of_int (14)) + (Prims.of_int (93)) (Prims.of_int (45))) + (Prims.mk_range "FStar.InteractiveHelpers.Base.fst" + (Prims.of_int (96)) (Prims.of_int (2)) + (Prims.of_int (107)) (Prims.of_int (33))) + (match a with + | FStar_Reflection_Data.Q_Implicit -> + Obj.magic + (Obj.repr + (FStar_Tactics_Effect.lift_div_tac + (fun uu___1 -> "Implicit"))) + | FStar_Reflection_Data.Q_Explicit -> + Obj.magic + (Obj.repr + (FStar_Tactics_Effect.lift_div_tac + (fun uu___1 -> "Explicit"))) + | FStar_Reflection_Data.Q_Meta t -> + Obj.magic + (Obj.repr + (FStar_Tactics_Effect.tac_bind + (Prims.mk_range + "FStar.InteractiveHelpers.Base.fst" + (Prims.of_int (93)) + (Prims.of_int (29)) + (Prims.of_int (93)) + (Prims.of_int (45))) + (Prims.mk_range "prims.fst" + (Prims.of_int (606)) + (Prims.of_int (19)) + (Prims.of_int (606)) + (Prims.of_int (31))) + (Obj.magic + (FStar_Tactics_Builtins.term_to_string + t)) + (fun uu___1 -> + FStar_Tactics_Effect.lift_div_tac + (fun uu___2 -> + Prims.strcat "Meta: " uu___1))))) + (fun uu___1 -> + (fun a_str -> + Obj.magic + (FStar_Tactics_Effect.tac_bind + (Prims.mk_range + "FStar.InteractiveHelpers.Base.fst" + (Prims.of_int (96)) (Prims.of_int (14)) + (Prims.of_int (96)) (Prims.of_int (27))) + (Prims.mk_range + "FStar.InteractiveHelpers.Base.fst" + (Prims.of_int (97)) (Prims.of_int (2)) + (Prims.of_int (107)) (Prims.of_int (33))) + (FStar_Tactics_Effect.lift_div_tac + (fun uu___1 -> + FStar_Reflection_Builtins.inspect_bv + bv)) + (fun uu___1 -> + (fun bview -> + if full + then + Obj.magic + (FStar_Tactics_Effect.tac_bind + (Prims.mk_range + "FStar.InteractiveHelpers.Base.fst" + (Prims.of_int (98)) + (Prims.of_int (10)) + (Prims.of_int (106)) + (Prims.of_int (5))) + (Prims.mk_range + "FStar.InteractiveHelpers.Base.fst" + (Prims.of_int (98)) + (Prims.of_int (4)) + (Prims.of_int (106)) + (Prims.of_int (5))) + (Obj.magic + (FStar_Tactics_Effect.tac_bind + (Prims.mk_range + "FStar.InteractiveHelpers.Base.fst" + (Prims.of_int (100)) + (Prims.of_int (6)) + (Prims.of_int (105)) + (Prims.of_int (49))) + (Prims.mk_range + "prims.fst" + (Prims.of_int (606)) + (Prims.of_int (19)) + (Prims.of_int (606)) + (Prims.of_int (31))) + (Obj.magic + (FStar_Tactics_Effect.tac_bind + (Prims.mk_range + "FStar.InteractiveHelpers.Base.fst" + (Prims.of_int (100)) + (Prims.of_int (21)) + (Prims.of_int (105)) + (Prims.of_int (49))) + (Prims.mk_range + "prims.fst" + (Prims.of_int (606)) + (Prims.of_int (19)) + (Prims.of_int (606)) + (Prims.of_int (31))) + (Obj.magic + (FStar_Tactics_Effect.tac_bind + (Prims.mk_range + "FStar.InteractiveHelpers.Base.fst" + (Prims.of_int (101)) + (Prims.of_int (6)) + (Prims.of_int (105)) + (Prims.of_int (49))) + (Prims.mk_range + "prims.fst" + (Prims.of_int (606)) + (Prims.of_int (19)) + (Prims.of_int (606)) + (Prims.of_int (31))) + (Obj.magic + ( + FStar_Tactics_Effect.tac_bind + (Prims.mk_range + "FStar.InteractiveHelpers.Base.fst" + (Prims.of_int (101)) + (Prims.of_int (26)) + (Prims.of_int (105)) + (Prims.of_int (49))) + (Prims.mk_range + "prims.fst" + (Prims.of_int (606)) + (Prims.of_int (19)) + (Prims.of_int (606)) + (Prims.of_int (31))) + (Obj.magic + (FStar_Tactics_Effect.tac_bind + (Prims.mk_range + "FStar.InteractiveHelpers.Base.fst" + (Prims.of_int (102)) + (Prims.of_int (6)) + (Prims.of_int (105)) + (Prims.of_int (49))) + (Prims.mk_range + "prims.fst" + (Prims.of_int (606)) + (Prims.of_int (19)) + (Prims.of_int (606)) + (Prims.of_int (31))) + (Obj.magic + (FStar_Tactics_Effect.tac_bind + (Prims.mk_range + "FStar.InteractiveHelpers.Base.fst" + (Prims.of_int (102)) + (Prims.of_int (22)) + (Prims.of_int (105)) + (Prims.of_int (49))) + (Prims.mk_range + "prims.fst" + (Prims.of_int (606)) + (Prims.of_int (19)) + (Prims.of_int (606)) + (Prims.of_int (31))) + (Obj.magic + (FStar_Tactics_Effect.tac_bind + (Prims.mk_range + "FStar.InteractiveHelpers.Base.fst" + (Prims.of_int (103)) + (Prims.of_int (6)) + (Prims.of_int (105)) + (Prims.of_int (49))) + (Prims.mk_range + "prims.fst" + (Prims.of_int (606)) + (Prims.of_int (19)) + (Prims.of_int (606)) + (Prims.of_int (31))) + (Obj.magic + (FStar_Tactics_Effect.tac_bind + (Prims.mk_range + "FStar.InteractiveHelpers.Base.fst" + (Prims.of_int (103)) + (Prims.of_int (23)) + (Prims.of_int (105)) + (Prims.of_int (49))) + (Prims.mk_range + "prims.fst" + (Prims.of_int (606)) + (Prims.of_int (19)) + (Prims.of_int (606)) + (Prims.of_int (31))) + (Obj.magic + (FStar_Tactics_Effect.tac_bind + (Prims.mk_range + "FStar.InteractiveHelpers.Base.fst" + (Prims.of_int (104)) + (Prims.of_int (6)) + (Prims.of_int (105)) + (Prims.of_int (49))) + (Prims.mk_range + "prims.fst" + (Prims.of_int (606)) + (Prims.of_int (19)) + (Prims.of_int (606)) + (Prims.of_int (31))) + (Obj.magic + (FStar_Tactics_Effect.tac_bind + (Prims.mk_range + "FStar.InteractiveHelpers.Base.fst" + (Prims.of_int (104)) + (Prims.of_int (22)) + (Prims.of_int (105)) + (Prims.of_int (49))) + (Prims.mk_range + "prims.fst" + (Prims.of_int (606)) + (Prims.of_int (19)) + (Prims.of_int (606)) + (Prims.of_int (31))) + (Obj.magic + (FStar_Tactics_Effect.tac_bind + (Prims.mk_range + "FStar.InteractiveHelpers.Base.fst" + (Prims.of_int (105)) + (Prims.of_int (6)) + (Prims.of_int (105)) + (Prims.of_int (49))) + (Prims.mk_range + "prims.fst" + (Prims.of_int (606)) + (Prims.of_int (19)) + (Prims.of_int (606)) + (Prims.of_int (31))) + (Obj.magic + (FStar_Tactics_Effect.tac_bind + (Prims.mk_range + "FStar.InteractiveHelpers.Base.fst" + (Prims.of_int (105)) + (Prims.of_int (21)) + (Prims.of_int (105)) + (Prims.of_int (49))) + (Prims.mk_range + "prims.fst" + (Prims.of_int (606)) + (Prims.of_int (19)) + (Prims.of_int (606)) + (Prims.of_int (31))) + (Obj.magic + (FStar_Tactics_Builtins.term_to_string + bview.FStar_Reflection_Data.bv_sort)) + (fun + uu___1 -> + FStar_Tactics_Effect.lift_div_tac + (fun + uu___2 -> + Prims.strcat + "\n- sort: " + uu___1)))) + (fun + uu___1 -> + FStar_Tactics_Effect.lift_div_tac + (fun + uu___2 -> + Prims.strcat + (Prims.string_of_int + bview.FStar_Reflection_Data.bv_index) + uu___1)))) + (fun + uu___1 -> + FStar_Tactics_Effect.lift_div_tac + (fun + uu___2 -> + Prims.strcat + "\n- index: " + uu___1)))) + (fun + uu___1 -> + FStar_Tactics_Effect.lift_div_tac + (fun + uu___2 -> + Prims.strcat + bview.FStar_Reflection_Data.bv_ppname + uu___1)))) + (fun + uu___1 -> + FStar_Tactics_Effect.lift_div_tac + (fun + uu___2 -> + Prims.strcat + "\n- ppname: " + uu___1)))) + (fun + uu___1 -> + FStar_Tactics_Effect.lift_div_tac + (fun + uu___2 -> + Prims.strcat + a_str + uu___1)))) + (fun + uu___1 -> + FStar_Tactics_Effect.lift_div_tac + (fun + uu___2 -> + Prims.strcat + "\n- aqual: " + uu___1)))) + (fun + uu___1 -> + FStar_Tactics_Effect.lift_div_tac + (fun + uu___2 -> + Prims.strcat + (FStar_Reflection_Derived.binder_to_string + b) uu___1)))) + (fun + uu___1 -> + FStar_Tactics_Effect.lift_div_tac + (fun + uu___2 -> + Prims.strcat + "\n- as string: " + uu___1)))) + (fun uu___1 + -> + FStar_Tactics_Effect.lift_div_tac + (fun + uu___2 -> + Prims.strcat + (FStar_Reflection_Derived.name_of_binder + b) uu___1)))) + (fun uu___1 -> + FStar_Tactics_Effect.lift_div_tac + (fun uu___2 + -> + Prims.strcat + "\n- name: " + uu___1)))) + (fun uu___1 -> + FStar_Tactics_Effect.lift_div_tac + (fun uu___2 -> + Prims.strcat + "> print_binder_info:" + uu___1)))) + (fun uu___1 -> + (fun uu___1 -> + Obj.magic + (FStar_Tactics_Builtins.print + uu___1)) uu___1)) + else + Obj.magic + (FStar_Tactics_Builtins.print + (FStar_Reflection_Derived.binder_to_string + b))) uu___1))) uu___1))) + uu___) +let (print_binders_info : + Prims.bool -> + FStar_Reflection_Types.env -> (unit, unit) FStar_Tactics_Effect.tac_repr) + = + fun full -> + fun e -> + FStar_Tactics_Util.iter (print_binder_info full) + (FStar_Reflection_Builtins.binders_of_env e) +let (acomp_to_string : + FStar_Reflection_Types.comp -> + (Prims.string, unit) FStar_Tactics_Effect.tac_repr) + = + fun c -> + match FStar_Reflection_Builtins.inspect_comp c with + | FStar_Reflection_Data.C_Total ret -> + FStar_Tactics_Effect.tac_bind + (Prims.mk_range "FStar.InteractiveHelpers.Base.fst" + (Prims.of_int (115)) (Prims.of_int (18)) (Prims.of_int (115)) + (Prims.of_int (42))) + (Prims.mk_range "prims.fst" (Prims.of_int (606)) + (Prims.of_int (19)) (Prims.of_int (606)) (Prims.of_int (31))) + (Obj.magic + (FStar_Tactics_Effect.tac_bind + (Prims.mk_range "FStar.InteractiveHelpers.Base.fst" + (Prims.of_int (115)) (Prims.of_int (18)) + (Prims.of_int (115)) (Prims.of_int (36))) + (Prims.mk_range "prims.fst" (Prims.of_int (606)) + (Prims.of_int (19)) (Prims.of_int (606)) + (Prims.of_int (31))) + (Obj.magic (FStar_Tactics_Builtins.term_to_string ret)) + (fun uu___ -> + FStar_Tactics_Effect.lift_div_tac + (fun uu___1 -> Prims.strcat uu___ ")")))) + (fun uu___ -> + FStar_Tactics_Effect.lift_div_tac + (fun uu___1 -> Prims.strcat "C_Total (" uu___)) + | FStar_Reflection_Data.C_GTotal ret -> + FStar_Tactics_Effect.tac_bind + (Prims.mk_range "FStar.InteractiveHelpers.Base.fst" + (Prims.of_int (117)) (Prims.of_int (19)) (Prims.of_int (117)) + (Prims.of_int (43))) + (Prims.mk_range "prims.fst" (Prims.of_int (606)) + (Prims.of_int (19)) (Prims.of_int (606)) (Prims.of_int (31))) + (Obj.magic + (FStar_Tactics_Effect.tac_bind + (Prims.mk_range "FStar.InteractiveHelpers.Base.fst" + (Prims.of_int (117)) (Prims.of_int (19)) + (Prims.of_int (117)) (Prims.of_int (37))) + (Prims.mk_range "prims.fst" (Prims.of_int (606)) + (Prims.of_int (19)) (Prims.of_int (606)) + (Prims.of_int (31))) + (Obj.magic (FStar_Tactics_Builtins.term_to_string ret)) + (fun uu___ -> + FStar_Tactics_Effect.lift_div_tac + (fun uu___1 -> Prims.strcat uu___ ")")))) + (fun uu___ -> + FStar_Tactics_Effect.lift_div_tac + (fun uu___1 -> Prims.strcat "C_GTotal (" uu___)) + | FStar_Reflection_Data.C_Lemma (pre, post, patterns) -> + FStar_Tactics_Effect.tac_bind + (Prims.mk_range "FStar.InteractiveHelpers.Base.fst" + (Prims.of_int (119)) (Prims.of_int (18)) (Prims.of_int (119)) + (Prims.of_int (72))) + (Prims.mk_range "prims.fst" (Prims.of_int (606)) + (Prims.of_int (19)) (Prims.of_int (606)) (Prims.of_int (31))) + (Obj.magic + (FStar_Tactics_Effect.tac_bind + (Prims.mk_range "FStar.InteractiveHelpers.Base.fst" + (Prims.of_int (119)) (Prims.of_int (18)) + (Prims.of_int (119)) (Prims.of_int (36))) + (Prims.mk_range "FStar.InteractiveHelpers.Base.fst" + (Prims.of_int (119)) (Prims.of_int (18)) + (Prims.of_int (119)) (Prims.of_int (72))) + (Obj.magic (FStar_Tactics_Builtins.term_to_string pre)) + (fun uu___ -> + (fun uu___ -> + Obj.magic + (FStar_Tactics_Effect.tac_bind + (Prims.mk_range + "FStar.InteractiveHelpers.Base.fst" + (Prims.of_int (119)) (Prims.of_int (39)) + (Prims.of_int (119)) (Prims.of_int (72))) + (Prims.mk_range "prims.fst" (Prims.of_int (606)) + (Prims.of_int (19)) (Prims.of_int (606)) + (Prims.of_int (31))) + (Obj.magic + (FStar_Tactics_Effect.tac_bind + (Prims.mk_range + "FStar.InteractiveHelpers.Base.fst" + (Prims.of_int (119)) (Prims.of_int (47)) + (Prims.of_int (119)) (Prims.of_int (72))) + (Prims.mk_range "prims.fst" + (Prims.of_int (606)) (Prims.of_int (19)) + (Prims.of_int (606)) (Prims.of_int (31))) + (Obj.magic + (FStar_Tactics_Effect.tac_bind + (Prims.mk_range + "FStar.InteractiveHelpers.Base.fst" + (Prims.of_int (119)) + (Prims.of_int (47)) + (Prims.of_int (119)) + (Prims.of_int (66))) + (Prims.mk_range "prims.fst" + (Prims.of_int (606)) + (Prims.of_int (19)) + (Prims.of_int (606)) + (Prims.of_int (31))) + (Obj.magic + (FStar_Tactics_Builtins.term_to_string + post)) + (fun uu___1 -> + FStar_Tactics_Effect.lift_div_tac + (fun uu___2 -> + Prims.strcat uu___1 ")")))) + (fun uu___1 -> + FStar_Tactics_Effect.lift_div_tac + (fun uu___2 -> + Prims.strcat ") (" uu___1)))) + (fun uu___1 -> + FStar_Tactics_Effect.lift_div_tac + (fun uu___2 -> Prims.strcat uu___ uu___1)))) + uu___))) + (fun uu___ -> + FStar_Tactics_Effect.lift_div_tac + (fun uu___1 -> Prims.strcat "C_Lemma (" uu___)) + | FStar_Reflection_Data.C_Eff (us, eff_name, result, eff_args, uu___) -> + FStar_Tactics_Effect.tac_bind + (Prims.mk_range "FStar.InteractiveHelpers.Base.fst" + (Prims.of_int (122)) (Prims.of_int (6)) (Prims.of_int (122)) + (Prims.of_int (35))) + (Prims.mk_range "FStar.InteractiveHelpers.Base.fst" + (Prims.of_int (124)) (Prims.of_int (4)) (Prims.of_int (126)) + (Prims.of_int (86))) + (FStar_Tactics_Effect.lift_div_tac + (fun uu___1 -> + fun a -> + FStar_Tactics_Effect.tac_bind + (Prims.mk_range "FStar.InteractiveHelpers.Base.fst" + (Prims.of_int (122)) (Prims.of_int (13)) + (Prims.of_int (122)) (Prims.of_int (35))) + (Prims.mk_range "prims.fst" (Prims.of_int (606)) + (Prims.of_int (19)) (Prims.of_int (606)) + (Prims.of_int (31))) + (Obj.magic + (FStar_Tactics_Effect.tac_bind + (Prims.mk_range "FStar.InteractiveHelpers.Base.fst" + (Prims.of_int (122)) (Prims.of_int (13)) + (Prims.of_int (122)) (Prims.of_int (29))) + (Prims.mk_range "prims.fst" (Prims.of_int (606)) + (Prims.of_int (19)) (Prims.of_int (606)) + (Prims.of_int (31))) + (Obj.magic + (FStar_Tactics_Builtins.term_to_string a)) + (fun uu___2 -> + FStar_Tactics_Effect.lift_div_tac + (fun uu___3 -> Prims.strcat uu___2 ")")))) + (fun uu___2 -> + FStar_Tactics_Effect.lift_div_tac + (fun uu___3 -> Prims.strcat " (" uu___2)))) + (fun uu___1 -> + (fun eff_arg_to_string -> + Obj.magic + (FStar_Tactics_Effect.tac_bind + (Prims.mk_range "FStar.InteractiveHelpers.Base.fst" + (Prims.of_int (124)) (Prims.of_int (19)) + (Prims.of_int (124)) (Prims.of_int (67))) + (Prims.mk_range "FStar.InteractiveHelpers.Base.fst" + (Prims.of_int (125)) (Prims.of_int (4)) + (Prims.of_int (126)) (Prims.of_int (86))) + (Obj.magic + (FStar_Tactics_Util.map + (fun uu___1 -> + match uu___1 with + | (x, y) -> eff_arg_to_string x) eff_args)) + (fun uu___1 -> + (fun args_str -> + Obj.magic + (FStar_Tactics_Effect.tac_bind + (Prims.mk_range + "FStar.InteractiveHelpers.Base.fst" + (Prims.of_int (125)) (Prims.of_int (19)) + (Prims.of_int (125)) (Prims.of_int (68))) + (Prims.mk_range + "FStar.InteractiveHelpers.Base.fst" + (Prims.of_int (126)) (Prims.of_int (4)) + (Prims.of_int (126)) (Prims.of_int (86))) + (FStar_Tactics_Effect.lift_div_tac + (fun uu___1 -> + FStar_List_Tot_Base.fold_left + (fun x -> fun y -> Prims.strcat x y) + "" args_str)) + (fun uu___1 -> + (fun args_str1 -> + Obj.magic + (FStar_Tactics_Effect.tac_bind + (Prims.mk_range + "FStar.InteractiveHelpers.Base.fst" + (Prims.of_int (126)) + (Prims.of_int (16)) + (Prims.of_int (126)) + (Prims.of_int (86))) + (Prims.mk_range "prims.fst" + (Prims.of_int (606)) + (Prims.of_int (19)) + (Prims.of_int (606)) + (Prims.of_int (31))) + (Obj.magic + (FStar_Tactics_Effect.tac_bind + (Prims.mk_range + "FStar.InteractiveHelpers.Base.fst" + (Prims.of_int (126)) + (Prims.of_int (40)) + (Prims.of_int (126)) + (Prims.of_int (86))) + (Prims.mk_range "prims.fst" + (Prims.of_int (606)) + (Prims.of_int (19)) + (Prims.of_int (606)) + (Prims.of_int (31))) + (Obj.magic + (FStar_Tactics_Effect.tac_bind + (Prims.mk_range + "FStar.InteractiveHelpers.Base.fst" + (Prims.of_int (126)) + (Prims.of_int (48)) + (Prims.of_int (126)) + (Prims.of_int (86))) + (Prims.mk_range + "prims.fst" + (Prims.of_int (606)) + (Prims.of_int (19)) + (Prims.of_int (606)) + (Prims.of_int (31))) + (Obj.magic + (FStar_Tactics_Effect.tac_bind + (Prims.mk_range + "FStar.InteractiveHelpers.Base.fst" + (Prims.of_int (126)) + (Prims.of_int (48)) + (Prims.of_int (126)) + (Prims.of_int (69))) + (Prims.mk_range + "prims.fst" + (Prims.of_int (606)) + (Prims.of_int (19)) + (Prims.of_int (606)) + (Prims.of_int (31))) + (Obj.magic + (FStar_Tactics_Builtins.term_to_string + result)) + (fun uu___1 -> + FStar_Tactics_Effect.lift_div_tac + (fun uu___2 + -> + Prims.strcat + uu___1 + (Prims.strcat + ")" + args_str1))))) + (fun uu___1 -> + FStar_Tactics_Effect.lift_div_tac + (fun uu___2 -> + Prims.strcat + ") (" uu___1)))) + (fun uu___1 -> + FStar_Tactics_Effect.lift_div_tac + (fun uu___2 -> + Prims.strcat + (FStar_Reflection_Derived.flatten_name + eff_name) + uu___1)))) + (fun uu___1 -> + FStar_Tactics_Effect.lift_div_tac + (fun uu___2 -> + Prims.strcat "C_Eff (" + uu___1)))) uu___1))) + uu___1))) uu___1) +exception MetaAnalysis of Prims.string +let (uu___is_MetaAnalysis : Prims.exn -> Prims.bool) = + fun projectee -> + match projectee with | MetaAnalysis uu___ -> true | uu___ -> false +let (__proj__MetaAnalysis__item__uu___ : Prims.exn -> Prims.string) = + fun projectee -> match projectee with | MetaAnalysis uu___ -> uu___ +let mfail : + 'uuuuu . Prims.string -> ('uuuuu, unit) FStar_Tactics_Effect.tac_repr = + fun str -> FStar_Tactics_Effect.raise (MetaAnalysis str) +let (print_dbg : + Prims.bool -> Prims.string -> (unit, unit) FStar_Tactics_Effect.tac_repr) = + fun uu___1 -> + fun uu___ -> + (fun debug -> + fun s -> + if debug + then Obj.magic (Obj.repr (FStar_Tactics_Builtins.print s)) + else + Obj.magic + (Obj.repr + (FStar_Tactics_Effect.lift_div_tac (fun uu___1 -> ())))) + uu___1 uu___ +let (term_view_construct : + FStar_Reflection_Data.term_view -> + (Prims.string, unit) FStar_Tactics_Effect.tac_repr) + = + fun uu___ -> + (fun t -> + Obj.magic + (FStar_Tactics_Effect.lift_div_tac + (fun uu___ -> + match t with + | FStar_Reflection_Data.Tv_Var uu___1 -> "Tv_Var" + | FStar_Reflection_Data.Tv_BVar uu___1 -> "Tv_BVar" + | FStar_Reflection_Data.Tv_FVar uu___1 -> "Tv_FVar" + | FStar_Reflection_Data.Tv_App (uu___1, uu___2) -> "Tv_App" + | FStar_Reflection_Data.Tv_Abs (uu___1, uu___2) -> "Tv_Abs" + | FStar_Reflection_Data.Tv_Arrow (uu___1, uu___2) -> + "Tv_Arrow" + | FStar_Reflection_Data.Tv_Type uu___1 -> "Tv_Type" + | FStar_Reflection_Data.Tv_Refine (uu___1, uu___2) -> + "Tv_Refine" + | FStar_Reflection_Data.Tv_Const uu___1 -> "Tv_Const" + | FStar_Reflection_Data.Tv_Uvar (uu___1, uu___2) -> "Tv_Uvar" + | FStar_Reflection_Data.Tv_Let + (uu___1, uu___2, uu___3, uu___4, uu___5) -> "Tv_Let" + | FStar_Reflection_Data.Tv_Match (uu___1, uu___2, uu___3) -> + "Tv_Match" + | FStar_Reflection_Data.Tv_AscribedT + (uu___1, uu___2, uu___3, uu___4) -> "Tv_AscribedT" + | FStar_Reflection_Data.Tv_AscribedC + (uu___1, uu___2, uu___3, uu___4) -> "Tv_AScribedC" + | uu___1 -> "Tv_Unknown"))) uu___ +let (term_construct : + FStar_Reflection_Types.term -> + (Prims.string, unit) FStar_Tactics_Effect.tac_repr) + = + fun t -> + FStar_Tactics_Effect.tac_bind + (Prims.mk_range "FStar.InteractiveHelpers.Base.fst" + (Prims.of_int (162)) (Prims.of_int (22)) (Prims.of_int (162)) + (Prims.of_int (33))) + (Prims.mk_range "FStar.InteractiveHelpers.Base.fst" + (Prims.of_int (162)) (Prims.of_int (2)) (Prims.of_int (162)) + (Prims.of_int (33))) (Obj.magic (FStar_Tactics_Builtins.inspect t)) + (fun uu___ -> + (fun uu___ -> Obj.magic (term_view_construct uu___)) uu___) +let (filter_ascriptions : + Prims.bool -> + FStar_Reflection_Types.term -> + (FStar_Reflection_Types.term, unit) FStar_Tactics_Effect.tac_repr) + = + fun dbg -> + fun t -> + FStar_Tactics_Effect.tac_bind + (Prims.mk_range "FStar.InteractiveHelpers.Base.fst" + (Prims.of_int (175)) (Prims.of_int (2)) (Prims.of_int (175)) + (Prims.of_int (94))) + (Prims.mk_range "FStar.InteractiveHelpers.Base.fst" + (Prims.of_int (176)) (Prims.of_int (2)) (Prims.of_int (180)) + (Prims.of_int (15))) + (Obj.magic + (FStar_Tactics_Effect.tac_bind + (Prims.mk_range "FStar.InteractiveHelpers.Base.fst" + (Prims.of_int (175)) (Prims.of_int (16)) + (Prims.of_int (175)) (Prims.of_int (94))) + (Prims.mk_range "FStar.InteractiveHelpers.Base.fst" + (Prims.of_int (175)) (Prims.of_int (2)) (Prims.of_int (175)) + (Prims.of_int (94))) + (Obj.magic + (FStar_Tactics_Effect.tac_bind + (Prims.mk_range "FStar.InteractiveHelpers.Base.fst" + (Prims.of_int (175)) (Prims.of_int (45)) + (Prims.of_int (175)) (Prims.of_int (92))) + (Prims.mk_range "prims.fst" (Prims.of_int (606)) + (Prims.of_int (19)) (Prims.of_int (606)) + (Prims.of_int (31))) + (Obj.magic + (FStar_Tactics_Effect.tac_bind + (Prims.mk_range "FStar.InteractiveHelpers.Base.fst" + (Prims.of_int (175)) (Prims.of_int (45)) + (Prims.of_int (175)) (Prims.of_int (66))) + (Prims.mk_range "FStar.InteractiveHelpers.Base.fst" + (Prims.of_int (175)) (Prims.of_int (45)) + (Prims.of_int (175)) (Prims.of_int (92))) + (Obj.magic + (FStar_Tactics_Effect.tac_bind + (Prims.mk_range + "FStar.InteractiveHelpers.Base.fst" + (Prims.of_int (174)) (Prims.of_int (27)) + (Prims.of_int (174)) (Prims.of_int (28))) + (Prims.mk_range + "FStar.InteractiveHelpers.Base.fst" + (Prims.of_int (175)) (Prims.of_int (45)) + (Prims.of_int (175)) (Prims.of_int (66))) + (Obj.magic (FStar_Tactics_Builtins.inspect t)) + (fun uu___ -> + (fun uu___ -> + Obj.magic (term_view_construct uu___)) + uu___))) + (fun uu___ -> + (fun uu___ -> + Obj.magic + (FStar_Tactics_Effect.tac_bind + (Prims.mk_range + "FStar.InteractiveHelpers.Base.fst" + (Prims.of_int (175)) + (Prims.of_int (69)) + (Prims.of_int (175)) + (Prims.of_int (92))) + (Prims.mk_range "prims.fst" + (Prims.of_int (606)) + (Prims.of_int (19)) + (Prims.of_int (606)) + (Prims.of_int (31))) + (Obj.magic + (FStar_Tactics_Effect.tac_bind + (Prims.mk_range + "FStar.InteractiveHelpers.Base.fst" + (Prims.of_int (175)) + (Prims.of_int (76)) + (Prims.of_int (175)) + (Prims.of_int (92))) + (Prims.mk_range "prims.fst" + (Prims.of_int (606)) + (Prims.of_int (19)) + (Prims.of_int (606)) + (Prims.of_int (31))) + (Obj.magic + (FStar_Tactics_Builtins.term_to_string + t)) + (fun uu___1 -> + FStar_Tactics_Effect.lift_div_tac + (fun uu___2 -> + Prims.strcat ": " uu___1)))) + (fun uu___1 -> + FStar_Tactics_Effect.lift_div_tac + (fun uu___2 -> + Prims.strcat uu___ uu___1)))) + uu___))) + (fun uu___ -> + FStar_Tactics_Effect.lift_div_tac + (fun uu___1 -> + Prims.strcat "[> filter_ascriptions: " uu___)))) + (fun uu___ -> + (fun uu___ -> Obj.magic (print_dbg dbg uu___)) uu___))) + (fun uu___ -> + (fun uu___ -> + Obj.magic + (FStar_Tactics_Visit.visit_tm + (fun t1 -> + FStar_Tactics_Effect.tac_bind + (Prims.mk_range "FStar.InteractiveHelpers.Base.fst" + (Prims.of_int (177)) (Prims.of_int (10)) + (Prims.of_int (177)) (Prims.of_int (19))) + (Prims.mk_range "FStar.InteractiveHelpers.Base.fst" + (Prims.of_int (177)) (Prims.of_int (4)) + (Prims.of_int (180)) (Prims.of_int (12))) + (Obj.magic (FStar_Tactics_Builtins.inspect t1)) + (fun uu___1 -> + FStar_Tactics_Effect.lift_div_tac + (fun uu___2 -> + match uu___1 with + | FStar_Reflection_Data.Tv_AscribedT + (e, uu___3, uu___4, uu___5) -> e + | FStar_Reflection_Data.Tv_AscribedC + (e, uu___3, uu___4, uu___5) -> e + | uu___3 -> t1))) t)) uu___) +let (prettify_term : + Prims.bool -> + FStar_Reflection_Types.term -> + (FStar_Reflection_Types.term, unit) FStar_Tactics_Effect.tac_repr) + = fun dbg -> fun t -> filter_ascriptions dbg t +type 'a bind_map = (FStar_Reflection_Types.bv * 'a) Prims.list +let bind_map_push : + 'a . + 'a bind_map -> + FStar_Reflection_Types.bv -> + 'a -> (FStar_Reflection_Types.bv * 'a) Prims.list + = fun m -> fun b -> fun x -> (b, x) :: m +let rec bind_map_get : + 'a . + 'a bind_map -> + FStar_Reflection_Types.bv -> 'a FStar_Pervasives_Native.option + = + fun m -> + fun b -> + match m with + | [] -> FStar_Pervasives_Native.None + | (b', x)::m' -> + if (FStar_Reflection_Builtins.compare_bv b b') = FStar_Order.Eq + then FStar_Pervasives_Native.Some x + else bind_map_get m' b +let rec bind_map_get_from_name : + 'a . + 'a bind_map -> + Prims.string -> + (FStar_Reflection_Types.bv * 'a) FStar_Pervasives_Native.option + = + fun m -> + fun name -> + match m with + | [] -> FStar_Pervasives_Native.None + | (b', x)::m' -> + let b'v = FStar_Reflection_Builtins.inspect_bv b' in + if b'v.FStar_Reflection_Data.bv_ppname = name + then FStar_Pervasives_Native.Some (b', x) + else bind_map_get_from_name m' name +type genv = + { + env: FStar_Reflection_Types.env ; + bmap: (Prims.bool * FStar_Reflection_Types.term) bind_map ; + svars: FStar_Reflection_Types.bv Prims.list } +let (__proj__Mkgenv__item__env : genv -> FStar_Reflection_Types.env) = + fun projectee -> match projectee with | { env; bmap; svars;_} -> env +let (__proj__Mkgenv__item__bmap : + genv -> (Prims.bool * FStar_Reflection_Types.term) bind_map) = + fun projectee -> match projectee with | { env; bmap; svars;_} -> bmap +let (__proj__Mkgenv__item__svars : + genv -> FStar_Reflection_Types.bv Prims.list) = + fun projectee -> match projectee with | { env; bmap; svars;_} -> svars +let (get_env : genv -> FStar_Reflection_Types.env) = fun e -> e.env +let (get_bind_map : + genv -> (Prims.bool * FStar_Reflection_Types.term) bind_map) = + fun e -> e.bmap +let (mk_genv : + FStar_Reflection_Types.env -> + (Prims.bool * FStar_Reflection_Types.term) bind_map -> + FStar_Reflection_Types.bv Prims.list -> genv) + = fun env -> fun bmap -> fun svars -> { env; bmap; svars } +let (mk_init_genv : FStar_Reflection_Types.env -> genv) = + fun env -> mk_genv env [] [] +let (genv_to_string : + genv -> (Prims.string, unit) FStar_Tactics_Effect.tac_repr) = + fun ge -> + FStar_Tactics_Effect.tac_bind + (Prims.mk_range "FStar.InteractiveHelpers.Base.fst" + (Prims.of_int (248)) (Prims.of_int (4)) (Prims.of_int (248)) + (Prims.of_int (41))) + (Prims.mk_range "FStar.InteractiveHelpers.Base.fst" + (Prims.of_int (250)) (Prims.of_int (2)) (Prims.of_int (261)) + (Prims.of_int (34))) + (FStar_Tactics_Effect.lift_div_tac + (fun uu___ -> + fun b -> + FStar_Tactics_Effect.tac_bind + (Prims.mk_range "FStar.InteractiveHelpers.Base.fst" + (Prims.of_int (248)) (Prims.of_int (4)) + (Prims.of_int (248)) (Prims.of_int (34))) + (Prims.mk_range "prims.fst" (Prims.of_int (606)) + (Prims.of_int (19)) (Prims.of_int (606)) + (Prims.of_int (31))) + (Obj.magic + (abv_to_string (FStar_Reflection_Derived.bv_of_binder b))) + (fun uu___1 -> + FStar_Tactics_Effect.lift_div_tac + (fun uu___2 -> Prims.strcat uu___1 "\n")))) + (fun uu___ -> + (fun binder_to_string -> + Obj.magic + (FStar_Tactics_Effect.tac_bind + (Prims.mk_range "FStar.InteractiveHelpers.Base.fst" + (Prims.of_int (250)) (Prims.of_int (20)) + (Prims.of_int (250)) (Prims.of_int (64))) + (Prims.mk_range "FStar.InteractiveHelpers.Base.fst" + (Prims.of_int (251)) (Prims.of_int (2)) + (Prims.of_int (261)) (Prims.of_int (34))) + (Obj.magic + (FStar_Tactics_Util.map binder_to_string + (FStar_Reflection_Builtins.binders_of_env ge.env))) + (fun uu___ -> + (fun binders_str -> + Obj.magic + (FStar_Tactics_Effect.tac_bind + (Prims.mk_range + "FStar.InteractiveHelpers.Base.fst" + (Prims.of_int (252)) (Prims.of_int (4)) + (Prims.of_int (254)) (Prims.of_int (57))) + (Prims.mk_range + "FStar.InteractiveHelpers.Base.fst" + (Prims.of_int (256)) (Prims.of_int (2)) + (Prims.of_int (261)) (Prims.of_int (34))) + (FStar_Tactics_Effect.lift_div_tac + (fun uu___ -> + fun e -> + FStar_Tactics_Effect.tac_bind + (Prims.mk_range + "FStar.InteractiveHelpers.Base.fst" + (Prims.of_int (252)) + (Prims.of_int (23)) + (Prims.of_int (252)) + (Prims.of_int (24))) + (Prims.mk_range + "FStar.InteractiveHelpers.Base.fst" + (Prims.of_int (252)) + (Prims.of_int (4)) + (Prims.of_int (254)) + (Prims.of_int (57))) + (FStar_Tactics_Effect.lift_div_tac + (fun uu___1 -> e)) + (fun uu___1 -> + (fun uu___1 -> + match uu___1 with + | (bv, (abs, t)) -> + Obj.magic + (FStar_Tactics_Effect.tac_bind + (Prims.mk_range + "FStar.InteractiveHelpers.Base.fst" + (Prims.of_int (253)) + (Prims.of_int (10)) + (Prims.of_int (254)) + (Prims.of_int (57))) + (Prims.mk_range + "prims.fst" + (Prims.of_int (606)) + (Prims.of_int (19)) + (Prims.of_int (606)) + (Prims.of_int (31))) + (Obj.magic + (FStar_Tactics_Effect.tac_bind + (Prims.mk_range + "FStar.InteractiveHelpers.Base.fst" + (Prims.of_int (253)) + (Prims.of_int (10)) + (Prims.of_int (253)) + (Prims.of_int (26))) + (Prims.mk_range + "FStar.InteractiveHelpers.Base.fst" + (Prims.of_int (253)) + (Prims.of_int (10)) + (Prims.of_int (254)) + (Prims.of_int (57))) + (Obj.magic + (abv_to_string + bv)) + (fun uu___2 -> + (fun uu___2 -> + Obj.magic + (FStar_Tactics_Effect.tac_bind + (Prims.mk_range + "FStar.InteractiveHelpers.Base.fst" + (Prims.of_int (253)) + (Prims.of_int (28)) + (Prims.of_int (254)) + (Prims.of_int (57))) + (Prims.mk_range + "prims.fst" + (Prims.of_int (606)) + (Prims.of_int (19)) + (Prims.of_int (606)) + (Prims.of_int (31))) + (Obj.magic + (FStar_Tactics_Effect.tac_bind + (Prims.mk_range + "FStar.InteractiveHelpers.Base.fst" + (Prims.of_int (254)) + (Prims.of_int (4)) + (Prims.of_int (254)) + (Prims.of_int (57))) + (Prims.mk_range + "prims.fst" + (Prims.of_int (606)) + (Prims.of_int (19)) + (Prims.of_int (606)) + (Prims.of_int (31))) + (Obj.magic + (FStar_Tactics_Effect.tac_bind + (Prims.mk_range + "FStar.InteractiveHelpers.Base.fst" + (Prims.of_int (254)) + (Prims.of_int (25)) + (Prims.of_int (254)) + (Prims.of_int (57))) + (Prims.mk_range + "prims.fst" + (Prims.of_int (606)) + (Prims.of_int (19)) + (Prims.of_int (606)) + (Prims.of_int (31))) + (Obj.magic + (FStar_Tactics_Effect.tac_bind + (Prims.mk_range + "FStar.InteractiveHelpers.Base.fst" + (Prims.of_int (254)) + (Prims.of_int (32)) + (Prims.of_int (254)) + (Prims.of_int (57))) + (Prims.mk_range + "prims.fst" + (Prims.of_int (606)) + (Prims.of_int (19)) + (Prims.of_int (606)) + (Prims.of_int (31))) + (Obj.magic + (FStar_Tactics_Effect.tac_bind + (Prims.mk_range + "FStar.InteractiveHelpers.Base.fst" + (Prims.of_int (254)) + (Prims.of_int (32)) + (Prims.of_int (254)) + (Prims.of_int (48))) + (Prims.mk_range + "prims.fst" + (Prims.of_int (606)) + (Prims.of_int (19)) + (Prims.of_int (606)) + (Prims.of_int (31))) + (Obj.magic + (FStar_Tactics_Builtins.term_to_string + t)) + (fun + uu___3 -> + FStar_Tactics_Effect.lift_div_tac + (fun + uu___4 -> + Prims.strcat + uu___3 + "))\n")))) + (fun + uu___3 -> + FStar_Tactics_Effect.lift_div_tac + (fun + uu___4 -> + Prims.strcat + ", " + uu___3)))) + (fun + uu___3 -> + FStar_Tactics_Effect.lift_div_tac + (fun + uu___4 -> + Prims.strcat + (Prims.string_of_bool + abs) + uu___3)))) + (fun + uu___3 -> + FStar_Tactics_Effect.lift_div_tac + (fun + uu___4 -> + Prims.strcat + " -> (" + uu___3)))) + (fun + uu___3 -> + FStar_Tactics_Effect.lift_div_tac + (fun + uu___4 -> + Prims.strcat + uu___2 + uu___3)))) + uu___2))) + (fun uu___2 -> + FStar_Tactics_Effect.lift_div_tac + (fun uu___3 -> + Prims.strcat "(" + uu___2)))) + uu___1))) + (fun uu___ -> + (fun bmap_elem_to_string -> + Obj.magic + (FStar_Tactics_Effect.tac_bind + (Prims.mk_range + "FStar.InteractiveHelpers.Base.fst" + (Prims.of_int (256)) + (Prims.of_int (17)) + (Prims.of_int (256)) + (Prims.of_int (48))) + (Prims.mk_range + "FStar.InteractiveHelpers.Base.fst" + (Prims.of_int (257)) + (Prims.of_int (2)) + (Prims.of_int (261)) + (Prims.of_int (34))) + (Obj.magic + (FStar_Tactics_Util.map + bmap_elem_to_string ge.bmap)) + (fun uu___ -> + (fun bmap_str -> + Obj.magic + (FStar_Tactics_Effect.tac_bind + (Prims.mk_range + "FStar.InteractiveHelpers.Base.fst" + (Prims.of_int (257)) + (Prims.of_int (18)) + (Prims.of_int (257)) + (Prims.of_int (66))) + (Prims.mk_range "prims.fst" + (Prims.of_int (606)) + (Prims.of_int (19)) + (Prims.of_int (606)) + (Prims.of_int (31))) + (Obj.magic + (FStar_Tactics_Util.map + (fun bv -> + FStar_Tactics_Effect.tac_bind + (Prims.mk_range + "FStar.InteractiveHelpers.Base.fst" + (Prims.of_int (257)) + (Prims.of_int (33)) + (Prims.of_int (257)) + (Prims.of_int (49))) + (Prims.mk_range + "prims.fst" + (Prims.of_int (606)) + (Prims.of_int (19)) + (Prims.of_int (606)) + (Prims.of_int (31))) + (Obj.magic + (abv_to_string + bv)) + (fun uu___ -> + FStar_Tactics_Effect.lift_div_tac + (fun uu___1 + -> + Prims.strcat + uu___ + "\n"))) + ge.svars)) + (fun svars_str -> + FStar_Tactics_Effect.lift_div_tac + (fun uu___ -> + Prims.strcat + "> env:\n" + (Prims.strcat + (FStar_List_Tot_Base.fold_left + (fun x -> + fun y -> + Prims.strcat + x y) "" + binders_str) + (Prims.strcat + "> bmap:\n" + (Prims.strcat + (FStar_List_Tot_Base.fold_left + (fun x -> + fun y -> + Prims.strcat + x y) "" + bmap_str) + (Prims.strcat + "> svars:\n" + (FStar_List_Tot_Base.fold_left + (fun x -> + fun y -> + Prims.strcat + x y) "" + svars_str))))))))) + uu___))) uu___))) uu___))) uu___) +let (genv_get : + genv -> + FStar_Reflection_Types.bv -> + (Prims.bool * FStar_Reflection_Types.term) + FStar_Pervasives_Native.option) + = fun ge -> fun b -> bind_map_get ge.bmap b +let (genv_get_from_name : + genv -> + Prims.string -> + (FStar_Reflection_Types.bv * (Prims.bool * + FStar_Reflection_Types.term)) FStar_Pervasives_Native.option) + = fun ge -> fun name -> bind_map_get_from_name ge.bmap name +let (genv_push_bv : + genv -> + FStar_Reflection_Types.bv -> + Prims.bool -> + FStar_Reflection_Types.term FStar_Pervasives_Native.option -> + (genv, unit) FStar_Tactics_Effect.tac_repr) + = + fun ge -> + fun b -> + fun abs -> + fun t -> + FStar_Tactics_Effect.tac_bind + (Prims.mk_range "FStar.InteractiveHelpers.Base.fst" + (Prims.of_int (272)) (Prims.of_int (11)) (Prims.of_int (272)) + (Prims.of_int (22))) + (Prims.mk_range "FStar.InteractiveHelpers.Base.fst" + (Prims.of_int (273)) (Prims.of_int (2)) (Prims.of_int (278)) + (Prims.of_int (25))) + (FStar_Tactics_Effect.lift_div_tac + (fun uu___ -> FStar_Reflection_Derived.mk_binder b)) + (fun uu___ -> + (fun br -> + Obj.magic + (FStar_Tactics_Effect.tac_bind + (Prims.mk_range "FStar.InteractiveHelpers.Base.fst" + (Prims.of_int (273)) (Prims.of_int (11)) + (Prims.of_int (273)) (Prims.of_int (47))) + (Prims.mk_range "FStar.InteractiveHelpers.Base.fst" + (Prims.of_int (274)) (Prims.of_int (2)) + (Prims.of_int (278)) (Prims.of_int (25))) + (FStar_Tactics_Effect.lift_div_tac + (fun uu___ -> + genv_get_from_name ge + (FStar_Reflection_Derived.name_of_bv b))) + (fun uu___ -> + (fun sv -> + Obj.magic + (FStar_Tactics_Effect.tac_bind + (Prims.mk_range + "FStar.InteractiveHelpers.Base.fst" + (Prims.of_int (274)) (Prims.of_int (15)) + (Prims.of_int (274)) (Prims.of_int (74))) + (Prims.mk_range + "FStar.InteractiveHelpers.Base.fst" + (Prims.of_int (275)) (Prims.of_int (2)) + (Prims.of_int (278)) (Prims.of_int (25))) + (FStar_Tactics_Effect.lift_div_tac + (fun uu___ -> + if + FStar_Pervasives_Native.uu___is_Some + sv + then + (FStar_Pervasives_Native.fst + (FStar_Pervasives_Native.__proj__Some__item__v + sv)) + :: (ge.svars) + else ge.svars)) + (fun uu___ -> + (fun svars' -> + Obj.magic + (FStar_Tactics_Effect.tac_bind + (Prims.mk_range + "FStar.InteractiveHelpers.Base.fst" + (Prims.of_int (275)) + (Prims.of_int (11)) + (Prims.of_int (275)) + (Prims.of_int (32))) + (Prims.mk_range + "FStar.InteractiveHelpers.Base.fst" + (Prims.of_int (276)) + (Prims.of_int (2)) + (Prims.of_int (278)) + (Prims.of_int (25))) + (FStar_Tactics_Effect.lift_div_tac + (fun uu___ -> + FStar_Reflection_Builtins.push_binder + ge.env br)) + (fun uu___ -> + (fun e' -> + Obj.magic + (FStar_Tactics_Effect.tac_bind + (Prims.mk_range + "FStar.InteractiveHelpers.Base.fst" + (Prims.of_int (276)) + (Prims.of_int (11)) + (Prims.of_int (276)) + (Prims.of_int (57))) + (Prims.mk_range + "FStar.InteractiveHelpers.Base.fst" + (Prims.of_int (278)) + (Prims.of_int (2)) + (Prims.of_int (278)) + (Prims.of_int (25))) + (if + FStar_Pervasives_Native.uu___is_Some + t + then + Obj.magic + (Obj.repr + (FStar_Tactics_Effect.lift_div_tac + (fun uu___ + -> + FStar_Pervasives_Native.__proj__Some__item__v + t))) + else + Obj.magic + (Obj.repr + (FStar_Tactics_Builtins.pack + (FStar_Reflection_Data.Tv_Var + b)))) + (fun tm -> + FStar_Tactics_Effect.lift_div_tac + (fun uu___ -> + mk_genv e' + (bind_map_push + ge.bmap b + (abs, tm)) + svars')))) + uu___))) uu___))) uu___))) + uu___) +let (genv_push_binder : + genv -> + FStar_Reflection_Types.binder -> + Prims.bool -> + FStar_Reflection_Types.term FStar_Pervasives_Native.option -> + (genv, unit) FStar_Tactics_Effect.tac_repr) + = + fun ge -> + fun b -> + fun abs -> + fun t -> + genv_push_bv ge (FStar_Reflection_Derived.bv_of_binder b) abs t +let (bv_is_shadowed : genv -> FStar_Reflection_Types.bv -> Prims.bool) = + fun ge -> fun bv -> FStar_List_Tot_Base.existsb (bv_eq bv) ge.svars +let (binder_is_shadowed : + genv -> FStar_Reflection_Types.binder -> Prims.bool) = + fun ge -> + fun b -> bv_is_shadowed ge (FStar_Reflection_Derived.bv_of_binder b) +let (find_shadowed_bvs : + genv -> + FStar_Reflection_Types.bv Prims.list -> + (FStar_Reflection_Types.bv * Prims.bool) Prims.list) + = + fun ge -> + fun bl -> + FStar_List_Tot_Base.map (fun b -> (b, (bv_is_shadowed ge b))) bl +let (find_shadowed_binders : + genv -> + FStar_Reflection_Types.binder Prims.list -> + (FStar_Reflection_Types.binder * Prims.bool) Prims.list) + = + fun ge -> + fun bl -> + FStar_List_Tot_Base.map (fun b -> (b, (binder_is_shadowed ge b))) bl +let (bv_is_abstract : genv -> FStar_Reflection_Types.bv -> Prims.bool) = + fun ge -> + fun bv -> + match genv_get ge bv with + | FStar_Pervasives_Native.None -> false + | FStar_Pervasives_Native.Some (abs, uu___) -> abs +let (binder_is_abstract : + genv -> FStar_Reflection_Types.binder -> Prims.bool) = + fun ge -> + fun b -> bv_is_abstract ge (FStar_Reflection_Derived.bv_of_binder b) +let (genv_abstract_bvs : genv -> FStar_Reflection_Types.bv Prims.list) = + fun ge -> + let abs = + FStar_List_Tot_Base.filter + (fun uu___ -> match uu___ with | (uu___1, (abs1, uu___2)) -> abs1) + ge.bmap in + FStar_List_Tot_Base.map + (fun uu___ -> match uu___ with | (bv, uu___1) -> bv) abs +let rec (_fresh_bv : + Prims.string Prims.list -> + Prims.string -> + Prims.int -> + FStar_Reflection_Types.typ -> + (FStar_Reflection_Types.bv, unit) FStar_Tactics_Effect.tac_repr) + = + fun binder_names -> + fun basename -> + fun i -> + fun ty -> + FStar_Tactics_Effect.tac_bind + (Prims.mk_range "FStar.InteractiveHelpers.Base.fst" + (Prims.of_int (315)) (Prims.of_int (13)) (Prims.of_int (315)) + (Prims.of_int (39))) + (Prims.mk_range "FStar.InteractiveHelpers.Base.fst" + (Prims.of_int (318)) (Prims.of_int (2)) (Prims.of_int (319)) + (Prims.of_int (29))) + (FStar_Tactics_Effect.lift_div_tac + (fun uu___ -> Prims.strcat basename (Prims.string_of_int i))) + (fun uu___ -> + (fun name -> + if FStar_List_Tot_Base.mem name binder_names + then + Obj.magic + (_fresh_bv binder_names basename (i + Prims.int_one) ty) + else + Obj.magic (FStar_Tactics_Builtins.fresh_bv_named name ty)) + uu___) +let (fresh_bv : + FStar_Reflection_Types.env -> + Prims.string -> + FStar_Reflection_Types.typ -> + (FStar_Reflection_Types.bv, unit) FStar_Tactics_Effect.tac_repr) + = + fun e -> + fun basename -> + fun ty -> + FStar_Tactics_Effect.tac_bind + (Prims.mk_range "FStar.InteractiveHelpers.Base.fst" + (Prims.of_int (322)) (Prims.of_int (16)) (Prims.of_int (322)) + (Prims.of_int (32))) + (Prims.mk_range "FStar.InteractiveHelpers.Base.fst" + (Prims.of_int (323)) (Prims.of_int (2)) (Prims.of_int (324)) + (Prims.of_int (38))) + (FStar_Tactics_Effect.lift_div_tac + (fun uu___ -> FStar_Reflection_Builtins.binders_of_env e)) + (fun uu___ -> + (fun binders -> + Obj.magic + (FStar_Tactics_Effect.tac_bind + (Prims.mk_range "FStar.InteractiveHelpers.Base.fst" + (Prims.of_int (323)) (Prims.of_int (21)) + (Prims.of_int (323)) (Prims.of_int (56))) + (Prims.mk_range "FStar.InteractiveHelpers.Base.fst" + (Prims.of_int (324)) (Prims.of_int (2)) + (Prims.of_int (324)) (Prims.of_int (38))) + (FStar_Tactics_Effect.lift_div_tac + (fun uu___ -> + FStar_List_Tot_Base.map + FStar_Reflection_Derived.name_of_binder binders)) + (fun uu___ -> + (fun binder_names -> + Obj.magic + (_fresh_bv binder_names basename Prims.int_zero + ty)) uu___))) uu___) +let (fresh_binder : + FStar_Reflection_Types.env -> + Prims.string -> + FStar_Reflection_Types.typ -> + (FStar_Reflection_Types.binder, unit) FStar_Tactics_Effect.tac_repr) + = + fun e -> + fun basename -> + fun ty -> + FStar_Tactics_Effect.tac_bind + (Prims.mk_range "FStar.InteractiveHelpers.Base.fst" + (Prims.of_int (327)) (Prims.of_int (11)) (Prims.of_int (327)) + (Prims.of_int (33))) + (Prims.mk_range "FStar.InteractiveHelpers.Base.fst" + (Prims.of_int (328)) (Prims.of_int (2)) (Prims.of_int (328)) + (Prims.of_int (14))) (Obj.magic (fresh_bv e basename ty)) + (fun bv -> + FStar_Tactics_Effect.lift_div_tac + (fun uu___ -> FStar_Reflection_Derived.mk_binder bv)) +let (genv_push_fresh_binder : + genv -> + Prims.string -> + FStar_Reflection_Types.typ -> + ((genv * FStar_Reflection_Types.binder), unit) + FStar_Tactics_Effect.tac_repr) + = + fun ge -> + fun basename -> + fun ty -> + FStar_Tactics_Effect.tac_bind + (Prims.mk_range "FStar.InteractiveHelpers.Base.fst" + (Prims.of_int (331)) (Prims.of_int (10)) (Prims.of_int (331)) + (Prims.of_int (41))) + (Prims.mk_range "FStar.InteractiveHelpers.Base.fst" + (Prims.of_int (333)) (Prims.of_int (2)) (Prims.of_int (334)) + (Prims.of_int (8))) + (Obj.magic (fresh_binder ge.env basename ty)) + (fun uu___ -> + (fun b -> + Obj.magic + (FStar_Tactics_Effect.tac_bind + (Prims.mk_range "FStar.InteractiveHelpers.Base.fst" + (Prims.of_int (333)) (Prims.of_int (12)) + (Prims.of_int (333)) (Prims.of_int (43))) + (Prims.mk_range "FStar.InteractiveHelpers.Base.fst" + (Prims.of_int (334)) (Prims.of_int (2)) + (Prims.of_int (334)) (Prims.of_int (8))) + (Obj.magic + (genv_push_binder ge b true + FStar_Pervasives_Native.None)) + (fun ge' -> + FStar_Tactics_Effect.lift_div_tac + (fun uu___ -> (ge', b))))) uu___) +let (push_fresh_binder : + FStar_Reflection_Types.env -> + Prims.string -> + FStar_Reflection_Types.typ -> + ((FStar_Reflection_Types.env * FStar_Reflection_Types.binder), + unit) FStar_Tactics_Effect.tac_repr) + = + fun e -> + fun basename -> + fun ty -> + FStar_Tactics_Effect.tac_bind + (Prims.mk_range "FStar.InteractiveHelpers.Base.fst" + (Prims.of_int (338)) (Prims.of_int (10)) (Prims.of_int (338)) + (Prims.of_int (36))) + (Prims.mk_range "FStar.InteractiveHelpers.Base.fst" + (Prims.of_int (339)) (Prims.of_int (2)) (Prims.of_int (340)) + (Prims.of_int (7))) (Obj.magic (fresh_binder e basename ty)) + (fun b -> + FStar_Tactics_Effect.lift_div_tac + (fun uu___ -> ((FStar_Reflection_Builtins.push_binder e b), b))) +let (genv_push_fresh_bv : + genv -> + Prims.string -> + FStar_Reflection_Types.typ -> + ((genv * FStar_Reflection_Types.bv), unit) + FStar_Tactics_Effect.tac_repr) + = + fun ge -> + fun basename -> + fun ty -> + FStar_Tactics_Effect.tac_bind + (Prims.mk_range "FStar.InteractiveHelpers.Base.fst" + (Prims.of_int (343)) (Prims.of_int (15)) (Prims.of_int (343)) + (Prims.of_int (52))) + (Prims.mk_range "FStar.InteractiveHelpers.Base.fst" + (Prims.of_int (343)) (Prims.of_int (2)) (Prims.of_int (344)) + (Prims.of_int (21))) + (Obj.magic (genv_push_fresh_binder ge basename ty)) + (fun uu___ -> + FStar_Tactics_Effect.lift_div_tac + (fun uu___1 -> + match uu___ with + | (ge', b) -> + (ge', (FStar_Reflection_Derived.bv_of_binder b)))) +let (push_fresh_var : + FStar_Reflection_Types.env -> + Prims.string -> + FStar_Reflection_Types.typ -> + ((FStar_Reflection_Types.term * FStar_Reflection_Types.binder * + FStar_Reflection_Types.env), + unit) FStar_Tactics_Effect.tac_repr) + = + fun e0 -> + fun basename -> + fun ty -> + FStar_Tactics_Effect.tac_bind + (Prims.mk_range "FStar.InteractiveHelpers.Base.fst" + (Prims.of_int (348)) (Prims.of_int (15)) (Prims.of_int (348)) + (Prims.of_int (47))) + (Prims.mk_range "FStar.InteractiveHelpers.Base.fst" + (Prims.of_int (348)) (Prims.of_int (2)) (Prims.of_int (350)) + (Prims.of_int (12))) + (Obj.magic (push_fresh_binder e0 basename ty)) + (fun uu___ -> + (fun uu___ -> + match uu___ with + | (e1, b1) -> + Obj.magic + (FStar_Tactics_Effect.tac_bind + (Prims.mk_range "FStar.InteractiveHelpers.Base.fst" + (Prims.of_int (349)) (Prims.of_int (11)) + (Prims.of_int (349)) (Prims.of_int (42))) + (Prims.mk_range "FStar.InteractiveHelpers.Base.fst" + (Prims.of_int (350)) (Prims.of_int (2)) + (Prims.of_int (350)) (Prims.of_int (12))) + (Obj.magic + (FStar_Tactics_Builtins.pack + (FStar_Reflection_Data.Tv_Var + (FStar_Reflection_Derived.bv_of_binder b1)))) + (fun v1 -> + FStar_Tactics_Effect.lift_div_tac + (fun uu___1 -> (v1, b1, e1))))) uu___) +let (genv_push_fresh_var : + genv -> + Prims.string -> + FStar_Reflection_Types.typ -> + ((FStar_Reflection_Types.term * FStar_Reflection_Types.binder * genv), + unit) FStar_Tactics_Effect.tac_repr) + = + fun ge0 -> + fun basename -> + fun ty -> + FStar_Tactics_Effect.tac_bind + (Prims.mk_range "FStar.InteractiveHelpers.Base.fst" + (Prims.of_int (354)) (Prims.of_int (16)) (Prims.of_int (354)) + (Prims.of_int (54))) + (Prims.mk_range "FStar.InteractiveHelpers.Base.fst" + (Prims.of_int (354)) (Prims.of_int (2)) (Prims.of_int (356)) + (Prims.of_int (13))) + (Obj.magic (genv_push_fresh_binder ge0 basename ty)) + (fun uu___ -> + (fun uu___ -> + match uu___ with + | (ge1, b1) -> + Obj.magic + (FStar_Tactics_Effect.tac_bind + (Prims.mk_range "FStar.InteractiveHelpers.Base.fst" + (Prims.of_int (355)) (Prims.of_int (11)) + (Prims.of_int (355)) (Prims.of_int (42))) + (Prims.mk_range "FStar.InteractiveHelpers.Base.fst" + (Prims.of_int (356)) (Prims.of_int (2)) + (Prims.of_int (356)) (Prims.of_int (13))) + (Obj.magic + (FStar_Tactics_Builtins.pack + (FStar_Reflection_Data.Tv_Var + (FStar_Reflection_Derived.bv_of_binder b1)))) + (fun v1 -> + FStar_Tactics_Effect.lift_div_tac + (fun uu___1 -> (v1, b1, ge1))))) uu___) +let (push_two_fresh_vars : + FStar_Reflection_Types.env -> + Prims.string -> + FStar_Reflection_Types.typ -> + ((FStar_Reflection_Types.term * FStar_Reflection_Types.binder * + FStar_Reflection_Types.term * FStar_Reflection_Types.binder * + FStar_Reflection_Types.env), + unit) FStar_Tactics_Effect.tac_repr) + = + fun e0 -> + fun basename -> + fun ty -> + FStar_Tactics_Effect.tac_bind + (Prims.mk_range "FStar.InteractiveHelpers.Base.fst" + (Prims.of_int (360)) (Prims.of_int (15)) (Prims.of_int (360)) + (Prims.of_int (47))) + (Prims.mk_range "FStar.InteractiveHelpers.Base.fst" + (Prims.of_int (360)) (Prims.of_int (2)) (Prims.of_int (364)) + (Prims.of_int (20))) + (Obj.magic (push_fresh_binder e0 basename ty)) + (fun uu___ -> + (fun uu___ -> + match uu___ with + | (e1, b1) -> + Obj.magic + (FStar_Tactics_Effect.tac_bind + (Prims.mk_range "FStar.InteractiveHelpers.Base.fst" + (Prims.of_int (361)) (Prims.of_int (15)) + (Prims.of_int (361)) (Prims.of_int (47))) + (Prims.mk_range "FStar.InteractiveHelpers.Base.fst" + (Prims.of_int (361)) (Prims.of_int (2)) + (Prims.of_int (364)) (Prims.of_int (20))) + (Obj.magic (push_fresh_binder e1 basename ty)) + (fun uu___1 -> + (fun uu___1 -> + match uu___1 with + | (e2, b2) -> + Obj.magic + (FStar_Tactics_Effect.tac_bind + (Prims.mk_range + "FStar.InteractiveHelpers.Base.fst" + (Prims.of_int (362)) + (Prims.of_int (11)) + (Prims.of_int (362)) + (Prims.of_int (42))) + (Prims.mk_range + "FStar.InteractiveHelpers.Base.fst" + (Prims.of_int (363)) + (Prims.of_int (2)) + (Prims.of_int (364)) + (Prims.of_int (20))) + (Obj.magic + (FStar_Tactics_Builtins.pack + (FStar_Reflection_Data.Tv_Var + (FStar_Reflection_Derived.bv_of_binder + b1)))) + (fun uu___2 -> + (fun v1 -> + Obj.magic + (FStar_Tactics_Effect.tac_bind + (Prims.mk_range + "FStar.InteractiveHelpers.Base.fst" + (Prims.of_int (363)) + (Prims.of_int (11)) + (Prims.of_int (363)) + (Prims.of_int (42))) + (Prims.mk_range + "FStar.InteractiveHelpers.Base.fst" + (Prims.of_int (364)) + (Prims.of_int (2)) + (Prims.of_int (364)) + (Prims.of_int (20))) + (Obj.magic + (FStar_Tactics_Builtins.pack + (FStar_Reflection_Data.Tv_Var + (FStar_Reflection_Derived.bv_of_binder + b2)))) + (fun v2 -> + FStar_Tactics_Effect.lift_div_tac + (fun uu___2 -> + (v1, b1, v2, b2, + e2))))) uu___2))) + uu___1))) uu___) +let (genv_push_two_fresh_vars : + genv -> + Prims.string -> + FStar_Reflection_Types.typ -> + ((FStar_Reflection_Types.term * FStar_Reflection_Types.binder * + FStar_Reflection_Types.term * FStar_Reflection_Types.binder * + genv), + unit) FStar_Tactics_Effect.tac_repr) + = + fun ge0 -> + fun basename -> + fun ty -> + FStar_Tactics_Effect.tac_bind + (Prims.mk_range "FStar.InteractiveHelpers.Base.fst" + (Prims.of_int (368)) (Prims.of_int (16)) (Prims.of_int (368)) + (Prims.of_int (54))) + (Prims.mk_range "FStar.InteractiveHelpers.Base.fst" + (Prims.of_int (368)) (Prims.of_int (2)) (Prims.of_int (372)) + (Prims.of_int (21))) + (Obj.magic (genv_push_fresh_binder ge0 basename ty)) + (fun uu___ -> + (fun uu___ -> + match uu___ with + | (ge1, b1) -> + Obj.magic + (FStar_Tactics_Effect.tac_bind + (Prims.mk_range "FStar.InteractiveHelpers.Base.fst" + (Prims.of_int (369)) (Prims.of_int (16)) + (Prims.of_int (369)) (Prims.of_int (54))) + (Prims.mk_range "FStar.InteractiveHelpers.Base.fst" + (Prims.of_int (369)) (Prims.of_int (2)) + (Prims.of_int (372)) (Prims.of_int (21))) + (Obj.magic (genv_push_fresh_binder ge1 basename ty)) + (fun uu___1 -> + (fun uu___1 -> + match uu___1 with + | (ge2, b2) -> + Obj.magic + (FStar_Tactics_Effect.tac_bind + (Prims.mk_range + "FStar.InteractiveHelpers.Base.fst" + (Prims.of_int (370)) + (Prims.of_int (11)) + (Prims.of_int (370)) + (Prims.of_int (42))) + (Prims.mk_range + "FStar.InteractiveHelpers.Base.fst" + (Prims.of_int (371)) + (Prims.of_int (2)) + (Prims.of_int (372)) + (Prims.of_int (21))) + (Obj.magic + (FStar_Tactics_Builtins.pack + (FStar_Reflection_Data.Tv_Var + (FStar_Reflection_Derived.bv_of_binder + b1)))) + (fun uu___2 -> + (fun v1 -> + Obj.magic + (FStar_Tactics_Effect.tac_bind + (Prims.mk_range + "FStar.InteractiveHelpers.Base.fst" + (Prims.of_int (371)) + (Prims.of_int (11)) + (Prims.of_int (371)) + (Prims.of_int (42))) + (Prims.mk_range + "FStar.InteractiveHelpers.Base.fst" + (Prims.of_int (372)) + (Prims.of_int (2)) + (Prims.of_int (372)) + (Prims.of_int (21))) + (Obj.magic + (FStar_Tactics_Builtins.pack + (FStar_Reflection_Data.Tv_Var + (FStar_Reflection_Derived.bv_of_binder + b2)))) + (fun v2 -> + FStar_Tactics_Effect.lift_div_tac + (fun uu___2 -> + (v1, b1, v2, b2, + ge2))))) uu___2))) + uu___1))) uu___) +let (norm_apply_subst : + FStar_Reflection_Types.env -> + FStar_Reflection_Types.term -> + (FStar_Reflection_Types.bv * FStar_Reflection_Types.term) Prims.list -> + (FStar_Reflection_Types.term, unit) FStar_Tactics_Effect.tac_repr) + = + fun e -> + fun t -> + fun subst -> + FStar_Tactics_Effect.tac_bind + (Prims.mk_range "FStar.InteractiveHelpers.Base.fst" + (Prims.of_int (386)) (Prims.of_int (15)) (Prims.of_int (386)) + (Prims.of_int (26))) + (Prims.mk_range "FStar.InteractiveHelpers.Base.fst" + (Prims.of_int (386)) (Prims.of_int (2)) (Prims.of_int (390)) + (Prims.of_int (23))) + (FStar_Tactics_Effect.lift_div_tac (fun uu___ -> unzip subst)) + (fun uu___ -> + (fun uu___ -> + match uu___ with + | (bl, vl) -> + Obj.magic + (FStar_Tactics_Effect.tac_bind + (Prims.mk_range "FStar.InteractiveHelpers.Base.fst" + (Prims.of_int (387)) (Prims.of_int (11)) + (Prims.of_int (387)) (Prims.of_int (36))) + (Prims.mk_range "FStar.InteractiveHelpers.Base.fst" + (Prims.of_int (388)) (Prims.of_int (2)) + (Prims.of_int (390)) (Prims.of_int (23))) + (FStar_Tactics_Effect.lift_div_tac + (fun uu___1 -> + FStar_List_Tot_Base.map + FStar_Reflection_Derived.mk_binder bl)) + (fun uu___1 -> + (fun bl1 -> + Obj.magic + (FStar_Tactics_Effect.tac_bind + (Prims.mk_range + "FStar.InteractiveHelpers.Base.fst" + (Prims.of_int (388)) + (Prims.of_int (11)) + (Prims.of_int (388)) + (Prims.of_int (22))) + (Prims.mk_range + "FStar.InteractiveHelpers.Base.fst" + (Prims.of_int (389)) + (Prims.of_int (2)) + (Prims.of_int (390)) + (Prims.of_int (23))) + (Obj.magic + (FStar_Tactics_Derived.mk_abs bl1 t)) + (fun uu___1 -> + (fun t1 -> + Obj.magic + (FStar_Tactics_Effect.tac_bind + (Prims.mk_range + "FStar.InteractiveHelpers.Base.fst" + (Prims.of_int (389)) + (Prims.of_int (11)) + (Prims.of_int (389)) + (Prims.of_int (25))) + (Prims.mk_range + "FStar.InteractiveHelpers.Base.fst" + (Prims.of_int (390)) + (Prims.of_int (2)) + (Prims.of_int (390)) + (Prims.of_int (23))) + (FStar_Tactics_Effect.lift_div_tac + (fun uu___1 -> + FStar_Reflection_Derived.mk_e_app + t1 vl)) + (fun uu___1 -> + (fun t2 -> + Obj.magic + (FStar_Tactics_Builtins.norm_term_env + e [] t2)) uu___1))) + uu___1))) uu___1))) uu___) +let (norm_apply_subst_in_comp : + FStar_Reflection_Types.env -> + FStar_Reflection_Types.comp -> + (FStar_Reflection_Types.bv * FStar_Reflection_Types.term) Prims.list -> + (FStar_Reflection_Types.comp, unit) FStar_Tactics_Effect.tac_repr) + = + fun e -> + fun c -> + fun subst -> + FStar_Tactics_Effect.tac_bind + (Prims.mk_range "FStar.InteractiveHelpers.Base.fst" + (Prims.of_int (393)) (Prims.of_int (14)) (Prims.of_int (393)) + (Prims.of_int (51))) + (Prims.mk_range "FStar.InteractiveHelpers.Base.fst" + (Prims.of_int (394)) (Prims.of_int (2)) (Prims.of_int (416)) + (Prims.of_int (55))) + (FStar_Tactics_Effect.lift_div_tac + (fun uu___ -> fun x -> norm_apply_subst e x subst)) + (fun uu___ -> + (fun subst1 -> + Obj.magic + (FStar_Tactics_Effect.tac_bind + (Prims.mk_range "FStar.InteractiveHelpers.Base.fst" + (Prims.of_int (395)) (Prims.of_int (4)) + (Prims.of_int (398)) (Prims.of_int (34))) + (Prims.mk_range "FStar.InteractiveHelpers.Base.fst" + (Prims.of_int (400)) (Prims.of_int (2)) + (Prims.of_int (416)) (Prims.of_int (55))) + (FStar_Tactics_Effect.lift_div_tac + (fun uu___1 -> + fun uu___ -> + (fun uu___ -> + fun a -> + match a with + | FStar_Reflection_Data.Q_Implicit -> + Obj.magic + (Obj.repr + (FStar_Tactics_Effect.lift_div_tac + (fun uu___1 -> a))) + | FStar_Reflection_Data.Q_Explicit -> + Obj.magic + (Obj.repr + (FStar_Tactics_Effect.lift_div_tac + (fun uu___1 -> a))) + | FStar_Reflection_Data.Q_Meta t -> + Obj.magic + (Obj.repr + (FStar_Tactics_Effect.tac_bind + (Prims.mk_range + "FStar.InteractiveHelpers.Base.fst" + (Prims.of_int (398)) + (Prims.of_int (25)) + (Prims.of_int (398)) + (Prims.of_int (34))) + (Prims.mk_range + "FStar.InteractiveHelpers.Base.fst" + (Prims.of_int (398)) + (Prims.of_int (18)) + (Prims.of_int (398)) + (Prims.of_int (34))) + (Obj.magic (subst1 t)) + (fun uu___1 -> + FStar_Tactics_Effect.lift_div_tac + (fun uu___2 -> + FStar_Reflection_Data.Q_Meta + uu___1))))) uu___1 + uu___)) + (fun uu___ -> + (fun subst_in_aqualv -> + match FStar_Reflection_Builtins.inspect_comp c + with + | FStar_Reflection_Data.C_Total ret -> + Obj.magic + (FStar_Tactics_Effect.tac_bind + (Prims.mk_range + "FStar.InteractiveHelpers.Base.fst" + (Prims.of_int (402)) + (Prims.of_int (14)) + (Prims.of_int (402)) + (Prims.of_int (23))) + (Prims.mk_range + "FStar.InteractiveHelpers.Base.fst" + (Prims.of_int (403)) + (Prims.of_int (4)) + (Prims.of_int (403)) + (Prims.of_int (27))) + (Obj.magic (subst1 ret)) + (fun ret1 -> + FStar_Tactics_Effect.lift_div_tac + (fun uu___ -> + FStar_Reflection_Builtins.pack_comp + (FStar_Reflection_Data.C_Total + ret1)))) + | FStar_Reflection_Data.C_GTotal ret -> + Obj.magic + (FStar_Tactics_Effect.tac_bind + (Prims.mk_range + "FStar.InteractiveHelpers.Base.fst" + (Prims.of_int (405)) + (Prims.of_int (14)) + (Prims.of_int (405)) + (Prims.of_int (23))) + (Prims.mk_range + "FStar.InteractiveHelpers.Base.fst" + (Prims.of_int (406)) + (Prims.of_int (4)) + (Prims.of_int (406)) + (Prims.of_int (28))) + (Obj.magic (subst1 ret)) + (fun ret1 -> + FStar_Tactics_Effect.lift_div_tac + (fun uu___ -> + FStar_Reflection_Builtins.pack_comp + (FStar_Reflection_Data.C_GTotal + ret1)))) + | FStar_Reflection_Data.C_Lemma + (pre, post, patterns) -> + Obj.magic + (FStar_Tactics_Effect.tac_bind + (Prims.mk_range + "FStar.InteractiveHelpers.Base.fst" + (Prims.of_int (408)) + (Prims.of_int (14)) + (Prims.of_int (408)) + (Prims.of_int (23))) + (Prims.mk_range + "FStar.InteractiveHelpers.Base.fst" + (Prims.of_int (409)) + (Prims.of_int (4)) + (Prims.of_int (411)) + (Prims.of_int (41))) + (Obj.magic (subst1 pre)) + (fun uu___ -> + (fun pre1 -> + Obj.magic + (FStar_Tactics_Effect.tac_bind + (Prims.mk_range + "FStar.InteractiveHelpers.Base.fst" + (Prims.of_int (409)) + (Prims.of_int (15)) + (Prims.of_int (409)) + (Prims.of_int (25))) + (Prims.mk_range + "FStar.InteractiveHelpers.Base.fst" + (Prims.of_int (410)) + (Prims.of_int (4)) + (Prims.of_int (411)) + (Prims.of_int (41))) + (Obj.magic (subst1 post)) + (fun uu___ -> + (fun post1 -> + Obj.magic + (FStar_Tactics_Effect.tac_bind + (Prims.mk_range + "FStar.InteractiveHelpers.Base.fst" + (Prims.of_int (410)) + (Prims.of_int (19)) + (Prims.of_int (410)) + (Prims.of_int (33))) + (Prims.mk_range + "FStar.InteractiveHelpers.Base.fst" + (Prims.of_int (411)) + (Prims.of_int (4)) + (Prims.of_int (411)) + (Prims.of_int (41))) + (Obj.magic + (subst1 patterns)) + (fun patterns1 -> + FStar_Tactics_Effect.lift_div_tac + (fun uu___ -> + FStar_Reflection_Builtins.pack_comp + ( + FStar_Reflection_Data.C_Lemma + (pre1, + post1, + patterns1)))))) + uu___))) uu___)) + | FStar_Reflection_Data.C_Eff + (us, eff_name, result, eff_args, decrs) -> + Obj.magic + (FStar_Tactics_Effect.tac_bind + (Prims.mk_range + "FStar.InteractiveHelpers.Base.fst" + (Prims.of_int (413)) + (Prims.of_int (17)) + (Prims.of_int (413)) + (Prims.of_int (29))) + (Prims.mk_range + "FStar.InteractiveHelpers.Base.fst" + (Prims.of_int (414)) + (Prims.of_int (4)) + (Prims.of_int (416)) + (Prims.of_int (55))) + (Obj.magic (subst1 result)) + (fun uu___ -> + (fun result1 -> + Obj.magic + (FStar_Tactics_Effect.tac_bind + (Prims.mk_range + "FStar.InteractiveHelpers.Base.fst" + (Prims.of_int (414)) + (Prims.of_int (19)) + (Prims.of_int (414)) + (Prims.of_int (76))) + (Prims.mk_range + "FStar.InteractiveHelpers.Base.fst" + (Prims.of_int (415)) + (Prims.of_int (4)) + (Prims.of_int (416)) + (Prims.of_int (55))) + (Obj.magic + (FStar_Tactics_Util.map + (fun uu___ -> + match uu___ with + | (x, a) -> + FStar_Tactics_Effect.tac_bind + (Prims.mk_range + "FStar.InteractiveHelpers.Base.fst" + (Prims.of_int (414)) + (Prims.of_int (39)) + (Prims.of_int (414)) + (Prims.of_int (46))) + (Prims.mk_range + "FStar.InteractiveHelpers.Base.fst" + (Prims.of_int (414)) + (Prims.of_int (38)) + (Prims.of_int (414)) + (Prims.of_int (66))) + (Obj.magic + (subst1 x)) + (fun uu___1 -> + (fun uu___1 + -> + Obj.magic + (FStar_Tactics_Effect.tac_bind + (Prims.mk_range + "FStar.InteractiveHelpers.Base.fst" + (Prims.of_int (414)) + (Prims.of_int (48)) + (Prims.of_int (414)) + (Prims.of_int (65))) + (Prims.mk_range + "FStar.InteractiveHelpers.Base.fst" + (Prims.of_int (414)) + (Prims.of_int (38)) + (Prims.of_int (414)) + (Prims.of_int (66))) + (Obj.magic + (subst_in_aqualv + a)) + (fun + uu___2 -> + FStar_Tactics_Effect.lift_div_tac + (fun + uu___3 -> + (uu___1, + uu___2))))) + uu___1)) + eff_args)) + (fun uu___ -> + (fun eff_args1 -> + Obj.magic + (FStar_Tactics_Effect.tac_bind + (Prims.mk_range + "FStar.InteractiveHelpers.Base.fst" + (Prims.of_int (415)) + (Prims.of_int (16)) + (Prims.of_int (415)) + (Prims.of_int (31))) + (Prims.mk_range + "FStar.InteractiveHelpers.Base.fst" + (Prims.of_int (416)) + (Prims.of_int (4)) + (Prims.of_int (416)) + (Prims.of_int (55))) + (Obj.magic + (FStar_Tactics_Util.map + subst1 decrs)) + (fun decrs1 -> + FStar_Tactics_Effect.lift_div_tac + (fun uu___ -> + FStar_Reflection_Builtins.pack_comp + ( + FStar_Reflection_Data.C_Eff + (us, + eff_name, + result1, + eff_args1, + decrs1)))))) + uu___))) uu___))) uu___))) + uu___) +let rec (deep_apply_subst : + FStar_Reflection_Types.env -> + FStar_Reflection_Types.term -> + (FStar_Reflection_Types.bv * FStar_Reflection_Types.term) Prims.list -> + (FStar_Reflection_Types.term, unit) FStar_Tactics_Effect.tac_repr) + = + fun e -> + fun t -> + fun subst -> + FStar_Tactics_Effect.tac_bind + (Prims.mk_range "FStar.InteractiveHelpers.Base.fst" + (Prims.of_int (435)) (Prims.of_int (8)) (Prims.of_int (435)) + (Prims.of_int (17))) + (Prims.mk_range "FStar.InteractiveHelpers.Base.fst" + (Prims.of_int (435)) (Prims.of_int (2)) (Prims.of_int (508)) + (Prims.of_int (5))) + (Obj.magic (FStar_Tactics_Builtins.inspect t)) + (fun uu___ -> + (fun uu___ -> + match uu___ with + | FStar_Reflection_Data.Tv_Var b -> + Obj.magic + (Obj.repr + (FStar_Tactics_Effect.lift_div_tac + (fun uu___1 -> + match bind_map_get subst b with + | FStar_Pervasives_Native.None -> t + | FStar_Pervasives_Native.Some t' -> t'))) + | FStar_Reflection_Data.Tv_BVar b -> + Obj.magic + (Obj.repr + (FStar_Tactics_Effect.lift_div_tac + (fun uu___1 -> + match bind_map_get subst b with + | FStar_Pervasives_Native.None -> t + | FStar_Pervasives_Native.Some t' -> t'))) + | FStar_Reflection_Data.Tv_FVar uu___1 -> + Obj.magic + (Obj.repr + (FStar_Tactics_Effect.lift_div_tac (fun uu___2 -> t))) + | FStar_Reflection_Data.Tv_App (hd, (a, qual)) -> + Obj.magic + (Obj.repr + (FStar_Tactics_Effect.tac_bind + (Prims.mk_range + "FStar.InteractiveHelpers.Base.fst" + (Prims.of_int (449)) (Prims.of_int (13)) + (Prims.of_int (449)) (Prims.of_int (40))) + (Prims.mk_range + "FStar.InteractiveHelpers.Base.fst" + (Prims.of_int (450)) (Prims.of_int (4)) + (Prims.of_int (451)) (Prims.of_int (30))) + (Obj.magic (deep_apply_subst e hd subst)) + (fun uu___1 -> + (fun hd1 -> + Obj.magic + (FStar_Tactics_Effect.tac_bind + (Prims.mk_range + "FStar.InteractiveHelpers.Base.fst" + (Prims.of_int (450)) + (Prims.of_int (12)) + (Prims.of_int (450)) + (Prims.of_int (38))) + (Prims.mk_range + "FStar.InteractiveHelpers.Base.fst" + (Prims.of_int (451)) + (Prims.of_int (4)) + (Prims.of_int (451)) + (Prims.of_int (30))) + (Obj.magic + (deep_apply_subst e a subst)) + (fun uu___1 -> + (fun a1 -> + Obj.magic + (FStar_Tactics_Builtins.pack + (FStar_Reflection_Data.Tv_App + (hd1, (a1, qual))))) + uu___1))) uu___1))) + | FStar_Reflection_Data.Tv_Abs (br, body) -> + Obj.magic + (Obj.repr + (FStar_Tactics_Effect.tac_bind + (Prims.mk_range + "FStar.InteractiveHelpers.Base.fst" + (Prims.of_int (453)) (Prims.of_int (15)) + (Prims.of_int (453)) (Prims.of_int (44))) + (Prims.mk_range + "FStar.InteractiveHelpers.Base.fst" + (Prims.of_int (454)) (Prims.of_int (4)) + (Prims.of_int (454)) (Prims.of_int (25))) + (Obj.magic (deep_apply_subst e body subst)) + (fun uu___1 -> + (fun body1 -> + Obj.magic + (FStar_Tactics_Builtins.pack + (FStar_Reflection_Data.Tv_Abs + (br, body1)))) uu___1))) + | FStar_Reflection_Data.Tv_Arrow (br, c) -> + Obj.magic + (Obj.repr + (FStar_Tactics_Effect.tac_bind + (Prims.mk_range + "FStar.InteractiveHelpers.Base.fst" + (Prims.of_int (456)) (Prims.of_int (20)) + (Prims.of_int (456)) (Prims.of_int (57))) + (Prims.mk_range + "FStar.InteractiveHelpers.Base.fst" + (Prims.of_int (456)) (Prims.of_int (4)) + (Prims.of_int (458)) (Prims.of_int (24))) + (Obj.magic + (deep_apply_subst_in_binder e br subst)) + (fun uu___1 -> + (fun uu___1 -> + match uu___1 with + | (br1, subst1) -> + Obj.magic + (FStar_Tactics_Effect.tac_bind + (Prims.mk_range + "FStar.InteractiveHelpers.Base.fst" + (Prims.of_int (457)) + (Prims.of_int (12)) + (Prims.of_int (457)) + (Prims.of_int (46))) + (Prims.mk_range + "FStar.InteractiveHelpers.Base.fst" + (Prims.of_int (458)) + (Prims.of_int (4)) + (Prims.of_int (458)) + (Prims.of_int (24))) + (Obj.magic + (deep_apply_subst_in_comp e c + subst1)) + (fun uu___2 -> + (fun c1 -> + Obj.magic + (FStar_Tactics_Builtins.pack + (FStar_Reflection_Data.Tv_Arrow + (br1, c1)))) uu___2))) + uu___1))) + | FStar_Reflection_Data.Tv_Type uu___1 -> + Obj.magic + (Obj.repr + (FStar_Tactics_Effect.lift_div_tac (fun uu___2 -> t))) + | FStar_Reflection_Data.Tv_Refine (bv, ref) -> + Obj.magic + (Obj.repr + (FStar_Tactics_Effect.tac_bind + (Prims.mk_range + "FStar.InteractiveHelpers.Base.fst" + (Prims.of_int (461)) (Prims.of_int (20)) + (Prims.of_int (461)) (Prims.of_int (53))) + (Prims.mk_range + "FStar.InteractiveHelpers.Base.fst" + (Prims.of_int (461)) (Prims.of_int (4)) + (Prims.of_int (463)) (Prims.of_int (27))) + (Obj.magic (deep_apply_subst_in_bv e bv subst)) + (fun uu___1 -> + (fun uu___1 -> + match uu___1 with + | (bv1, subst1) -> + Obj.magic + (FStar_Tactics_Effect.tac_bind + (Prims.mk_range + "FStar.InteractiveHelpers.Base.fst" + (Prims.of_int (462)) + (Prims.of_int (14)) + (Prims.of_int (462)) + (Prims.of_int (42))) + (Prims.mk_range + "FStar.InteractiveHelpers.Base.fst" + (Prims.of_int (463)) + (Prims.of_int (4)) + (Prims.of_int (463)) + (Prims.of_int (27))) + (Obj.magic + (deep_apply_subst e ref subst1)) + (fun uu___2 -> + (fun ref1 -> + Obj.magic + (FStar_Tactics_Builtins.pack + (FStar_Reflection_Data.Tv_Refine + (bv1, ref1)))) + uu___2))) uu___1))) + | FStar_Reflection_Data.Tv_Const uu___1 -> + Obj.magic + (Obj.repr + (FStar_Tactics_Effect.lift_div_tac (fun uu___2 -> t))) + | FStar_Reflection_Data.Tv_Uvar (uu___1, uu___2) -> + Obj.magic + (Obj.repr + (FStar_Tactics_Effect.lift_div_tac (fun uu___3 -> t))) + | FStar_Reflection_Data.Tv_Let (recf, attrs, bv, def, body) + -> + Obj.magic + (Obj.repr + (FStar_Tactics_Effect.tac_bind + (Prims.mk_range + "FStar.InteractiveHelpers.Base.fst" + (Prims.of_int (468)) (Prims.of_int (20)) + (Prims.of_int (468)) (Prims.of_int (53))) + (Prims.mk_range + "FStar.InteractiveHelpers.Base.fst" + (Prims.of_int (468)) (Prims.of_int (4)) + (Prims.of_int (471)) (Prims.of_int (37))) + (Obj.magic (deep_apply_subst_in_bv e bv subst)) + (fun uu___1 -> + (fun uu___1 -> + match uu___1 with + | (bv1, subst1) -> + Obj.magic + (FStar_Tactics_Effect.tac_bind + (Prims.mk_range + "FStar.InteractiveHelpers.Base.fst" + (Prims.of_int (469)) + (Prims.of_int (14)) + (Prims.of_int (469)) + (Prims.of_int (42))) + (Prims.mk_range + "FStar.InteractiveHelpers.Base.fst" + (Prims.of_int (470)) + (Prims.of_int (4)) + (Prims.of_int (471)) + (Prims.of_int (37))) + (Obj.magic + (deep_apply_subst e def subst1)) + (fun uu___2 -> + (fun def1 -> + Obj.magic + (FStar_Tactics_Effect.tac_bind + (Prims.mk_range + "FStar.InteractiveHelpers.Base.fst" + (Prims.of_int (470)) + (Prims.of_int (15)) + (Prims.of_int (470)) + (Prims.of_int (44))) + (Prims.mk_range + "FStar.InteractiveHelpers.Base.fst" + (Prims.of_int (471)) + (Prims.of_int (4)) + (Prims.of_int (471)) + (Prims.of_int (37))) + (Obj.magic + (deep_apply_subst e + body subst1)) + (fun uu___2 -> + (fun body1 -> + Obj.magic + (FStar_Tactics_Builtins.pack + (FStar_Reflection_Data.Tv_Let + (recf, + [], bv1, + def1, + body1)))) + uu___2))) uu___2))) + uu___1))) + | FStar_Reflection_Data.Tv_Match + (scrutinee, ret_opt, branches) -> + Obj.magic + (Obj.repr + (FStar_Tactics_Effect.tac_bind + (Prims.mk_range + "FStar.InteractiveHelpers.Base.fst" + (Prims.of_int (473)) (Prims.of_int (20)) + (Prims.of_int (473)) (Prims.of_int (54))) + (Prims.mk_range + "FStar.InteractiveHelpers.Base.fst" + (Prims.of_int (474)) (Prims.of_int (4)) + (Prims.of_int (495)) (Prims.of_int (46))) + (Obj.magic (deep_apply_subst e scrutinee subst)) + (fun uu___1 -> + (fun scrutinee1 -> + Obj.magic + (FStar_Tactics_Effect.tac_bind + (Prims.mk_range + "FStar.InteractiveHelpers.Base.fst" + (Prims.of_int (474)) + (Prims.of_int (18)) + (Prims.of_int (486)) + (Prims.of_int (21))) + (Prims.mk_range + "FStar.InteractiveHelpers.Base.fst" + (Prims.of_int (488)) + (Prims.of_int (4)) + (Prims.of_int (495)) + (Prims.of_int (46))) + (Obj.magic + (FStar_Tactics_Util.map_opt + (fun uu___1 -> + match uu___1 with + | (b, asc) -> + FStar_Tactics_Effect.tac_bind + (Prims.mk_range + "FStar.InteractiveHelpers.Base.fst" + (Prims.of_int (475)) + (Prims.of_int (21)) + (Prims.of_int (475)) + (Prims.of_int (57))) + (Prims.mk_range + "FStar.InteractiveHelpers.Base.fst" + (Prims.of_int (475)) + (Prims.of_int (6)) + (Prims.of_int (486)) + (Prims.of_int (12))) + (Obj.magic + (deep_apply_subst_in_binder + e b subst)) + (fun uu___2 -> + (fun uu___2 -> + match uu___2 with + | (b1, subst1) -> + Obj.magic + (FStar_Tactics_Effect.tac_bind + (Prims.mk_range + "FStar.InteractiveHelpers.Base.fst" + (Prims.of_int (477)) + (Prims.of_int (8)) + (Prims.of_int (485)) + (Prims.of_int (16))) + (Prims.mk_range + "FStar.InteractiveHelpers.Base.fst" + (Prims.of_int (486)) + (Prims.of_int (6)) + (Prims.of_int (486)) + (Prims.of_int (12))) + (match asc + with + | + (FStar_Pervasives.Inl + t1, + tacopt, + use_eq) + -> + Obj.magic + (FStar_Tactics_Effect.tac_bind + (Prims.mk_range + "FStar.InteractiveHelpers.Base.fst" + (Prims.of_int (479)) + (Prims.of_int (10)) + (Prims.of_int (479)) + (Prims.of_int (42))) + (Prims.mk_range + "FStar.InteractiveHelpers.Base.fst" + (Prims.of_int (479)) + (Prims.of_int (10)) + (Prims.of_int (481)) + (Prims.of_int (16))) + (Obj.magic + (FStar_Tactics_Effect.tac_bind + (Prims.mk_range + "FStar.InteractiveHelpers.Base.fst" + (Prims.of_int (479)) + (Prims.of_int (14)) + (Prims.of_int (479)) + (Prims.of_int (42))) + (Prims.mk_range + "FStar.InteractiveHelpers.Base.fst" + (Prims.of_int (479)) + (Prims.of_int (10)) + (Prims.of_int (479)) + (Prims.of_int (42))) + (Obj.magic + (deep_apply_subst + e t1 + subst1)) + (fun + uu___3 -> + FStar_Tactics_Effect.lift_div_tac + (fun + uu___4 -> + FStar_Pervasives.Inl + uu___3)))) + (fun + uu___3 -> + (fun + uu___3 -> + Obj.magic + (FStar_Tactics_Effect.tac_bind + (Prims.mk_range + "FStar.InteractiveHelpers.Base.fst" + (Prims.of_int (480)) + (Prims.of_int (10)) + (Prims.of_int (480)) + (Prims.of_int (66))) + (Prims.mk_range + "FStar.InteractiveHelpers.Base.fst" + (Prims.of_int (479)) + (Prims.of_int (10)) + (Prims.of_int (481)) + (Prims.of_int (16))) + (Obj.magic + (FStar_Tactics_Util.map_opt + (fun tac + -> + deep_apply_subst + e tac + subst1) + tacopt)) + (fun + uu___4 -> + FStar_Tactics_Effect.lift_div_tac + (fun + uu___5 -> + (uu___3, + uu___4, + use_eq))))) + uu___3)) + | + (FStar_Pervasives.Inr + c, + tacopt, + use_eq) + -> + Obj.magic + (FStar_Tactics_Effect.tac_bind + (Prims.mk_range + "FStar.InteractiveHelpers.Base.fst" + (Prims.of_int (483)) + (Prims.of_int (10)) + (Prims.of_int (483)) + (Prims.of_int (50))) + (Prims.mk_range + "FStar.InteractiveHelpers.Base.fst" + (Prims.of_int (483)) + (Prims.of_int (10)) + (Prims.of_int (485)) + (Prims.of_int (16))) + (Obj.magic + (FStar_Tactics_Effect.tac_bind + (Prims.mk_range + "FStar.InteractiveHelpers.Base.fst" + (Prims.of_int (483)) + (Prims.of_int (14)) + (Prims.of_int (483)) + (Prims.of_int (50))) + (Prims.mk_range + "FStar.InteractiveHelpers.Base.fst" + (Prims.of_int (483)) + (Prims.of_int (10)) + (Prims.of_int (483)) + (Prims.of_int (50))) + (Obj.magic + (deep_apply_subst_in_comp + e c + subst1)) + (fun + uu___3 -> + FStar_Tactics_Effect.lift_div_tac + (fun + uu___4 -> + FStar_Pervasives.Inr + uu___3)))) + (fun + uu___3 -> + (fun + uu___3 -> + Obj.magic + (FStar_Tactics_Effect.tac_bind + (Prims.mk_range + "FStar.InteractiveHelpers.Base.fst" + (Prims.of_int (484)) + (Prims.of_int (10)) + (Prims.of_int (484)) + (Prims.of_int (66))) + (Prims.mk_range + "FStar.InteractiveHelpers.Base.fst" + (Prims.of_int (483)) + (Prims.of_int (10)) + (Prims.of_int (485)) + (Prims.of_int (16))) + (Obj.magic + (FStar_Tactics_Util.map_opt + (fun tac + -> + deep_apply_subst + e tac + subst1) + tacopt)) + (fun + uu___4 -> + FStar_Tactics_Effect.lift_div_tac + (fun + uu___5 -> + (uu___3, + uu___4, + use_eq))))) + uu___3))) + (fun asc1 + -> + FStar_Tactics_Effect.lift_div_tac + (fun + uu___3 -> + (b1, + asc1))))) + uu___2)) ret_opt)) + (fun uu___1 -> + (fun ret_opt1 -> + Obj.magic + (FStar_Tactics_Effect.tac_bind + (Prims.mk_range + "FStar.InteractiveHelpers.Base.fst" + (Prims.of_int (489)) + (Prims.of_int (6)) + (Prims.of_int (492)) + (Prims.of_int (13))) + (Prims.mk_range + "FStar.InteractiveHelpers.Base.fst" + (Prims.of_int (494)) + (Prims.of_int (4)) + (Prims.of_int (495)) + (Prims.of_int (46))) + (FStar_Tactics_Effect.lift_div_tac + (fun uu___1 -> + fun branch -> + FStar_Tactics_Effect.tac_bind + (Prims.mk_range + "FStar.InteractiveHelpers.Base.fst" + (Prims.of_int (489)) + (Prims.of_int (20)) + (Prims.of_int (489)) + (Prims.of_int (26))) + (Prims.mk_range + "FStar.InteractiveHelpers.Base.fst" + (Prims.of_int (489)) + (Prims.of_int (6)) + (Prims.of_int (492)) + (Prims.of_int (13))) + (FStar_Tactics_Effect.lift_div_tac + (fun uu___2 -> + branch)) + (fun uu___2 -> + (fun uu___2 -> + match uu___2 + with + | (pat, tm) + -> + Obj.magic + (FStar_Tactics_Effect.tac_bind + (Prims.mk_range + "FStar.InteractiveHelpers.Base.fst" + (Prims.of_int (490)) + (Prims.of_int (23)) + (Prims.of_int (490)) + (Prims.of_int (62))) + (Prims.mk_range + "FStar.InteractiveHelpers.Base.fst" + (Prims.of_int (490)) + (Prims.of_int (6)) + (Prims.of_int (492)) + (Prims.of_int (13))) + (Obj.magic + (deep_apply_subst_in_pattern + e pat + subst)) + (fun + uu___3 -> + (fun + uu___3 -> + match uu___3 + with + | + (pat1, + subst1) + -> + Obj.magic + (FStar_Tactics_Effect.tac_bind + (Prims.mk_range + "FStar.InteractiveHelpers.Base.fst" + (Prims.of_int (491)) + (Prims.of_int (15)) + (Prims.of_int (491)) + (Prims.of_int (42))) + (Prims.mk_range + "FStar.InteractiveHelpers.Base.fst" + (Prims.of_int (492)) + (Prims.of_int (6)) + (Prims.of_int (492)) + (Prims.of_int (13))) + (Obj.magic + (deep_apply_subst + e tm + subst1)) + (fun tm1 + -> + FStar_Tactics_Effect.lift_div_tac + (fun + uu___4 -> + (pat1, + tm1))))) + uu___3))) + uu___2))) + (fun uu___1 -> + (fun + deep_apply_subst_in_branch + -> + Obj.magic + (FStar_Tactics_Effect.tac_bind + (Prims.mk_range + "FStar.InteractiveHelpers.Base.fst" + (Prims.of_int (494)) + (Prims.of_int (19)) + (Prims.of_int (494)) + (Prims.of_int (58))) + (Prims.mk_range + "FStar.InteractiveHelpers.Base.fst" + (Prims.of_int (495)) + (Prims.of_int (4)) + (Prims.of_int (495)) + (Prims.of_int (46))) + (Obj.magic + (FStar_Tactics_Util.map + deep_apply_subst_in_branch + branches)) + (fun uu___1 -> + (fun + branches1 + -> + Obj.magic + (FStar_Tactics_Builtins.pack + (FStar_Reflection_Data.Tv_Match + (scrutinee1, + ret_opt1, + branches1)))) + uu___1))) + uu___1))) uu___1))) + uu___1))) + | FStar_Reflection_Data.Tv_AscribedT (exp, ty, tac, use_eq) + -> + Obj.magic + (Obj.repr + (FStar_Tactics_Effect.tac_bind + (Prims.mk_range + "FStar.InteractiveHelpers.Base.fst" + (Prims.of_int (497)) (Prims.of_int (14)) + (Prims.of_int (497)) (Prims.of_int (42))) + (Prims.mk_range + "FStar.InteractiveHelpers.Base.fst" + (Prims.of_int (498)) (Prims.of_int (4)) + (Prims.of_int (500)) (Prims.of_int (42))) + (Obj.magic (deep_apply_subst e exp subst)) + (fun uu___1 -> + (fun exp1 -> + Obj.magic + (FStar_Tactics_Effect.tac_bind + (Prims.mk_range + "FStar.InteractiveHelpers.Base.fst" + (Prims.of_int (498)) + (Prims.of_int (13)) + (Prims.of_int (498)) + (Prims.of_int (40))) + (Prims.mk_range + "FStar.InteractiveHelpers.Base.fst" + (Prims.of_int (500)) + (Prims.of_int (4)) + (Prims.of_int (500)) + (Prims.of_int (42))) + (Obj.magic + (deep_apply_subst e ty subst)) + (fun uu___1 -> + (fun ty1 -> + Obj.magic + (FStar_Tactics_Builtins.pack + (FStar_Reflection_Data.Tv_AscribedT + (exp1, ty1, + FStar_Pervasives_Native.None, + use_eq)))) uu___1))) + uu___1))) + | FStar_Reflection_Data.Tv_AscribedC (exp, c, tac, use_eq) -> + Obj.magic + (Obj.repr + (FStar_Tactics_Effect.tac_bind + (Prims.mk_range + "FStar.InteractiveHelpers.Base.fst" + (Prims.of_int (502)) (Prims.of_int (14)) + (Prims.of_int (502)) (Prims.of_int (42))) + (Prims.mk_range + "FStar.InteractiveHelpers.Base.fst" + (Prims.of_int (503)) (Prims.of_int (4)) + (Prims.of_int (505)) (Prims.of_int (41))) + (Obj.magic (deep_apply_subst e exp subst)) + (fun uu___1 -> + (fun exp1 -> + Obj.magic + (FStar_Tactics_Effect.tac_bind + (Prims.mk_range + "FStar.InteractiveHelpers.Base.fst" + (Prims.of_int (503)) + (Prims.of_int (12)) + (Prims.of_int (503)) + (Prims.of_int (46))) + (Prims.mk_range + "FStar.InteractiveHelpers.Base.fst" + (Prims.of_int (505)) + (Prims.of_int (4)) + (Prims.of_int (505)) + (Prims.of_int (41))) + (Obj.magic + (deep_apply_subst_in_comp e c subst)) + (fun uu___1 -> + (fun c1 -> + Obj.magic + (FStar_Tactics_Builtins.pack + (FStar_Reflection_Data.Tv_AscribedC + (exp1, c1, + FStar_Pervasives_Native.None, + use_eq)))) uu___1))) + uu___1))) + | uu___1 -> + Obj.magic + (Obj.repr + (FStar_Tactics_Effect.lift_div_tac (fun uu___2 -> t)))) + uu___) +and (deep_apply_subst_in_bv : + FStar_Reflection_Types.env -> + FStar_Reflection_Types.bv -> + (FStar_Reflection_Types.bv * FStar_Reflection_Types.term) Prims.list -> + ((FStar_Reflection_Types.bv * (FStar_Reflection_Types.bv * + FStar_Reflection_Types.term) Prims.list), + unit) FStar_Tactics_Effect.tac_repr) + = + fun e -> + fun bv -> + fun subst -> + FStar_Tactics_Effect.tac_bind + (Prims.mk_range "FStar.InteractiveHelpers.Base.fst" + (Prims.of_int (511)) (Prims.of_int (12)) (Prims.of_int (511)) + (Prims.of_int (25))) + (Prims.mk_range "FStar.InteractiveHelpers.Base.fst" + (Prims.of_int (512)) (Prims.of_int (2)) (Prims.of_int (514)) + (Prims.of_int (37))) + (FStar_Tactics_Effect.lift_div_tac + (fun uu___ -> FStar_Reflection_Builtins.inspect_bv bv)) + (fun uu___ -> + (fun bvv -> + Obj.magic + (FStar_Tactics_Effect.tac_bind + (Prims.mk_range "FStar.InteractiveHelpers.Base.fst" + (Prims.of_int (512)) (Prims.of_int (11)) + (Prims.of_int (512)) (Prims.of_int (47))) + (Prims.mk_range "FStar.InteractiveHelpers.Base.fst" + (Prims.of_int (513)) (Prims.of_int (2)) + (Prims.of_int (514)) (Prims.of_int (37))) + (Obj.magic + (deep_apply_subst e bvv.FStar_Reflection_Data.bv_sort + subst)) + (fun uu___ -> + (fun ty -> + Obj.magic + (FStar_Tactics_Effect.tac_bind + (Prims.mk_range + "FStar.InteractiveHelpers.Base.fst" + (Prims.of_int (513)) (Prims.of_int (12)) + (Prims.of_int (513)) (Prims.of_int (51))) + (Prims.mk_range + "FStar.InteractiveHelpers.Base.fst" + (Prims.of_int (514)) (Prims.of_int (2)) + (Prims.of_int (514)) (Prims.of_int (37))) + (Obj.magic + (FStar_Tactics_Builtins.fresh_bv_named + bvv.FStar_Reflection_Data.bv_ppname ty)) + (fun uu___ -> + (fun bv' -> + Obj.magic + (FStar_Tactics_Effect.tac_bind + (Prims.mk_range + "FStar.InteractiveHelpers.Base.fst" + (Prims.of_int (514)) + (Prims.of_int (30)) + (Prims.of_int (514)) + (Prims.of_int (32))) + (Prims.mk_range + "FStar.InteractiveHelpers.Base.fst" + (Prims.of_int (514)) + (Prims.of_int (2)) + (Prims.of_int (514)) + (Prims.of_int (37))) + (Obj.magic + (FStar_Tactics_Effect.tac_bind + (Prims.mk_range + "FStar.InteractiveHelpers.Base.fst" + (Prims.of_int (514)) + (Prims.of_int (7)) + (Prims.of_int (514)) + (Prims.of_int (30))) + (Prims.mk_range + "FStar.InteractiveHelpers.Base.fst" + (Prims.of_int (514)) + (Prims.of_int (30)) + (Prims.of_int (514)) + (Prims.of_int (32))) + (Obj.magic + (FStar_Tactics_Effect.tac_bind + (Prims.mk_range + "FStar.InteractiveHelpers.Base.fst" + (Prims.of_int (514)) + (Prims.of_int (12)) + (Prims.of_int (514)) + (Prims.of_int (29))) + (Prims.mk_range + "FStar.InteractiveHelpers.Base.fst" + (Prims.of_int (514)) + (Prims.of_int (7)) + (Prims.of_int (514)) + (Prims.of_int (30))) + (Obj.magic + (FStar_Tactics_Builtins.pack + (FStar_Reflection_Data.Tv_Var + bv'))) + (fun uu___ -> + FStar_Tactics_Effect.lift_div_tac + (fun uu___1 -> + (bv, uu___))))) + (fun uu___ -> + FStar_Tactics_Effect.lift_div_tac + (fun uu___1 -> uu___ :: + subst)))) + (fun uu___ -> + FStar_Tactics_Effect.lift_div_tac + (fun uu___1 -> (bv', uu___))))) + uu___))) uu___))) uu___) +and (deep_apply_subst_in_binder : + FStar_Reflection_Types.env -> + FStar_Reflection_Types.binder -> + (FStar_Reflection_Types.bv * FStar_Reflection_Types.term) Prims.list -> + ((FStar_Reflection_Types.binder * (FStar_Reflection_Types.bv * + FStar_Reflection_Types.term) Prims.list), + unit) FStar_Tactics_Effect.tac_repr) + = + fun e -> + fun br -> + fun subst -> + FStar_Tactics_Effect.tac_bind + (Prims.mk_range "FStar.InteractiveHelpers.Base.fst" + (Prims.of_int (520)) (Prims.of_int (26)) (Prims.of_int (520)) + (Prims.of_int (43))) + (Prims.mk_range "FStar.InteractiveHelpers.Base.fst" + (Prims.of_int (520)) (Prims.of_int (2)) (Prims.of_int (522)) + (Prims.of_int (34))) + (FStar_Tactics_Effect.lift_div_tac + (fun uu___ -> FStar_Reflection_Builtins.inspect_binder br)) + (fun uu___ -> + (fun uu___ -> + match uu___ with + | (bv, (qual, attrs)) -> + Obj.magic + (FStar_Tactics_Effect.tac_bind + (Prims.mk_range "FStar.InteractiveHelpers.Base.fst" + (Prims.of_int (521)) (Prims.of_int (18)) + (Prims.of_int (521)) (Prims.of_int (51))) + (Prims.mk_range "FStar.InteractiveHelpers.Base.fst" + (Prims.of_int (521)) (Prims.of_int (2)) + (Prims.of_int (522)) (Prims.of_int (34))) + (Obj.magic (deep_apply_subst_in_bv e bv subst)) + (fun uu___1 -> + FStar_Tactics_Effect.lift_div_tac + (fun uu___2 -> + match uu___1 with + | (bv1, subst1) -> + ((FStar_Reflection_Builtins.pack_binder + bv1 qual attrs), subst1))))) uu___) +and (deep_apply_subst_in_comp : + FStar_Reflection_Types.env -> + FStar_Reflection_Types.comp -> + (FStar_Reflection_Types.bv * FStar_Reflection_Types.term) Prims.list -> + (FStar_Reflection_Types.comp, unit) FStar_Tactics_Effect.tac_repr) + = + fun e -> + fun c -> + fun subst -> + FStar_Tactics_Effect.tac_bind + (Prims.mk_range "FStar.InteractiveHelpers.Base.fst" + (Prims.of_int (525)) (Prims.of_int (14)) (Prims.of_int (525)) + (Prims.of_int (51))) + (Prims.mk_range "FStar.InteractiveHelpers.Base.fst" + (Prims.of_int (526)) (Prims.of_int (2)) (Prims.of_int (548)) + (Prims.of_int (55))) + (FStar_Tactics_Effect.lift_div_tac + (fun uu___ -> fun x -> deep_apply_subst e x subst)) + (fun uu___ -> + (fun subst1 -> + Obj.magic + (FStar_Tactics_Effect.tac_bind + (Prims.mk_range "FStar.InteractiveHelpers.Base.fst" + (Prims.of_int (527)) (Prims.of_int (4)) + (Prims.of_int (530)) (Prims.of_int (34))) + (Prims.mk_range "FStar.InteractiveHelpers.Base.fst" + (Prims.of_int (532)) (Prims.of_int (2)) + (Prims.of_int (548)) (Prims.of_int (55))) + (FStar_Tactics_Effect.lift_div_tac + (fun uu___1 -> + fun uu___ -> + (fun uu___ -> + fun a -> + match a with + | FStar_Reflection_Data.Q_Implicit -> + Obj.magic + (Obj.repr + (FStar_Tactics_Effect.lift_div_tac + (fun uu___1 -> a))) + | FStar_Reflection_Data.Q_Explicit -> + Obj.magic + (Obj.repr + (FStar_Tactics_Effect.lift_div_tac + (fun uu___1 -> a))) + | FStar_Reflection_Data.Q_Meta t -> + Obj.magic + (Obj.repr + (FStar_Tactics_Effect.tac_bind + (Prims.mk_range + "FStar.InteractiveHelpers.Base.fst" + (Prims.of_int (530)) + (Prims.of_int (25)) + (Prims.of_int (530)) + (Prims.of_int (34))) + (Prims.mk_range + "FStar.InteractiveHelpers.Base.fst" + (Prims.of_int (530)) + (Prims.of_int (18)) + (Prims.of_int (530)) + (Prims.of_int (34))) + (Obj.magic (subst1 t)) + (fun uu___1 -> + FStar_Tactics_Effect.lift_div_tac + (fun uu___2 -> + FStar_Reflection_Data.Q_Meta + uu___1))))) uu___1 + uu___)) + (fun uu___ -> + (fun subst_in_aqualv -> + match FStar_Reflection_Builtins.inspect_comp c + with + | FStar_Reflection_Data.C_Total ret -> + Obj.magic + (FStar_Tactics_Effect.tac_bind + (Prims.mk_range + "FStar.InteractiveHelpers.Base.fst" + (Prims.of_int (534)) + (Prims.of_int (14)) + (Prims.of_int (534)) + (Prims.of_int (23))) + (Prims.mk_range + "FStar.InteractiveHelpers.Base.fst" + (Prims.of_int (535)) + (Prims.of_int (4)) + (Prims.of_int (535)) + (Prims.of_int (27))) + (Obj.magic (subst1 ret)) + (fun ret1 -> + FStar_Tactics_Effect.lift_div_tac + (fun uu___ -> + FStar_Reflection_Builtins.pack_comp + (FStar_Reflection_Data.C_Total + ret1)))) + | FStar_Reflection_Data.C_GTotal ret -> + Obj.magic + (FStar_Tactics_Effect.tac_bind + (Prims.mk_range + "FStar.InteractiveHelpers.Base.fst" + (Prims.of_int (537)) + (Prims.of_int (14)) + (Prims.of_int (537)) + (Prims.of_int (23))) + (Prims.mk_range + "FStar.InteractiveHelpers.Base.fst" + (Prims.of_int (538)) + (Prims.of_int (4)) + (Prims.of_int (538)) + (Prims.of_int (28))) + (Obj.magic (subst1 ret)) + (fun ret1 -> + FStar_Tactics_Effect.lift_div_tac + (fun uu___ -> + FStar_Reflection_Builtins.pack_comp + (FStar_Reflection_Data.C_GTotal + ret1)))) + | FStar_Reflection_Data.C_Lemma + (pre, post, patterns) -> + Obj.magic + (FStar_Tactics_Effect.tac_bind + (Prims.mk_range + "FStar.InteractiveHelpers.Base.fst" + (Prims.of_int (540)) + (Prims.of_int (14)) + (Prims.of_int (540)) + (Prims.of_int (23))) + (Prims.mk_range + "FStar.InteractiveHelpers.Base.fst" + (Prims.of_int (541)) + (Prims.of_int (4)) + (Prims.of_int (543)) + (Prims.of_int (41))) + (Obj.magic (subst1 pre)) + (fun uu___ -> + (fun pre1 -> + Obj.magic + (FStar_Tactics_Effect.tac_bind + (Prims.mk_range + "FStar.InteractiveHelpers.Base.fst" + (Prims.of_int (541)) + (Prims.of_int (15)) + (Prims.of_int (541)) + (Prims.of_int (25))) + (Prims.mk_range + "FStar.InteractiveHelpers.Base.fst" + (Prims.of_int (542)) + (Prims.of_int (4)) + (Prims.of_int (543)) + (Prims.of_int (41))) + (Obj.magic (subst1 post)) + (fun uu___ -> + (fun post1 -> + Obj.magic + (FStar_Tactics_Effect.tac_bind + (Prims.mk_range + "FStar.InteractiveHelpers.Base.fst" + (Prims.of_int (542)) + (Prims.of_int (19)) + (Prims.of_int (542)) + (Prims.of_int (33))) + (Prims.mk_range + "FStar.InteractiveHelpers.Base.fst" + (Prims.of_int (543)) + (Prims.of_int (4)) + (Prims.of_int (543)) + (Prims.of_int (41))) + (Obj.magic + (subst1 patterns)) + (fun patterns1 -> + FStar_Tactics_Effect.lift_div_tac + (fun uu___ -> + FStar_Reflection_Builtins.pack_comp + ( + FStar_Reflection_Data.C_Lemma + (pre1, + post1, + patterns1)))))) + uu___))) uu___)) + | FStar_Reflection_Data.C_Eff + (us, eff_name, result, eff_args, decrs) -> + Obj.magic + (FStar_Tactics_Effect.tac_bind + (Prims.mk_range + "FStar.InteractiveHelpers.Base.fst" + (Prims.of_int (545)) + (Prims.of_int (17)) + (Prims.of_int (545)) + (Prims.of_int (29))) + (Prims.mk_range + "FStar.InteractiveHelpers.Base.fst" + (Prims.of_int (546)) + (Prims.of_int (4)) + (Prims.of_int (548)) + (Prims.of_int (55))) + (Obj.magic (subst1 result)) + (fun uu___ -> + (fun result1 -> + Obj.magic + (FStar_Tactics_Effect.tac_bind + (Prims.mk_range + "FStar.InteractiveHelpers.Base.fst" + (Prims.of_int (546)) + (Prims.of_int (19)) + (Prims.of_int (546)) + (Prims.of_int (76))) + (Prims.mk_range + "FStar.InteractiveHelpers.Base.fst" + (Prims.of_int (547)) + (Prims.of_int (4)) + (Prims.of_int (548)) + (Prims.of_int (55))) + (Obj.magic + (FStar_Tactics_Util.map + (fun uu___ -> + match uu___ with + | (x, a) -> + FStar_Tactics_Effect.tac_bind + (Prims.mk_range + "FStar.InteractiveHelpers.Base.fst" + (Prims.of_int (546)) + (Prims.of_int (39)) + (Prims.of_int (546)) + (Prims.of_int (46))) + (Prims.mk_range + "FStar.InteractiveHelpers.Base.fst" + (Prims.of_int (546)) + (Prims.of_int (38)) + (Prims.of_int (546)) + (Prims.of_int (66))) + (Obj.magic + (subst1 x)) + (fun uu___1 -> + (fun uu___1 + -> + Obj.magic + (FStar_Tactics_Effect.tac_bind + (Prims.mk_range + "FStar.InteractiveHelpers.Base.fst" + (Prims.of_int (546)) + (Prims.of_int (48)) + (Prims.of_int (546)) + (Prims.of_int (65))) + (Prims.mk_range + "FStar.InteractiveHelpers.Base.fst" + (Prims.of_int (546)) + (Prims.of_int (38)) + (Prims.of_int (546)) + (Prims.of_int (66))) + (Obj.magic + (subst_in_aqualv + a)) + (fun + uu___2 -> + FStar_Tactics_Effect.lift_div_tac + (fun + uu___3 -> + (uu___1, + uu___2))))) + uu___1)) + eff_args)) + (fun uu___ -> + (fun eff_args1 -> + Obj.magic + (FStar_Tactics_Effect.tac_bind + (Prims.mk_range + "FStar.InteractiveHelpers.Base.fst" + (Prims.of_int (547)) + (Prims.of_int (16)) + (Prims.of_int (547)) + (Prims.of_int (31))) + (Prims.mk_range + "FStar.InteractiveHelpers.Base.fst" + (Prims.of_int (548)) + (Prims.of_int (4)) + (Prims.of_int (548)) + (Prims.of_int (55))) + (Obj.magic + (FStar_Tactics_Util.map + subst1 decrs)) + (fun decrs1 -> + FStar_Tactics_Effect.lift_div_tac + (fun uu___ -> + FStar_Reflection_Builtins.pack_comp + ( + FStar_Reflection_Data.C_Eff + (us, + eff_name, + result1, + eff_args1, + decrs1)))))) + uu___))) uu___))) uu___))) + uu___) +and (deep_apply_subst_in_pattern : + FStar_Reflection_Types.env -> + FStar_Reflection_Data.pattern -> + (FStar_Reflection_Types.bv * FStar_Reflection_Types.term) Prims.list -> + ((FStar_Reflection_Data.pattern * (FStar_Reflection_Types.bv * + FStar_Reflection_Types.term) Prims.list), + unit) FStar_Tactics_Effect.tac_repr) + = + fun uu___2 -> + fun uu___1 -> + fun uu___ -> + (fun e -> + fun pat -> + fun subst -> + match pat with + | FStar_Reflection_Data.Pat_Constant uu___ -> + Obj.magic + (Obj.repr + (FStar_Tactics_Effect.lift_div_tac + (fun uu___1 -> (pat, subst)))) + | FStar_Reflection_Data.Pat_Cons (fv, us, patterns) -> + Obj.magic + (Obj.repr + (FStar_Tactics_Effect.tac_bind + (Prims.mk_range + "FStar.InteractiveHelpers.Base.fst" + (Prims.of_int (557)) (Prims.of_int (6)) + (Prims.of_int (559)) (Prims.of_int (69))) + (Prims.mk_range + "FStar.InteractiveHelpers.Base.fst" + (Prims.of_int (556)) (Prims.of_int (4)) + (Prims.of_int (561)) (Prims.of_int (34))) + (Obj.magic + (FStar_Tactics_Util.fold_right + (fun uu___ -> + fun uu___1 -> + match (uu___, uu___1) with + | ((pat1, b), (pats, subst1)) -> + FStar_Tactics_Effect.tac_bind + (Prims.mk_range + "FStar.InteractiveHelpers.Base.fst" + (Prims.of_int (558)) + (Prims.of_int (39)) + (Prims.of_int (558)) + (Prims.of_int (78))) + (Prims.mk_range + "FStar.InteractiveHelpers.Base.fst" + (Prims.of_int (558)) + (Prims.of_int (22)) + (Prims.of_int (559)) + (Prims.of_int (47))) + (Obj.magic + (deep_apply_subst_in_pattern e + pat1 subst1)) + (fun uu___2 -> + FStar_Tactics_Effect.lift_div_tac + (fun uu___3 -> + match uu___2 with + | (pat2, subst2) -> + (((pat2, b) :: pats), + subst2)))) patterns + ([], subst))) + (fun uu___ -> + FStar_Tactics_Effect.lift_div_tac + (fun uu___1 -> + match uu___ with + | (patterns1, subst1) -> + ((FStar_Reflection_Data.Pat_Cons + (fv, us, patterns1)), subst1))))) + | FStar_Reflection_Data.Pat_Var bv -> + Obj.magic + (Obj.repr + (FStar_Tactics_Effect.tac_bind + (Prims.mk_range + "FStar.InteractiveHelpers.Base.fst" + (Prims.of_int (563)) (Prims.of_int (20)) + (Prims.of_int (563)) (Prims.of_int (53))) + (Prims.mk_range + "FStar.InteractiveHelpers.Base.fst" + (Prims.of_int (563)) (Prims.of_int (4)) + (Prims.of_int (564)) (Prims.of_int (21))) + (Obj.magic (deep_apply_subst_in_bv e bv subst)) + (fun uu___ -> + FStar_Tactics_Effect.lift_div_tac + (fun uu___1 -> + match uu___ with + | (bv1, subst1) -> + ((FStar_Reflection_Data.Pat_Var bv1), + subst1))))) + | FStar_Reflection_Data.Pat_Wild bv -> + Obj.magic + (Obj.repr + (FStar_Tactics_Effect.tac_bind + (Prims.mk_range + "FStar.InteractiveHelpers.Base.fst" + (Prims.of_int (566)) (Prims.of_int (20)) + (Prims.of_int (566)) (Prims.of_int (53))) + (Prims.mk_range + "FStar.InteractiveHelpers.Base.fst" + (Prims.of_int (566)) (Prims.of_int (4)) + (Prims.of_int (567)) (Prims.of_int (22))) + (Obj.magic (deep_apply_subst_in_bv e bv subst)) + (fun uu___ -> + FStar_Tactics_Effect.lift_div_tac + (fun uu___1 -> + match uu___ with + | (bv1, subst1) -> + ((FStar_Reflection_Data.Pat_Wild bv1), + subst1))))) + | FStar_Reflection_Data.Pat_Dot_Term eopt -> + Obj.magic + (Obj.repr + (FStar_Tactics_Effect.tac_bind + (Prims.mk_range + "FStar.InteractiveHelpers.Base.fst" + (Prims.of_int (569)) (Prims.of_int (4)) + (Prims.of_int (569)) (Prims.of_int (69))) + (Prims.mk_range + "FStar.InteractiveHelpers.Base.fst" + (Prims.of_int (569)) (Prims.of_int (4)) + (Prims.of_int (569)) (Prims.of_int (76))) + (Obj.magic + (FStar_Tactics_Effect.tac_bind + (Prims.mk_range + "FStar.InteractiveHelpers.Base.fst" + (Prims.of_int (569)) (Prims.of_int (17)) + (Prims.of_int (569)) (Prims.of_int (69))) + (Prims.mk_range + "FStar.InteractiveHelpers.Base.fst" + (Prims.of_int (569)) (Prims.of_int (4)) + (Prims.of_int (569)) (Prims.of_int (69))) + (Obj.magic + (FStar_Tactics_Util.map_opt + (fun t -> deep_apply_subst e t subst) + eopt)) + (fun uu___ -> + FStar_Tactics_Effect.lift_div_tac + (fun uu___1 -> + FStar_Reflection_Data.Pat_Dot_Term + uu___)))) + (fun uu___ -> + FStar_Tactics_Effect.lift_div_tac + (fun uu___1 -> (uu___, subst)))))) uu___2 + uu___1 uu___ +let (apply_subst : + FStar_Reflection_Types.env -> + FStar_Reflection_Types.term -> + (FStar_Reflection_Types.bv * FStar_Reflection_Types.term) Prims.list -> + (FStar_Reflection_Types.term, unit) FStar_Tactics_Effect.tac_repr) + = norm_apply_subst +let (apply_subst_in_comp : + FStar_Reflection_Types.env -> + FStar_Reflection_Types.comp -> + (FStar_Reflection_Types.bv * FStar_Reflection_Types.term) Prims.list -> + (FStar_Reflection_Types.comp, unit) FStar_Tactics_Effect.tac_repr) + = norm_apply_subst_in_comp +let (opt_apply_subst : + FStar_Reflection_Types.env -> + FStar_Reflection_Types.term FStar_Pervasives_Native.option -> + (FStar_Reflection_Types.bv * FStar_Reflection_Types.term) Prims.list -> + (FStar_Reflection_Types.term FStar_Pervasives_Native.option, + unit) FStar_Tactics_Effect.tac_repr) + = + fun uu___2 -> + fun uu___1 -> + fun uu___ -> + (fun e -> + fun opt_t -> + fun subst -> + match opt_t with + | FStar_Pervasives_Native.None -> + Obj.magic + (Obj.repr + (FStar_Tactics_Effect.lift_div_tac + (fun uu___ -> FStar_Pervasives_Native.None))) + | FStar_Pervasives_Native.Some t -> + Obj.magic + (Obj.repr + (FStar_Tactics_Effect.tac_bind + (Prims.mk_range + "FStar.InteractiveHelpers.Base.fst" + (Prims.of_int (585)) (Prims.of_int (19)) + (Prims.of_int (585)) (Prims.of_int (42))) + (Prims.mk_range + "FStar.InteractiveHelpers.Base.fst" + (Prims.of_int (585)) (Prims.of_int (14)) + (Prims.of_int (585)) (Prims.of_int (42))) + (Obj.magic (apply_subst e t subst)) + (fun uu___ -> + FStar_Tactics_Effect.lift_div_tac + (fun uu___1 -> + FStar_Pervasives_Native.Some uu___))))) + uu___2 uu___1 uu___ +let rec (_generate_shadowed_subst : + genv -> + FStar_Reflection_Types.term -> + FStar_Reflection_Types.bv Prims.list -> + ((genv * (FStar_Reflection_Types.bv * FStar_Reflection_Types.bv) + Prims.list), + unit) FStar_Tactics_Effect.tac_repr) + = + fun uu___2 -> + fun uu___1 -> + fun uu___ -> + (fun ge -> + fun t -> + fun bvl -> + match bvl with + | [] -> + Obj.magic + (Obj.repr + (FStar_Tactics_Effect.lift_div_tac + (fun uu___ -> (ge, [])))) + | old_bv::bvl' -> + Obj.magic + (Obj.repr + (FStar_Tactics_Effect.tac_bind + (Prims.mk_range + "FStar.InteractiveHelpers.Base.fst" + (Prims.of_int (604)) (Prims.of_int (10)) + (Prims.of_int (604)) (Prims.of_int (19))) + (Prims.mk_range + "FStar.InteractiveHelpers.Base.fst" + (Prims.of_int (604)) (Prims.of_int (4)) + (Prims.of_int (618)) (Prims.of_int (55))) + (Obj.magic (FStar_Tactics_Builtins.inspect t)) + (fun uu___ -> + (fun uu___ -> + match uu___ with + | FStar_Reflection_Data.Tv_Abs (b, uu___1) + -> + Obj.magic + (FStar_Tactics_Effect.tac_bind + (Prims.mk_range + "FStar.InteractiveHelpers.Base.fst" + (Prims.of_int (607)) + (Prims.of_int (18)) + (Prims.of_int (607)) + (Prims.of_int (34))) + (Prims.mk_range + "FStar.InteractiveHelpers.Base.fst" + (Prims.of_int (607)) + (Prims.of_int (6)) + (Prims.of_int (617)) + (Prims.of_int (34))) + (FStar_Tactics_Effect.lift_div_tac + (fun uu___2 -> + FStar_Reflection_Builtins.inspect_binder + b)) + (fun uu___2 -> + (fun uu___2 -> + match uu___2 with + | (bv, uu___3) -> + Obj.magic + (FStar_Tactics_Effect.tac_bind + (Prims.mk_range + "FStar.InteractiveHelpers.Base.fst" + (Prims.of_int (608)) + (Prims.of_int (16)) + (Prims.of_int (608)) + (Prims.of_int (29))) + (Prims.mk_range + "FStar.InteractiveHelpers.Base.fst" + (Prims.of_int (609)) + (Prims.of_int (6)) + (Prims.of_int (617)) + (Prims.of_int (34))) + (FStar_Tactics_Effect.lift_div_tac + (fun uu___4 -> + FStar_Reflection_Builtins.inspect_bv + bv)) + (fun uu___4 -> + (fun bvv -> + Obj.magic + (FStar_Tactics_Effect.tac_bind + ( + Prims.mk_range + "FStar.InteractiveHelpers.Base.fst" + (Prims.of_int (609)) + (Prims.of_int (15)) + (Prims.of_int (609)) + (Prims.of_int (26))) + ( + Prims.mk_range + "FStar.InteractiveHelpers.Base.fst" + (Prims.of_int (610)) + (Prims.of_int (6)) + (Prims.of_int (617)) + (Prims.of_int (34))) + ( + FStar_Tactics_Effect.lift_div_tac + (fun + uu___4 -> + bvv.FStar_Reflection_Data.bv_sort)) + ( + fun + uu___4 -> + (fun ty + -> + Obj.magic + (FStar_Tactics_Effect.tac_bind + (Prims.mk_range + "FStar.InteractiveHelpers.Base.fst" + (Prims.of_int (610)) + (Prims.of_int (17)) + (Prims.of_int (610)) + (Prims.of_int (30))) + (Prims.mk_range + "FStar.InteractiveHelpers.Base.fst" + (Prims.of_int (611)) + (Prims.of_int (6)) + (Prims.of_int (617)) + (Prims.of_int (34))) + (FStar_Tactics_Effect.lift_div_tac + (fun + uu___4 -> + bvv.FStar_Reflection_Data.bv_ppname)) + (fun + uu___4 -> + (fun name + -> + Obj.magic + (FStar_Tactics_Effect.tac_bind + (Prims.mk_range + "FStar.InteractiveHelpers.Base.fst" + (Prims.of_int (611)) + (Prims.of_int (23)) + (Prims.of_int (611)) + (Prims.of_int (61))) + (Prims.mk_range + "FStar.InteractiveHelpers.Base.fst" + (Prims.of_int (611)) + (Prims.of_int (6)) + (Prims.of_int (617)) + (Prims.of_int (34))) + (Obj.magic + (genv_push_fresh_bv + ge + (Prims.strcat + "__" name) + ty)) + (fun + uu___4 -> + (fun + uu___4 -> + match uu___4 + with + | + (ge1, + fresh) -> + Obj.magic + (FStar_Tactics_Effect.tac_bind + (Prims.mk_range + "FStar.InteractiveHelpers.Base.fst" + (Prims.of_int (612)) + (Prims.of_int (15)) + (Prims.of_int (612)) + (Prims.of_int (47))) + (Prims.mk_range + "FStar.InteractiveHelpers.Base.fst" + (Prims.of_int (613)) + (Prims.of_int (6)) + (Prims.of_int (617)) + (Prims.of_int (34))) + (Obj.magic + (FStar_Tactics_Effect.tac_bind + (Prims.mk_range + "FStar.InteractiveHelpers.Base.fst" + (Prims.of_int (612)) + (Prims.of_int (26)) + (Prims.of_int (612)) + (Prims.of_int (47))) + (Prims.mk_range + "FStar.InteractiveHelpers.Base.fst" + (Prims.of_int (612)) + (Prims.of_int (15)) + (Prims.of_int (612)) + (Prims.of_int (47))) + (Obj.magic + (FStar_Tactics_Effect.tac_bind + (Prims.mk_range + "FStar.InteractiveHelpers.Base.fst" + (Prims.of_int (612)) + (Prims.of_int (27)) + (Prims.of_int (612)) + (Prims.of_int (46))) + (Prims.mk_range + "FStar.InteractiveHelpers.Base.fst" + (Prims.of_int (612)) + (Prims.of_int (26)) + (Prims.of_int (612)) + (Prims.of_int (47))) + (Obj.magic + (FStar_Tactics_Builtins.pack + (FStar_Reflection_Data.Tv_Var + fresh))) + (fun + uu___5 -> + FStar_Tactics_Effect.lift_div_tac + (fun + uu___6 -> + [uu___5])))) + (fun + uu___5 -> + FStar_Tactics_Effect.lift_div_tac + (fun + uu___6 -> + FStar_Reflection_Derived.mk_e_app + t uu___5)))) + (fun + uu___5 -> + (fun t1 + -> + Obj.magic + (FStar_Tactics_Effect.tac_bind + (Prims.mk_range + "FStar.InteractiveHelpers.Base.fst" + (Prims.of_int (613)) + (Prims.of_int (15)) + (Prims.of_int (613)) + (Prims.of_int (42))) + (Prims.mk_range + "FStar.InteractiveHelpers.Base.fst" + (Prims.of_int (615)) + (Prims.of_int (6)) + (Prims.of_int (617)) + (Prims.of_int (34))) + (Obj.magic + (FStar_Tactics_Builtins.norm_term_env + ge1.env + [] t1)) + (fun + uu___5 -> + (fun t2 + -> + Obj.magic + (FStar_Tactics_Effect.tac_bind + (Prims.mk_range + "FStar.InteractiveHelpers.Base.fst" + (Prims.of_int (615)) + (Prims.of_int (22)) + (Prims.of_int (615)) + (Prims.of_int (58))) + (Prims.mk_range + "FStar.InteractiveHelpers.Base.fst" + (Prims.of_int (615)) + (Prims.of_int (6)) + (Prims.of_int (617)) + (Prims.of_int (34))) + (Obj.magic + (_generate_shadowed_subst + ge1 t2 + bvl')) + (fun + uu___5 -> + FStar_Tactics_Effect.lift_div_tac + (fun + uu___6 -> + match uu___5 + with + | + (ge2, + nbvl) -> + (ge2, + ((old_bv, + fresh) :: + nbvl)))))) + uu___5))) + uu___5))) + uu___4))) + uu___4))) + uu___4))) + uu___4))) + uu___2)) + | uu___1 -> + Obj.magic + (mfail + "_subst_with_fresh_vars: not a Tv_Abs")) + uu___)))) uu___2 uu___1 uu___ +let (generate_shadowed_subst : + genv -> + ((genv * (FStar_Reflection_Types.bv * FStar_Reflection_Types.bv) + Prims.list), + unit) FStar_Tactics_Effect.tac_repr) + = + fun ge -> + FStar_Tactics_Effect.tac_bind + (Prims.mk_range "FStar.InteractiveHelpers.Base.fst" + (Prims.of_int (622)) (Prims.of_int (12)) (Prims.of_int (622)) + (Prims.of_int (33))) + (Prims.mk_range "FStar.InteractiveHelpers.Base.fst" + (Prims.of_int (623)) (Prims.of_int (2)) (Prims.of_int (625)) + (Prims.of_int (39))) + (FStar_Tactics_Effect.lift_div_tac + (fun uu___ -> FStar_List_Tot_Base.rev ge.svars)) + (fun uu___ -> + (fun bvl -> + Obj.magic + (FStar_Tactics_Effect.tac_bind + (Prims.mk_range "FStar.InteractiveHelpers.Base.fst" + (Prims.of_int (623)) (Prims.of_int (11)) + (Prims.of_int (623)) (Prims.of_int (37))) + (Prims.mk_range "FStar.InteractiveHelpers.Base.fst" + (Prims.of_int (624)) (Prims.of_int (2)) + (Prims.of_int (625)) (Prims.of_int (39))) + (FStar_Tactics_Effect.lift_div_tac + (fun uu___ -> + FStar_List_Tot_Base.map + FStar_Reflection_Derived.mk_binder bvl)) + (fun uu___ -> + (fun bl -> + Obj.magic + (FStar_Tactics_Effect.tac_bind + (Prims.mk_range + "FStar.InteractiveHelpers.Base.fst" + (Prims.of_int (624)) (Prims.of_int (14)) + (Prims.of_int (624)) (Prims.of_int (29))) + (Prims.mk_range + "FStar.InteractiveHelpers.Base.fst" + (Prims.of_int (625)) (Prims.of_int (2)) + (Prims.of_int (625)) (Prims.of_int (39))) + (Obj.magic + (FStar_Tactics_Derived.mk_abs bl + (FStar_Reflection_Builtins.pack_ln + (FStar_Reflection_Data.Tv_Const + FStar_Reflection_Data.C_Unit)))) + (fun uu___ -> + (fun dummy -> + Obj.magic + (_generate_shadowed_subst ge dummy bvl)) + uu___))) uu___))) uu___) \ No newline at end of file diff --git a/ocaml/fstar-lib/generated/FStar_InteractiveHelpers_Effectful.ml b/ocaml/fstar-lib/generated/FStar_InteractiveHelpers_Effectful.ml new file mode 100644 index 00000000000..d113c2ed518 --- /dev/null +++ b/ocaml/fstar-lib/generated/FStar_InteractiveHelpers_Effectful.ml @@ -0,0 +1,8499 @@ +open Prims +let (term_eq : + FStar_Reflection_Types.term -> + FStar_Reflection_Types.term -> + (Prims.bool, unit) FStar_Tactics_Effect.tac_repr) + = FStar_Tactics_Builtins.term_eq_old +type cast_info = + { + term: FStar_Reflection_Types.term ; + p_ty: + FStar_InteractiveHelpers_ExploreTerm.type_info + FStar_Pervasives_Native.option + ; + exp_ty: + FStar_InteractiveHelpers_ExploreTerm.type_info + FStar_Pervasives_Native.option + } +let (__proj__Mkcast_info__item__term : + cast_info -> FStar_Reflection_Types.term) = + fun projectee -> match projectee with | { term; p_ty; exp_ty;_} -> term +let (__proj__Mkcast_info__item__p_ty : + cast_info -> + FStar_InteractiveHelpers_ExploreTerm.type_info + FStar_Pervasives_Native.option) + = fun projectee -> match projectee with | { term; p_ty; exp_ty;_} -> p_ty +let (__proj__Mkcast_info__item__exp_ty : + cast_info -> + FStar_InteractiveHelpers_ExploreTerm.type_info + FStar_Pervasives_Native.option) + = fun projectee -> match projectee with | { term; p_ty; exp_ty;_} -> exp_ty +let (mk_cast_info : + FStar_Reflection_Types.term -> + FStar_InteractiveHelpers_ExploreTerm.type_info + FStar_Pervasives_Native.option -> + FStar_InteractiveHelpers_ExploreTerm.type_info + FStar_Pervasives_Native.option -> cast_info) + = fun t -> fun p_ty -> fun exp_ty -> { term = t; p_ty; exp_ty } +let (cast_info_to_string : + cast_info -> (Prims.string, unit) FStar_Tactics_Effect.tac_repr) = + fun info -> + FStar_Tactics_Effect.tac_bind + (Prims.mk_range "FStar.InteractiveHelpers.Effectful.fst" + (Prims.of_int (33)) (Prims.of_int (20)) (Prims.of_int (35)) + (Prims.of_int (56))) + (Prims.mk_range "prims.fst" (Prims.of_int (606)) (Prims.of_int (19)) + (Prims.of_int (606)) (Prims.of_int (31))) + (Obj.magic + (FStar_Tactics_Effect.tac_bind + (Prims.mk_range "FStar.InteractiveHelpers.Effectful.fst" + (Prims.of_int (33)) (Prims.of_int (20)) (Prims.of_int (33)) + (Prims.of_int (44))) + (Prims.mk_range "FStar.InteractiveHelpers.Effectful.fst" + (Prims.of_int (33)) (Prims.of_int (20)) (Prims.of_int (35)) + (Prims.of_int (56))) + (Obj.magic (FStar_Tactics_Builtins.term_to_string info.term)) + (fun uu___ -> + (fun uu___ -> + Obj.magic + (FStar_Tactics_Effect.tac_bind + (Prims.mk_range + "FStar.InteractiveHelpers.Effectful.fst" + (Prims.of_int (33)) (Prims.of_int (47)) + (Prims.of_int (35)) (Prims.of_int (56))) + (Prims.mk_range "prims.fst" (Prims.of_int (606)) + (Prims.of_int (19)) (Prims.of_int (606)) + (Prims.of_int (31))) + (Obj.magic + (FStar_Tactics_Effect.tac_bind + (Prims.mk_range + "FStar.InteractiveHelpers.Effectful.fst" + (Prims.of_int (34)) (Prims.of_int (2)) + (Prims.of_int (35)) (Prims.of_int (56))) + (Prims.mk_range "prims.fst" (Prims.of_int (606)) + (Prims.of_int (19)) (Prims.of_int (606)) + (Prims.of_int (31))) + (Obj.magic + (FStar_Tactics_Effect.tac_bind + (Prims.mk_range + "FStar.InteractiveHelpers.Effectful.fst" + (Prims.of_int (34)) (Prims.of_int (2)) + (Prims.of_int (34)) (Prims.of_int (48))) + (Prims.mk_range + "FStar.InteractiveHelpers.Effectful.fst" + (Prims.of_int (34)) (Prims.of_int (2)) + (Prims.of_int (35)) (Prims.of_int (56))) + (Obj.magic + (FStar_InteractiveHelpers_Base.option_to_string + FStar_InteractiveHelpers_ExploreTerm.type_info_to_string + info.p_ty)) + (fun uu___1 -> + (fun uu___1 -> + Obj.magic + (FStar_Tactics_Effect.tac_bind + (Prims.mk_range + "FStar.InteractiveHelpers.Effectful.fst" + (Prims.of_int (34)) + (Prims.of_int (51)) + (Prims.of_int (35)) + (Prims.of_int (56))) + (Prims.mk_range "prims.fst" + (Prims.of_int (606)) + (Prims.of_int (19)) + (Prims.of_int (606)) + (Prims.of_int (31))) + (Obj.magic + (FStar_Tactics_Effect.tac_bind + (Prims.mk_range + "FStar.InteractiveHelpers.Effectful.fst" + (Prims.of_int (35)) + (Prims.of_int (2)) + (Prims.of_int (35)) + (Prims.of_int (56))) + (Prims.mk_range + "prims.fst" + (Prims.of_int (606)) + (Prims.of_int (19)) + (Prims.of_int (606)) + (Prims.of_int (31))) + (Obj.magic + (FStar_Tactics_Effect.tac_bind + (Prims.mk_range + "FStar.InteractiveHelpers.Effectful.fst" + (Prims.of_int (35)) + (Prims.of_int (2)) + (Prims.of_int (35)) + (Prims.of_int (50))) + (Prims.mk_range + "prims.fst" + (Prims.of_int (606)) + (Prims.of_int (19)) + (Prims.of_int (606)) + (Prims.of_int (31))) + (Obj.magic + (FStar_InteractiveHelpers_Base.option_to_string + FStar_InteractiveHelpers_ExploreTerm.type_info_to_string + info.exp_ty)) + (fun uu___2 -> + FStar_Tactics_Effect.lift_div_tac + (fun uu___3 -> + Prims.strcat + uu___2 + ")")))) + (fun uu___2 -> + FStar_Tactics_Effect.lift_div_tac + (fun uu___3 -> + Prims.strcat + ") (" uu___2)))) + (fun uu___2 -> + FStar_Tactics_Effect.lift_div_tac + (fun uu___3 -> + Prims.strcat uu___1 + uu___2)))) uu___1))) + (fun uu___1 -> + FStar_Tactics_Effect.lift_div_tac + (fun uu___2 -> Prims.strcat ") (" uu___1)))) + (fun uu___1 -> + FStar_Tactics_Effect.lift_div_tac + (fun uu___2 -> Prims.strcat uu___ uu___1)))) + uu___))) + (fun uu___ -> + FStar_Tactics_Effect.lift_div_tac + (fun uu___1 -> Prims.strcat "Mkcast_info (" uu___)) +type effect_info = + { + ei_type: FStar_InteractiveHelpers_ExploreTerm.effect_type ; + ei_ret_type: FStar_InteractiveHelpers_ExploreTerm.type_info ; + ei_pre: FStar_Reflection_Types.term FStar_Pervasives_Native.option ; + ei_post: FStar_Reflection_Types.term FStar_Pervasives_Native.option } +let (__proj__Mkeffect_info__item__ei_type : + effect_info -> FStar_InteractiveHelpers_ExploreTerm.effect_type) = + fun projectee -> + match projectee with + | { ei_type; ei_ret_type; ei_pre; ei_post;_} -> ei_type +let (__proj__Mkeffect_info__item__ei_ret_type : + effect_info -> FStar_InteractiveHelpers_ExploreTerm.type_info) = + fun projectee -> + match projectee with + | { ei_type; ei_ret_type; ei_pre; ei_post;_} -> ei_ret_type +let (__proj__Mkeffect_info__item__ei_pre : + effect_info -> FStar_Reflection_Types.term FStar_Pervasives_Native.option) + = + fun projectee -> + match projectee with + | { ei_type; ei_ret_type; ei_pre; ei_post;_} -> ei_pre +let (__proj__Mkeffect_info__item__ei_post : + effect_info -> FStar_Reflection_Types.term FStar_Pervasives_Native.option) + = + fun projectee -> + match projectee with + | { ei_type; ei_ret_type; ei_pre; ei_post;_} -> ei_post +let (mk_effect_info : + FStar_InteractiveHelpers_ExploreTerm.effect_type -> + FStar_InteractiveHelpers_ExploreTerm.type_info -> + FStar_Reflection_Types.term FStar_Pervasives_Native.option -> + FStar_Reflection_Types.term FStar_Pervasives_Native.option -> + effect_info) + = + fun uu___ -> + fun uu___1 -> + fun uu___2 -> + fun uu___3 -> + { + ei_type = uu___; + ei_ret_type = uu___1; + ei_pre = uu___2; + ei_post = uu___3 + } +let (effect_info_to_string : + effect_info -> (Prims.string, unit) FStar_Tactics_Effect.tac_repr) = + fun c -> + FStar_Tactics_Effect.tac_bind + (Prims.mk_range "FStar.InteractiveHelpers.Effectful.fst" + (Prims.of_int (51)) (Prims.of_int (2)) (Prims.of_int (54)) + (Prims.of_int (49))) + (Prims.mk_range "prims.fst" (Prims.of_int (606)) (Prims.of_int (19)) + (Prims.of_int (606)) (Prims.of_int (31))) + (Obj.magic + (FStar_Tactics_Effect.tac_bind + (Prims.mk_range "FStar.InteractiveHelpers.Effectful.fst" + (Prims.of_int (51)) (Prims.of_int (36)) (Prims.of_int (54)) + (Prims.of_int (49))) + (Prims.mk_range "prims.fst" (Prims.of_int (606)) + (Prims.of_int (19)) (Prims.of_int (606)) (Prims.of_int (31))) + (Obj.magic + (FStar_Tactics_Effect.tac_bind + (Prims.mk_range "FStar.InteractiveHelpers.Effectful.fst" + (Prims.of_int (52)) (Prims.of_int (2)) + (Prims.of_int (54)) (Prims.of_int (49))) + (Prims.mk_range "prims.fst" (Prims.of_int (606)) + (Prims.of_int (19)) (Prims.of_int (606)) + (Prims.of_int (31))) + (Obj.magic + (FStar_Tactics_Effect.tac_bind + (Prims.mk_range + "FStar.InteractiveHelpers.Effectful.fst" + (Prims.of_int (52)) (Prims.of_int (2)) + (Prims.of_int (52)) (Prims.of_int (42))) + (Prims.mk_range + "FStar.InteractiveHelpers.Effectful.fst" + (Prims.of_int (52)) (Prims.of_int (2)) + (Prims.of_int (54)) (Prims.of_int (49))) + (Obj.magic + (FStar_InteractiveHelpers_Base.option_to_string + FStar_Tactics_Builtins.term_to_string c.ei_pre)) + (fun uu___ -> + (fun uu___ -> + Obj.magic + (FStar_Tactics_Effect.tac_bind + (Prims.mk_range + "FStar.InteractiveHelpers.Effectful.fst" + (Prims.of_int (52)) (Prims.of_int (45)) + (Prims.of_int (54)) (Prims.of_int (49))) + (Prims.mk_range "prims.fst" + (Prims.of_int (606)) + (Prims.of_int (19)) + (Prims.of_int (606)) + (Prims.of_int (31))) + (Obj.magic + (FStar_Tactics_Effect.tac_bind + (Prims.mk_range + "FStar.InteractiveHelpers.Effectful.fst" + (Prims.of_int (53)) + (Prims.of_int (2)) + (Prims.of_int (54)) + (Prims.of_int (49))) + (Prims.mk_range "prims.fst" + (Prims.of_int (606)) + (Prims.of_int (19)) + (Prims.of_int (606)) + (Prims.of_int (31))) + (Obj.magic + (FStar_Tactics_Effect.tac_bind + (Prims.mk_range + "FStar.InteractiveHelpers.Effectful.fst" + (Prims.of_int (53)) + (Prims.of_int (2)) + (Prims.of_int (53)) + (Prims.of_int (35))) + (Prims.mk_range + "FStar.InteractiveHelpers.Effectful.fst" + (Prims.of_int (53)) + (Prims.of_int (2)) + (Prims.of_int (54)) + (Prims.of_int (49))) + (Obj.magic + (FStar_InteractiveHelpers_ExploreTerm.type_info_to_string + c.ei_ret_type)) + (fun uu___1 -> + (fun uu___1 -> + Obj.magic + (FStar_Tactics_Effect.tac_bind + (Prims.mk_range + "FStar.InteractiveHelpers.Effectful.fst" + (Prims.of_int (53)) + (Prims.of_int (38)) + (Prims.of_int (54)) + (Prims.of_int (49))) + (Prims.mk_range + "prims.fst" + (Prims.of_int (606)) + (Prims.of_int (19)) + (Prims.of_int (606)) + (Prims.of_int (31))) + (Obj.magic + (FStar_Tactics_Effect.tac_bind + (Prims.mk_range + "FStar.InteractiveHelpers.Effectful.fst" + (Prims.of_int (54)) + (Prims.of_int (2)) + (Prims.of_int (54)) + (Prims.of_int (49))) + (Prims.mk_range + "prims.fst" + (Prims.of_int (606)) + (Prims.of_int (19)) + (Prims.of_int (606)) + (Prims.of_int (31))) + (Obj.magic + (FStar_Tactics_Effect.tac_bind + (Prims.mk_range + "FStar.InteractiveHelpers.Effectful.fst" + (Prims.of_int (54)) + (Prims.of_int (2)) + (Prims.of_int (54)) + (Prims.of_int (43))) + (Prims.mk_range + "prims.fst" + (Prims.of_int (606)) + (Prims.of_int (19)) + (Prims.of_int (606)) + (Prims.of_int (31))) + (Obj.magic + (FStar_InteractiveHelpers_Base.option_to_string + FStar_Tactics_Builtins.term_to_string + c.ei_post)) + (fun + uu___2 -> + FStar_Tactics_Effect.lift_div_tac + (fun + uu___3 -> + Prims.strcat + uu___2 + ")")))) + (fun uu___2 + -> + FStar_Tactics_Effect.lift_div_tac + (fun + uu___3 -> + Prims.strcat + ") (" + uu___2)))) + (fun uu___2 -> + FStar_Tactics_Effect.lift_div_tac + (fun uu___3 -> + Prims.strcat + uu___1 + uu___2)))) + uu___1))) + (fun uu___1 -> + FStar_Tactics_Effect.lift_div_tac + (fun uu___2 -> + Prims.strcat ") (" uu___1)))) + (fun uu___1 -> + FStar_Tactics_Effect.lift_div_tac + (fun uu___2 -> + Prims.strcat uu___ uu___1)))) + uu___))) + (fun uu___ -> + FStar_Tactics_Effect.lift_div_tac + (fun uu___1 -> Prims.strcat " (" uu___)))) + (fun uu___ -> + FStar_Tactics_Effect.lift_div_tac + (fun uu___1 -> + Prims.strcat + (FStar_InteractiveHelpers_ExploreTerm.effect_type_to_string + c.ei_type) uu___)))) + (fun uu___ -> + FStar_Tactics_Effect.lift_div_tac + (fun uu___1 -> Prims.strcat "Mkeffect_info " uu___)) +type eterm_info = + { + einfo: effect_info ; + head: FStar_Reflection_Types.term ; + parameters: cast_info Prims.list } +let (__proj__Mketerm_info__item__einfo : eterm_info -> effect_info) = + fun projectee -> + match projectee with | { einfo; head; parameters;_} -> einfo +let (__proj__Mketerm_info__item__head : + eterm_info -> FStar_Reflection_Types.term) = + fun projectee -> + match projectee with | { einfo; head; parameters;_} -> head +let (__proj__Mketerm_info__item__parameters : + eterm_info -> cast_info Prims.list) = + fun projectee -> + match projectee with | { einfo; head; parameters;_} -> parameters +let (eterm_info_to_string : + eterm_info -> (Prims.string, unit) FStar_Tactics_Effect.tac_repr) = + fun info -> + FStar_Tactics_Effect.tac_bind + (Prims.mk_range "FStar.InteractiveHelpers.Effectful.fst" + (Prims.of_int (66)) (Prims.of_int (15)) (Prims.of_int (66)) + (Prims.of_int (84))) + (Prims.mk_range "FStar.InteractiveHelpers.Effectful.fst" + (Prims.of_int (67)) (Prims.of_int (2)) (Prims.of_int (71)) + (Prims.of_int (18))) + (Obj.magic + (FStar_Tactics_Util.map + (fun x -> + FStar_Tactics_Effect.tac_bind + (Prims.mk_range "FStar.InteractiveHelpers.Effectful.fst" + (Prims.of_int (66)) (Prims.of_int (35)) + (Prims.of_int (66)) (Prims.of_int (67))) + (Prims.mk_range "prims.fst" (Prims.of_int (606)) + (Prims.of_int (19)) (Prims.of_int (606)) + (Prims.of_int (31))) + (Obj.magic + (FStar_Tactics_Effect.tac_bind + (Prims.mk_range + "FStar.InteractiveHelpers.Effectful.fst" + (Prims.of_int (66)) (Prims.of_int (35)) + (Prims.of_int (66)) (Prims.of_int (56))) + (Prims.mk_range "prims.fst" (Prims.of_int (606)) + (Prims.of_int (19)) (Prims.of_int (606)) + (Prims.of_int (31))) + (Obj.magic (cast_info_to_string x)) + (fun uu___ -> + FStar_Tactics_Effect.lift_div_tac + (fun uu___1 -> Prims.strcat uu___ "); \n")))) + (fun uu___ -> + FStar_Tactics_Effect.lift_div_tac + (fun uu___1 -> Prims.strcat "(" uu___))) + info.parameters)) + (fun uu___ -> + (fun params -> + Obj.magic + (FStar_Tactics_Effect.tac_bind + (Prims.mk_range "FStar.InteractiveHelpers.Effectful.fst" + (Prims.of_int (67)) (Prims.of_int (19)) + (Prims.of_int (67)) (Prims.of_int (66))) + (Prims.mk_range "FStar.InteractiveHelpers.Effectful.fst" + (Prims.of_int (68)) (Prims.of_int (2)) + (Prims.of_int (71)) (Prims.of_int (18))) + (FStar_Tactics_Effect.lift_div_tac + (fun uu___ -> + FStar_List_Tot_Base.fold_left + (fun x -> fun y -> Prims.strcat x y) "" params)) + (fun uu___ -> + (fun params_str -> + Obj.magic + (FStar_Tactics_Effect.tac_bind + (Prims.mk_range + "FStar.InteractiveHelpers.Effectful.fst" + (Prims.of_int (69)) (Prims.of_int (2)) + (Prims.of_int (71)) (Prims.of_int (18))) + (Prims.mk_range "prims.fst" (Prims.of_int (606)) + (Prims.of_int (19)) (Prims.of_int (606)) + (Prims.of_int (31))) + (Obj.magic + (FStar_Tactics_Effect.tac_bind + (Prims.mk_range + "FStar.InteractiveHelpers.Effectful.fst" + (Prims.of_int (69)) (Prims.of_int (2)) + (Prims.of_int (69)) (Prims.of_int (34))) + (Prims.mk_range + "FStar.InteractiveHelpers.Effectful.fst" + (Prims.of_int (69)) (Prims.of_int (2)) + (Prims.of_int (71)) (Prims.of_int (18))) + (Obj.magic + (effect_info_to_string info.einfo)) + (fun uu___ -> + (fun uu___ -> + Obj.magic + (FStar_Tactics_Effect.tac_bind + (Prims.mk_range + "FStar.InteractiveHelpers.Effectful.fst" + (Prims.of_int (69)) + (Prims.of_int (37)) + (Prims.of_int (71)) + (Prims.of_int (18))) + (Prims.mk_range "prims.fst" + (Prims.of_int (606)) + (Prims.of_int (19)) + (Prims.of_int (606)) + (Prims.of_int (31))) + (Obj.magic + (FStar_Tactics_Effect.tac_bind + (Prims.mk_range + "FStar.InteractiveHelpers.Effectful.fst" + (Prims.of_int (70)) + (Prims.of_int (2)) + (Prims.of_int (71)) + (Prims.of_int (18))) + (Prims.mk_range + "prims.fst" + (Prims.of_int (606)) + (Prims.of_int (19)) + (Prims.of_int (606)) + (Prims.of_int (31))) + (Obj.magic + (FStar_Tactics_Effect.tac_bind + (Prims.mk_range + "FStar.InteractiveHelpers.Effectful.fst" + (Prims.of_int (70)) + (Prims.of_int (2)) + (Prims.of_int (70)) + (Prims.of_int (26))) + (Prims.mk_range + "prims.fst" + (Prims.of_int (606)) + (Prims.of_int (19)) + (Prims.of_int (606)) + (Prims.of_int (31))) + (Obj.magic + (FStar_Tactics_Builtins.term_to_string + info.head)) + (fun uu___1 -> + FStar_Tactics_Effect.lift_div_tac + (fun uu___2 -> + Prims.strcat + uu___1 + (Prims.strcat + ")\n[" + (Prims.strcat + params_str + "]")))))) + (fun uu___1 -> + FStar_Tactics_Effect.lift_div_tac + (fun uu___2 -> + Prims.strcat ") (" + uu___1)))) + (fun uu___1 -> + FStar_Tactics_Effect.lift_div_tac + (fun uu___2 -> + Prims.strcat uu___ + uu___1)))) uu___))) + (fun uu___ -> + FStar_Tactics_Effect.lift_div_tac + (fun uu___1 -> + Prims.strcat "Mketerm_info (" uu___)))) + uu___))) uu___) +let (mk_eterm_info : + effect_info -> + FStar_Reflection_Types.term -> cast_info Prims.list -> eterm_info) + = + fun uu___ -> + fun uu___1 -> + fun uu___2 -> { einfo = uu___; head = uu___1; parameters = uu___2 } +let rec (decompose_application_aux : + FStar_Reflection_Types.env -> + FStar_Reflection_Types.term -> + ((FStar_Reflection_Types.term * cast_info Prims.list), unit) + FStar_Tactics_Effect.tac_repr) + = + fun e -> + fun t -> + FStar_Tactics_Effect.tac_bind + (Prims.mk_range "FStar.InteractiveHelpers.Effectful.fst" + (Prims.of_int (83)) (Prims.of_int (8)) (Prims.of_int (83)) + (Prims.of_int (17))) + (Prims.mk_range "FStar.InteractiveHelpers.Effectful.fst" + (Prims.of_int (83)) (Prims.of_int (2)) (Prims.of_int (104)) + (Prims.of_int (14))) + (Obj.magic (FStar_Tactics_Builtins.inspect t)) + (fun uu___ -> + (fun uu___ -> + match uu___ with + | FStar_Reflection_Data.Tv_App (hd, (a, qualif)) -> + Obj.magic + (Obj.repr + (FStar_Tactics_Effect.tac_bind + (Prims.mk_range + "FStar.InteractiveHelpers.Effectful.fst" + (Prims.of_int (85)) (Prims.of_int (22)) + (Prims.of_int (85)) (Prims.of_int (52))) + (Prims.mk_range + "FStar.InteractiveHelpers.Effectful.fst" + (Prims.of_int (85)) (Prims.of_int (4)) + (Prims.of_int (103)) (Prims.of_int (28))) + (Obj.magic (decompose_application_aux e hd)) + (fun uu___1 -> + (fun uu___1 -> + match uu___1 with + | (hd0, params) -> + Obj.magic + (FStar_Tactics_Effect.tac_bind + (Prims.mk_range + "FStar.InteractiveHelpers.Effectful.fst" + (Prims.of_int (87)) + (Prims.of_int (17)) + (Prims.of_int (87)) + (Prims.of_int (34))) + (Prims.mk_range + "FStar.InteractiveHelpers.Effectful.fst" + (Prims.of_int (89)) + (Prims.of_int (4)) + (Prims.of_int (103)) + (Prims.of_int (28))) + (Obj.magic + (FStar_InteractiveHelpers_ExploreTerm.get_type_info + e a)) + (fun uu___2 -> + (fun a_type -> + Obj.magic + (FStar_Tactics_Effect.tac_bind + (Prims.mk_range + "FStar.InteractiveHelpers.Effectful.fst" + (Prims.of_int (89)) + (Prims.of_int (16)) + (Prims.of_int (89)) + (Prims.of_int (28))) + (Prims.mk_range + "FStar.InteractiveHelpers.Effectful.fst" + (Prims.of_int (90)) + (Prims.of_int (4)) + (Prims.of_int (103)) + (Prims.of_int (28))) + (Obj.magic + (FStar_InteractiveHelpers_ExploreTerm.safe_tc + e hd)) + (fun uu___2 -> + (fun hd_ty -> + Obj.magic + (FStar_Tactics_Effect.tac_bind + (Prims.mk_range + "FStar.InteractiveHelpers.Effectful.fst" + (Prims.of_int (91)) + (Prims.of_int (6)) + (Prims.of_int (100)) + (Prims.of_int (19))) + (Prims.mk_range + "FStar.InteractiveHelpers.Effectful.fst" + (Prims.of_int (103)) + (Prims.of_int (4)) + (Prims.of_int (103)) + (Prims.of_int (28))) + (match hd_ty + with + | FStar_Pervasives_Native.None + -> + Obj.magic + (Obj.repr + (FStar_Tactics_Effect.lift_div_tac + (fun + uu___2 -> + FStar_Pervasives_Native.None))) + | FStar_Pervasives_Native.Some + hd_ty' -> + Obj.magic + (Obj.repr + (FStar_Tactics_Effect.tac_bind + (Prims.mk_range + "FStar.InteractiveHelpers.Effectful.fst" + (Prims.of_int (94)) + (Prims.of_int (14)) + (Prims.of_int (94)) + (Prims.of_int (28))) + (Prims.mk_range + "FStar.InteractiveHelpers.Effectful.fst" + (Prims.of_int (94)) + (Prims.of_int (8)) + (Prims.of_int (100)) + (Prims.of_int (19))) + (Obj.magic + (FStar_Tactics_Builtins.inspect + hd_ty')) + (fun + uu___2 -> + (fun + uu___2 -> + match uu___2 + with + | + FStar_Reflection_Data.Tv_Arrow + (b, c) -> + Obj.magic + (Obj.repr + (FStar_Tactics_Effect.tac_bind + (Prims.mk_range + "FStar.InteractiveHelpers.Effectful.fst" + (Prims.of_int (96)) + (Prims.of_int (22)) + (Prims.of_int (96)) + (Prims.of_int (38))) + (Prims.mk_range + "FStar.InteractiveHelpers.Effectful.fst" + (Prims.of_int (96)) + (Prims.of_int (10)) + (Prims.of_int (99)) + (Prims.of_int (43))) + (FStar_Tactics_Effect.lift_div_tac + (fun + uu___3 -> + FStar_Reflection_Builtins.inspect_binder + b)) + (fun + uu___3 -> + (fun + uu___3 -> + match uu___3 + with + | + (bv, + uu___4) + -> + Obj.magic + (FStar_Tactics_Effect.tac_bind + (Prims.mk_range + "FStar.InteractiveHelpers.Effectful.fst" + (Prims.of_int (97)) + (Prims.of_int (22)) + (Prims.of_int (97)) + (Prims.of_int (35))) + (Prims.mk_range + "FStar.InteractiveHelpers.Effectful.fst" + (Prims.of_int (98)) + (Prims.of_int (10)) + (Prims.of_int (99)) + (Prims.of_int (43))) + (FStar_Tactics_Effect.lift_div_tac + (fun + uu___5 -> + FStar_Reflection_Builtins.inspect_bv + bv)) + (fun + uu___5 -> + (fun + bview -> + Obj.magic + (FStar_Tactics_Effect.tac_bind + (Prims.mk_range + "FStar.InteractiveHelpers.Effectful.fst" + (Prims.of_int (98)) + (Prims.of_int (19)) + (Prims.of_int (98)) + (Prims.of_int (32))) + (Prims.mk_range + "FStar.InteractiveHelpers.Effectful.fst" + (Prims.of_int (99)) + (Prims.of_int (10)) + (Prims.of_int (99)) + (Prims.of_int (43))) + (FStar_Tactics_Effect.lift_div_tac + (fun + uu___5 -> + bview.FStar_Reflection_Data.bv_sort)) + (fun + uu___5 -> + (fun ty + -> + Obj.magic + (FStar_Tactics_Effect.tac_bind + (Prims.mk_range + "FStar.InteractiveHelpers.Effectful.fst" + (Prims.of_int (99)) + (Prims.of_int (15)) + (Prims.of_int (99)) + (Prims.of_int (43))) + (Prims.mk_range + "FStar.InteractiveHelpers.Effectful.fst" + (Prims.of_int (99)) + (Prims.of_int (10)) + (Prims.of_int (99)) + (Prims.of_int (43))) + (Obj.magic + (FStar_InteractiveHelpers_ExploreTerm.get_type_info_from_type + ty)) + (fun + uu___5 -> + FStar_Tactics_Effect.lift_div_tac + (fun + uu___6 -> + FStar_Pervasives_Native.Some + uu___5)))) + uu___5))) + uu___5))) + uu___3))) + | + uu___3 -> + Obj.magic + (Obj.repr + (FStar_Tactics_Effect.lift_div_tac + (fun + uu___4 -> + FStar_Pervasives_Native.None)))) + uu___2)))) + (fun + param_type + -> + FStar_Tactics_Effect.lift_div_tac + ( + fun + uu___2 -> + (hd0, + ((mk_cast_info + a a_type + param_type) + :: + params)))))) + uu___2))) uu___2))) + uu___1))) + | uu___1 -> + Obj.magic + (Obj.repr + (FStar_Tactics_Effect.lift_div_tac + (fun uu___2 -> (t, []))))) uu___) +let (decompose_application : + FStar_Reflection_Types.env -> + FStar_Reflection_Types.term -> + ((FStar_Reflection_Types.term * cast_info Prims.list), unit) + FStar_Tactics_Effect.tac_repr) + = + fun e -> + fun t -> + FStar_Tactics_Effect.tac_bind + (Prims.mk_range "FStar.InteractiveHelpers.Effectful.fst" + (Prims.of_int (108)) (Prims.of_int (19)) (Prims.of_int (108)) + (Prims.of_int (48))) + (Prims.mk_range "FStar.InteractiveHelpers.Effectful.fst" + (Prims.of_int (108)) (Prims.of_int (2)) (Prims.of_int (109)) + (Prims.of_int (25))) (Obj.magic (decompose_application_aux e t)) + (fun uu___ -> + FStar_Tactics_Effect.lift_div_tac + (fun uu___1 -> + match uu___ with + | (hd, params) -> (hd, (FStar_List_Tot_Base.rev params)))) +let (comp_view_to_effect_info : + Prims.bool -> + FStar_Reflection_Data.comp_view -> + (effect_info FStar_Pervasives_Native.option, unit) + FStar_Tactics_Effect.tac_repr) + = + fun dbg -> + fun cv -> + match cv with + | FStar_Reflection_Data.C_Total ret_ty -> + FStar_Tactics_Effect.tac_bind + (Prims.mk_range "FStar.InteractiveHelpers.Effectful.fst" + (Prims.of_int (117)) (Prims.of_int (24)) (Prims.of_int (117)) + (Prims.of_int (54))) + (Prims.mk_range "FStar.InteractiveHelpers.Effectful.fst" + (Prims.of_int (118)) (Prims.of_int (4)) (Prims.of_int (118)) + (Prims.of_int (57))) + (Obj.magic + (FStar_InteractiveHelpers_ExploreTerm.get_type_info_from_type + ret_ty)) + (fun ret_type_info -> + FStar_Tactics_Effect.lift_div_tac + (fun uu___ -> + FStar_Pervasives_Native.Some + (mk_effect_info + FStar_InteractiveHelpers_ExploreTerm.E_Total + ret_type_info FStar_Pervasives_Native.None + FStar_Pervasives_Native.None))) + | FStar_Reflection_Data.C_GTotal ret_ty -> + FStar_Tactics_Effect.tac_bind + (Prims.mk_range "FStar.InteractiveHelpers.Effectful.fst" + (Prims.of_int (120)) (Prims.of_int (24)) (Prims.of_int (120)) + (Prims.of_int (54))) + (Prims.mk_range "FStar.InteractiveHelpers.Effectful.fst" + (Prims.of_int (121)) (Prims.of_int (4)) (Prims.of_int (121)) + (Prims.of_int (57))) + (Obj.magic + (FStar_InteractiveHelpers_ExploreTerm.get_type_info_from_type + ret_ty)) + (fun ret_type_info -> + FStar_Tactics_Effect.lift_div_tac + (fun uu___ -> + FStar_Pervasives_Native.Some + (mk_effect_info + FStar_InteractiveHelpers_ExploreTerm.E_Total + ret_type_info FStar_Pervasives_Native.None + FStar_Pervasives_Native.None))) + | FStar_Reflection_Data.C_Lemma (pre, post, patterns) -> + FStar_Tactics_Effect.tac_bind + (Prims.mk_range "FStar.InteractiveHelpers.Effectful.fst" + (Prims.of_int (124)) (Prims.of_int (14)) (Prims.of_int (124)) + (Prims.of_int (35))) + (Prims.mk_range "FStar.InteractiveHelpers.Effectful.fst" + (Prims.of_int (125)) (Prims.of_int (4)) (Prims.of_int (126)) + (Prims.of_int (71))) + (Obj.magic (FStar_InteractiveHelpers_Base.prettify_term dbg pre)) + (fun uu___ -> + (fun pre1 -> + Obj.magic + (FStar_Tactics_Effect.tac_bind + (Prims.mk_range + "FStar.InteractiveHelpers.Effectful.fst" + (Prims.of_int (125)) (Prims.of_int (15)) + (Prims.of_int (125)) (Prims.of_int (37))) + (Prims.mk_range + "FStar.InteractiveHelpers.Effectful.fst" + (Prims.of_int (126)) (Prims.of_int (4)) + (Prims.of_int (126)) (Prims.of_int (71))) + (Obj.magic + (FStar_InteractiveHelpers_Base.prettify_term dbg + post)) + (fun post1 -> + FStar_Tactics_Effect.lift_div_tac + (fun uu___ -> + FStar_Pervasives_Native.Some + (mk_effect_info + FStar_InteractiveHelpers_ExploreTerm.E_Lemma + FStar_InteractiveHelpers_ExploreTerm.unit_type_info + (FStar_Pervasives_Native.Some pre1) + (FStar_Pervasives_Native.Some post1)))))) + uu___) + | FStar_Reflection_Data.C_Eff + (univs, eff_name, ret_ty, eff_args, uu___) -> + FStar_Tactics_Effect.tac_bind + (Prims.mk_range "FStar.InteractiveHelpers.Effectful.fst" + (Prims.of_int (128)) (Prims.of_int (4)) (Prims.of_int (128)) + (Prims.of_int (78))) + (Prims.mk_range "FStar.InteractiveHelpers.Effectful.fst" + (Prims.of_int (129)) (Prims.of_int (4)) (Prims.of_int (145)) + (Prims.of_int (7))) + (Obj.magic + (FStar_InteractiveHelpers_Base.print_dbg dbg + (Prims.strcat "comp_view_to_effect_info: C_Eff " + (FStar_Reflection_Derived.flatten_name eff_name)))) + (fun uu___1 -> + (fun uu___1 -> + Obj.magic + (FStar_Tactics_Effect.tac_bind + (Prims.mk_range + "FStar.InteractiveHelpers.Effectful.fst" + (Prims.of_int (129)) (Prims.of_int (24)) + (Prims.of_int (129)) (Prims.of_int (54))) + (Prims.mk_range + "FStar.InteractiveHelpers.Effectful.fst" + (Prims.of_int (130)) (Prims.of_int (4)) + (Prims.of_int (145)) (Prims.of_int (7))) + (Obj.magic + (FStar_InteractiveHelpers_ExploreTerm.get_type_info_from_type + ret_ty)) + (fun uu___2 -> + (fun ret_type_info -> + Obj.magic + (FStar_Tactics_Effect.tac_bind + (Prims.mk_range + "FStar.InteractiveHelpers.Effectful.fst" + (Prims.of_int (130)) (Prims.of_int (16)) + (Prims.of_int (130)) (Prims.of_int (44))) + (Prims.mk_range + "FStar.InteractiveHelpers.Effectful.fst" + (Prims.of_int (131)) (Prims.of_int (4)) + (Prims.of_int (145)) (Prims.of_int (7))) + (FStar_Tactics_Effect.lift_div_tac + (fun uu___2 -> + FStar_InteractiveHelpers_ExploreTerm.effect_name_to_type + eff_name)) + (fun uu___2 -> + (fun etype -> + Obj.magic + (FStar_Tactics_Effect.tac_bind + (Prims.mk_range + "FStar.InteractiveHelpers.Effectful.fst" + (Prims.of_int (131)) + (Prims.of_int (17)) + (Prims.of_int (131)) + (Prims.of_int (51))) + (Prims.mk_range + "FStar.InteractiveHelpers.Effectful.fst" + (Prims.of_int (132)) + (Prims.of_int (4)) + (Prims.of_int (145)) + (Prims.of_int (7))) + (FStar_Tactics_Effect.lift_div_tac + (fun uu___2 -> + mk_effect_info etype + ret_type_info)) + (fun uu___2 -> + (fun mk_res -> + Obj.magic + (FStar_Tactics_Effect.tac_bind + (Prims.mk_range + "FStar.InteractiveHelpers.Effectful.fst" + (Prims.of_int (132)) + (Prims.of_int (19)) + (Prims.of_int (132)) + (Prims.of_int (71))) + (Prims.mk_range + "FStar.InteractiveHelpers.Effectful.fst" + (Prims.of_int (133)) + (Prims.of_int (10)) + (Prims.of_int (144)) + (Prims.of_int (15))) + (Obj.magic + (FStar_Tactics_Util.map + (fun uu___2 -> + match uu___2 + with + | (x, a) -> + FStar_Tactics_Effect.tac_bind + (Prims.mk_range + "FStar.InteractiveHelpers.Effectful.fst" + (Prims.of_int (132)) + (Prims.of_int (38)) + (Prims.of_int (132)) + (Prims.of_int (57))) + (Prims.mk_range + "FStar.InteractiveHelpers.Effectful.fst" + (Prims.of_int (132)) + (Prims.of_int (37)) + (Prims.of_int (132)) + (Prims.of_int (61))) + (Obj.magic + (FStar_InteractiveHelpers_Base.prettify_term + dbg x)) + (fun + uu___3 -> + FStar_Tactics_Effect.lift_div_tac + (fun + uu___4 -> + (uu___3, + a)))) + eff_args)) + (fun eff_args1 -> + FStar_Tactics_Effect.lift_div_tac + (fun uu___2 -> + match + (etype, + eff_args1) + with + | (FStar_InteractiveHelpers_ExploreTerm.E_PURE, + (pre, + uu___3)::[]) + -> + FStar_Pervasives_Native.Some + (mk_res + (FStar_Pervasives_Native.Some + pre) + FStar_Pervasives_Native.None) + | (FStar_InteractiveHelpers_ExploreTerm.E_Pure, + (pre, + uu___3):: + (post, + uu___4)::[]) + -> + FStar_Pervasives_Native.Some + (mk_res + (FStar_Pervasives_Native.Some + pre) + (FStar_Pervasives_Native.Some + post)) + | (FStar_InteractiveHelpers_ExploreTerm.E_Stack, + (pre, + uu___3):: + (post, + uu___4)::[]) + -> + FStar_Pervasives_Native.Some + (mk_res + (FStar_Pervasives_Native.Some + pre) + (FStar_Pervasives_Native.Some + post)) + | (FStar_InteractiveHelpers_ExploreTerm.E_ST, + (pre, + uu___3):: + (post, + uu___4)::[]) + -> + FStar_Pervasives_Native.Some + (mk_res + (FStar_Pervasives_Native.Some + pre) + (FStar_Pervasives_Native.Some + post)) + | (FStar_InteractiveHelpers_ExploreTerm.E_Unknown, + []) -> + FStar_Pervasives_Native.Some + (mk_res + FStar_Pervasives_Native.None + FStar_Pervasives_Native.None) + | (FStar_InteractiveHelpers_ExploreTerm.E_Unknown, + (pre, + uu___3)::[]) + -> + FStar_Pervasives_Native.Some + (mk_res + (FStar_Pervasives_Native.Some + pre) + FStar_Pervasives_Native.None) + | (FStar_InteractiveHelpers_ExploreTerm.E_Unknown, + (pre, + uu___3):: + (post, + uu___4)::[]) + -> + FStar_Pervasives_Native.Some + (mk_res + (FStar_Pervasives_Native.Some + pre) + (FStar_Pervasives_Native.Some + post)) + | uu___3 -> + FStar_Pervasives_Native.None)))) + uu___2))) uu___2))) uu___2))) + uu___1) +let (comp_to_effect_info : + Prims.bool -> + FStar_Reflection_Types.comp -> + (effect_info FStar_Pervasives_Native.option, unit) + FStar_Tactics_Effect.tac_repr) + = + fun dbg -> + fun c -> + FStar_Tactics_Effect.tac_bind + (Prims.mk_range "FStar.InteractiveHelpers.Effectful.fst" + (Prims.of_int (150)) (Prims.of_int (23)) (Prims.of_int (150)) + (Prims.of_int (37))) + (Prims.mk_range "FStar.InteractiveHelpers.Effectful.fst" + (Prims.of_int (151)) (Prims.of_int (2)) (Prims.of_int (151)) + (Prims.of_int (33))) + (FStar_Tactics_Effect.lift_div_tac + (fun uu___ -> FStar_Reflection_Builtins.inspect_comp c)) + (fun uu___ -> + (fun cv -> Obj.magic (comp_view_to_effect_info dbg cv)) uu___) +let (compute_effect_info : + Prims.bool -> + FStar_Reflection_Types.env -> + FStar_Reflection_Types.term -> + (effect_info FStar_Pervasives_Native.option, unit) + FStar_Tactics_Effect.tac_repr) + = + fun dbg -> + fun e -> + fun tm -> + FStar_Tactics_Effect.tac_bind + (Prims.mk_range "FStar.InteractiveHelpers.Effectful.fst" + (Prims.of_int (156)) (Prims.of_int (8)) (Prims.of_int (156)) + (Prims.of_int (21))) + (Prims.mk_range "FStar.InteractiveHelpers.Effectful.fst" + (Prims.of_int (156)) (Prims.of_int (2)) (Prims.of_int (158)) + (Prims.of_int (16))) + (Obj.magic (FStar_InteractiveHelpers_ExploreTerm.safe_tcc e tm)) + (fun uu___ -> + (fun uu___ -> + match uu___ with + | FStar_Pervasives_Native.Some c -> + Obj.magic (Obj.repr (comp_to_effect_info dbg c)) + | FStar_Pervasives_Native.None -> + Obj.magic + (Obj.repr + (FStar_Tactics_Effect.lift_div_tac + (fun uu___1 -> FStar_Pervasives_Native.None)))) + uu___) +let (typ_or_comp_to_effect_info : + Prims.bool -> + FStar_InteractiveHelpers_Base.genv -> + FStar_InteractiveHelpers_ExploreTerm.typ_or_comp -> + (effect_info, unit) FStar_Tactics_Effect.tac_repr) + = + fun dbg -> + fun ge -> + fun c -> + FStar_Tactics_Effect.tac_bind + (Prims.mk_range "FStar.InteractiveHelpers.Effectful.fst" + (Prims.of_int (173)) (Prims.of_int (10)) (Prims.of_int (173)) + (Prims.of_int (40))) + (Prims.mk_range "FStar.InteractiveHelpers.Effectful.fst" + (Prims.of_int (174)) (Prims.of_int (2)) (Prims.of_int (182)) + (Prims.of_int (25))) + (Obj.magic + (FStar_InteractiveHelpers_ExploreTerm.flush_typ_or_comp dbg + ge.FStar_InteractiveHelpers_Base.env c)) + (fun uu___ -> + (fun c1 -> + match c1 with + | FStar_InteractiveHelpers_ExploreTerm.TC_Typ + (ty, uu___, uu___1) -> + Obj.magic + (FStar_Tactics_Effect.tac_bind + (Prims.mk_range + "FStar.InteractiveHelpers.Effectful.fst" + (Prims.of_int (176)) (Prims.of_int (16)) + (Prims.of_int (176)) (Prims.of_int (42))) + (Prims.mk_range + "FStar.InteractiveHelpers.Effectful.fst" + (Prims.of_int (177)) (Prims.of_int (4)) + (Prims.of_int (177)) (Prims.of_int (42))) + (Obj.magic + (FStar_InteractiveHelpers_ExploreTerm.get_type_info_from_type + ty)) + (fun tinfo -> + FStar_Tactics_Effect.lift_div_tac + (fun uu___2 -> + mk_effect_info + FStar_InteractiveHelpers_ExploreTerm.E_Total + tinfo FStar_Pervasives_Native.None + FStar_Pervasives_Native.None))) + | FStar_InteractiveHelpers_ExploreTerm.TC_Comp + (cv, uu___, uu___1) -> + Obj.magic + (FStar_Tactics_Effect.tac_bind + (Prims.mk_range + "FStar.InteractiveHelpers.Effectful.fst" + (Prims.of_int (179)) (Prims.of_int (20)) + (Prims.of_int (179)) (Prims.of_int (46))) + (Prims.mk_range + "FStar.InteractiveHelpers.Effectful.fst" + (Prims.of_int (180)) (Prims.of_int (4)) + (Prims.of_int (182)) (Prims.of_int (25))) + (Obj.magic (comp_to_effect_info dbg cv)) + (fun uu___2 -> + (fun opt_einfo -> + match opt_einfo with + | FStar_Pervasives_Native.None -> + Obj.magic + (Obj.repr + (FStar_Tactics_Effect.tac_bind + (Prims.mk_range + "FStar.InteractiveHelpers.Effectful.fst" + (Prims.of_int (181)) + (Prims.of_int (20)) + (Prims.of_int (181)) + (Prims.of_int (83))) + (Prims.mk_range + "FStar.InteractiveHelpers.Effectful.fst" + (Prims.of_int (181)) + (Prims.of_int (14)) + (Prims.of_int (181)) + (Prims.of_int (83))) + (Obj.magic + (FStar_Tactics_Effect.tac_bind + (Prims.mk_range + "FStar.InteractiveHelpers.Effectful.fst" + (Prims.of_int (181)) + (Prims.of_int (64)) + (Prims.of_int (181)) + (Prims.of_int (82))) + (Prims.mk_range "prims.fst" + (Prims.of_int (606)) + (Prims.of_int (19)) + (Prims.of_int (606)) + (Prims.of_int (31))) + (Obj.magic + (FStar_InteractiveHelpers_Base.acomp_to_string + cv)) + (fun uu___2 -> + FStar_Tactics_Effect.lift_div_tac + (fun uu___3 -> + Prims.strcat + "typ_or_comp_to_effect_info failed on: " + uu___2)))) + (fun uu___2 -> + (fun uu___2 -> + Obj.magic + (FStar_InteractiveHelpers_Base.mfail + uu___2)) uu___2))) + | FStar_Pervasives_Native.Some einfo -> + Obj.magic + (Obj.repr + (FStar_Tactics_Effect.lift_div_tac + (fun uu___2 -> einfo)))) uu___2))) + uu___) +let (tcc_no_lift : + FStar_Reflection_Types.env -> + FStar_Reflection_Types.term -> + (FStar_Reflection_Types.comp, unit) FStar_Tactics_Effect.tac_repr) + = + fun e -> + fun t -> + FStar_Tactics_Effect.tac_bind + (Prims.mk_range "FStar.InteractiveHelpers.Effectful.fst" + (Prims.of_int (195)) (Prims.of_int (8)) (Prims.of_int (195)) + (Prims.of_int (17))) + (Prims.mk_range "FStar.InteractiveHelpers.Effectful.fst" + (Prims.of_int (195)) (Prims.of_int (2)) (Prims.of_int (202)) + (Prims.of_int (11))) + (Obj.magic (FStar_Tactics_Builtins.inspect t)) + (fun uu___ -> + (fun uu___ -> + match uu___ with + | FStar_Reflection_Data.Tv_App (uu___1, uu___2) -> + Obj.magic + (FStar_Tactics_Effect.tac_bind + (Prims.mk_range + "FStar.InteractiveHelpers.Effectful.fst" + (Prims.of_int (197)) (Prims.of_int (19)) + (Prims.of_int (197)) (Prims.of_int (32))) + (Prims.mk_range + "FStar.InteractiveHelpers.Effectful.fst" + (Prims.of_int (197)) (Prims.of_int (4)) + (Prims.of_int (199)) (Prims.of_int (41))) + (FStar_Tactics_Effect.lift_div_tac + (fun uu___3 -> + FStar_Reflection_Derived.collect_app t)) + (fun uu___3 -> + (fun uu___3 -> + match uu___3 with + | (hd, args) -> + Obj.magic + (FStar_Tactics_Effect.tac_bind + (Prims.mk_range + "FStar.InteractiveHelpers.Effectful.fst" + (Prims.of_int (198)) + (Prims.of_int (12)) + (Prims.of_int (198)) + (Prims.of_int (20))) + (Prims.mk_range + "FStar.InteractiveHelpers.Effectful.fst" + (Prims.of_int (199)) + (Prims.of_int (4)) + (Prims.of_int (199)) + (Prims.of_int (41))) + (Obj.magic + (FStar_Tactics_Builtins.tcc e hd)) + (fun uu___4 -> + (fun c -> + Obj.magic + (FStar_InteractiveHelpers_ExploreTerm.inst_comp + e c + (FStar_List_Tot_Base.map + FStar_Pervasives_Native.fst + args))) uu___4))) uu___3)) + | uu___1 -> Obj.magic (FStar_Tactics_Builtins.tcc e t)) uu___) +let (compute_eterm_info : + Prims.bool -> + FStar_Reflection_Types.env -> + FStar_Reflection_Types.term -> + (eterm_info, unit) FStar_Tactics_Effect.tac_repr) + = + fun dbg -> + fun e -> + fun t -> + FStar_Tactics_Effect.tac_bind + (Prims.mk_range "FStar.InteractiveHelpers.Effectful.fst" + (Prims.of_int (210)) (Prims.of_int (23)) (Prims.of_int (210)) + (Prims.of_int (48))) + (Prims.mk_range "FStar.InteractiveHelpers.Effectful.fst" + (Prims.of_int (210)) (Prims.of_int (2)) (Prims.of_int (223)) + (Prims.of_int (16))) (Obj.magic (decompose_application e t)) + (fun uu___ -> + (fun uu___ -> + match uu___ with + | (hd, parameters) -> + Obj.magic + (FStar_Tactics_Derived.try_with + (fun uu___1 -> + match () with + | () -> + FStar_Tactics_Effect.tac_bind + (Prims.mk_range + "FStar.InteractiveHelpers.Effectful.fst" + (Prims.of_int (213)) (Prims.of_int (19)) + (Prims.of_int (213)) (Prims.of_int (34))) + (Prims.mk_range + "FStar.InteractiveHelpers.Effectful.fst" + (Prims.of_int (214)) (Prims.of_int (4)) + (Prims.of_int (218)) (Prims.of_int (39))) + (Obj.magic (tcc_no_lift e t)) + (fun uu___2 -> + (fun c -> + Obj.magic + (FStar_Tactics_Effect.tac_bind + (Prims.mk_range + "FStar.InteractiveHelpers.Effectful.fst" + (Prims.of_int (214)) + (Prims.of_int (20)) + (Prims.of_int (214)) + (Prims.of_int (45))) + (Prims.mk_range + "FStar.InteractiveHelpers.Effectful.fst" + (Prims.of_int (215)) + (Prims.of_int (4)) + (Prims.of_int (218)) + (Prims.of_int (39))) + (Obj.magic + (comp_to_effect_info dbg c)) + (fun uu___2 -> + (fun opt_einfo -> + match opt_einfo with + | FStar_Pervasives_Native.None + -> + Obj.magic + (Obj.repr + (FStar_Tactics_Effect.tac_bind + (Prims.mk_range + "FStar.InteractiveHelpers.Effectful.fst" + (Prims.of_int (216)) + (Prims.of_int (20)) + (Prims.of_int (216)) + (Prims.of_int (74))) + (Prims.mk_range + "FStar.InteractiveHelpers.Effectful.fst" + (Prims.of_int (216)) + (Prims.of_int (14)) + (Prims.of_int (216)) + (Prims.of_int (74))) + (Obj.magic + (FStar_Tactics_Effect.tac_bind + (Prims.mk_range + "FStar.InteractiveHelpers.Effectful.fst" + (Prims.of_int (216)) + (Prims.of_int (57)) + (Prims.of_int (216)) + (Prims.of_int (73))) + (Prims.mk_range + "prims.fst" + (Prims.of_int (606)) + (Prims.of_int (19)) + (Prims.of_int (606)) + (Prims.of_int (31))) + (Obj.magic + (FStar_Tactics_Builtins.term_to_string + t)) + (fun + uu___2 -> + FStar_Tactics_Effect.lift_div_tac + (fun + uu___3 -> + Prims.strcat + "compute_eterm_info: failed on: " + uu___2)))) + (fun uu___2 -> + (fun uu___2 + -> + Obj.magic + (FStar_InteractiveHelpers_Base.mfail + uu___2)) + uu___2))) + | FStar_Pervasives_Native.Some + einfo -> + Obj.magic + (Obj.repr + (FStar_Tactics_Effect.lift_div_tac + (fun uu___2 -> + mk_eterm_info + einfo hd + parameters)))) + uu___2))) uu___2)) + (fun uu___1 -> + match uu___1 with + | FStar_Tactics_Common.TacticFailure msg -> + FStar_InteractiveHelpers_Base.mfail + (Prims.strcat + "compute_eterm_info: failure: '" + (Prims.strcat msg "'")) + | e1 -> FStar_Tactics_Effect.raise e1))) uu___) +let (has_refinement : + FStar_InteractiveHelpers_ExploreTerm.type_info -> Prims.bool) = + fun ty -> + FStar_Pervasives_Native.uu___is_Some + ty.FStar_InteractiveHelpers_ExploreTerm.refin +let (get_refinement : + FStar_InteractiveHelpers_ExploreTerm.type_info -> + FStar_Reflection_Types.term) + = + fun ty -> + FStar_Pervasives_Native.__proj__Some__item__v + ty.FStar_InteractiveHelpers_ExploreTerm.refin +let (get_opt_refinment : + FStar_InteractiveHelpers_ExploreTerm.type_info -> + FStar_Reflection_Types.term FStar_Pervasives_Native.option) + = fun ty -> ty.FStar_InteractiveHelpers_ExploreTerm.refin +let (get_rawest_type : + FStar_InteractiveHelpers_ExploreTerm.type_info -> + FStar_Reflection_Types.typ) + = fun ty -> ty.FStar_InteractiveHelpers_ExploreTerm.ty +type type_comparison = + | Refines + | Same_raw_type + | Unknown +let (uu___is_Refines : type_comparison -> Prims.bool) = + fun projectee -> match projectee with | Refines -> true | uu___ -> false +let (uu___is_Same_raw_type : type_comparison -> Prims.bool) = + fun projectee -> + match projectee with | Same_raw_type -> true | uu___ -> false +let (uu___is_Unknown : type_comparison -> Prims.bool) = + fun projectee -> match projectee with | Unknown -> true | uu___ -> false +let (type_comparison_to_string : type_comparison -> Prims.string) = + fun c -> + match c with + | Refines -> "Refines" + | Same_raw_type -> "Same_raw_type" + | Unknown -> "Unknown" +let (compare_types : + Prims.bool -> + FStar_InteractiveHelpers_ExploreTerm.type_info -> + FStar_InteractiveHelpers_ExploreTerm.type_info -> + (type_comparison, unit) FStar_Tactics_Effect.tac_repr) + = + fun dbg -> + fun info1 -> + fun info2 -> + FStar_Tactics_Effect.tac_bind + (Prims.mk_range "FStar.InteractiveHelpers.Effectful.fst" + (Prims.of_int (255)) (Prims.of_int (2)) (Prims.of_int (255)) + (Prims.of_int (34))) + (Prims.mk_range "FStar.InteractiveHelpers.Effectful.fst" + (Prims.of_int (256)) (Prims.of_int (2)) (Prims.of_int (279)) + (Prims.of_int (13))) + (Obj.magic + (FStar_InteractiveHelpers_Base.print_dbg dbg "[> compare_types")) + (fun uu___ -> + (fun uu___ -> + Obj.magic + (FStar_Tactics_Effect.tac_bind + (Prims.mk_range "FStar.InteractiveHelpers.Effectful.fst" + (Prims.of_int (256)) (Prims.of_int (5)) + (Prims.of_int (256)) (Prims.of_int (30))) + (Prims.mk_range "FStar.InteractiveHelpers.Effectful.fst" + (Prims.of_int (256)) (Prims.of_int (2)) + (Prims.of_int (279)) (Prims.of_int (13))) + (Obj.magic + (term_eq + info1.FStar_InteractiveHelpers_ExploreTerm.ty + info2.FStar_InteractiveHelpers_ExploreTerm.ty)) + (fun uu___1 -> + (fun uu___1 -> + if uu___1 + then + Obj.magic + (FStar_Tactics_Effect.tac_bind + (Prims.mk_range + "FStar.InteractiveHelpers.Effectful.fst" + (Prims.of_int (257)) (Prims.of_int (14)) + (Prims.of_int (257)) (Prims.of_int (48))) + (Prims.mk_range + "FStar.InteractiveHelpers.Effectful.fst" + (Prims.of_int (258)) (Prims.of_int (6)) + (Prims.of_int (276)) (Prims.of_int (15))) + (Obj.magic + (FStar_InteractiveHelpers_Base.print_dbg + dbg "-> types are equal")) + (fun uu___2 -> + (fun uu___2 -> + if has_refinement info2 + then + Obj.magic + (FStar_Tactics_Effect.tac_bind + (Prims.mk_range + "FStar.InteractiveHelpers.Effectful.fst" + (Prims.of_int (259)) + (Prims.of_int (16)) + (Prims.of_int (259)) + (Prims.of_int (58))) + (Prims.mk_range + "FStar.InteractiveHelpers.Effectful.fst" + (Prims.of_int (262)) + (Prims.of_int (8)) + (Prims.of_int (273)) + (Prims.of_int (23))) + (Obj.magic + (FStar_InteractiveHelpers_Base.print_dbg + dbg + "-> 2nd type has refinement")) + (fun uu___3 -> + (fun uu___3 -> + if has_refinement info1 + then + Obj.magic + (FStar_Tactics_Effect.tac_bind + (Prims.mk_range + "FStar.InteractiveHelpers.Effectful.fst" + (Prims.of_int (263)) + (Prims.of_int (18)) + (Prims.of_int (263)) + (Prims.of_int (60))) + (Prims.mk_range + "FStar.InteractiveHelpers.Effectful.fst" + (Prims.of_int (264)) + (Prims.of_int (10)) + (Prims.of_int (269)) + (Prims.of_int (23))) + (Obj.magic + (FStar_InteractiveHelpers_Base.print_dbg + dbg + "-> 1st type has refinement")) + (fun uu___4 -> + (fun uu___4 -> + Obj.magic + ( + FStar_Tactics_Effect.tac_bind + (Prims.mk_range + "FStar.InteractiveHelpers.Effectful.fst" + (Prims.of_int (264)) + (Prims.of_int (13)) + (Prims.of_int (264)) + (Prims.of_int (66))) + (Prims.mk_range + "FStar.InteractiveHelpers.Effectful.fst" + (Prims.of_int (264)) + (Prims.of_int (10)) + (Prims.of_int (269)) + (Prims.of_int (23))) + (Obj.magic + (term_eq + (get_refinement + info1) + (get_refinement + info2))) + (fun + uu___5 -> + (fun + uu___5 -> + if uu___5 + then + Obj.magic + (FStar_Tactics_Effect.tac_bind + (Prims.mk_range + "FStar.InteractiveHelpers.Effectful.fst" + (Prims.of_int (265)) + (Prims.of_int (20)) + (Prims.of_int (265)) + (Prims.of_int (46))) + (Prims.mk_range + "FStar.InteractiveHelpers.Effectful.fst" + (Prims.of_int (266)) + (Prims.of_int (12)) + (Prims.of_int (266)) + (Prims.of_int (19))) + (Obj.magic + (FStar_InteractiveHelpers_Base.print_dbg + dbg + "-> Refines")) + (fun + uu___6 -> + FStar_Tactics_Effect.lift_div_tac + (fun + uu___7 -> + Refines))) + else + Obj.magic + (FStar_Tactics_Effect.tac_bind + (Prims.mk_range + "FStar.InteractiveHelpers.Effectful.fst" + (Prims.of_int (268)) + (Prims.of_int (18)) + (Prims.of_int (268)) + (Prims.of_int (50))) + (Prims.mk_range + "FStar.InteractiveHelpers.Effectful.fst" + (Prims.of_int (269)) + (Prims.of_int (10)) + (Prims.of_int (269)) + (Prims.of_int (23))) + (Obj.magic + (FStar_InteractiveHelpers_Base.print_dbg + dbg + "-> Same_raw_type")) + (fun + uu___7 -> + FStar_Tactics_Effect.lift_div_tac + (fun + uu___8 -> + Same_raw_type)))) + uu___5))) + uu___4)) + else + Obj.magic + (FStar_Tactics_Effect.tac_bind + (Prims.mk_range + "FStar.InteractiveHelpers.Effectful.fst" + (Prims.of_int (271)) + (Prims.of_int (18)) + (Prims.of_int (271)) + (Prims.of_int (63))) + (Prims.mk_range + "FStar.InteractiveHelpers.Effectful.fst" + (Prims.of_int (272)) + (Prims.of_int (10)) + (Prims.of_int (273)) + (Prims.of_int (23))) + (Obj.magic + (FStar_InteractiveHelpers_Base.print_dbg + dbg + "-> 1st type has no refinement")) + (fun uu___5 -> + (fun uu___5 -> + Obj.magic + ( + FStar_Tactics_Effect.tac_bind + (Prims.mk_range + "FStar.InteractiveHelpers.Effectful.fst" + (Prims.of_int (272)) + (Prims.of_int (18)) + (Prims.of_int (272)) + (Prims.of_int (50))) + (Prims.mk_range + "FStar.InteractiveHelpers.Effectful.fst" + (Prims.of_int (273)) + (Prims.of_int (10)) + (Prims.of_int (273)) + (Prims.of_int (23))) + (Obj.magic + (FStar_InteractiveHelpers_Base.print_dbg + dbg + "-> Same_raw_type")) + (fun + uu___6 -> + FStar_Tactics_Effect.lift_div_tac + (fun + uu___7 -> + Same_raw_type)))) + uu___5))) + uu___3)) + else + Obj.magic + (FStar_Tactics_Effect.tac_bind + (Prims.mk_range + "FStar.InteractiveHelpers.Effectful.fst" + (Prims.of_int (275)) + (Prims.of_int (16)) + (Prims.of_int (275)) + (Prims.of_int (70))) + (Prims.mk_range + "FStar.InteractiveHelpers.Effectful.fst" + (Prims.of_int (276)) + (Prims.of_int (8)) + (Prims.of_int (276)) + (Prims.of_int (15))) + (Obj.magic + (FStar_InteractiveHelpers_Base.print_dbg + dbg + "-> 2nd type has no refinement: Refines")) + (fun uu___4 -> + FStar_Tactics_Effect.lift_div_tac + (fun uu___5 -> Refines)))) + uu___2)) + else + Obj.magic + (FStar_Tactics_Effect.tac_bind + (Prims.mk_range + "FStar.InteractiveHelpers.Effectful.fst" + (Prims.of_int (278)) (Prims.of_int (14)) + (Prims.of_int (278)) (Prims.of_int (49))) + (Prims.mk_range + "FStar.InteractiveHelpers.Effectful.fst" + (Prims.of_int (279)) (Prims.of_int (6)) + (Prims.of_int (279)) (Prims.of_int (13))) + (Obj.magic + (FStar_InteractiveHelpers_Base.print_dbg + dbg "types are not equal")) + (fun uu___3 -> + FStar_Tactics_Effect.lift_div_tac + (fun uu___4 -> Unknown)))) uu___1))) + uu___) +let (compare_cast_types : + Prims.bool -> + cast_info -> (type_comparison, unit) FStar_Tactics_Effect.tac_repr) + = + fun dbg -> + fun p -> + FStar_Tactics_Effect.tac_bind + (Prims.mk_range "FStar.InteractiveHelpers.Effectful.fst" + (Prims.of_int (285)) (Prims.of_int (2)) (Prims.of_int (285)) + (Prims.of_int (39))) + (Prims.mk_range "FStar.InteractiveHelpers.Effectful.fst" + (Prims.of_int (286)) (Prims.of_int (2)) (Prims.of_int (289)) + (Prims.of_int (16))) + (Obj.magic + (FStar_InteractiveHelpers_Base.print_dbg dbg + "[> compare_cast_types")) + (fun uu___ -> + (fun uu___ -> + match ((p.p_ty), (p.exp_ty)) with + | (FStar_Pervasives_Native.Some info1, + FStar_Pervasives_Native.Some info2) -> + Obj.magic (Obj.repr (compare_types dbg info1 info2)) + | uu___1 -> + Obj.magic + (Obj.repr + (FStar_Tactics_Effect.lift_div_tac + (fun uu___2 -> Unknown)))) uu___) +let (mk_has_type : + FStar_Reflection_Types.term -> + FStar_Reflection_Types.typ -> + (FStar_Reflection_Types.term, unit) FStar_Tactics_Effect.tac_repr) + = + fun uu___1 -> + fun uu___ -> + (fun t -> + fun ty -> + Obj.magic + (FStar_Tactics_Effect.lift_div_tac + (fun uu___ -> + FStar_Reflection_Derived.mk_app + (FStar_Reflection_Builtins.pack_ln + (FStar_Reflection_Data.Tv_FVar + (FStar_Reflection_Builtins.pack_fv + ["Prims"; "has_type"]))) + [(ty, FStar_Reflection_Data.Q_Implicit); + (t, FStar_Reflection_Data.Q_Explicit); + (ty, FStar_Reflection_Data.Q_Explicit)]))) uu___1 uu___ +let (cast_info_to_propositions : + Prims.bool -> + FStar_InteractiveHelpers_Base.genv -> + cast_info -> + (FStar_InteractiveHelpers_Propositions.proposition Prims.list, + unit) FStar_Tactics_Effect.tac_repr) + = + fun dbg -> + fun ge -> + fun ci -> + FStar_Tactics_Effect.tac_bind + (Prims.mk_range "FStar.InteractiveHelpers.Effectful.fst" + (Prims.of_int (316)) (Prims.of_int (2)) (Prims.of_int (316)) + (Prims.of_int (76))) + (Prims.mk_range "FStar.InteractiveHelpers.Effectful.fst" + (Prims.of_int (317)) (Prims.of_int (2)) (Prims.of_int (344)) + (Prims.of_int (13))) + (Obj.magic + (FStar_Tactics_Effect.tac_bind + (Prims.mk_range "FStar.InteractiveHelpers.Effectful.fst" + (Prims.of_int (316)) (Prims.of_int (16)) + (Prims.of_int (316)) (Prims.of_int (76))) + (Prims.mk_range "FStar.InteractiveHelpers.Effectful.fst" + (Prims.of_int (316)) (Prims.of_int (2)) + (Prims.of_int (316)) (Prims.of_int (76))) + (Obj.magic + (FStar_Tactics_Effect.tac_bind + (Prims.mk_range + "FStar.InteractiveHelpers.Effectful.fst" + (Prims.of_int (316)) (Prims.of_int (53)) + (Prims.of_int (316)) (Prims.of_int (75))) + (Prims.mk_range "prims.fst" (Prims.of_int (606)) + (Prims.of_int (19)) (Prims.of_int (606)) + (Prims.of_int (31))) + (Obj.magic (cast_info_to_string ci)) + (fun uu___ -> + FStar_Tactics_Effect.lift_div_tac + (fun uu___1 -> + Prims.strcat "[> cast_info_to_propositions:\n" + uu___)))) + (fun uu___ -> + (fun uu___ -> + Obj.magic + (FStar_InteractiveHelpers_Base.print_dbg dbg uu___)) + uu___))) + (fun uu___ -> + (fun uu___ -> + Obj.magic + (FStar_Tactics_Effect.tac_bind + (Prims.mk_range "FStar.InteractiveHelpers.Effectful.fst" + (Prims.of_int (317)) (Prims.of_int (8)) + (Prims.of_int (317)) (Prims.of_int (33))) + (Prims.mk_range "FStar.InteractiveHelpers.Effectful.fst" + (Prims.of_int (317)) (Prims.of_int (2)) + (Prims.of_int (344)) (Prims.of_int (13))) + (Obj.magic (compare_cast_types dbg ci)) + (fun uu___1 -> + (fun uu___1 -> + match uu___1 with + | Refines -> + Obj.magic + (FStar_Tactics_Effect.tac_bind + (Prims.mk_range + "FStar.InteractiveHelpers.Effectful.fst" + (Prims.of_int (319)) + (Prims.of_int (4)) + (Prims.of_int (319)) + (Prims.of_int (51))) + (Prims.mk_range + "FStar.InteractiveHelpers.Effectful.fst" + (Prims.of_int (320)) + (Prims.of_int (4)) + (Prims.of_int (320)) + (Prims.of_int (6))) + (Obj.magic + (FStar_InteractiveHelpers_Base.print_dbg + dbg "-> Comparison result: Refines")) + (fun uu___2 -> + FStar_Tactics_Effect.lift_div_tac + (fun uu___3 -> []))) + | Same_raw_type -> + Obj.magic + (FStar_Tactics_Effect.tac_bind + (Prims.mk_range + "FStar.InteractiveHelpers.Effectful.fst" + (Prims.of_int (322)) + (Prims.of_int (4)) + (Prims.of_int (322)) + (Prims.of_int (57))) + (Prims.mk_range + "FStar.InteractiveHelpers.Effectful.fst" + (Prims.of_int (323)) + (Prims.of_int (4)) + (Prims.of_int (325)) + (Prims.of_int (16))) + (Obj.magic + (FStar_InteractiveHelpers_Base.print_dbg + dbg + "-> Comparison result: Same_raw_type")) + (fun uu___2 -> + (fun uu___2 -> + Obj.magic + (FStar_Tactics_Effect.tac_bind + (Prims.mk_range + "FStar.InteractiveHelpers.Effectful.fst" + (Prims.of_int (323)) + (Prims.of_int (16)) + (Prims.of_int (323)) + (Prims.of_int (50))) + (Prims.mk_range + "FStar.InteractiveHelpers.Effectful.fst" + (Prims.of_int (324)) + (Prims.of_int (4)) + (Prims.of_int (325)) + (Prims.of_int (16))) + (FStar_Tactics_Effect.lift_div_tac + (fun uu___3 -> + get_refinement + (FStar_Pervasives_Native.__proj__Some__item__v + ci.exp_ty))) + (fun uu___3 -> + (fun refin -> + Obj.magic + (FStar_Tactics_Effect.tac_bind + (Prims.mk_range + "FStar.InteractiveHelpers.Effectful.fst" + (Prims.of_int (324)) + (Prims.of_int (21)) + (Prims.of_int (324)) + (Prims.of_int (55))) + (Prims.mk_range + "FStar.InteractiveHelpers.Effectful.fst" + (Prims.of_int (325)) + (Prims.of_int (4)) + (Prims.of_int (325)) + (Prims.of_int (16))) + (Obj.magic + (FStar_InteractiveHelpers_Base.mk_app_norm + ge.FStar_InteractiveHelpers_Base.env + refin + [ci.term])) + (fun inst_refin -> + FStar_Tactics_Effect.lift_div_tac + (fun uu___3 -> + [inst_refin])))) + uu___3))) uu___2)) + | Unknown -> + Obj.magic + (FStar_Tactics_Effect.tac_bind + (Prims.mk_range + "FStar.InteractiveHelpers.Effectful.fst" + (Prims.of_int (327)) + (Prims.of_int (4)) + (Prims.of_int (327)) + (Prims.of_int (51))) + (Prims.mk_range + "FStar.InteractiveHelpers.Effectful.fst" + (Prims.of_int (328)) + (Prims.of_int (4)) + (Prims.of_int (344)) + (Prims.of_int (13))) + (Obj.magic + (FStar_InteractiveHelpers_Base.print_dbg + dbg "-> Comparison result: Unknown")) + (fun uu___2 -> + (fun uu___2 -> + match ((ci.p_ty), (ci.exp_ty)) with + | (FStar_Pervasives_Native.Some + p_ty, + FStar_Pervasives_Native.Some + e_ty) -> + Obj.magic + (Obj.repr + (FStar_Tactics_Effect.tac_bind + (Prims.mk_range + "FStar.InteractiveHelpers.Effectful.fst" + (Prims.of_int (330)) + (Prims.of_int (18)) + (Prims.of_int (330)) + (Prims.of_int (38))) + (Prims.mk_range + "FStar.InteractiveHelpers.Effectful.fst" + (Prims.of_int (331)) + (Prims.of_int (6)) + (Prims.of_int (343)) + (Prims.of_int (41))) + (FStar_Tactics_Effect.lift_div_tac + (fun uu___3 -> + get_rawest_type + p_ty)) + (fun uu___3 -> + (fun p_rty -> + Obj.magic + (FStar_Tactics_Effect.tac_bind + (Prims.mk_range + "FStar.InteractiveHelpers.Effectful.fst" + (Prims.of_int (331)) + (Prims.of_int (18)) + (Prims.of_int (331)) + (Prims.of_int (38))) + (Prims.mk_range + "FStar.InteractiveHelpers.Effectful.fst" + (Prims.of_int (338)) + (Prims.of_int (6)) + (Prims.of_int (343)) + (Prims.of_int (41))) + (FStar_Tactics_Effect.lift_div_tac + ( + fun + uu___3 -> + get_rawest_type + e_ty)) + (fun uu___3 + -> + (fun + e_rty -> + Obj.magic + (FStar_Tactics_Effect.tac_bind + (Prims.mk_range + "FStar.InteractiveHelpers.Effectful.fst" + (Prims.of_int (338)) + (Prims.of_int (22)) + (Prims.of_int (338)) + (Prims.of_int (66))) + (Prims.mk_range + "FStar.InteractiveHelpers.Effectful.fst" + (Prims.of_int (339)) + (Prims.of_int (6)) + (Prims.of_int (343)) + (Prims.of_int (41))) + (Obj.magic + (FStar_Tactics_Builtins.pack + (FStar_Reflection_Data.Tv_AscribedT + ((ci.term), + p_rty, + FStar_Pervasives_Native.None, + false)))) + (fun + uu___3 -> + (fun + ascr_term + -> + Obj.magic + (FStar_Tactics_Effect.tac_bind + (Prims.mk_range + "FStar.InteractiveHelpers.Effectful.fst" + (Prims.of_int (339)) + (Prims.of_int (28)) + (Prims.of_int (339)) + (Prims.of_int (95))) + (Prims.mk_range + "FStar.InteractiveHelpers.Effectful.fst" + (Prims.of_int (340)) + (Prims.of_int (6)) + (Prims.of_int (343)) + (Prims.of_int (41))) + (FStar_Tactics_Effect.lift_div_tac + (fun + uu___3 -> + [ + (p_rty, + FStar_Reflection_Data.Q_Implicit); + (ascr_term, + FStar_Reflection_Data.Q_Explicit); + (e_rty, + FStar_Reflection_Data.Q_Explicit)])) + (fun + uu___3 -> + (fun + has_type_params + -> + Obj.magic + (FStar_Tactics_Effect.tac_bind + (Prims.mk_range + "FStar.InteractiveHelpers.Effectful.fst" + (Prims.of_int (340)) + (Prims.of_int (22)) + (Prims.of_int (340)) + (Prims.of_int (56))) + (Prims.mk_range + "FStar.InteractiveHelpers.Effectful.fst" + (Prims.of_int (342)) + (Prims.of_int (6)) + (Prims.of_int (343)) + (Prims.of_int (41))) + (FStar_Tactics_Effect.lift_div_tac + (fun + uu___3 -> + FStar_Reflection_Derived.mk_app + (FStar_Reflection_Builtins.pack_ln + (FStar_Reflection_Data.Tv_FVar + (FStar_Reflection_Builtins.pack_fv + ["Prims"; + "has_type"]))) + has_type_params)) + (fun + uu___3 -> + (fun + type_cast + -> + Obj.magic + (FStar_Tactics_Effect.tac_bind + (Prims.mk_range + "FStar.InteractiveHelpers.Effectful.fst" + (Prims.of_int (342)) + (Prims.of_int (27)) + (Prims.of_int (342)) + (Prims.of_int (70))) + (Prims.mk_range + "FStar.InteractiveHelpers.Effectful.fst" + (Prims.of_int (343)) + (Prims.of_int (6)) + (Prims.of_int (343)) + (Prims.of_int (41))) + (Obj.magic + (FStar_InteractiveHelpers_Base.opt_mk_app_norm + ge.FStar_InteractiveHelpers_Base.env + e_ty.FStar_InteractiveHelpers_ExploreTerm.refin + [ci.term])) + (fun + inst_opt_refin + -> + FStar_Tactics_Effect.lift_div_tac + (fun + uu___3 -> + FStar_InteractiveHelpers_Base.opt_cons + inst_opt_refin + [type_cast])))) + uu___3))) + uu___3))) + uu___3))) + uu___3))) + uu___3))) + | uu___3 -> + Obj.magic + (Obj.repr + (FStar_Tactics_Effect.lift_div_tac + (fun uu___4 -> [])))) + uu___2))) uu___1))) uu___) +let (cast_info_list_to_propositions : + Prims.bool -> + FStar_InteractiveHelpers_Base.genv -> + cast_info Prims.list -> + (FStar_InteractiveHelpers_Propositions.proposition Prims.list, + unit) FStar_Tactics_Effect.tac_repr) + = + fun dbg -> + fun ge -> + fun ls -> + FStar_Tactics_Effect.tac_bind + (Prims.mk_range "FStar.InteractiveHelpers.Effectful.fst" + (Prims.of_int (351)) (Prims.of_int (12)) (Prims.of_int (351)) + (Prims.of_int (53))) + (Prims.mk_range "FStar.InteractiveHelpers.Effectful.fst" + (Prims.of_int (352)) (Prims.of_int (2)) (Prims.of_int (352)) + (Prims.of_int (13))) + (Obj.magic + (FStar_Tactics_Util.map (cast_info_to_propositions dbg ge) ls)) + (fun lsl1 -> + FStar_Tactics_Effect.lift_div_tac + (fun uu___ -> FStar_List_Tot_Base.flatten lsl1)) +type pre_post_type = + | PP_Unknown + | PP_Pure + | PP_State of FStar_Reflection_Types.term +let (uu___is_PP_Unknown : pre_post_type -> Prims.bool) = + fun projectee -> match projectee with | PP_Unknown -> true | uu___ -> false +let (uu___is_PP_Pure : pre_post_type -> Prims.bool) = + fun projectee -> match projectee with | PP_Pure -> true | uu___ -> false +let (uu___is_PP_State : pre_post_type -> Prims.bool) = + fun projectee -> + match projectee with | PP_State state_type -> true | uu___ -> false +let (__proj__PP_State__item__state_type : + pre_post_type -> FStar_Reflection_Types.term) = + fun projectee -> match projectee with | PP_State state_type -> state_type +let (compute_pre_type : + Prims.bool -> + FStar_Reflection_Types.env -> + FStar_Reflection_Types.term -> + (pre_post_type, unit) FStar_Tactics_Effect.tac_repr) + = + fun dbg -> + fun e -> + fun pre -> + FStar_Tactics_Effect.tac_bind + (Prims.mk_range "FStar.InteractiveHelpers.Effectful.fst" + (Prims.of_int (370)) (Prims.of_int (2)) (Prims.of_int (370)) + (Prims.of_int (37))) + (Prims.mk_range "FStar.InteractiveHelpers.Effectful.fst" + (Prims.of_int (371)) (Prims.of_int (2)) (Prims.of_int (388)) + (Prims.of_int (16))) + (Obj.magic + (FStar_InteractiveHelpers_Base.print_dbg dbg + "[> compute_pre_type")) + (fun uu___ -> + (fun uu___ -> + Obj.magic + (FStar_Tactics_Effect.tac_bind + (Prims.mk_range "FStar.InteractiveHelpers.Effectful.fst" + (Prims.of_int (371)) (Prims.of_int (8)) + (Prims.of_int (371)) (Prims.of_int (21))) + (Prims.mk_range "FStar.InteractiveHelpers.Effectful.fst" + (Prims.of_int (371)) (Prims.of_int (2)) + (Prims.of_int (388)) (Prims.of_int (16))) + (Obj.magic + (FStar_InteractiveHelpers_ExploreTerm.safe_tc e pre)) + (fun uu___1 -> + (fun uu___1 -> + match uu___1 with + | FStar_Pervasives_Native.None -> + Obj.magic + (FStar_Tactics_Effect.tac_bind + (Prims.mk_range + "FStar.InteractiveHelpers.Effectful.fst" + (Prims.of_int (373)) + (Prims.of_int (4)) + (Prims.of_int (373)) + (Prims.of_int (34))) + (Prims.mk_range + "FStar.InteractiveHelpers.Effectful.fst" + (Prims.of_int (374)) + (Prims.of_int (4)) + (Prims.of_int (374)) + (Prims.of_int (14))) + (Obj.magic + (FStar_InteractiveHelpers_Base.print_dbg + dbg "safe_tc failed")) + (fun uu___2 -> + FStar_Tactics_Effect.lift_div_tac + (fun uu___3 -> PP_Unknown))) + | FStar_Pervasives_Native.Some ty -> + Obj.magic + (FStar_Tactics_Effect.tac_bind + (Prims.mk_range + "FStar.InteractiveHelpers.Effectful.fst" + (Prims.of_int (376)) + (Prims.of_int (4)) + (Prims.of_int (376)) + (Prims.of_int (37))) + (Prims.mk_range + "FStar.InteractiveHelpers.Effectful.fst" + (Prims.of_int (377)) + (Prims.of_int (4)) + (Prims.of_int (388)) + (Prims.of_int (16))) + (Obj.magic + (FStar_InteractiveHelpers_Base.print_dbg + dbg "safe_tc succeeded")) + (fun uu___2 -> + (fun uu___2 -> + Obj.magic + (FStar_Tactics_Effect.tac_bind + (Prims.mk_range + "FStar.InteractiveHelpers.Effectful.fst" + (Prims.of_int (377)) + (Prims.of_int (17)) + (Prims.of_int (377)) + (Prims.of_int (34))) + (Prims.mk_range + "FStar.InteractiveHelpers.Effectful.fst" + (Prims.of_int (377)) + (Prims.of_int (4)) + (Prims.of_int (388)) + (Prims.of_int (16))) + (Obj.magic + (FStar_Tactics_SyntaxHelpers.collect_arr_bs + ty)) + (fun uu___3 -> + (fun uu___3 -> + match uu___3 with + | (brs, c) -> + Obj.magic + (FStar_Tactics_Effect.tac_bind + (Prims.mk_range + "FStar.InteractiveHelpers.Effectful.fst" + (Prims.of_int (378)) + (Prims.of_int (4)) + (Prims.of_int (378)) + (Prims.of_int (73))) + (Prims.mk_range + "FStar.InteractiveHelpers.Effectful.fst" + (Prims.of_int (379)) + (Prims.of_int (4)) + (Prims.of_int (388)) + (Prims.of_int (16))) + (Obj.magic + (FStar_InteractiveHelpers_Base.print_dbg + dbg + ( + Prims.strcat + "num binders: " + (Prims.string_of_int + (FStar_List_Tot_Base.length + brs))))) + (fun uu___4 -> + (fun uu___4 + -> + match + (brs, + (FStar_InteractiveHelpers_ExploreTerm.is_total_or_gtotal + c)) + with + | + ([], + true) -> + Obj.magic + (FStar_Tactics_Effect.tac_bind + (Prims.mk_range + "FStar.InteractiveHelpers.Effectful.fst" + (Prims.of_int (381)) + (Prims.of_int (6)) + (Prims.of_int (381)) + (Prims.of_int (29))) + (Prims.mk_range + "FStar.InteractiveHelpers.Effectful.fst" + (Prims.of_int (382)) + (Prims.of_int (6)) + (Prims.of_int (382)) + (Prims.of_int (13))) + (Obj.magic + (FStar_InteractiveHelpers_Base.print_dbg + dbg + "PP_Pure")) + (fun + uu___5 -> + FStar_Tactics_Effect.lift_div_tac + (fun + uu___6 -> + PP_Pure))) + | + (b::[], + true) -> + Obj.magic + (FStar_Tactics_Effect.tac_bind + (Prims.mk_range + "FStar.InteractiveHelpers.Effectful.fst" + (Prims.of_int (384)) + (Prims.of_int (6)) + (Prims.of_int (384)) + (Prims.of_int (71))) + (Prims.mk_range + "FStar.InteractiveHelpers.Effectful.fst" + (Prims.of_int (385)) + (Prims.of_int (6)) + (Prims.of_int (385)) + (Prims.of_int (33))) + (Obj.magic + (FStar_Tactics_Effect.tac_bind + (Prims.mk_range + "FStar.InteractiveHelpers.Effectful.fst" + (Prims.of_int (384)) + (Prims.of_int (20)) + (Prims.of_int (384)) + (Prims.of_int (71))) + (Prims.mk_range + "FStar.InteractiveHelpers.Effectful.fst" + (Prims.of_int (384)) + (Prims.of_int (6)) + (Prims.of_int (384)) + (Prims.of_int (71))) + (Obj.magic + (FStar_Tactics_Effect.tac_bind + (Prims.mk_range + "FStar.InteractiveHelpers.Effectful.fst" + (Prims.of_int (384)) + (Prims.of_int (35)) + (Prims.of_int (384)) + (Prims.of_int (70))) + (Prims.mk_range + "prims.fst" + (Prims.of_int (606)) + (Prims.of_int (19)) + (Prims.of_int (606)) + (Prims.of_int (31))) + (Obj.magic + (FStar_Tactics_Builtins.term_to_string + (FStar_Reflection_Derived.type_of_binder + b))) + (fun + uu___5 -> + FStar_Tactics_Effect.lift_div_tac + (fun + uu___6 -> + Prims.strcat + "PP_State " + uu___5)))) + (fun + uu___5 -> + (fun + uu___5 -> + Obj.magic + (FStar_InteractiveHelpers_Base.print_dbg + dbg + uu___5)) + uu___5))) + (fun + uu___5 -> + FStar_Tactics_Effect.lift_div_tac + (fun + uu___6 -> + PP_State + (FStar_Reflection_Derived.type_of_binder + b)))) + | + uu___5 -> + Obj.magic + (FStar_Tactics_Effect.tac_bind + (Prims.mk_range + "FStar.InteractiveHelpers.Effectful.fst" + (Prims.of_int (387)) + (Prims.of_int (6)) + (Prims.of_int (387)) + (Prims.of_int (32))) + (Prims.mk_range + "FStar.InteractiveHelpers.Effectful.fst" + (Prims.of_int (388)) + (Prims.of_int (6)) + (Prims.of_int (388)) + (Prims.of_int (16))) + (Obj.magic + (FStar_InteractiveHelpers_Base.print_dbg + dbg + "PP_Unknown")) + (fun + uu___6 -> + FStar_Tactics_Effect.lift_div_tac + (fun + uu___7 -> + PP_Unknown)))) + uu___4))) + uu___3))) uu___2))) + uu___1))) uu___) +let (opt_remove_refin : + FStar_Reflection_Types.typ -> + (FStar_Reflection_Types.typ, unit) FStar_Tactics_Effect.tac_repr) + = + fun ty -> + FStar_Tactics_Effect.tac_bind + (Prims.mk_range "FStar.InteractiveHelpers.Effectful.fst" + (Prims.of_int (392)) (Prims.of_int (8)) (Prims.of_int (392)) + (Prims.of_int (18))) + (Prims.mk_range "FStar.InteractiveHelpers.Effectful.fst" + (Prims.of_int (392)) (Prims.of_int (2)) (Prims.of_int (394)) + (Prims.of_int (11))) (Obj.magic (FStar_Tactics_Builtins.inspect ty)) + (fun uu___ -> + FStar_Tactics_Effect.lift_div_tac + (fun uu___1 -> + match uu___ with + | FStar_Reflection_Data.Tv_Refine (bv, uu___2) -> + (FStar_Reflection_Builtins.inspect_bv bv).FStar_Reflection_Data.bv_sort + | uu___2 -> ty)) +let (compute_post_type : + Prims.bool -> + FStar_Reflection_Types.env -> + FStar_Reflection_Types.term -> + FStar_Reflection_Types.term -> + (pre_post_type, unit) FStar_Tactics_Effect.tac_repr) + = + fun dbg -> + fun e -> + fun ret_type -> + fun post -> + FStar_Tactics_Effect.tac_bind + (Prims.mk_range "FStar.InteractiveHelpers.Effectful.fst" + (Prims.of_int (398)) (Prims.of_int (2)) (Prims.of_int (398)) + (Prims.of_int (38))) + (Prims.mk_range "FStar.InteractiveHelpers.Effectful.fst" + (Prims.of_int (399)) (Prims.of_int (2)) (Prims.of_int (446)) + (Prims.of_int (16))) + (Obj.magic + (FStar_InteractiveHelpers_Base.print_dbg dbg + "[> compute_post_type")) + (fun uu___ -> + (fun uu___ -> + Obj.magic + (FStar_Tactics_Effect.tac_bind + (Prims.mk_range + "FStar.InteractiveHelpers.Effectful.fst" + (Prims.of_int (400)) (Prims.of_int (4)) + (Prims.of_int (402)) (Prims.of_int (18))) + (Prims.mk_range + "FStar.InteractiveHelpers.Effectful.fst" + (Prims.of_int (404)) (Prims.of_int (2)) + (Prims.of_int (446)) (Prims.of_int (16))) + (FStar_Tactics_Effect.lift_div_tac + (fun uu___2 -> + fun uu___1 -> + (fun uu___1 -> + fun c -> + match FStar_InteractiveHelpers_ExploreTerm.get_total_or_gtotal_ret_type + c + with + | FStar_Pervasives_Native.Some ret_ty -> + Obj.magic + (Obj.repr + (FStar_Tactics_Effect.tac_bind + (Prims.mk_range + "FStar.InteractiveHelpers.Effectful.fst" + (Prims.of_int (401)) + (Prims.of_int (26)) + (Prims.of_int (401)) + (Prims.of_int (42))) + (Prims.mk_range + "FStar.InteractiveHelpers.Effectful.fst" + (Prims.of_int (401)) + (Prims.of_int (21)) + (Prims.of_int (401)) + (Prims.of_int (42))) + (Obj.magic + (FStar_Tactics_Builtins.inspect + ret_ty)) + (fun uu___2 -> + FStar_Tactics_Effect.lift_div_tac + (fun uu___3 -> + FStar_Pervasives_Native.Some + uu___2)))) + | FStar_Pervasives_Native.None -> + Obj.magic + (Obj.repr + (FStar_Tactics_Effect.lift_div_tac + (fun uu___2 -> + FStar_Pervasives_Native.None)))) + uu___2 uu___1)) + (fun uu___1 -> + (fun get_tot_ret_type -> + Obj.magic + (FStar_Tactics_Effect.tac_bind + (Prims.mk_range + "FStar.InteractiveHelpers.Effectful.fst" + (Prims.of_int (404)) (Prims.of_int (8)) + (Prims.of_int (404)) (Prims.of_int (22))) + (Prims.mk_range + "FStar.InteractiveHelpers.Effectful.fst" + (Prims.of_int (404)) (Prims.of_int (2)) + (Prims.of_int (446)) (Prims.of_int (16))) + (Obj.magic + (FStar_InteractiveHelpers_ExploreTerm.safe_tc + e post)) + (fun uu___1 -> + (fun uu___1 -> + match uu___1 with + | FStar_Pervasives_Native.None -> + Obj.magic + (FStar_Tactics_Effect.tac_bind + (Prims.mk_range + "FStar.InteractiveHelpers.Effectful.fst" + (Prims.of_int (406)) + (Prims.of_int (4)) + (Prims.of_int (406)) + (Prims.of_int (34))) + (Prims.mk_range + "FStar.InteractiveHelpers.Effectful.fst" + (Prims.of_int (407)) + (Prims.of_int (4)) + (Prims.of_int (407)) + (Prims.of_int (14))) + (Obj.magic + (FStar_InteractiveHelpers_Base.print_dbg + dbg "safe_tc failed")) + (fun uu___2 -> + FStar_Tactics_Effect.lift_div_tac + (fun uu___3 -> + PP_Unknown))) + | FStar_Pervasives_Native.Some ty -> + Obj.magic + (FStar_Tactics_Effect.tac_bind + (Prims.mk_range + "FStar.InteractiveHelpers.Effectful.fst" + (Prims.of_int (409)) + (Prims.of_int (4)) + (Prims.of_int (409)) + (Prims.of_int (37))) + (Prims.mk_range + "FStar.InteractiveHelpers.Effectful.fst" + (Prims.of_int (410)) + (Prims.of_int (4)) + (Prims.of_int (446)) + (Prims.of_int (16))) + (Obj.magic + (FStar_InteractiveHelpers_Base.print_dbg + dbg + "safe_tc succeeded")) + (fun uu___2 -> + (fun uu___2 -> + Obj.magic + (FStar_Tactics_Effect.tac_bind + (Prims.mk_range + "FStar.InteractiveHelpers.Effectful.fst" + (Prims.of_int (410)) + (Prims.of_int (17)) + (Prims.of_int (410)) + (Prims.of_int (34))) + (Prims.mk_range + "FStar.InteractiveHelpers.Effectful.fst" + (Prims.of_int (410)) + (Prims.of_int (4)) + (Prims.of_int (446)) + (Prims.of_int (16))) + (Obj.magic + (FStar_Tactics_SyntaxHelpers.collect_arr_bs + ty)) + (fun uu___3 -> + (fun uu___3 -> + match uu___3 + with + | (brs, c) + -> + Obj.magic + (FStar_Tactics_Effect.tac_bind + (Prims.mk_range + "FStar.InteractiveHelpers.Effectful.fst" + (Prims.of_int (411)) + (Prims.of_int (4)) + (Prims.of_int (411)) + (Prims.of_int (73))) + (Prims.mk_range + "FStar.InteractiveHelpers.Effectful.fst" + (Prims.of_int (412)) + (Prims.of_int (4)) + (Prims.of_int (446)) + (Prims.of_int (16))) + (Obj.magic + (FStar_InteractiveHelpers_Base.print_dbg + dbg + (Prims.strcat + "num binders: " + (Prims.string_of_int + (FStar_List_Tot_Base.length + brs))))) + (fun + uu___4 -> + (fun + uu___4 -> + match + (brs, + (FStar_InteractiveHelpers_ExploreTerm.is_total_or_gtotal + c)) + with + | + (r::[], + true) -> + Obj.magic + (FStar_Tactics_Effect.tac_bind + (Prims.mk_range + "FStar.InteractiveHelpers.Effectful.fst" + (Prims.of_int (415)) + (Prims.of_int (6)) + (Prims.of_int (415)) + (Prims.of_int (29))) + (Prims.mk_range + "FStar.InteractiveHelpers.Effectful.fst" + (Prims.of_int (416)) + (Prims.of_int (6)) + (Prims.of_int (416)) + (Prims.of_int (13))) + (Obj.magic + (FStar_InteractiveHelpers_Base.print_dbg + dbg + "PP_Pure")) + (fun + uu___5 -> + FStar_Tactics_Effect.lift_div_tac + (fun + uu___6 -> + PP_Pure))) + | + (s1::r::s2::[], + true) -> + Obj.magic + (FStar_Tactics_Effect.tac_bind + (Prims.mk_range + "FStar.InteractiveHelpers.Effectful.fst" + (Prims.of_int (419)) + (Prims.of_int (17)) + (Prims.of_int (419)) + (Prims.of_int (33))) + (Prims.mk_range + "FStar.InteractiveHelpers.Effectful.fst" + (Prims.of_int (420)) + (Prims.of_int (6)) + (Prims.of_int (443)) + (Prims.of_int (11))) + (FStar_Tactics_Effect.lift_div_tac + (fun + uu___5 -> + FStar_Reflection_Derived.type_of_binder + r)) + (fun + uu___5 -> + (fun r_ty + -> + Obj.magic + (FStar_Tactics_Effect.tac_bind + (Prims.mk_range + "FStar.InteractiveHelpers.Effectful.fst" + (Prims.of_int (420)) + (Prims.of_int (18)) + (Prims.of_int (420)) + (Prims.of_int (35))) + (Prims.mk_range + "FStar.InteractiveHelpers.Effectful.fst" + (Prims.of_int (424)) + (Prims.of_int (6)) + (Prims.of_int (443)) + (Prims.of_int (11))) + (FStar_Tactics_Effect.lift_div_tac + (fun + uu___5 -> + FStar_Reflection_Derived.type_of_binder + s1)) + (fun + uu___5 -> + (fun + s1_ty -> + Obj.magic + (FStar_Tactics_Effect.tac_bind + (Prims.mk_range + "FStar.InteractiveHelpers.Effectful.fst" + (Prims.of_int (424)) + (Prims.of_int (18)) + (Prims.of_int (424)) + (Prims.of_int (54))) + (Prims.mk_range + "FStar.InteractiveHelpers.Effectful.fst" + (Prims.of_int (425)) + (Prims.of_int (6)) + (Prims.of_int (443)) + (Prims.of_int (11))) + (Obj.magic + (opt_remove_refin + (FStar_Reflection_Derived.type_of_binder + s2))) + (fun + uu___5 -> + (fun + s2_ty -> + Obj.magic + (FStar_Tactics_Effect.tac_bind + (Prims.mk_range + "FStar.InteractiveHelpers.Effectful.fst" + (Prims.of_int (425)) + (Prims.of_int (24)) + (Prims.of_int (425)) + (Prims.of_int (45))) + (Prims.mk_range + "FStar.InteractiveHelpers.Effectful.fst" + (Prims.of_int (426)) + (Prims.of_int (6)) + (Prims.of_int (443)) + (Prims.of_int (11))) + (Obj.magic + (term_eq + ret_type + r_ty)) + (fun + uu___5 -> + (fun + ret_type_eq + -> + Obj.magic + (FStar_Tactics_Effect.tac_bind + (Prims.mk_range + "FStar.InteractiveHelpers.Effectful.fst" + (Prims.of_int (426)) + (Prims.of_int (26)) + (Prims.of_int (426)) + (Prims.of_int (45))) + (Prims.mk_range + "FStar.InteractiveHelpers.Effectful.fst" + (Prims.of_int (427)) + (Prims.of_int (6)) + (Prims.of_int (443)) + (Prims.of_int (11))) + (Obj.magic + (term_eq + s1_ty + s2_ty)) + (fun + uu___5 -> + (fun + state_type_eq + -> + Obj.magic + (FStar_Tactics_Effect.tac_bind + (Prims.mk_range + "FStar.InteractiveHelpers.Effectful.fst" + (Prims.of_int (427)) + (Prims.of_int (6)) + (Prims.of_int (428)) + (Prims.of_int (59))) + (Prims.mk_range + "FStar.InteractiveHelpers.Effectful.fst" + (Prims.of_int (429)) + (Prims.of_int (6)) + (Prims.of_int (443)) + (Prims.of_int (11))) + (Obj.magic + (FStar_Tactics_Effect.tac_bind + (Prims.mk_range + "FStar.InteractiveHelpers.Effectful.fst" + (Prims.of_int (427)) + (Prims.of_int (20)) + (Prims.of_int (428)) + (Prims.of_int (59))) + (Prims.mk_range + "FStar.InteractiveHelpers.Effectful.fst" + (Prims.of_int (427)) + (Prims.of_int (6)) + (Prims.of_int (428)) + (Prims.of_int (59))) + (Obj.magic + (FStar_Tactics_Effect.tac_bind + (Prims.mk_range + "FStar.InteractiveHelpers.Effectful.fst" + (Prims.of_int (427)) + (Prims.of_int (50)) + (Prims.of_int (428)) + (Prims.of_int (58))) + (Prims.mk_range + "prims.fst" + (Prims.of_int (606)) + (Prims.of_int (19)) + (Prims.of_int (606)) + (Prims.of_int (31))) + (Obj.magic + (FStar_Tactics_Effect.tac_bind + (Prims.mk_range + "FStar.InteractiveHelpers.Effectful.fst" + (Prims.of_int (427)) + (Prims.of_int (50)) + (Prims.of_int (427)) + (Prims.of_int (73))) + (Prims.mk_range + "FStar.InteractiveHelpers.Effectful.fst" + (Prims.of_int (427)) + (Prims.of_int (50)) + (Prims.of_int (428)) + (Prims.of_int (58))) + (Obj.magic + (FStar_Tactics_Builtins.term_to_string + ret_type)) + (fun + uu___5 -> + (fun + uu___5 -> + Obj.magic + (FStar_Tactics_Effect.tac_bind + (Prims.mk_range + "FStar.InteractiveHelpers.Effectful.fst" + (Prims.of_int (428)) + (Prims.of_int (21)) + (Prims.of_int (428)) + (Prims.of_int (58))) + (Prims.mk_range + "prims.fst" + (Prims.of_int (606)) + (Prims.of_int (19)) + (Prims.of_int (606)) + (Prims.of_int (31))) + (Obj.magic + (FStar_Tactics_Effect.tac_bind + (Prims.mk_range + "FStar.InteractiveHelpers.Effectful.fst" + (Prims.of_int (428)) + (Prims.of_int (39)) + (Prims.of_int (428)) + (Prims.of_int (58))) + (Prims.mk_range + "prims.fst" + (Prims.of_int (606)) + (Prims.of_int (19)) + (Prims.of_int (606)) + (Prims.of_int (31))) + (Obj.magic + (FStar_Tactics_Builtins.term_to_string + r_ty)) + (fun + uu___6 -> + FStar_Tactics_Effect.lift_div_tac + (fun + uu___7 -> + Prims.strcat + "\n-- binder: " + uu___6)))) + (fun + uu___6 -> + FStar_Tactics_Effect.lift_div_tac + (fun + uu___7 -> + Prims.strcat + uu___5 + uu___6)))) + uu___5))) + (fun + uu___5 -> + FStar_Tactics_Effect.lift_div_tac + (fun + uu___6 -> + Prims.strcat + "- ret type:\n-- target: " + uu___5)))) + (fun + uu___5 -> + (fun + uu___5 -> + Obj.magic + (FStar_InteractiveHelpers_Base.print_dbg + dbg + uu___5)) + uu___5))) + (fun + uu___5 -> + (fun + uu___5 -> + Obj.magic + (FStar_Tactics_Effect.tac_bind + (Prims.mk_range + "FStar.InteractiveHelpers.Effectful.fst" + (Prims.of_int (429)) + (Prims.of_int (6)) + (Prims.of_int (430)) + (Prims.of_int (61))) + (Prims.mk_range + "FStar.InteractiveHelpers.Effectful.fst" + (Prims.of_int (431)) + (Prims.of_int (6)) + (Prims.of_int (443)) + (Prims.of_int (11))) + (Obj.magic + (FStar_Tactics_Effect.tac_bind + (Prims.mk_range + "FStar.InteractiveHelpers.Effectful.fst" + (Prims.of_int (429)) + (Prims.of_int (20)) + (Prims.of_int (430)) + (Prims.of_int (61))) + (Prims.mk_range + "FStar.InteractiveHelpers.Effectful.fst" + (Prims.of_int (429)) + (Prims.of_int (6)) + (Prims.of_int (430)) + (Prims.of_int (61))) + (Obj.magic + (FStar_Tactics_Effect.tac_bind + (Prims.mk_range + "FStar.InteractiveHelpers.Effectful.fst" + (Prims.of_int (429)) + (Prims.of_int (54)) + (Prims.of_int (430)) + (Prims.of_int (60))) + (Prims.mk_range + "prims.fst" + (Prims.of_int (606)) + (Prims.of_int (19)) + (Prims.of_int (606)) + (Prims.of_int (31))) + (Obj.magic + (FStar_Tactics_Effect.tac_bind + (Prims.mk_range + "FStar.InteractiveHelpers.Effectful.fst" + (Prims.of_int (429)) + (Prims.of_int (54)) + (Prims.of_int (429)) + (Prims.of_int (74))) + (Prims.mk_range + "FStar.InteractiveHelpers.Effectful.fst" + (Prims.of_int (429)) + (Prims.of_int (54)) + (Prims.of_int (430)) + (Prims.of_int (60))) + (Obj.magic + (FStar_Tactics_Builtins.term_to_string + s1_ty)) + (fun + uu___6 -> + (fun + uu___6 -> + Obj.magic + (FStar_Tactics_Effect.tac_bind + (Prims.mk_range + "FStar.InteractiveHelpers.Effectful.fst" + (Prims.of_int (430)) + (Prims.of_int (21)) + (Prims.of_int (430)) + (Prims.of_int (60))) + (Prims.mk_range + "prims.fst" + (Prims.of_int (606)) + (Prims.of_int (19)) + (Prims.of_int (606)) + (Prims.of_int (31))) + (Obj.magic + (FStar_Tactics_Effect.tac_bind + (Prims.mk_range + "FStar.InteractiveHelpers.Effectful.fst" + (Prims.of_int (430)) + (Prims.of_int (40)) + (Prims.of_int (430)) + (Prims.of_int (60))) + (Prims.mk_range + "prims.fst" + (Prims.of_int (606)) + (Prims.of_int (19)) + (Prims.of_int (606)) + (Prims.of_int (31))) + (Obj.magic + (FStar_Tactics_Builtins.term_to_string + s2_ty)) + (fun + uu___7 -> + FStar_Tactics_Effect.lift_div_tac + (fun + uu___8 -> + Prims.strcat + "\n-- binder2: " + uu___7)))) + (fun + uu___7 -> + FStar_Tactics_Effect.lift_div_tac + (fun + uu___8 -> + Prims.strcat + uu___6 + uu___7)))) + uu___6))) + (fun + uu___6 -> + FStar_Tactics_Effect.lift_div_tac + (fun + uu___7 -> + Prims.strcat + "- state types:\n-- binder1: " + uu___6)))) + (fun + uu___6 -> + (fun + uu___6 -> + Obj.magic + (FStar_InteractiveHelpers_Base.print_dbg + dbg + uu___6)) + uu___6))) + (fun + uu___6 -> + (fun + uu___6 -> + Obj.magic + (FStar_Tactics_Effect.tac_bind + (Prims.mk_range + "FStar.InteractiveHelpers.Effectful.fst" + (Prims.of_int (431)) + (Prims.of_int (6)) + (Prims.of_int (431)) + (Prims.of_int (74))) + (Prims.mk_range + "FStar.InteractiveHelpers.Effectful.fst" + (Prims.of_int (432)) + (Prims.of_int (6)) + (Prims.of_int (443)) + (Prims.of_int (11))) + (Obj.magic + (FStar_InteractiveHelpers_Base.print_dbg + dbg + (Prims.strcat + "- ret type equality: " + (Prims.string_of_bool + ret_type_eq)))) + (fun + uu___7 -> + (fun + uu___7 -> + Obj.magic + (FStar_Tactics_Effect.tac_bind + (Prims.mk_range + "FStar.InteractiveHelpers.Effectful.fst" + (Prims.of_int (432)) + (Prims.of_int (6)) + (Prims.of_int (432)) + (Prims.of_int (79))) + (Prims.mk_range + "FStar.InteractiveHelpers.Effectful.fst" + (Prims.of_int (433)) + (Prims.of_int (6)) + (Prims.of_int (443)) + (Prims.of_int (11))) + (Obj.magic + (FStar_InteractiveHelpers_Base.print_dbg + dbg + (Prims.strcat + "- state types equality: " + (Prims.string_of_bool + state_type_eq)))) + (fun + uu___8 -> + (fun + uu___8 -> + if + ret_type_eq + && + state_type_eq + then + Obj.magic + (FStar_Tactics_Effect.tac_bind + (Prims.mk_range + "FStar.InteractiveHelpers.Effectful.fst" + (Prims.of_int (436)) + (Prims.of_int (8)) + (Prims.of_int (436)) + (Prims.of_int (71))) + (Prims.mk_range + "FStar.InteractiveHelpers.Effectful.fst" + (Prims.of_int (437)) + (Prims.of_int (8)) + (Prims.of_int (437)) + (Prims.of_int (36))) + (Obj.magic + (FStar_Tactics_Effect.tac_bind + (Prims.mk_range + "FStar.InteractiveHelpers.Effectful.fst" + (Prims.of_int (436)) + (Prims.of_int (22)) + (Prims.of_int (436)) + (Prims.of_int (71))) + (Prims.mk_range + "FStar.InteractiveHelpers.Effectful.fst" + (Prims.of_int (436)) + (Prims.of_int (8)) + (Prims.of_int (436)) + (Prims.of_int (71))) + (Obj.magic + (FStar_Tactics_Effect.tac_bind + (Prims.mk_range + "FStar.InteractiveHelpers.Effectful.fst" + (Prims.of_int (436)) + (Prims.of_int (36)) + (Prims.of_int (436)) + (Prims.of_int (70))) + (Prims.mk_range + "prims.fst" + (Prims.of_int (606)) + (Prims.of_int (19)) + (Prims.of_int (606)) + (Prims.of_int (31))) + (Obj.magic + (FStar_Tactics_Builtins.term_to_string + (FStar_Reflection_Derived.type_of_binder + s1))) + (fun + uu___9 -> + FStar_Tactics_Effect.lift_div_tac + (fun + uu___10 + -> + Prims.strcat + "PP_State" + uu___9)))) + (fun + uu___9 -> + (fun + uu___9 -> + Obj.magic + (FStar_InteractiveHelpers_Base.print_dbg + dbg + uu___9)) + uu___9))) + (fun + uu___9 -> + FStar_Tactics_Effect.lift_div_tac + (fun + uu___10 + -> + PP_State + (FStar_Reflection_Derived.type_of_binder + s1)))) + else + Obj.magic + (FStar_Tactics_Effect.tac_bind + (Prims.mk_range + "FStar.InteractiveHelpers.Effectful.fst" + (Prims.of_int (441)) + (Prims.of_int (8)) + (Prims.of_int (441)) + (Prims.of_int (34))) + (Prims.mk_range + "FStar.InteractiveHelpers.Effectful.fst" + (Prims.of_int (442)) + (Prims.of_int (8)) + (Prims.of_int (442)) + (Prims.of_int (18))) + (Obj.magic + (FStar_InteractiveHelpers_Base.print_dbg + dbg + "PP_Unknown")) + (fun + uu___10 + -> + FStar_Tactics_Effect.lift_div_tac + (fun + uu___11 + -> + PP_Unknown)))) + uu___8))) + uu___7))) + uu___6))) + uu___5))) + uu___5))) + uu___5))) + uu___5))) + uu___5))) + uu___5)) + | + uu___5 -> + Obj.magic + (FStar_Tactics_Effect.tac_bind + (Prims.mk_range + "FStar.InteractiveHelpers.Effectful.fst" + (Prims.of_int (445)) + (Prims.of_int (6)) + (Prims.of_int (445)) + (Prims.of_int (32))) + (Prims.mk_range + "FStar.InteractiveHelpers.Effectful.fst" + (Prims.of_int (446)) + (Prims.of_int (6)) + (Prims.of_int (446)) + (Prims.of_int (16))) + (Obj.magic + (FStar_InteractiveHelpers_Base.print_dbg + dbg + "PP_Unknown")) + (fun + uu___6 -> + FStar_Tactics_Effect.lift_div_tac + (fun + uu___7 -> + PP_Unknown)))) + uu___4))) + uu___3))) + uu___2))) uu___1))) + uu___1))) uu___) +let (check_pre_post_type : + Prims.bool -> + FStar_Reflection_Types.env -> + FStar_Reflection_Types.term -> + FStar_Reflection_Types.term -> + FStar_Reflection_Types.term -> + (pre_post_type, unit) FStar_Tactics_Effect.tac_repr) + = + fun dbg -> + fun e -> + fun pre -> + fun ret_type -> + fun post -> + FStar_Tactics_Effect.tac_bind + (Prims.mk_range "FStar.InteractiveHelpers.Effectful.fst" + (Prims.of_int (450)) (Prims.of_int (2)) (Prims.of_int (450)) + (Prims.of_int (40))) + (Prims.mk_range "FStar.InteractiveHelpers.Effectful.fst" + (Prims.of_int (451)) (Prims.of_int (2)) (Prims.of_int (460)) + (Prims.of_int (14))) + (Obj.magic + (FStar_InteractiveHelpers_Base.print_dbg dbg + "[> check_pre_post_type")) + (fun uu___ -> + (fun uu___ -> + Obj.magic + (FStar_Tactics_Effect.tac_bind + (Prims.mk_range + "FStar.InteractiveHelpers.Effectful.fst" + (Prims.of_int (451)) (Prims.of_int (8)) + (Prims.of_int (451)) (Prims.of_int (73))) + (Prims.mk_range + "FStar.InteractiveHelpers.Effectful.fst" + (Prims.of_int (451)) (Prims.of_int (2)) + (Prims.of_int (460)) (Prims.of_int (14))) + (Obj.magic + (FStar_Tactics_Effect.tac_bind + (Prims.mk_range + "FStar.InteractiveHelpers.Effectful.fst" + (Prims.of_int (451)) (Prims.of_int (8)) + (Prims.of_int (451)) (Prims.of_int (34))) + (Prims.mk_range + "FStar.InteractiveHelpers.Effectful.fst" + (Prims.of_int (451)) (Prims.of_int (8)) + (Prims.of_int (451)) (Prims.of_int (73))) + (Obj.magic (compute_pre_type dbg e pre)) + (fun uu___1 -> + (fun uu___1 -> + Obj.magic + (FStar_Tactics_Effect.tac_bind + (Prims.mk_range + "FStar.InteractiveHelpers.Effectful.fst" + (Prims.of_int (451)) + (Prims.of_int (36)) + (Prims.of_int (451)) + (Prims.of_int (73))) + (Prims.mk_range + "FStar.InteractiveHelpers.Effectful.fst" + (Prims.of_int (451)) + (Prims.of_int (8)) + (Prims.of_int (451)) + (Prims.of_int (73))) + (Obj.magic + (compute_post_type dbg e + ret_type post)) + (fun uu___2 -> + FStar_Tactics_Effect.lift_div_tac + (fun uu___3 -> + (uu___1, uu___2))))) uu___1))) + (fun uu___1 -> + (fun uu___1 -> + match uu___1 with + | (PP_Pure, PP_Pure) -> + Obj.magic + (FStar_Tactics_Effect.tac_bind + (Prims.mk_range + "FStar.InteractiveHelpers.Effectful.fst" + (Prims.of_int (453)) + (Prims.of_int (4)) + (Prims.of_int (453)) + (Prims.of_int (36))) + (Prims.mk_range + "FStar.InteractiveHelpers.Effectful.fst" + (Prims.of_int (454)) + (Prims.of_int (4)) + (Prims.of_int (454)) + (Prims.of_int (11))) + (Obj.magic + (FStar_InteractiveHelpers_Base.print_dbg + dbg "PP_Pure, PP_Pure")) + (fun uu___2 -> + FStar_Tactics_Effect.lift_div_tac + (fun uu___3 -> PP_Pure))) + | (PP_State ty1, PP_State ty2) -> + Obj.magic + (FStar_Tactics_Effect.tac_bind + (Prims.mk_range + "FStar.InteractiveHelpers.Effectful.fst" + (Prims.of_int (456)) + (Prims.of_int (4)) + (Prims.of_int (456)) + (Prims.of_int (38))) + (Prims.mk_range + "FStar.InteractiveHelpers.Effectful.fst" + (Prims.of_int (457)) + (Prims.of_int (4)) + (Prims.of_int (457)) + (Prims.of_int (56))) + (Obj.magic + (FStar_InteractiveHelpers_Base.print_dbg + dbg "PP_State, PP_State")) + (fun uu___2 -> + (fun uu___2 -> + Obj.magic + (FStar_Tactics_Effect.tac_bind + (Prims.mk_range + "FStar.InteractiveHelpers.Effectful.fst" + (Prims.of_int (457)) + (Prims.of_int (7)) + (Prims.of_int (457)) + (Prims.of_int (22))) + (Prims.mk_range + "FStar.InteractiveHelpers.Effectful.fst" + (Prims.of_int (457)) + (Prims.of_int (4)) + (Prims.of_int (457)) + (Prims.of_int (56))) + (Obj.magic + (term_eq ty1 ty2)) + (fun uu___3 -> + FStar_Tactics_Effect.lift_div_tac + (fun uu___4 -> + if uu___3 + then PP_State ty1 + else PP_Unknown)))) + uu___2)) + | uu___2 -> + Obj.magic + (FStar_Tactics_Effect.tac_bind + (Prims.mk_range + "FStar.InteractiveHelpers.Effectful.fst" + (Prims.of_int (459)) + (Prims.of_int (4)) + (Prims.of_int (459)) + (Prims.of_int (24))) + (Prims.mk_range + "FStar.InteractiveHelpers.Effectful.fst" + (Prims.of_int (460)) + (Prims.of_int (4)) + (Prims.of_int (460)) + (Prims.of_int (14))) + (Obj.magic + (FStar_InteractiveHelpers_Base.print_dbg + dbg "_, _")) + (fun uu___3 -> + FStar_Tactics_Effect.lift_div_tac + (fun uu___4 -> PP_Unknown)))) + uu___1))) uu___) +let (check_opt_pre_post_type : + Prims.bool -> + FStar_Reflection_Types.env -> + FStar_Reflection_Types.term FStar_Pervasives_Native.option -> + FStar_Reflection_Types.term -> + FStar_Reflection_Types.term FStar_Pervasives_Native.option -> + (pre_post_type FStar_Pervasives_Native.option, unit) + FStar_Tactics_Effect.tac_repr) + = + fun dbg -> + fun e -> + fun opt_pre -> + fun ret_type -> + fun opt_post -> + FStar_Tactics_Effect.tac_bind + (Prims.mk_range "FStar.InteractiveHelpers.Effectful.fst" + (Prims.of_int (464)) (Prims.of_int (2)) (Prims.of_int (464)) + (Prims.of_int (44))) + (Prims.mk_range "FStar.InteractiveHelpers.Effectful.fst" + (Prims.of_int (465)) (Prims.of_int (2)) (Prims.of_int (477)) + (Prims.of_int (8))) + (Obj.magic + (FStar_InteractiveHelpers_Base.print_dbg dbg + "[> check_opt_pre_post_type")) + (fun uu___ -> + (fun uu___ -> + match (opt_pre, opt_post) with + | (FStar_Pervasives_Native.Some pre, + FStar_Pervasives_Native.Some post) -> + Obj.magic + (FStar_Tactics_Effect.tac_bind + (Prims.mk_range + "FStar.InteractiveHelpers.Effectful.fst" + (Prims.of_int (467)) (Prims.of_int (4)) + (Prims.of_int (467)) (Prims.of_int (39))) + (Prims.mk_range + "FStar.InteractiveHelpers.Effectful.fst" + (Prims.of_int (468)) (Prims.of_int (4)) + (Prims.of_int (468)) (Prims.of_int (54))) + (Obj.magic + (FStar_InteractiveHelpers_Base.print_dbg dbg + "Some pre, Some post")) + (fun uu___1 -> + (fun uu___1 -> + Obj.magic + (FStar_Tactics_Effect.tac_bind + (Prims.mk_range + "FStar.InteractiveHelpers.Effectful.fst" + (Prims.of_int (468)) + (Prims.of_int (9)) + (Prims.of_int (468)) + (Prims.of_int (54))) + (Prims.mk_range + "FStar.InteractiveHelpers.Effectful.fst" + (Prims.of_int (468)) + (Prims.of_int (4)) + (Prims.of_int (468)) + (Prims.of_int (54))) + (Obj.magic + (check_pre_post_type dbg e pre + ret_type post)) + (fun uu___2 -> + FStar_Tactics_Effect.lift_div_tac + (fun uu___3 -> + FStar_Pervasives_Native.Some + uu___2)))) uu___1)) + | (FStar_Pervasives_Native.Some pre, + FStar_Pervasives_Native.None) -> + Obj.magic + (FStar_Tactics_Effect.tac_bind + (Prims.mk_range + "FStar.InteractiveHelpers.Effectful.fst" + (Prims.of_int (470)) (Prims.of_int (4)) + (Prims.of_int (470)) (Prims.of_int (34))) + (Prims.mk_range + "FStar.InteractiveHelpers.Effectful.fst" + (Prims.of_int (471)) (Prims.of_int (4)) + (Prims.of_int (471)) (Prims.of_int (37))) + (Obj.magic + (FStar_InteractiveHelpers_Base.print_dbg dbg + "Some pre, None")) + (fun uu___1 -> + (fun uu___1 -> + Obj.magic + (FStar_Tactics_Effect.tac_bind + (Prims.mk_range + "FStar.InteractiveHelpers.Effectful.fst" + (Prims.of_int (471)) + (Prims.of_int (9)) + (Prims.of_int (471)) + (Prims.of_int (37))) + (Prims.mk_range + "FStar.InteractiveHelpers.Effectful.fst" + (Prims.of_int (471)) + (Prims.of_int (4)) + (Prims.of_int (471)) + (Prims.of_int (37))) + (Obj.magic + (compute_pre_type dbg e pre)) + (fun uu___2 -> + FStar_Tactics_Effect.lift_div_tac + (fun uu___3 -> + FStar_Pervasives_Native.Some + uu___2)))) uu___1)) + | (FStar_Pervasives_Native.None, + FStar_Pervasives_Native.Some post) -> + Obj.magic + (FStar_Tactics_Effect.tac_bind + (Prims.mk_range + "FStar.InteractiveHelpers.Effectful.fst" + (Prims.of_int (473)) (Prims.of_int (4)) + (Prims.of_int (473)) (Prims.of_int (35))) + (Prims.mk_range + "FStar.InteractiveHelpers.Effectful.fst" + (Prims.of_int (474)) (Prims.of_int (4)) + (Prims.of_int (474)) (Prims.of_int (48))) + (Obj.magic + (FStar_InteractiveHelpers_Base.print_dbg dbg + "None, Some post")) + (fun uu___1 -> + (fun uu___1 -> + Obj.magic + (FStar_Tactics_Effect.tac_bind + (Prims.mk_range + "FStar.InteractiveHelpers.Effectful.fst" + (Prims.of_int (474)) + (Prims.of_int (9)) + (Prims.of_int (474)) + (Prims.of_int (48))) + (Prims.mk_range + "FStar.InteractiveHelpers.Effectful.fst" + (Prims.of_int (474)) + (Prims.of_int (4)) + (Prims.of_int (474)) + (Prims.of_int (48))) + (Obj.magic + (compute_post_type dbg e ret_type + post)) + (fun uu___2 -> + FStar_Tactics_Effect.lift_div_tac + (fun uu___3 -> + FStar_Pervasives_Native.Some + uu___2)))) uu___1)) + | (FStar_Pervasives_Native.None, + FStar_Pervasives_Native.None) -> + Obj.magic + (FStar_Tactics_Effect.tac_bind + (Prims.mk_range + "FStar.InteractiveHelpers.Effectful.fst" + (Prims.of_int (476)) (Prims.of_int (4)) + (Prims.of_int (476)) (Prims.of_int (30))) + (Prims.mk_range + "FStar.InteractiveHelpers.Effectful.fst" + (Prims.of_int (477)) (Prims.of_int (4)) + (Prims.of_int (477)) (Prims.of_int (8))) + (Obj.magic + (FStar_InteractiveHelpers_Base.print_dbg dbg + "None, None")) + (fun uu___1 -> + FStar_Tactics_Effect.lift_div_tac + (fun uu___2 -> FStar_Pervasives_Native.None)))) + uu___) +let rec (_introduce_variables_for_abs : + FStar_InteractiveHelpers_Base.genv -> + FStar_Reflection_Types.typ -> + ((FStar_Reflection_Types.term Prims.list * + FStar_Reflection_Types.binder Prims.list * + FStar_InteractiveHelpers_Base.genv), + unit) FStar_Tactics_Effect.tac_repr) + = + fun ge -> + fun ty -> + FStar_Tactics_Effect.tac_bind + (Prims.mk_range "FStar.InteractiveHelpers.Effectful.fst" + (Prims.of_int (481)) (Prims.of_int (8)) (Prims.of_int (481)) + (Prims.of_int (18))) + (Prims.mk_range "FStar.InteractiveHelpers.Effectful.fst" + (Prims.of_int (481)) (Prims.of_int (2)) (Prims.of_int (492)) + (Prims.of_int (18))) + (Obj.magic (FStar_Tactics_Builtins.inspect ty)) + (fun uu___ -> + (fun uu___ -> + match uu___ with + | FStar_Reflection_Data.Tv_Arrow (b, c) -> + Obj.magic + (Obj.repr + (FStar_Tactics_Effect.tac_bind + (Prims.mk_range + "FStar.InteractiveHelpers.Effectful.fst" + (Prims.of_int (483)) (Prims.of_int (18)) + (Prims.of_int (483)) (Prims.of_int (88))) + (Prims.mk_range + "FStar.InteractiveHelpers.Effectful.fst" + (Prims.of_int (483)) (Prims.of_int (4)) + (Prims.of_int (491)) (Prims.of_int (7))) + (Obj.magic + (FStar_InteractiveHelpers_Base.genv_push_fresh_binder + ge + (Prims.strcat "__" + (FStar_Reflection_Derived.name_of_binder b)) + (FStar_Reflection_Derived.type_of_binder b))) + (fun uu___1 -> + (fun uu___1 -> + match uu___1 with + | (ge1, b1) -> + Obj.magic + (FStar_Tactics_Effect.tac_bind + (Prims.mk_range + "FStar.InteractiveHelpers.Effectful.fst" + (Prims.of_int (484)) + (Prims.of_int (14)) + (Prims.of_int (484)) + (Prims.of_int (29))) + (Prims.mk_range + "FStar.InteractiveHelpers.Effectful.fst" + (Prims.of_int (485)) + (Prims.of_int (4)) + (Prims.of_int (491)) + (Prims.of_int (7))) + (FStar_Tactics_Effect.lift_div_tac + (fun uu___2 -> + FStar_Reflection_Derived.bv_of_binder + b1)) + (fun uu___2 -> + (fun bv1 -> + Obj.magic + (FStar_Tactics_Effect.tac_bind + (Prims.mk_range + "FStar.InteractiveHelpers.Effectful.fst" + (Prims.of_int (485)) + (Prims.of_int (13)) + (Prims.of_int (485)) + (Prims.of_int (30))) + (Prims.mk_range + "FStar.InteractiveHelpers.Effectful.fst" + (Prims.of_int (486)) + (Prims.of_int (10)) + (Prims.of_int (490)) + (Prims.of_int (29))) + (Obj.magic + (FStar_Tactics_Builtins.pack + (FStar_Reflection_Data.Tv_Var + bv1))) + (fun uu___2 -> + (fun v1 -> + match FStar_InteractiveHelpers_ExploreTerm.get_total_or_gtotal_ret_type + c + with + | FStar_Pervasives_Native.Some + ty1 -> + Obj.magic + (Obj.repr + (FStar_Tactics_Effect.tac_bind + (Prims.mk_range + "FStar.InteractiveHelpers.Effectful.fst" + (Prims.of_int (488)) + (Prims.of_int (24)) + (Prims.of_int (488)) + (Prims.of_int (60))) + (Prims.mk_range + "FStar.InteractiveHelpers.Effectful.fst" + (Prims.of_int (488)) + (Prims.of_int (6)) + (Prims.of_int (489)) + (Prims.of_int (29))) + (Obj.magic + (_introduce_variables_for_abs + ge1 ty1)) + (fun + uu___2 -> + FStar_Tactics_Effect.lift_div_tac + (fun + uu___3 -> + match uu___2 + with + | + (vl, bl, + ge2) -> + ((v1 :: + vl), (b1 + :: bl), + ge2))))) + | FStar_Pervasives_Native.None + -> + Obj.magic + (Obj.repr + (FStar_Tactics_Effect.lift_div_tac + (fun + uu___2 -> + ([v1], + [b1], + ge1))))) + uu___2))) uu___2))) + uu___1))) + | uu___1 -> + Obj.magic + (Obj.repr + (FStar_Tactics_Effect.lift_div_tac + (fun uu___2 -> ([], [], ge))))) uu___) +let (introduce_variables_for_abs : + FStar_InteractiveHelpers_Base.genv -> + FStar_Reflection_Types.term -> + ((FStar_Reflection_Types.term Prims.list * + FStar_Reflection_Types.binder Prims.list * + FStar_InteractiveHelpers_Base.genv), + unit) FStar_Tactics_Effect.tac_repr) + = + fun ge -> + fun tm -> + FStar_Tactics_Effect.tac_bind + (Prims.mk_range "FStar.InteractiveHelpers.Effectful.fst" + (Prims.of_int (496)) (Prims.of_int (8)) (Prims.of_int (496)) + (Prims.of_int (25))) + (Prims.mk_range "FStar.InteractiveHelpers.Effectful.fst" + (Prims.of_int (496)) (Prims.of_int (2)) (Prims.of_int (498)) + (Prims.of_int (22))) + (Obj.magic + (FStar_InteractiveHelpers_ExploreTerm.safe_tc + ge.FStar_InteractiveHelpers_Base.env tm)) + (fun uu___ -> + (fun uu___ -> + match uu___ with + | FStar_Pervasives_Native.Some ty -> + Obj.magic (Obj.repr (_introduce_variables_for_abs ge ty)) + | FStar_Pervasives_Native.None -> + Obj.magic + (Obj.repr + (FStar_Tactics_Effect.lift_div_tac + (fun uu___1 -> ([], [], ge))))) uu___) +let (introduce_variables_for_opt_abs : + FStar_InteractiveHelpers_Base.genv -> + FStar_Reflection_Types.term FStar_Pervasives_Native.option -> + ((FStar_Reflection_Types.term Prims.list * + FStar_Reflection_Types.binder Prims.list * + FStar_InteractiveHelpers_Base.genv), + unit) FStar_Tactics_Effect.tac_repr) + = + fun uu___1 -> + fun uu___ -> + (fun ge -> + fun opt_tm -> + match opt_tm with + | FStar_Pervasives_Native.Some tm -> + Obj.magic (Obj.repr (introduce_variables_for_abs ge tm)) + | FStar_Pervasives_Native.None -> + Obj.magic + (Obj.repr + (FStar_Tactics_Effect.lift_div_tac + (fun uu___ -> ([], [], ge))))) uu___1 uu___ +let (effect_type_is_stateful : + FStar_InteractiveHelpers_ExploreTerm.effect_type -> Prims.bool) = + fun etype -> + match etype with + | FStar_InteractiveHelpers_ExploreTerm.E_Total -> false + | FStar_InteractiveHelpers_ExploreTerm.E_GTotal -> false + | FStar_InteractiveHelpers_ExploreTerm.E_Lemma -> false + | FStar_InteractiveHelpers_ExploreTerm.E_PURE -> false + | FStar_InteractiveHelpers_ExploreTerm.E_Pure -> false + | FStar_InteractiveHelpers_ExploreTerm.E_Stack -> true + | FStar_InteractiveHelpers_ExploreTerm.E_ST -> true + | FStar_InteractiveHelpers_ExploreTerm.E_Unknown -> true +let (is_st_get : + Prims.bool -> + FStar_Reflection_Types.term -> + (Prims.bool, unit) FStar_Tactics_Effect.tac_repr) + = + fun dbg -> + fun t -> + FStar_Tactics_Effect.tac_bind + (Prims.mk_range "FStar.InteractiveHelpers.Effectful.fst" + (Prims.of_int (514)) (Prims.of_int (2)) (Prims.of_int (514)) + (Prims.of_int (54))) + (Prims.mk_range "FStar.InteractiveHelpers.Effectful.fst" + (Prims.of_int (515)) (Prims.of_int (2)) (Prims.of_int (528)) + (Prims.of_int (9))) + (Obj.magic + (FStar_Tactics_Effect.tac_bind + (Prims.mk_range "FStar.InteractiveHelpers.Effectful.fst" + (Prims.of_int (514)) (Prims.of_int (16)) + (Prims.of_int (514)) (Prims.of_int (54))) + (Prims.mk_range "FStar.InteractiveHelpers.Effectful.fst" + (Prims.of_int (514)) (Prims.of_int (2)) (Prims.of_int (514)) + (Prims.of_int (54))) + (Obj.magic + (FStar_Tactics_Effect.tac_bind + (Prims.mk_range "FStar.InteractiveHelpers.Effectful.fst" + (Prims.of_int (514)) (Prims.of_int (37)) + (Prims.of_int (514)) (Prims.of_int (53))) + (Prims.mk_range "prims.fst" (Prims.of_int (606)) + (Prims.of_int (19)) (Prims.of_int (606)) + (Prims.of_int (31))) + (Obj.magic (FStar_Tactics_Builtins.term_to_string t)) + (fun uu___ -> + FStar_Tactics_Effect.lift_div_tac + (fun uu___1 -> Prims.strcat "[> is_st_get:\n" uu___)))) + (fun uu___ -> + (fun uu___ -> + Obj.magic + (FStar_InteractiveHelpers_Base.print_dbg dbg uu___)) + uu___))) + (fun uu___ -> + (fun uu___ -> + Obj.magic + (FStar_Tactics_Effect.tac_bind + (Prims.mk_range "FStar.InteractiveHelpers.Effectful.fst" + (Prims.of_int (515)) (Prims.of_int (8)) + (Prims.of_int (515)) (Prims.of_int (17))) + (Prims.mk_range "FStar.InteractiveHelpers.Effectful.fst" + (Prims.of_int (515)) (Prims.of_int (2)) + (Prims.of_int (528)) (Prims.of_int (9))) + (Obj.magic (FStar_Tactics_Builtins.inspect t)) + (fun uu___1 -> + (fun uu___1 -> + match uu___1 with + | FStar_Reflection_Data.Tv_App (hd, (a, qual)) -> + Obj.magic + (FStar_Tactics_Effect.tac_bind + (Prims.mk_range + "FStar.InteractiveHelpers.Effectful.fst" + (Prims.of_int (517)) (Prims.of_int (4)) + (Prims.of_int (517)) (Prims.of_int (32))) + (Prims.mk_range + "FStar.InteractiveHelpers.Effectful.fst" + (Prims.of_int (518)) (Prims.of_int (10)) + (Prims.of_int (524)) (Prims.of_int (11))) + (Obj.magic + (FStar_InteractiveHelpers_Base.print_dbg + dbg "-> Is Tv_App")) + (fun uu___2 -> + (fun uu___2 -> + Obj.magic + (FStar_Tactics_Effect.tac_bind + (Prims.mk_range + "FStar.InteractiveHelpers.Effectful.fst" + (Prims.of_int (518)) + (Prims.of_int (16)) + (Prims.of_int (518)) + (Prims.of_int (26))) + (Prims.mk_range + "FStar.InteractiveHelpers.Effectful.fst" + (Prims.of_int (518)) + (Prims.of_int (10)) + (Prims.of_int (524)) + (Prims.of_int (11))) + (Obj.magic + (FStar_Tactics_Builtins.inspect + hd)) + (fun uu___3 -> + (fun uu___3 -> + match uu___3 with + | FStar_Reflection_Data.Tv_FVar + fv -> + Obj.magic + (FStar_Tactics_Effect.tac_bind + (Prims.mk_range + "FStar.InteractiveHelpers.Effectful.fst" + (Prims.of_int (520)) + (Prims.of_int (6)) + (Prims.of_int (520)) + (Prims.of_int (62))) + (Prims.mk_range + "FStar.InteractiveHelpers.Effectful.fst" + (Prims.of_int (521)) + (Prims.of_int (6)) + (Prims.of_int (521)) + (Prims.of_int (56))) + (Obj.magic + (FStar_InteractiveHelpers_Base.print_dbg + dbg + (Prims.strcat + "-> Head is Tv_FVar: " + (FStar_Reflection_Derived.fv_to_string + fv)))) + (fun uu___4 -> + FStar_Tactics_Effect.lift_div_tac + (fun uu___5 + -> + FStar_InteractiveHelpers_Base.fv_eq_name + fv + ["FStar"; + "HyperStack"; + "ST"; + "get"]))) + | uu___4 -> + Obj.magic + (FStar_Tactics_Effect.tac_bind + (Prims.mk_range + "FStar.InteractiveHelpers.Effectful.fst" + (Prims.of_int (523)) + (Prims.of_int (6)) + (Prims.of_int (523)) + (Prims.of_int (44))) + (Prims.mk_range + "FStar.InteractiveHelpers.Effectful.fst" + (Prims.of_int (524)) + (Prims.of_int (6)) + (Prims.of_int (524)) + (Prims.of_int (11))) + (Obj.magic + (FStar_InteractiveHelpers_Base.print_dbg + dbg + "-> Head is not Tv_FVar")) + (fun uu___5 -> + FStar_Tactics_Effect.lift_div_tac + (fun uu___6 + -> false)))) + uu___3))) uu___2)) + | uu___2 -> + Obj.magic + (FStar_Tactics_Effect.tac_bind + (Prims.mk_range + "FStar.InteractiveHelpers.Effectful.fst" + (Prims.of_int (527)) (Prims.of_int (4)) + (Prims.of_int (527)) (Prims.of_int (36))) + (Prims.mk_range + "FStar.InteractiveHelpers.Effectful.fst" + (Prims.of_int (528)) (Prims.of_int (4)) + (Prims.of_int (528)) (Prims.of_int (9))) + (Obj.magic + (FStar_InteractiveHelpers_Base.print_dbg + dbg "-> Is not Tv_App")) + (fun uu___3 -> + FStar_Tactics_Effect.lift_div_tac + (fun uu___4 -> false)))) uu___1))) + uu___) +let (is_let_st_get : + Prims.bool -> + FStar_Reflection_Data.term_view -> + (FStar_Reflection_Types.bv FStar_Pervasives_Native.option, unit) + FStar_Tactics_Effect.tac_repr) + = + fun dbg -> + fun t -> + FStar_Tactics_Effect.tac_bind + (Prims.mk_range "FStar.InteractiveHelpers.Effectful.fst" + (Prims.of_int (531)) (Prims.of_int (2)) (Prims.of_int (531)) + (Prims.of_int (58))) + (Prims.mk_range "FStar.InteractiveHelpers.Effectful.fst" + (Prims.of_int (532)) (Prims.of_int (2)) (Prims.of_int (538)) + (Prims.of_int (8))) + (Obj.magic + (FStar_Tactics_Effect.tac_bind + (Prims.mk_range "FStar.InteractiveHelpers.Effectful.fst" + (Prims.of_int (531)) (Prims.of_int (16)) + (Prims.of_int (531)) (Prims.of_int (58))) + (Prims.mk_range "FStar.InteractiveHelpers.Effectful.fst" + (Prims.of_int (531)) (Prims.of_int (2)) (Prims.of_int (531)) + (Prims.of_int (58))) + (Obj.magic + (FStar_Tactics_Effect.tac_bind + (Prims.mk_range "FStar.InteractiveHelpers.Effectful.fst" + (Prims.of_int (531)) (Prims.of_int (41)) + (Prims.of_int (531)) (Prims.of_int (57))) + (Prims.mk_range "prims.fst" (Prims.of_int (606)) + (Prims.of_int (19)) (Prims.of_int (606)) + (Prims.of_int (31))) + (Obj.magic + (FStar_Tactics_Effect.tac_bind + (Prims.mk_range + "FStar.InteractiveHelpers.Effectful.fst" + (Prims.of_int (530)) (Prims.of_int (23)) + (Prims.of_int (530)) (Prims.of_int (24))) + (Prims.mk_range + "FStar.InteractiveHelpers.Effectful.fst" + (Prims.of_int (531)) (Prims.of_int (41)) + (Prims.of_int (531)) (Prims.of_int (57))) + (Obj.magic (FStar_Tactics_Builtins.pack t)) + (fun uu___ -> + (fun uu___ -> + Obj.magic + (FStar_Tactics_Builtins.term_to_string + uu___)) uu___))) + (fun uu___ -> + FStar_Tactics_Effect.lift_div_tac + (fun uu___1 -> + Prims.strcat "[> is_let_st_get:\n" uu___)))) + (fun uu___ -> + (fun uu___ -> + Obj.magic + (FStar_InteractiveHelpers_Base.print_dbg dbg uu___)) + uu___))) + (fun uu___ -> + (fun uu___ -> + match t with + | FStar_Reflection_Data.Tv_Let (recf, attrs, bv, def, body) -> + Obj.magic + (FStar_Tactics_Effect.tac_bind + (Prims.mk_range + "FStar.InteractiveHelpers.Effectful.fst" + (Prims.of_int (534)) (Prims.of_int (4)) + (Prims.of_int (534)) (Prims.of_int (48))) + (Prims.mk_range + "FStar.InteractiveHelpers.Effectful.fst" + (Prims.of_int (535)) (Prims.of_int (4)) + (Prims.of_int (535)) (Prims.of_int (47))) + (Obj.magic + (FStar_InteractiveHelpers_Base.print_dbg dbg + "The term is a let expression")) + (fun uu___1 -> + (fun uu___1 -> + Obj.magic + (FStar_Tactics_Effect.tac_bind + (Prims.mk_range + "FStar.InteractiveHelpers.Effectful.fst" + (Prims.of_int (535)) (Prims.of_int (7)) + (Prims.of_int (535)) (Prims.of_int (24))) + (Prims.mk_range + "FStar.InteractiveHelpers.Effectful.fst" + (Prims.of_int (535)) (Prims.of_int (4)) + (Prims.of_int (535)) (Prims.of_int (47))) + (Obj.magic (is_st_get dbg def)) + (fun uu___2 -> + FStar_Tactics_Effect.lift_div_tac + (fun uu___3 -> + if uu___2 + then + FStar_Pervasives_Native.Some bv + else FStar_Pervasives_Native.None)))) + uu___1)) + | uu___1 -> + Obj.magic + (FStar_Tactics_Effect.tac_bind + (Prims.mk_range + "FStar.InteractiveHelpers.Effectful.fst" + (Prims.of_int (537)) (Prims.of_int (4)) + (Prims.of_int (537)) (Prims.of_int (52))) + (Prims.mk_range + "FStar.InteractiveHelpers.Effectful.fst" + (Prims.of_int (538)) (Prims.of_int (4)) + (Prims.of_int (538)) (Prims.of_int (8))) + (Obj.magic + (FStar_InteractiveHelpers_Base.print_dbg dbg + "The term is not a let expression")) + (fun uu___2 -> + FStar_Tactics_Effect.lift_div_tac + (fun uu___3 -> FStar_Pervasives_Native.None)))) + uu___) +let (term_has_effectful_comp : + Prims.bool -> + FStar_Reflection_Types.env -> + FStar_Reflection_Types.term -> + (Prims.bool FStar_Pervasives_Native.option, unit) + FStar_Tactics_Effect.tac_repr) + = + fun dbg -> + fun e -> + fun tm -> + FStar_Tactics_Effect.tac_bind + (Prims.mk_range "FStar.InteractiveHelpers.Effectful.fst" + (Prims.of_int (550)) (Prims.of_int (2)) (Prims.of_int (550)) + (Prims.of_int (44))) + (Prims.mk_range "FStar.InteractiveHelpers.Effectful.fst" + (Prims.of_int (551)) (Prims.of_int (2)) (Prims.of_int (558)) + (Prims.of_int (8))) + (Obj.magic + (FStar_InteractiveHelpers_Base.print_dbg dbg + "[> term_has_effectful_comp")) + (fun uu___ -> + (fun uu___ -> + Obj.magic + (FStar_Tactics_Effect.tac_bind + (Prims.mk_range "FStar.InteractiveHelpers.Effectful.fst" + (Prims.of_int (551)) (Prims.of_int (18)) + (Prims.of_int (551)) (Prims.of_int (46))) + (Prims.mk_range "FStar.InteractiveHelpers.Effectful.fst" + (Prims.of_int (552)) (Prims.of_int (2)) + (Prims.of_int (558)) (Prims.of_int (8))) + (Obj.magic (compute_effect_info dbg e tm)) + (fun uu___1 -> + (fun einfo_opt -> + match einfo_opt with + | FStar_Pervasives_Native.Some einfo -> + Obj.magic + (FStar_Tactics_Effect.tac_bind + (Prims.mk_range + "FStar.InteractiveHelpers.Effectful.fst" + (Prims.of_int (554)) + (Prims.of_int (4)) + (Prims.of_int (554)) + (Prims.of_int (73))) + (Prims.mk_range + "FStar.InteractiveHelpers.Effectful.fst" + (Prims.of_int (555)) + (Prims.of_int (4)) + (Prims.of_int (555)) + (Prims.of_int (50))) + (Obj.magic + (FStar_InteractiveHelpers_Base.print_dbg + dbg + (Prims.strcat "Effect type: " + (FStar_InteractiveHelpers_ExploreTerm.effect_type_to_string + einfo.ei_type)))) + (fun uu___1 -> + FStar_Tactics_Effect.lift_div_tac + (fun uu___2 -> + FStar_Pervasives_Native.Some + (Prims.op_Negation + (FStar_InteractiveHelpers_ExploreTerm.effect_type_is_pure + einfo.ei_type))))) + | FStar_Pervasives_Native.None -> + Obj.magic + (FStar_Tactics_Effect.tac_bind + (Prims.mk_range + "FStar.InteractiveHelpers.Effectful.fst" + (Prims.of_int (557)) + (Prims.of_int (4)) + (Prims.of_int (557)) + (Prims.of_int (49))) + (Prims.mk_range + "FStar.InteractiveHelpers.Effectful.fst" + (Prims.of_int (558)) + (Prims.of_int (4)) + (Prims.of_int (558)) + (Prims.of_int (8))) + (Obj.magic + (FStar_InteractiveHelpers_Base.print_dbg + dbg "Could not compute effect info")) + (fun uu___1 -> + FStar_Tactics_Effect.lift_div_tac + (fun uu___2 -> + FStar_Pervasives_Native.None)))) + uu___1))) uu___) +let (related_term_is_effectul : + Prims.bool -> + FStar_InteractiveHelpers_Base.genv -> + FStar_Reflection_Data.term_view -> + (Prims.bool, unit) FStar_Tactics_Effect.tac_repr) + = + fun dbg -> + fun ge -> + fun tv -> + FStar_Tactics_Effect.tac_bind + (Prims.mk_range "FStar.InteractiveHelpers.Effectful.fst" + (Prims.of_int (570)) (Prims.of_int (4)) (Prims.of_int (570)) + (Prims.of_int (55))) + (Prims.mk_range "FStar.InteractiveHelpers.Effectful.fst" + (Prims.of_int (572)) (Prims.of_int (2)) (Prims.of_int (594)) + (Prims.of_int (45))) + (FStar_Tactics_Effect.lift_div_tac + (fun uu___ -> + fun tm -> + FStar_Tactics_Effect.tac_bind + (Prims.mk_range "FStar.InteractiveHelpers.Effectful.fst" + (Prims.of_int (570)) (Prims.of_int (4)) + (Prims.of_int (570)) (Prims.of_int (41))) + (Prims.mk_range "FStar.InteractiveHelpers.Effectful.fst" + (Prims.of_int (570)) (Prims.of_int (4)) + (Prims.of_int (570)) (Prims.of_int (55))) + (Obj.magic + (term_has_effectful_comp dbg + ge.FStar_InteractiveHelpers_Base.env tm)) + (fun uu___1 -> + FStar_Tactics_Effect.lift_div_tac + (fun uu___2 -> + uu___1 <> (FStar_Pervasives_Native.Some false))))) + (fun uu___ -> + (fun is_effectful -> + match tv with + | FStar_Reflection_Data.Tv_Var uu___ -> + Obj.magic + (Obj.repr + (FStar_Tactics_Effect.lift_div_tac + (fun uu___1 -> false))) + | FStar_Reflection_Data.Tv_BVar uu___ -> + Obj.magic + (Obj.repr + (FStar_Tactics_Effect.lift_div_tac + (fun uu___1 -> false))) + | FStar_Reflection_Data.Tv_FVar uu___ -> + Obj.magic + (Obj.repr + (FStar_Tactics_Effect.lift_div_tac + (fun uu___1 -> false))) + | FStar_Reflection_Data.Tv_App (hd, (a, qual)) -> + Obj.magic + (Obj.repr + (FStar_Tactics_Effect.lift_div_tac + (fun uu___ -> false))) + | FStar_Reflection_Data.Tv_Abs (br, body) -> + Obj.magic + (Obj.repr + (FStar_Tactics_Effect.lift_div_tac + (fun uu___ -> false))) + | FStar_Reflection_Data.Tv_Arrow (br, c0) -> + Obj.magic + (Obj.repr + (FStar_Tactics_Effect.lift_div_tac + (fun uu___ -> false))) + | FStar_Reflection_Data.Tv_Type uu___ -> + Obj.magic + (Obj.repr + (FStar_Tactics_Effect.lift_div_tac + (fun uu___1 -> false))) + | FStar_Reflection_Data.Tv_Refine (bv, ref) -> + Obj.magic + (Obj.repr + (FStar_Tactics_Effect.lift_div_tac + (fun uu___ -> false))) + | FStar_Reflection_Data.Tv_Const uu___ -> + Obj.magic + (Obj.repr + (FStar_Tactics_Effect.lift_div_tac + (fun uu___1 -> false))) + | FStar_Reflection_Data.Tv_Uvar (uu___, uu___1) -> + Obj.magic + (Obj.repr + (FStar_Tactics_Effect.lift_div_tac + (fun uu___2 -> false))) + | FStar_Reflection_Data.Tv_Let (recf, attrs, bv, def, body) + -> Obj.magic (Obj.repr (is_effectful def)) + | FStar_Reflection_Data.Tv_Match + (scrutinee, _ret_opt, branches) -> + Obj.magic (Obj.repr (is_effectful scrutinee)) + | FStar_Reflection_Data.Tv_AscribedT (e, ty, tac, uu___) -> + Obj.magic + (Obj.repr + (FStar_Tactics_Effect.lift_div_tac + (fun uu___1 -> false))) + | FStar_Reflection_Data.Tv_AscribedC (e, c, tac, uu___) -> + Obj.magic + (Obj.repr + (FStar_Tactics_Effect.lift_div_tac + (fun uu___1 -> false))) + | uu___ -> + Obj.magic + (Obj.repr + (FStar_Tactics_Effect.lift_div_tac + (fun uu___1 -> true)))) uu___) +let rec (find_mem_in_related : + Prims.bool -> + FStar_InteractiveHelpers_Base.genv -> + FStar_Reflection_Data.term_view Prims.list -> + (FStar_Reflection_Types.bv FStar_Pervasives_Native.option, unit) + FStar_Tactics_Effect.tac_repr) + = + fun uu___2 -> + fun uu___1 -> + fun uu___ -> + (fun dbg -> + fun ge -> + fun tms -> + match tms with + | [] -> + Obj.magic + (Obj.repr + (FStar_Tactics_Effect.lift_div_tac + (fun uu___ -> FStar_Pervasives_Native.None))) + | tv::tms' -> + Obj.magic + (Obj.repr + (FStar_Tactics_Effect.tac_bind + (Prims.mk_range + "FStar.InteractiveHelpers.Effectful.fst" + (Prims.of_int (612)) (Prims.of_int (4)) + (Prims.of_int (612)) (Prims.of_int (67))) + (Prims.mk_range + "FStar.InteractiveHelpers.Effectful.fst" + (Prims.of_int (613)) (Prims.of_int (4)) + (Prims.of_int (629)) (Prims.of_int (11))) + (Obj.magic + (FStar_Tactics_Effect.tac_bind + (Prims.mk_range + "FStar.InteractiveHelpers.Effectful.fst" + (Prims.of_int (612)) (Prims.of_int (18)) + (Prims.of_int (612)) (Prims.of_int (67))) + (Prims.mk_range + "FStar.InteractiveHelpers.Effectful.fst" + (Prims.of_int (612)) (Prims.of_int (4)) + (Prims.of_int (612)) (Prims.of_int (67))) + (Obj.magic + (FStar_Tactics_Effect.tac_bind + (Prims.mk_range + "FStar.InteractiveHelpers.Effectful.fst" + (Prims.of_int (612)) + (Prims.of_int (49)) + (Prims.of_int (612)) + (Prims.of_int (66))) + (Prims.mk_range "prims.fst" + (Prims.of_int (606)) + (Prims.of_int (19)) + (Prims.of_int (606)) + (Prims.of_int (31))) + (Obj.magic + (FStar_Tactics_Effect.tac_bind + (Prims.mk_range + "FStar.InteractiveHelpers.Effectful.fst" + (Prims.of_int (611)) + (Prims.of_int (4)) + (Prims.of_int (611)) + (Prims.of_int (6))) + (Prims.mk_range + "FStar.InteractiveHelpers.Effectful.fst" + (Prims.of_int (612)) + (Prims.of_int (49)) + (Prims.of_int (612)) + (Prims.of_int (66))) + (Obj.magic + (FStar_Tactics_Builtins.pack + tv)) + (fun uu___ -> + (fun uu___ -> + Obj.magic + (FStar_Tactics_Builtins.term_to_string + uu___)) uu___))) + (fun uu___ -> + FStar_Tactics_Effect.lift_div_tac + (fun uu___1 -> + Prims.strcat + "[> find_mem_in_related:\n" + uu___)))) + (fun uu___ -> + (fun uu___ -> + Obj.magic + (FStar_InteractiveHelpers_Base.print_dbg + dbg uu___)) uu___))) + (fun uu___ -> + (fun uu___ -> + Obj.magic + (FStar_Tactics_Effect.tac_bind + (Prims.mk_range + "FStar.InteractiveHelpers.Effectful.fst" + (Prims.of_int (613)) + (Prims.of_int (10)) + (Prims.of_int (613)) + (Prims.of_int (30))) + (Prims.mk_range + "FStar.InteractiveHelpers.Effectful.fst" + (Prims.of_int (613)) + (Prims.of_int (4)) + (Prims.of_int (629)) + (Prims.of_int (11))) + (Obj.magic (is_let_st_get dbg tv)) + (fun uu___1 -> + (fun uu___1 -> + match uu___1 with + | FStar_Pervasives_Native.Some bv + -> + Obj.magic + (FStar_Tactics_Effect.tac_bind + (Prims.mk_range + "FStar.InteractiveHelpers.Effectful.fst" + (Prims.of_int (615)) + (Prims.of_int (6)) + (Prims.of_int (615)) + (Prims.of_int (87))) + (Prims.mk_range + "FStar.InteractiveHelpers.Effectful.fst" + (Prims.of_int (616)) + (Prims.of_int (6)) + (Prims.of_int (616)) + (Prims.of_int (13))) + (Obj.magic + (FStar_InteractiveHelpers_Base.print_dbg + dbg + "Term is of the form `let x = FStar.HyperStack.ST.get ()`: success")) + (fun uu___2 -> + FStar_Tactics_Effect.lift_div_tac + (fun uu___3 -> + FStar_Pervasives_Native.Some + bv))) + | FStar_Pervasives_Native.None -> + Obj.magic + (FStar_Tactics_Effect.tac_bind + (Prims.mk_range + "FStar.InteractiveHelpers.Effectful.fst" + (Prims.of_int (618)) + (Prims.of_int (6)) + (Prims.of_int (618)) + (Prims.of_int (94))) + (Prims.mk_range + "FStar.InteractiveHelpers.Effectful.fst" + (Prims.of_int (619)) + (Prims.of_int (6)) + (Prims.of_int (629)) + (Prims.of_int (11))) + (Obj.magic + (FStar_InteractiveHelpers_Base.print_dbg + dbg + "Term is not of the form `let x = FStar.HyperStack.ST.get ()`: continuing")) + (fun uu___2 -> + (fun uu___2 -> + Obj.magic + (FStar_Tactics_Effect.tac_bind + (Prims.mk_range + "FStar.InteractiveHelpers.Effectful.fst" + (Prims.of_int (619)) + (Prims.of_int (9)) + (Prims.of_int (619)) + (Prims.of_int (43))) + (Prims.mk_range + "FStar.InteractiveHelpers.Effectful.fst" + (Prims.of_int (619)) + (Prims.of_int (6)) + (Prims.of_int (629)) + (Prims.of_int (11))) + (Obj.magic + (related_term_is_effectul + dbg ge tv)) + (fun uu___3 + -> + (fun + uu___3 -> + if uu___3 + then + Obj.magic + (FStar_Tactics_Effect.tac_bind + (Prims.mk_range + "FStar.InteractiveHelpers.Effectful.fst" + (Prims.of_int (622)) + (Prims.of_int (8)) + (Prims.of_int (622)) + (Prims.of_int (56))) + (Prims.mk_range + "FStar.InteractiveHelpers.Effectful.fst" + (Prims.of_int (623)) + (Prims.of_int (8)) + (Prims.of_int (623)) + (Prims.of_int (12))) + (Obj.magic + (FStar_InteractiveHelpers_Base.print_dbg + dbg + "Term is effectful: stopping here")) + (fun + uu___4 -> + FStar_Tactics_Effect.lift_div_tac + (fun + uu___5 -> + FStar_Pervasives_Native.None))) + else + Obj.magic + (FStar_Tactics_Effect.tac_bind + (Prims.mk_range + "FStar.InteractiveHelpers.Effectful.fst" + (Prims.of_int (627)) + (Prims.of_int (8)) + (Prims.of_int (627)) + (Prims.of_int (57))) + (Prims.mk_range + "FStar.InteractiveHelpers.Effectful.fst" + (Prims.of_int (628)) + (Prims.of_int (8)) + (Prims.of_int (628)) + (Prims.of_int (39))) + (Obj.magic + (FStar_InteractiveHelpers_Base.print_dbg + dbg + "Term is not effectful: continuing")) + (fun + uu___5 -> + (fun + uu___5 -> + Obj.magic + (find_mem_in_related + dbg ge + tms')) + uu___5))) + uu___3))) + uu___2))) uu___1))) + uu___)))) uu___2 uu___1 uu___ +let rec (find_mem_in_children : + Prims.bool -> + FStar_InteractiveHelpers_Base.genv -> + FStar_Reflection_Types.term -> + ((FStar_InteractiveHelpers_Base.genv * FStar_Reflection_Types.bv + FStar_Pervasives_Native.option), + unit) FStar_Tactics_Effect.tac_repr) + = + fun dbg -> + fun ge -> + fun child -> + FStar_Tactics_Effect.tac_bind + (Prims.mk_range "FStar.InteractiveHelpers.Effectful.fst" + (Prims.of_int (642)) (Prims.of_int (8)) (Prims.of_int (642)) + (Prims.of_int (21))) + (Prims.mk_range "FStar.InteractiveHelpers.Effectful.fst" + (Prims.of_int (642)) (Prims.of_int (2)) (Prims.of_int (649)) + (Prims.of_int (17))) + (Obj.magic (FStar_Tactics_Builtins.inspect child)) + (fun uu___ -> + (fun uu___ -> + match uu___ with + | FStar_Reflection_Data.Tv_Let (recf, attrs, bv, def, body) + -> + Obj.magic + (Obj.repr + (FStar_Tactics_Effect.tac_bind + (Prims.mk_range + "FStar.InteractiveHelpers.Effectful.fst" + (Prims.of_int (644)) (Prims.of_int (7)) + (Prims.of_int (644)) (Prims.of_int (24))) + (Prims.mk_range + "FStar.InteractiveHelpers.Effectful.fst" + (Prims.of_int (644)) (Prims.of_int (4)) + (Prims.of_int (648)) (Prims.of_int (39))) + (Obj.magic (is_st_get dbg def)) + (fun uu___1 -> + (fun uu___1 -> + if uu___1 + then + Obj.magic + (Obj.repr + (FStar_Tactics_Effect.lift_div_tac + (fun uu___2 -> + (ge, + (FStar_Pervasives_Native.Some + bv))))) + else + Obj.magic + (Obj.repr + (FStar_Tactics_Effect.tac_bind + (Prims.mk_range + "FStar.InteractiveHelpers.Effectful.fst" + (Prims.of_int (645)) + (Prims.of_int (12)) + (Prims.of_int (645)) + (Prims.of_int (64))) + (Prims.mk_range + "FStar.InteractiveHelpers.Effectful.fst" + (Prims.of_int (645)) + (Prims.of_int (9)) + (Prims.of_int (648)) + (Prims.of_int (39))) + (Obj.magic + (FStar_Tactics_Effect.tac_bind + (Prims.mk_range + "FStar.InteractiveHelpers.Effectful.fst" + (Prims.of_int (645)) + (Prims.of_int (12)) + (Prims.of_int (645)) + (Prims.of_int (50))) + (Prims.mk_range + "FStar.InteractiveHelpers.Effectful.fst" + (Prims.of_int (645)) + (Prims.of_int (12)) + (Prims.of_int (645)) + (Prims.of_int (64))) + (Obj.magic + (term_has_effectful_comp + dbg + ge.FStar_InteractiveHelpers_Base.env + def)) + (fun uu___3 -> + FStar_Tactics_Effect.lift_div_tac + (fun uu___4 -> + uu___3 <> + (FStar_Pervasives_Native.Some + false))))) + (fun uu___3 -> + (fun uu___3 -> + if uu___3 + then + Obj.magic + (Obj.repr + (FStar_Tactics_Effect.lift_div_tac + (fun uu___4 -> + (ge, + FStar_Pervasives_Native.None)))) + else + Obj.magic + (Obj.repr + (FStar_Tactics_Effect.tac_bind + (Prims.mk_range + "FStar.InteractiveHelpers.Effectful.fst" + (Prims.of_int (647)) + (Prims.of_int (16)) + (Prims.of_int (647)) + (Prims.of_int (45))) + (Prims.mk_range + "FStar.InteractiveHelpers.Effectful.fst" + (Prims.of_int (648)) + (Prims.of_int (6)) + (Prims.of_int (648)) + (Prims.of_int (39))) + (Obj.magic + (FStar_InteractiveHelpers_Base.genv_push_bv + ge bv false + FStar_Pervasives_Native.None)) + (fun uu___5 -> + (fun ge1 -> + Obj.magic + ( + find_mem_in_children + dbg ge1 + body)) + uu___5)))) + uu___3)))) uu___1))) + | uu___1 -> + Obj.magic + (Obj.repr + (FStar_Tactics_Effect.lift_div_tac + (fun uu___2 -> (ge, FStar_Pervasives_Native.None))))) + uu___) +let (pre_post_to_propositions : + Prims.bool -> + FStar_InteractiveHelpers_Base.genv -> + FStar_InteractiveHelpers_ExploreTerm.effect_type -> + FStar_Reflection_Types.term -> + FStar_Reflection_Types.binder FStar_Pervasives_Native.option -> + FStar_InteractiveHelpers_ExploreTerm.type_info -> + FStar_Reflection_Types.term FStar_Pervasives_Native.option -> + FStar_Reflection_Types.term FStar_Pervasives_Native.option -> + FStar_Reflection_Data.term_view Prims.list -> + FStar_Reflection_Data.term_view Prims.list -> + ((FStar_InteractiveHelpers_Base.genv * + FStar_InteractiveHelpers_Propositions.proposition + FStar_Pervasives_Native.option * + FStar_InteractiveHelpers_Propositions.proposition + FStar_Pervasives_Native.option), + unit) FStar_Tactics_Effect.tac_repr) + = + fun dbg -> + fun ge0 -> + fun etype -> + fun v -> + fun ret_abs_binder -> + fun ret_type -> + fun opt_pre -> + fun opt_post -> + fun parents -> + fun children -> + FStar_Tactics_Effect.tac_bind + (Prims.mk_range + "FStar.InteractiveHelpers.Effectful.fst" + (Prims.of_int (667)) (Prims.of_int (2)) + (Prims.of_int (667)) (Prims.of_int (52))) + (Prims.mk_range + "FStar.InteractiveHelpers.Effectful.fst" + (Prims.of_int (668)) (Prims.of_int (2)) + (Prims.of_int (745)) (Prims.of_int (26))) + (Obj.magic + (FStar_InteractiveHelpers_Base.print_dbg dbg + "[> pre_post_to_propositions: begin")) + (fun uu___ -> + (fun uu___ -> + Obj.magic + (FStar_Tactics_Effect.tac_bind + (Prims.mk_range + "FStar.InteractiveHelpers.Effectful.fst" + (Prims.of_int (668)) (Prims.of_int (2)) + (Prims.of_int (668)) + (Prims.of_int (84))) + (Prims.mk_range + "FStar.InteractiveHelpers.Effectful.fst" + (Prims.of_int (669)) (Prims.of_int (2)) + (Prims.of_int (745)) + (Prims.of_int (26))) + (Obj.magic + (FStar_Tactics_Effect.tac_bind + (Prims.mk_range + "FStar.InteractiveHelpers.Effectful.fst" + (Prims.of_int (668)) + (Prims.of_int (16)) + (Prims.of_int (668)) + (Prims.of_int (84))) + (Prims.mk_range + "FStar.InteractiveHelpers.Effectful.fst" + (Prims.of_int (668)) + (Prims.of_int (2)) + (Prims.of_int (668)) + (Prims.of_int (84))) + (Obj.magic + (FStar_Tactics_Effect.tac_bind + (Prims.mk_range + "FStar.InteractiveHelpers.Effectful.fst" + (Prims.of_int (668)) + (Prims.of_int (44)) + (Prims.of_int (668)) + (Prims.of_int (83))) + (Prims.mk_range "prims.fst" + (Prims.of_int (606)) + (Prims.of_int (19)) + (Prims.of_int (606)) + (Prims.of_int (31))) + (Obj.magic + (FStar_InteractiveHelpers_Base.option_to_string + FStar_Tactics_Builtins.term_to_string + opt_pre)) + (fun uu___1 -> + FStar_Tactics_Effect.lift_div_tac + (fun uu___2 -> + Prims.strcat + "- uninstantiated pre: " + uu___1)))) + (fun uu___1 -> + (fun uu___1 -> + Obj.magic + (FStar_InteractiveHelpers_Base.print_dbg + dbg uu___1)) uu___1))) + (fun uu___1 -> + (fun uu___1 -> + Obj.magic + (FStar_Tactics_Effect.tac_bind + (Prims.mk_range + "FStar.InteractiveHelpers.Effectful.fst" + (Prims.of_int (669)) + (Prims.of_int (2)) + (Prims.of_int (669)) + (Prims.of_int (86))) + (Prims.mk_range + "FStar.InteractiveHelpers.Effectful.fst" + (Prims.of_int (670)) + (Prims.of_int (2)) + (Prims.of_int (745)) + (Prims.of_int (26))) + (Obj.magic + (FStar_Tactics_Effect.tac_bind + (Prims.mk_range + "FStar.InteractiveHelpers.Effectful.fst" + (Prims.of_int (669)) + (Prims.of_int (16)) + (Prims.of_int (669)) + (Prims.of_int (86))) + (Prims.mk_range + "FStar.InteractiveHelpers.Effectful.fst" + (Prims.of_int (669)) + (Prims.of_int (2)) + (Prims.of_int (669)) + (Prims.of_int (86))) + (Obj.magic + (FStar_Tactics_Effect.tac_bind + (Prims.mk_range + "FStar.InteractiveHelpers.Effectful.fst" + (Prims.of_int (669)) + (Prims.of_int (45)) + (Prims.of_int (669)) + (Prims.of_int (85))) + (Prims.mk_range + "prims.fst" + (Prims.of_int (606)) + (Prims.of_int (19)) + (Prims.of_int (606)) + (Prims.of_int (31))) + (Obj.magic + (FStar_InteractiveHelpers_Base.option_to_string + FStar_Tactics_Builtins.term_to_string + opt_post)) + (fun uu___2 -> + FStar_Tactics_Effect.lift_div_tac + (fun uu___3 -> + Prims.strcat + "- uninstantiated post: " + uu___2)))) + (fun uu___2 -> + (fun uu___2 -> + Obj.magic + (FStar_InteractiveHelpers_Base.print_dbg + dbg uu___2)) + uu___2))) + (fun uu___2 -> + (fun uu___2 -> + Obj.magic + (FStar_Tactics_Effect.tac_bind + (Prims.mk_range + "FStar.InteractiveHelpers.Effectful.fst" + (Prims.of_int (670)) + (Prims.of_int (12)) + (Prims.of_int (670)) + (Prims.of_int (66))) + (Prims.mk_range + "FStar.InteractiveHelpers.Effectful.fst" + (Prims.of_int (672)) + (Prims.of_int (2)) + (Prims.of_int (745)) + (Prims.of_int (26))) + (FStar_Tactics_Effect.lift_div_tac + (fun uu___3 -> + match ret_abs_binder + with + | FStar_Pervasives_Native.None + -> [] + | FStar_Pervasives_Native.Some + b -> + [b])) + (fun uu___3 -> + (fun brs -> + Obj.magic + (FStar_Tactics_Effect.tac_bind + ( + Prims.mk_range + "FStar.InteractiveHelpers.Effectful.fst" + (Prims.of_int (673)) + (Prims.of_int (4)) + (Prims.of_int (727)) + (Prims.of_int (9))) + ( + Prims.mk_range + "FStar.InteractiveHelpers.Effectful.fst" + (Prims.of_int (672)) + (Prims.of_int (2)) + (Prims.of_int (745)) + (Prims.of_int (26))) + ( + match etype + with + | + FStar_InteractiveHelpers_ExploreTerm.E_Lemma + -> + Obj.magic + (FStar_Tactics_Effect.tac_bind + (Prims.mk_range + "FStar.InteractiveHelpers.Effectful.fst" + (Prims.of_int (675)) + (Prims.of_int (6)) + (Prims.of_int (675)) + (Prims.of_int (29))) + (Prims.mk_range + "FStar.InteractiveHelpers.Effectful.fst" + (Prims.of_int (676)) + (Prims.of_int (6)) + (Prims.of_int (676)) + (Prims.of_int (34))) + (Obj.magic + (FStar_InteractiveHelpers_Base.print_dbg + dbg + "E_Lemma")) + (fun + uu___3 -> + FStar_Tactics_Effect.lift_div_tac + (fun + uu___4 -> + (ge0, + ([], []), + ([ + FStar_Reflection_Builtins.pack_ln + (FStar_Reflection_Data.Tv_Const + FStar_Reflection_Data.C_Unit)], + []))))) + | + FStar_InteractiveHelpers_ExploreTerm.E_Total + -> + Obj.magic + (FStar_Tactics_Effect.tac_bind + (Prims.mk_range + "FStar.InteractiveHelpers.Effectful.fst" + (Prims.of_int (678)) + (Prims.of_int (6)) + (Prims.of_int (678)) + (Prims.of_int (38))) + (Prims.mk_range + "FStar.InteractiveHelpers.Effectful.fst" + (Prims.of_int (679)) + (Prims.of_int (6)) + (Prims.of_int (679)) + (Prims.of_int (29))) + (Obj.magic + (FStar_InteractiveHelpers_Base.print_dbg + dbg + "E_Total/E_GTotal")) + (fun + uu___3 -> + FStar_Tactics_Effect.lift_div_tac + (fun + uu___4 -> + (ge0, + ([], []), + ([], []))))) + | + FStar_InteractiveHelpers_ExploreTerm.E_GTotal + -> + Obj.magic + (FStar_Tactics_Effect.tac_bind + (Prims.mk_range + "FStar.InteractiveHelpers.Effectful.fst" + (Prims.of_int (678)) + (Prims.of_int (6)) + (Prims.of_int (678)) + (Prims.of_int (38))) + (Prims.mk_range + "FStar.InteractiveHelpers.Effectful.fst" + (Prims.of_int (679)) + (Prims.of_int (6)) + (Prims.of_int (679)) + (Prims.of_int (29))) + (Obj.magic + (FStar_InteractiveHelpers_Base.print_dbg + dbg + "E_Total/E_GTotal")) + (fun + uu___3 -> + FStar_Tactics_Effect.lift_div_tac + (fun + uu___4 -> + (ge0, + ([], []), + ([], []))))) + | + FStar_InteractiveHelpers_ExploreTerm.E_PURE + -> + Obj.magic + (FStar_Tactics_Effect.tac_bind + (Prims.mk_range + "FStar.InteractiveHelpers.Effectful.fst" + (Prims.of_int (681)) + (Prims.of_int (6)) + (Prims.of_int (681)) + (Prims.of_int (35))) + (Prims.mk_range + "FStar.InteractiveHelpers.Effectful.fst" + (Prims.of_int (682)) + (Prims.of_int (6)) + (Prims.of_int (682)) + (Prims.of_int (31))) + (Obj.magic + (FStar_InteractiveHelpers_Base.print_dbg + dbg + "E_PURE/E_Pure")) + (fun + uu___3 -> + FStar_Tactics_Effect.lift_div_tac + (fun + uu___4 -> + (ge0, + ([], []), + ([v], + brs))))) + | + FStar_InteractiveHelpers_ExploreTerm.E_Pure + -> + Obj.magic + (FStar_Tactics_Effect.tac_bind + (Prims.mk_range + "FStar.InteractiveHelpers.Effectful.fst" + (Prims.of_int (681)) + (Prims.of_int (6)) + (Prims.of_int (681)) + (Prims.of_int (35))) + (Prims.mk_range + "FStar.InteractiveHelpers.Effectful.fst" + (Prims.of_int (682)) + (Prims.of_int (6)) + (Prims.of_int (682)) + (Prims.of_int (31))) + (Obj.magic + (FStar_InteractiveHelpers_Base.print_dbg + dbg + "E_PURE/E_Pure")) + (fun + uu___3 -> + FStar_Tactics_Effect.lift_div_tac + (fun + uu___4 -> + (ge0, + ([], []), + ([v], + brs))))) + | + FStar_InteractiveHelpers_ExploreTerm.E_Stack + -> + Obj.magic + (FStar_Tactics_Effect.tac_bind + (Prims.mk_range + "FStar.InteractiveHelpers.Effectful.fst" + (Prims.of_int (684)) + (Prims.of_int (6)) + (Prims.of_int (684)) + (Prims.of_int (34))) + (Prims.mk_range + "FStar.InteractiveHelpers.Effectful.fst" + (Prims.of_int (686)) + (Prims.of_int (6)) + (Prims.of_int (698)) + (Prims.of_int (76))) + (Obj.magic + (FStar_InteractiveHelpers_Base.print_dbg + dbg + "E_Stack/E_ST")) + (fun + uu___3 -> + (fun + uu___3 -> + Obj.magic + (FStar_Tactics_Effect.tac_bind + (Prims.mk_range + "FStar.InteractiveHelpers.Effectful.fst" + (Prims.of_int (686)) + (Prims.of_int (6)) + (Prims.of_int (686)) + (Prims.of_int (66))) + (Prims.mk_range + "FStar.InteractiveHelpers.Effectful.fst" + (Prims.of_int (687)) + (Prims.of_int (6)) + (Prims.of_int (698)) + (Prims.of_int (76))) + (Obj.magic + (FStar_InteractiveHelpers_Base.print_dbg + dbg + "Looking for the initial state in the context")) + (fun + uu___4 -> + (fun + uu___4 -> + Obj.magic + (FStar_Tactics_Effect.tac_bind + (Prims.mk_range + "FStar.InteractiveHelpers.Effectful.fst" + (Prims.of_int (687)) + (Prims.of_int (19)) + (Prims.of_int (687)) + (Prims.of_int (54))) + (Prims.mk_range + "FStar.InteractiveHelpers.Effectful.fst" + (Prims.of_int (688)) + (Prims.of_int (6)) + (Prims.of_int (698)) + (Prims.of_int (76))) + (Obj.magic + (find_mem_in_related + dbg ge0 + parents)) + (fun + uu___5 -> + (fun + b1_opt -> + Obj.magic + (FStar_Tactics_Effect.tac_bind + (Prims.mk_range + "FStar.InteractiveHelpers.Effectful.fst" + (Prims.of_int (688)) + (Prims.of_int (6)) + (Prims.of_int (688)) + (Prims.of_int (64))) + (Prims.mk_range + "FStar.InteractiveHelpers.Effectful.fst" + (Prims.of_int (689)) + (Prims.of_int (6)) + (Prims.of_int (698)) + (Prims.of_int (76))) + (Obj.magic + (FStar_InteractiveHelpers_Base.print_dbg + dbg + "Looking for the final state in the context")) + (fun + uu___5 -> + (fun + uu___5 -> + Obj.magic + (FStar_Tactics_Effect.tac_bind + (Prims.mk_range + "FStar.InteractiveHelpers.Effectful.fst" + (Prims.of_int (689)) + (Prims.of_int (19)) + (Prims.of_int (689)) + (Prims.of_int (55))) + (Prims.mk_range + "FStar.InteractiveHelpers.Effectful.fst" + (Prims.of_int (691)) + (Prims.of_int (6)) + (Prims.of_int (698)) + (Prims.of_int (76))) + (Obj.magic + (find_mem_in_related + dbg ge0 + children)) + (fun + uu___6 -> + (fun + b2_opt -> + Obj.magic + (FStar_Tactics_Effect.tac_bind + (Prims.mk_range + "FStar.InteractiveHelpers.Effectful.fst" + (Prims.of_int (692)) + (Prims.of_int (8)) + (Prims.of_int (694)) + (Prims.of_int (59))) + (Prims.mk_range + "FStar.InteractiveHelpers.Effectful.fst" + (Prims.of_int (696)) + (Prims.of_int (6)) + (Prims.of_int (698)) + (Prims.of_int (76))) + (FStar_Tactics_Effect.lift_div_tac + (fun + uu___6 -> + fun + opt_bv -> + fun + basename + -> + fun ge -> + match opt_bv + with + | + FStar_Pervasives_Native.Some + bv -> + FStar_Tactics_Effect.tac_bind + (Prims.mk_range + "FStar.InteractiveHelpers.Effectful.fst" + (Prims.of_int (693)) + (Prims.of_int (21)) + (Prims.of_int (693)) + (Prims.of_int (37))) + (Prims.mk_range + "FStar.InteractiveHelpers.Effectful.fst" + (Prims.of_int (693)) + (Prims.of_int (21)) + (Prims.of_int (693)) + (Prims.of_int (55))) + (Obj.magic + (FStar_Tactics_Builtins.pack + (FStar_Reflection_Data.Tv_Var + bv))) + (fun + uu___7 -> + FStar_Tactics_Effect.lift_div_tac + (fun + uu___8 -> + (uu___7, + (FStar_Reflection_Derived.mk_binder + bv), ge))) + | + FStar_Pervasives_Native.None + -> + FStar_InteractiveHelpers_Base.genv_push_fresh_var + ge + basename + (FStar_Reflection_Builtins.pack_ln + (FStar_Reflection_Data.Tv_FVar + (FStar_Reflection_Builtins.pack_fv + ["FStar"; + "Monotonic"; + "HyperStack"; + "mem"]))))) + (fun + uu___6 -> + (fun + opt_push_fresh_state + -> + Obj.magic + (FStar_Tactics_Effect.tac_bind + (Prims.mk_range + "FStar.InteractiveHelpers.Effectful.fst" + (Prims.of_int (696)) + (Prims.of_int (24)) + (Prims.of_int (696)) + (Prims.of_int (63))) + (Prims.mk_range + "FStar.InteractiveHelpers.Effectful.fst" + (Prims.of_int (696)) + (Prims.of_int (6)) + (Prims.of_int (698)) + (Prims.of_int (76))) + (Obj.magic + (opt_push_fresh_state + b1_opt + "__h0_" + ge0)) + (fun + uu___6 -> + (fun + uu___6 -> + match uu___6 + with + | + (h1, b1, + ge1) -> + Obj.magic + (FStar_Tactics_Effect.tac_bind + (Prims.mk_range + "FStar.InteractiveHelpers.Effectful.fst" + (Prims.of_int (697)) + (Prims.of_int (24)) + (Prims.of_int (697)) + (Prims.of_int (63))) + (Prims.mk_range + "FStar.InteractiveHelpers.Effectful.fst" + (Prims.of_int (697)) + (Prims.of_int (6)) + (Prims.of_int (698)) + (Prims.of_int (76))) + (Obj.magic + (opt_push_fresh_state + b2_opt + "__h1_" + ge1)) + (fun + uu___7 -> + FStar_Tactics_Effect.lift_div_tac + (fun + uu___8 -> + match uu___7 + with + | + (h2, b2, + ge2) -> + (ge2, + ([h1], + [b1]), + ([h1; + v; + h2], + (FStar_List_Tot_Base.flatten + [ + [b1]; + brs; + [b2]]))))))) + uu___6))) + uu___6))) + uu___6))) + uu___5))) + uu___5))) + uu___4))) + uu___3)) + | + FStar_InteractiveHelpers_ExploreTerm.E_ST + -> + Obj.magic + (FStar_Tactics_Effect.tac_bind + (Prims.mk_range + "FStar.InteractiveHelpers.Effectful.fst" + (Prims.of_int (684)) + (Prims.of_int (6)) + (Prims.of_int (684)) + (Prims.of_int (34))) + (Prims.mk_range + "FStar.InteractiveHelpers.Effectful.fst" + (Prims.of_int (686)) + (Prims.of_int (6)) + (Prims.of_int (698)) + (Prims.of_int (76))) + (Obj.magic + (FStar_InteractiveHelpers_Base.print_dbg + dbg + "E_Stack/E_ST")) + (fun + uu___3 -> + (fun + uu___3 -> + Obj.magic + (FStar_Tactics_Effect.tac_bind + (Prims.mk_range + "FStar.InteractiveHelpers.Effectful.fst" + (Prims.of_int (686)) + (Prims.of_int (6)) + (Prims.of_int (686)) + (Prims.of_int (66))) + (Prims.mk_range + "FStar.InteractiveHelpers.Effectful.fst" + (Prims.of_int (687)) + (Prims.of_int (6)) + (Prims.of_int (698)) + (Prims.of_int (76))) + (Obj.magic + (FStar_InteractiveHelpers_Base.print_dbg + dbg + "Looking for the initial state in the context")) + (fun + uu___4 -> + (fun + uu___4 -> + Obj.magic + (FStar_Tactics_Effect.tac_bind + (Prims.mk_range + "FStar.InteractiveHelpers.Effectful.fst" + (Prims.of_int (687)) + (Prims.of_int (19)) + (Prims.of_int (687)) + (Prims.of_int (54))) + (Prims.mk_range + "FStar.InteractiveHelpers.Effectful.fst" + (Prims.of_int (688)) + (Prims.of_int (6)) + (Prims.of_int (698)) + (Prims.of_int (76))) + (Obj.magic + (find_mem_in_related + dbg ge0 + parents)) + (fun + uu___5 -> + (fun + b1_opt -> + Obj.magic + (FStar_Tactics_Effect.tac_bind + (Prims.mk_range + "FStar.InteractiveHelpers.Effectful.fst" + (Prims.of_int (688)) + (Prims.of_int (6)) + (Prims.of_int (688)) + (Prims.of_int (64))) + (Prims.mk_range + "FStar.InteractiveHelpers.Effectful.fst" + (Prims.of_int (689)) + (Prims.of_int (6)) + (Prims.of_int (698)) + (Prims.of_int (76))) + (Obj.magic + (FStar_InteractiveHelpers_Base.print_dbg + dbg + "Looking for the final state in the context")) + (fun + uu___5 -> + (fun + uu___5 -> + Obj.magic + (FStar_Tactics_Effect.tac_bind + (Prims.mk_range + "FStar.InteractiveHelpers.Effectful.fst" + (Prims.of_int (689)) + (Prims.of_int (19)) + (Prims.of_int (689)) + (Prims.of_int (55))) + (Prims.mk_range + "FStar.InteractiveHelpers.Effectful.fst" + (Prims.of_int (691)) + (Prims.of_int (6)) + (Prims.of_int (698)) + (Prims.of_int (76))) + (Obj.magic + (find_mem_in_related + dbg ge0 + children)) + (fun + uu___6 -> + (fun + b2_opt -> + Obj.magic + (FStar_Tactics_Effect.tac_bind + (Prims.mk_range + "FStar.InteractiveHelpers.Effectful.fst" + (Prims.of_int (692)) + (Prims.of_int (8)) + (Prims.of_int (694)) + (Prims.of_int (59))) + (Prims.mk_range + "FStar.InteractiveHelpers.Effectful.fst" + (Prims.of_int (696)) + (Prims.of_int (6)) + (Prims.of_int (698)) + (Prims.of_int (76))) + (FStar_Tactics_Effect.lift_div_tac + (fun + uu___6 -> + fun + opt_bv -> + fun + basename + -> + fun ge -> + match opt_bv + with + | + FStar_Pervasives_Native.Some + bv -> + FStar_Tactics_Effect.tac_bind + (Prims.mk_range + "FStar.InteractiveHelpers.Effectful.fst" + (Prims.of_int (693)) + (Prims.of_int (21)) + (Prims.of_int (693)) + (Prims.of_int (37))) + (Prims.mk_range + "FStar.InteractiveHelpers.Effectful.fst" + (Prims.of_int (693)) + (Prims.of_int (21)) + (Prims.of_int (693)) + (Prims.of_int (55))) + (Obj.magic + (FStar_Tactics_Builtins.pack + (FStar_Reflection_Data.Tv_Var + bv))) + (fun + uu___7 -> + FStar_Tactics_Effect.lift_div_tac + (fun + uu___8 -> + (uu___7, + (FStar_Reflection_Derived.mk_binder + bv), ge))) + | + FStar_Pervasives_Native.None + -> + FStar_InteractiveHelpers_Base.genv_push_fresh_var + ge + basename + (FStar_Reflection_Builtins.pack_ln + (FStar_Reflection_Data.Tv_FVar + (FStar_Reflection_Builtins.pack_fv + ["FStar"; + "Monotonic"; + "HyperStack"; + "mem"]))))) + (fun + uu___6 -> + (fun + opt_push_fresh_state + -> + Obj.magic + (FStar_Tactics_Effect.tac_bind + (Prims.mk_range + "FStar.InteractiveHelpers.Effectful.fst" + (Prims.of_int (696)) + (Prims.of_int (24)) + (Prims.of_int (696)) + (Prims.of_int (63))) + (Prims.mk_range + "FStar.InteractiveHelpers.Effectful.fst" + (Prims.of_int (696)) + (Prims.of_int (6)) + (Prims.of_int (698)) + (Prims.of_int (76))) + (Obj.magic + (opt_push_fresh_state + b1_opt + "__h0_" + ge0)) + (fun + uu___6 -> + (fun + uu___6 -> + match uu___6 + with + | + (h1, b1, + ge1) -> + Obj.magic + (FStar_Tactics_Effect.tac_bind + (Prims.mk_range + "FStar.InteractiveHelpers.Effectful.fst" + (Prims.of_int (697)) + (Prims.of_int (24)) + (Prims.of_int (697)) + (Prims.of_int (63))) + (Prims.mk_range + "FStar.InteractiveHelpers.Effectful.fst" + (Prims.of_int (697)) + (Prims.of_int (6)) + (Prims.of_int (698)) + (Prims.of_int (76))) + (Obj.magic + (opt_push_fresh_state + b2_opt + "__h1_" + ge1)) + (fun + uu___7 -> + FStar_Tactics_Effect.lift_div_tac + (fun + uu___8 -> + match uu___7 + with + | + (h2, b2, + ge2) -> + (ge2, + ([h1], + [b1]), + ([h1; + v; + h2], + (FStar_List_Tot_Base.flatten + [ + [b1]; + brs; + [b2]]))))))) + uu___6))) + uu___6))) + uu___6))) + uu___5))) + uu___5))) + uu___4))) + uu___3)) + | + FStar_InteractiveHelpers_ExploreTerm.E_Unknown + -> + Obj.magic + (FStar_Tactics_Effect.tac_bind + (Prims.mk_range + "FStar.InteractiveHelpers.Effectful.fst" + (Prims.of_int (706)) + (Prims.of_int (20)) + (Prims.of_int (706)) + (Prims.of_int (84))) + (Prims.mk_range + "FStar.InteractiveHelpers.Effectful.fst" + (Prims.of_int (707)) + (Prims.of_int (12)) + (Prims.of_int (726)) + (Prims.of_int (31))) + (Obj.magic + (check_opt_pre_post_type + dbg + ge0.FStar_InteractiveHelpers_Base.env + opt_pre + ret_type.FStar_InteractiveHelpers_ExploreTerm.ty + opt_post)) + (fun + uu___3 -> + (fun + pp_type + -> + match pp_type + with + | + FStar_Pervasives_Native.Some + (PP_Pure) + -> + Obj.magic + (FStar_Tactics_Effect.tac_bind + (Prims.mk_range + "FStar.InteractiveHelpers.Effectful.fst" + (Prims.of_int (709)) + (Prims.of_int (8)) + (Prims.of_int (709)) + (Prims.of_int (31))) + (Prims.mk_range + "FStar.InteractiveHelpers.Effectful.fst" + (Prims.of_int (711)) + (Prims.of_int (8)) + (Prims.of_int (711)) + (Prims.of_int (33))) + (Obj.magic + (FStar_InteractiveHelpers_Base.print_dbg + dbg + "PP_Pure")) + (fun + uu___3 -> + FStar_Tactics_Effect.lift_div_tac + (fun + uu___4 -> + (ge0, + ([], []), + ([v], + brs))))) + | + FStar_Pervasives_Native.Some + (PP_State + state_type) + -> + Obj.magic + (FStar_Tactics_Effect.tac_bind + (Prims.mk_range + "FStar.InteractiveHelpers.Effectful.fst" + (Prims.of_int (713)) + (Prims.of_int (8)) + (Prims.of_int (713)) + (Prims.of_int (32))) + (Prims.mk_range + "FStar.InteractiveHelpers.Effectful.fst" + (Prims.of_int (715)) + (Prims.of_int (8)) + (Prims.of_int (716)) + (Prims.of_int (78))) + (Obj.magic + (FStar_InteractiveHelpers_Base.print_dbg + dbg + "PP_State")) + (fun + uu___3 -> + (fun + uu___3 -> + Obj.magic + (FStar_Tactics_Effect.tac_bind + (Prims.mk_range + "FStar.InteractiveHelpers.Effectful.fst" + (Prims.of_int (715)) + (Prims.of_int (34)) + (Prims.of_int (715)) + (Prims.of_int (79))) + (Prims.mk_range + "FStar.InteractiveHelpers.Effectful.fst" + (Prims.of_int (715)) + (Prims.of_int (8)) + (Prims.of_int (716)) + (Prims.of_int (78))) + (Obj.magic + (FStar_InteractiveHelpers_Base.genv_push_two_fresh_vars + ge0 "__s" + state_type)) + (fun + uu___4 -> + FStar_Tactics_Effect.lift_div_tac + (fun + uu___5 -> + match uu___4 + with + | + (s1, b1, + s2, b2, + ge1) -> + (ge1, + ([s1], + [b1]), + ([s1; + v; + s2], + (FStar_List_Tot_Base.flatten + [ + [b1]; + brs; + [b2]]))))))) + uu___3)) + | + FStar_Pervasives_Native.Some + (PP_Unknown) + -> + Obj.magic + (FStar_Tactics_Effect.tac_bind + (Prims.mk_range + "FStar.InteractiveHelpers.Effectful.fst" + (Prims.of_int (718)) + (Prims.of_int (8)) + (Prims.of_int (718)) + (Prims.of_int (34))) + (Prims.mk_range + "FStar.InteractiveHelpers.Effectful.fst" + (Prims.of_int (720)) + (Prims.of_int (8)) + (Prims.of_int (722)) + (Prims.of_int (67))) + (Obj.magic + (FStar_InteractiveHelpers_Base.print_dbg + dbg + "PP_Unknown")) + (fun + uu___3 -> + (fun + uu___3 -> + Obj.magic + (FStar_Tactics_Effect.tac_bind + (Prims.mk_range + "FStar.InteractiveHelpers.Effectful.fst" + (Prims.of_int (720)) + (Prims.of_int (43)) + (Prims.of_int (720)) + (Prims.of_int (86))) + (Prims.mk_range + "FStar.InteractiveHelpers.Effectful.fst" + (Prims.of_int (720)) + (Prims.of_int (8)) + (Prims.of_int (722)) + (Prims.of_int (67))) + (Obj.magic + (introduce_variables_for_opt_abs + ge0 + opt_pre)) + (fun + uu___4 -> + (fun + uu___4 -> + match uu___4 + with + | + (pre_values, + pre_binders, + ge1) -> + Obj.magic + (FStar_Tactics_Effect.tac_bind + (Prims.mk_range + "FStar.InteractiveHelpers.Effectful.fst" + (Prims.of_int (721)) + (Prims.of_int (45)) + (Prims.of_int (721)) + (Prims.of_int (89))) + (Prims.mk_range + "FStar.InteractiveHelpers.Effectful.fst" + (Prims.of_int (721)) + (Prims.of_int (8)) + (Prims.of_int (722)) + (Prims.of_int (67))) + (Obj.magic + (introduce_variables_for_opt_abs + ge1 + opt_post)) + (fun + uu___5 -> + FStar_Tactics_Effect.lift_div_tac + (fun + uu___6 -> + match uu___5 + with + | + (post_values, + post_binders, + ge11) -> + (ge11, + (pre_values, + pre_binders), + (post_values, + post_binders)))))) + uu___4))) + uu___3)) + | + uu___3 -> + Obj.magic + (FStar_Tactics_Effect.tac_bind + (Prims.mk_range + "FStar.InteractiveHelpers.Effectful.fst" + (Prims.of_int (724)) + (Prims.of_int (8)) + (Prims.of_int (724)) + (Prims.of_int (42))) + (Prims.mk_range + "FStar.InteractiveHelpers.Effectful.fst" + (Prims.of_int (726)) + (Prims.of_int (8)) + (Prims.of_int (726)) + (Prims.of_int (31))) + (Obj.magic + (FStar_InteractiveHelpers_Base.print_dbg + dbg + "No pre and no post")) + (fun + uu___4 -> + FStar_Tactics_Effect.lift_div_tac + (fun + uu___5 -> + (ge0, + ([], []), + ([], [])))))) + uu___3))) + ( + fun + uu___3 -> + (fun + uu___3 -> + match uu___3 + with + | + (ge3, + (pre_values, + pre_binders), + (post_values, + post_binders)) + -> + Obj.magic + (FStar_Tactics_Effect.tac_bind + (Prims.mk_range + "FStar.InteractiveHelpers.Effectful.fst" + (Prims.of_int (731)) + (Prims.of_int (17)) + (Prims.of_int (731)) + (Prims.of_int (59))) + (Prims.mk_range + "FStar.InteractiveHelpers.Effectful.fst" + (Prims.of_int (736)) + (Prims.of_int (2)) + (Prims.of_int (745)) + (Prims.of_int (26))) + (Obj.magic + (FStar_InteractiveHelpers_Base.opt_mk_app_norm + ge3.FStar_InteractiveHelpers_Base.env + opt_pre + pre_values)) + (fun + uu___4 -> + (fun + pre_prop + -> + Obj.magic + (FStar_Tactics_Effect.tac_bind + (Prims.mk_range + "FStar.InteractiveHelpers.Effectful.fst" + (Prims.of_int (737)) + (Prims.of_int (4)) + (Prims.of_int (741)) + (Prims.of_int (10))) + (Prims.mk_range + "FStar.InteractiveHelpers.Effectful.fst" + (Prims.of_int (744)) + (Prims.of_int (2)) + (Prims.of_int (745)) + (Prims.of_int (26))) + (Obj.magic + (FStar_Tactics_Derived.try_with + (fun + uu___4 -> + match () + with + | + () -> + FStar_InteractiveHelpers_Base.opt_mk_app_norm + ge3.FStar_InteractiveHelpers_Base.env + opt_post + post_values) + (fun + uu___4 -> + FStar_Tactics_Effect.tac_bind + (Prims.mk_range + "FStar.InteractiveHelpers.Effectful.fst" + (Prims.of_int (740)) + (Prims.of_int (6)) + (Prims.of_int (740)) + (Prims.of_int (75))) + (Prims.mk_range + "FStar.InteractiveHelpers.Effectful.fst" + (Prims.of_int (741)) + (Prims.of_int (6)) + (Prims.of_int (741)) + (Prims.of_int (10))) + (Obj.magic + (FStar_InteractiveHelpers_Base.print_dbg + dbg + "Dropping a postcondition because of incoherent typing")) + (fun + uu___5 -> + FStar_Tactics_Effect.lift_div_tac + (fun + uu___6 -> + FStar_Pervasives_Native.None))))) + (fun + uu___4 -> + (fun + post_prop + -> + Obj.magic + (FStar_Tactics_Effect.tac_bind + (Prims.mk_range + "FStar.InteractiveHelpers.Effectful.fst" + (Prims.of_int (744)) + (Prims.of_int (2)) + (Prims.of_int (744)) + (Prims.of_int (50))) + (Prims.mk_range + "FStar.InteractiveHelpers.Effectful.fst" + (Prims.of_int (745)) + (Prims.of_int (2)) + (Prims.of_int (745)) + (Prims.of_int (26))) + (Obj.magic + (FStar_InteractiveHelpers_Base.print_dbg + dbg + "[> pre_post_to_propositions: end")) + (fun + uu___4 -> + FStar_Tactics_Effect.lift_div_tac + (fun + uu___5 -> + (ge3, + pre_prop, + post_prop))))) + uu___4))) + uu___4))) + uu___3))) + uu___3))) + uu___2))) uu___1))) uu___) +let (eterm_info_to_assertions : + Prims.bool -> + Prims.bool -> + Prims.bool -> + FStar_InteractiveHelpers_Base.genv -> + FStar_Reflection_Types.term -> + Prims.bool -> + Prims.bool -> + eterm_info -> + FStar_Reflection_Types.term FStar_Pervasives_Native.option + -> + FStar_InteractiveHelpers_ExploreTerm.typ_or_comp + FStar_Pervasives_Native.option -> + FStar_Reflection_Data.term_view Prims.list -> + FStar_Reflection_Data.term_view Prims.list -> + ((FStar_InteractiveHelpers_Base.genv * + FStar_InteractiveHelpers_Propositions.assertions), + unit) FStar_Tactics_Effect.tac_repr) + = + fun dbg -> + fun with_gpre -> + fun with_gpost -> + fun ge -> + fun t -> + fun is_let -> + fun is_assert -> + fun info -> + fun bind_var -> + fun opt_c -> + fun parents -> + fun children -> + FStar_Tactics_Effect.tac_bind + (Prims.mk_range + "FStar.InteractiveHelpers.Effectful.fst" + (Prims.of_int (769)) (Prims.of_int (2)) + (Prims.of_int (769)) (Prims.of_int (45))) + (Prims.mk_range + "FStar.InteractiveHelpers.Effectful.fst" + (Prims.of_int (774)) (Prims.of_int (2)) + (Prims.of_int (965)) (Prims.of_int (7))) + (Obj.magic + (FStar_InteractiveHelpers_Base.print_dbg dbg + "[> eterm_info_to_assertions")) + (fun uu___ -> + (fun uu___ -> + Obj.magic + (FStar_Tactics_Effect.tac_bind + (Prims.mk_range + "FStar.InteractiveHelpers.Effectful.fst" + (Prims.of_int (774)) + (Prims.of_int (14)) + (Prims.of_int (774)) + (Prims.of_int (24))) + (Prims.mk_range + "FStar.InteractiveHelpers.Effectful.fst" + (Prims.of_int (775)) + (Prims.of_int (2)) + (Prims.of_int (965)) + (Prims.of_int (7))) + (FStar_Tactics_Effect.lift_div_tac + (fun uu___1 -> info.einfo)) + (fun uu___1 -> + (fun einfo -> + Obj.magic + (FStar_Tactics_Effect.tac_bind + (Prims.mk_range + "FStar.InteractiveHelpers.Effectful.fst" + (Prims.of_int (776)) + (Prims.of_int (4)) + (Prims.of_int (792)) + (Prims.of_int (22))) + (Prims.mk_range + "FStar.InteractiveHelpers.Effectful.fst" + (Prims.of_int (775)) + (Prims.of_int (2)) + (Prims.of_int (965)) + (Prims.of_int (7))) + (match bind_var with + | FStar_Pervasives_Native.Some + v -> + Obj.magic + (Obj.repr + (FStar_Tactics_Effect.lift_div_tac + (fun uu___1 -> + (ge, v, + FStar_Pervasives_Native.None)))) + | FStar_Pervasives_Native.None + -> + Obj.magic + (Obj.repr + (if + effect_type_is_stateful + einfo.ei_type + then + Obj.repr + (FStar_Tactics_Effect.tac_bind + ( + Prims.mk_range + "FStar.InteractiveHelpers.Effectful.fst" + (Prims.of_int (785)) + (Prims.of_int (11)) + (Prims.of_int (785)) + (Prims.of_int (44))) + ( + Prims.mk_range + "FStar.InteractiveHelpers.Effectful.fst" + (Prims.of_int (785)) + (Prims.of_int (8)) + (Prims.of_int (791)) + (Prims.of_int (53))) + ( + Obj.magic + (FStar_InteractiveHelpers_ExploreTerm.is_unit_type + (einfo.ei_ret_type).FStar_InteractiveHelpers_ExploreTerm.ty)) + ( + fun + uu___1 -> + (fun + uu___1 -> + if uu___1 + then + Obj.magic + (Obj.repr + (FStar_Tactics_Effect.lift_div_tac + (fun + uu___2 -> + (ge, + (FStar_Reflection_Builtins.pack_ln + (FStar_Reflection_Data.Tv_Const + FStar_Reflection_Data.C_Unit)), + FStar_Pervasives_Native.None)))) + else + Obj.magic + (Obj.repr + (FStar_Tactics_Effect.tac_bind + (Prims.mk_range + "FStar.InteractiveHelpers.Effectful.fst" + (Prims.of_int (788)) + (Prims.of_int (18)) + (Prims.of_int (788)) + (Prims.of_int (66))) + (Prims.mk_range + "FStar.InteractiveHelpers.Effectful.fst" + (Prims.of_int (789)) + (Prims.of_int (10)) + (Prims.of_int (791)) + (Prims.of_int (53))) + (Obj.magic + (FStar_InteractiveHelpers_Base.fresh_binder + ge.FStar_InteractiveHelpers_Base.env + "__ret" + (einfo.ei_ret_type).FStar_InteractiveHelpers_ExploreTerm.ty)) + (fun + uu___3 -> + (fun b -> + Obj.magic + (FStar_Tactics_Effect.tac_bind + (Prims.mk_range + "FStar.InteractiveHelpers.Effectful.fst" + (Prims.of_int (789)) + (Prims.of_int (19)) + (Prims.of_int (789)) + (Prims.of_int (33))) + (Prims.mk_range + "FStar.InteractiveHelpers.Effectful.fst" + (Prims.of_int (790)) + (Prims.of_int (10)) + (Prims.of_int (791)) + (Prims.of_int (53))) + (FStar_Tactics_Effect.lift_div_tac + (fun + uu___3 -> + FStar_Reflection_Derived.bv_of_binder + b)) + (fun + uu___3 -> + (fun bv + -> + Obj.magic + (FStar_Tactics_Effect.tac_bind + (Prims.mk_range + "FStar.InteractiveHelpers.Effectful.fst" + (Prims.of_int (790)) + (Prims.of_int (19)) + (Prims.of_int (790)) + (Prims.of_int (35))) + (Prims.mk_range + "FStar.InteractiveHelpers.Effectful.fst" + (Prims.of_int (791)) + (Prims.of_int (10)) + (Prims.of_int (791)) + (Prims.of_int (53))) + (Obj.magic + (FStar_Tactics_Builtins.pack + (FStar_Reflection_Data.Tv_Var + bv))) + (fun + uu___3 -> + (fun tm + -> + Obj.magic + (FStar_Tactics_Effect.tac_bind + (Prims.mk_range + "FStar.InteractiveHelpers.Effectful.fst" + (Prims.of_int (791)) + (Prims.of_int (10)) + (Prims.of_int (791)) + (Prims.of_int (41))) + (Prims.mk_range + "FStar.InteractiveHelpers.Effectful.fst" + (Prims.of_int (791)) + (Prims.of_int (10)) + (Prims.of_int (791)) + (Prims.of_int (53))) + (Obj.magic + (FStar_InteractiveHelpers_Base.genv_push_binder + ge b true + FStar_Pervasives_Native.None)) + (fun + uu___3 -> + FStar_Tactics_Effect.lift_div_tac + (fun + uu___4 -> + (uu___3, + tm, + (FStar_Pervasives_Native.Some + b)))))) + uu___3))) + uu___3))) + uu___3)))) + uu___1)) + else + Obj.repr + (FStar_Tactics_Effect.lift_div_tac + ( + fun + uu___2 -> + (ge, t, + FStar_Pervasives_Native.None)))))) + (fun uu___1 -> + (fun uu___1 -> + match uu___1 with + | (ge0, v, opt_b) -> + Obj.magic + (FStar_Tactics_Effect.tac_bind + (Prims.mk_range + "FStar.InteractiveHelpers.Effectful.fst" + (Prims.of_int (795)) + (Prims.of_int (7)) + (Prims.of_int (965)) + (Prims.of_int (7))) + (Prims.mk_range + "FStar.InteractiveHelpers.Effectful.fst" + (Prims.of_int (795)) + (Prims.of_int (7)) + (Prims.of_int (965)) + (Prims.of_int (7))) + (FStar_Tactics_Effect.lift_div_tac + ( + fun + uu___2 -> + v)) + (fun uu___2 + -> + (fun v1 + -> + Obj.magic + (FStar_Tactics_Effect.tac_bind + (Prims.mk_range + "FStar.InteractiveHelpers.Effectful.fst" + (Prims.of_int (795)) + (Prims.of_int (7)) + (Prims.of_int (795)) + (Prims.of_int (53))) + (Prims.mk_range + "FStar.InteractiveHelpers.Effectful.fst" + (Prims.of_int (796)) + (Prims.of_int (2)) + (Prims.of_int (965)) + (Prims.of_int (7))) + (Obj.magic + (FStar_InteractiveHelpers_Base.print_dbg + dbg + "> Instantiating local pre/post")) + (fun + uu___2 -> + (fun + uu___2 -> + Obj.magic + (FStar_Tactics_Effect.tac_bind + (Prims.mk_range + "FStar.InteractiveHelpers.Effectful.fst" + (Prims.of_int (797)) + (Prims.of_int (4)) + (Prims.of_int (798)) + (Prims.of_int (72))) + (Prims.mk_range + "FStar.InteractiveHelpers.Effectful.fst" + (Prims.of_int (796)) + (Prims.of_int (2)) + (Prims.of_int (965)) + (Prims.of_int (7))) + (Obj.magic + (pre_post_to_propositions + dbg ge0 + einfo.ei_type + v1 opt_b + einfo.ei_ret_type + einfo.ei_pre + einfo.ei_post + parents + children)) + (fun + uu___3 -> + (fun + uu___3 -> + match uu___3 + with + | + (ge1, + pre_prop, + post_prop) + -> + Obj.magic + (FStar_Tactics_Effect.tac_bind + (Prims.mk_range + "FStar.InteractiveHelpers.Effectful.fst" + (Prims.of_int (799)) + (Prims.of_int (2)) + (Prims.of_int (799)) + (Prims.of_int (75))) + (Prims.mk_range + "FStar.InteractiveHelpers.Effectful.fst" + (Prims.of_int (800)) + (Prims.of_int (2)) + (Prims.of_int (965)) + (Prims.of_int (7))) + (Obj.magic + (FStar_Tactics_Effect.tac_bind + (Prims.mk_range + "FStar.InteractiveHelpers.Effectful.fst" + (Prims.of_int (799)) + (Prims.of_int (16)) + (Prims.of_int (799)) + (Prims.of_int (75))) + (Prims.mk_range + "FStar.InteractiveHelpers.Effectful.fst" + (Prims.of_int (799)) + (Prims.of_int (2)) + (Prims.of_int (799)) + (Prims.of_int (75))) + (Obj.magic + (FStar_Tactics_Effect.tac_bind + (Prims.mk_range + "FStar.InteractiveHelpers.Effectful.fst" + (Prims.of_int (799)) + (Prims.of_int (34)) + (Prims.of_int (799)) + (Prims.of_int (74))) + (Prims.mk_range + "prims.fst" + (Prims.of_int (606)) + (Prims.of_int (19)) + (Prims.of_int (606)) + (Prims.of_int (31))) + (Obj.magic + (FStar_InteractiveHelpers_Base.option_to_string + FStar_Tactics_Builtins.term_to_string + pre_prop)) + (fun + uu___4 -> + FStar_Tactics_Effect.lift_div_tac + (fun + uu___5 -> + Prims.strcat + "- pre prop: " + uu___4)))) + (fun + uu___4 -> + (fun + uu___4 -> + Obj.magic + (FStar_InteractiveHelpers_Base.print_dbg + dbg + uu___4)) + uu___4))) + (fun + uu___4 -> + (fun + uu___4 -> + Obj.magic + (FStar_Tactics_Effect.tac_bind + (Prims.mk_range + "FStar.InteractiveHelpers.Effectful.fst" + (Prims.of_int (800)) + (Prims.of_int (2)) + (Prims.of_int (800)) + (Prims.of_int (77))) + (Prims.mk_range + "FStar.InteractiveHelpers.Effectful.fst" + (Prims.of_int (804)) + (Prims.of_int (2)) + (Prims.of_int (965)) + (Prims.of_int (7))) + (Obj.magic + (FStar_Tactics_Effect.tac_bind + (Prims.mk_range + "FStar.InteractiveHelpers.Effectful.fst" + (Prims.of_int (800)) + (Prims.of_int (16)) + (Prims.of_int (800)) + (Prims.of_int (77))) + (Prims.mk_range + "FStar.InteractiveHelpers.Effectful.fst" + (Prims.of_int (800)) + (Prims.of_int (2)) + (Prims.of_int (800)) + (Prims.of_int (77))) + (Obj.magic + (FStar_Tactics_Effect.tac_bind + (Prims.mk_range + "FStar.InteractiveHelpers.Effectful.fst" + (Prims.of_int (800)) + (Prims.of_int (35)) + (Prims.of_int (800)) + (Prims.of_int (76))) + (Prims.mk_range + "prims.fst" + (Prims.of_int (606)) + (Prims.of_int (19)) + (Prims.of_int (606)) + (Prims.of_int (31))) + (Obj.magic + (FStar_InteractiveHelpers_Base.option_to_string + FStar_Tactics_Builtins.term_to_string + post_prop)) + (fun + uu___5 -> + FStar_Tactics_Effect.lift_div_tac + (fun + uu___6 -> + Prims.strcat + "- post prop: " + uu___5)))) + (fun + uu___5 -> + (fun + uu___5 -> + Obj.magic + (FStar_InteractiveHelpers_Base.print_dbg + dbg + uu___5)) + uu___5))) + (fun + uu___5 -> + (fun + uu___5 -> + if + is_assert + then + Obj.magic + (FStar_Tactics_Effect.tac_bind + (Prims.mk_range + "FStar.InteractiveHelpers.Effectful.fst" + (Prims.of_int (806)) + (Prims.of_int (4)) + (Prims.of_int (806)) + (Prims.of_int (70))) + (Prims.mk_range + "FStar.InteractiveHelpers.Effectful.fst" + (Prims.of_int (807)) + (Prims.of_int (4)) + (Prims.of_int (807)) + (Prims.of_int (53))) + (Obj.magic + (FStar_InteractiveHelpers_Base.print_dbg + dbg + "The term is an assert: only keep the postcondition")) + (fun + uu___6 -> + FStar_Tactics_Effect.lift_div_tac + (fun + uu___7 -> + (ge1, + { + FStar_InteractiveHelpers_Propositions.pres + = + (FStar_InteractiveHelpers_Base.opt_cons + post_prop + []); + FStar_InteractiveHelpers_Propositions.posts + = [] + })))) + else + Obj.magic + (FStar_Tactics_Effect.tac_bind + (Prims.mk_range + "FStar.InteractiveHelpers.Effectful.fst" + (Prims.of_int (815)) + (Prims.of_int (6)) + (Prims.of_int (938)) + (Prims.of_int (18))) + (Prims.mk_range + "FStar.InteractiveHelpers.Effectful.fst" + (Prims.of_int (811)) + (Prims.of_int (4)) + (Prims.of_int (964)) + (Prims.of_int (39))) + (Obj.magic + (FStar_Tactics_Effect.tac_bind + (Prims.mk_range + "FStar.InteractiveHelpers.Effectful.fst" + (Prims.of_int (815)) + (Prims.of_int (29)) + (Prims.of_int (815)) + (Prims.of_int (70))) + (Prims.mk_range + "FStar.InteractiveHelpers.Effectful.fst" + (Prims.of_int (816)) + (Prims.of_int (12)) + (Prims.of_int (937)) + (Prims.of_int (31))) + (FStar_Tactics_Effect.lift_div_tac + (fun + uu___7 -> + with_gpre + || + ((Prims.op_Negation + is_let) + && + with_gpost))) + (fun + uu___7 -> + (fun + with_goal + -> + match + (opt_c, + with_goal) + with + | + (FStar_Pervasives_Native.Some + c, true) + -> + Obj.magic + (Obj.repr + (FStar_Tactics_Effect.tac_bind + (Prims.mk_range + "FStar.InteractiveHelpers.Effectful.fst" + (Prims.of_int (818)) + (Prims.of_int (17)) + (Prims.of_int (818)) + (Prims.of_int (53))) + (Prims.mk_range + "FStar.InteractiveHelpers.Effectful.fst" + (Prims.of_int (819)) + (Prims.of_int (8)) + (Prims.of_int (935)) + (Prims.of_int (62))) + (Obj.magic + (typ_or_comp_to_effect_info + dbg ge1 c)) + (fun + uu___7 -> + (fun ei + -> + Obj.magic + (FStar_Tactics_Effect.tac_bind + (Prims.mk_range + "FStar.InteractiveHelpers.Effectful.fst" + (Prims.of_int (819)) + (Prims.of_int (8)) + (Prims.of_int (819)) + (Prims.of_int (70))) + (Prims.mk_range + "FStar.InteractiveHelpers.Effectful.fst" + (Prims.of_int (820)) + (Prims.of_int (8)) + (Prims.of_int (935)) + (Prims.of_int (62))) + (Obj.magic + (FStar_Tactics_Effect.tac_bind + (Prims.mk_range + "FStar.InteractiveHelpers.Effectful.fst" + (Prims.of_int (819)) + (Prims.of_int (22)) + (Prims.of_int (819)) + (Prims.of_int (70))) + (Prims.mk_range + "FStar.InteractiveHelpers.Effectful.fst" + (Prims.of_int (819)) + (Prims.of_int (8)) + (Prims.of_int (819)) + (Prims.of_int (70))) + (Obj.magic + (FStar_Tactics_Effect.tac_bind + (Prims.mk_range + "FStar.InteractiveHelpers.Effectful.fst" + (Prims.of_int (819)) + (Prims.of_int (45)) + (Prims.of_int (819)) + (Prims.of_int (69))) + (Prims.mk_range + "prims.fst" + (Prims.of_int (606)) + (Prims.of_int (19)) + (Prims.of_int (606)) + (Prims.of_int (31))) + (Obj.magic + (effect_info_to_string + ei)) + (fun + uu___7 -> + FStar_Tactics_Effect.lift_div_tac + (fun + uu___8 -> + Prims.strcat + "- target effect: " + uu___7)))) + (fun + uu___7 -> + (fun + uu___7 -> + Obj.magic + (FStar_InteractiveHelpers_Base.print_dbg + dbg + uu___7)) + uu___7))) + (fun + uu___7 -> + (fun + uu___7 -> + Obj.magic + (FStar_Tactics_Effect.tac_bind + (Prims.mk_range + "FStar.InteractiveHelpers.Effectful.fst" + (Prims.of_int (820)) + (Prims.of_int (8)) + (Prims.of_int (820)) + (Prims.of_int (92))) + (Prims.mk_range + "FStar.InteractiveHelpers.Effectful.fst" + (Prims.of_int (821)) + (Prims.of_int (8)) + (Prims.of_int (935)) + (Prims.of_int (62))) + (Obj.magic + (FStar_Tactics_Effect.tac_bind + (Prims.mk_range + "FStar.InteractiveHelpers.Effectful.fst" + (Prims.of_int (820)) + (Prims.of_int (22)) + (Prims.of_int (820)) + (Prims.of_int (92))) + (Prims.mk_range + "FStar.InteractiveHelpers.Effectful.fst" + (Prims.of_int (820)) + (Prims.of_int (8)) + (Prims.of_int (820)) + (Prims.of_int (92))) + (Obj.magic + (FStar_Tactics_Effect.tac_bind + (Prims.mk_range + "FStar.InteractiveHelpers.Effectful.fst" + (Prims.of_int (820)) + (Prims.of_int (50)) + (Prims.of_int (820)) + (Prims.of_int (91))) + (Prims.mk_range + "prims.fst" + (Prims.of_int (606)) + (Prims.of_int (19)) + (Prims.of_int (606)) + (Prims.of_int (31))) + (Obj.magic + (FStar_InteractiveHelpers_Base.option_to_string + FStar_Tactics_Builtins.term_to_string + ei.ei_pre)) + (fun + uu___8 -> + FStar_Tactics_Effect.lift_div_tac + (fun + uu___9 -> + Prims.strcat + "- global unfilt. pre: " + uu___8)))) + (fun + uu___8 -> + (fun + uu___8 -> + Obj.magic + (FStar_InteractiveHelpers_Base.print_dbg + dbg + uu___8)) + uu___8))) + (fun + uu___8 -> + (fun + uu___8 -> + Obj.magic + (FStar_Tactics_Effect.tac_bind + (Prims.mk_range + "FStar.InteractiveHelpers.Effectful.fst" + (Prims.of_int (821)) + (Prims.of_int (8)) + (Prims.of_int (821)) + (Prims.of_int (94))) + (Prims.mk_range + "FStar.InteractiveHelpers.Effectful.fst" + (Prims.of_int (824)) + (Prims.of_int (8)) + (Prims.of_int (935)) + (Prims.of_int (62))) + (Obj.magic + (FStar_Tactics_Effect.tac_bind + (Prims.mk_range + "FStar.InteractiveHelpers.Effectful.fst" + (Prims.of_int (821)) + (Prims.of_int (22)) + (Prims.of_int (821)) + (Prims.of_int (94))) + (Prims.mk_range + "FStar.InteractiveHelpers.Effectful.fst" + (Prims.of_int (821)) + (Prims.of_int (8)) + (Prims.of_int (821)) + (Prims.of_int (94))) + (Obj.magic + (FStar_Tactics_Effect.tac_bind + (Prims.mk_range + "FStar.InteractiveHelpers.Effectful.fst" + (Prims.of_int (821)) + (Prims.of_int (51)) + (Prims.of_int (821)) + (Prims.of_int (93))) + (Prims.mk_range + "prims.fst" + (Prims.of_int (606)) + (Prims.of_int (19)) + (Prims.of_int (606)) + (Prims.of_int (31))) + (Obj.magic + (FStar_InteractiveHelpers_Base.option_to_string + FStar_Tactics_Builtins.term_to_string + ei.ei_post)) + (fun + uu___9 -> + FStar_Tactics_Effect.lift_div_tac + (fun + uu___10 + -> + Prims.strcat + "- global unfilt. post: " + uu___9)))) + (fun + uu___9 -> + (fun + uu___9 -> + Obj.magic + (FStar_InteractiveHelpers_Base.print_dbg + dbg + uu___9)) + uu___9))) + (fun + uu___9 -> + (fun + uu___9 -> + Obj.magic + (FStar_Tactics_Effect.tac_bind + (Prims.mk_range + "FStar.InteractiveHelpers.Effectful.fst" + (Prims.of_int (825)) + (Prims.of_int (10)) + (Prims.of_int (867)) + (Prims.of_int (32))) + (Prims.mk_range + "FStar.InteractiveHelpers.Effectful.fst" + (Prims.of_int (872)) + (Prims.of_int (8)) + (Prims.of_int (935)) + (Prims.of_int (62))) + (if + with_gpre + then + Obj.magic + (FStar_Tactics_Effect.tac_bind + (Prims.mk_range + "FStar.InteractiveHelpers.Effectful.fst" + (Prims.of_int (828)) + (Prims.of_int (12)) + (Prims.of_int (828)) + (Prims.of_int (83))) + (Prims.mk_range + "FStar.InteractiveHelpers.Effectful.fst" + (Prims.of_int (829)) + (Prims.of_int (12)) + (Prims.of_int (860)) + (Prims.of_int (34))) + (Obj.magic + (FStar_InteractiveHelpers_Base.print_dbg + dbg + "Generating assertions from the global parameters' types")) + (fun + uu___10 + -> + (fun + uu___10 + -> + Obj.magic + (FStar_Tactics_Effect.tac_bind + (Prims.mk_range + "FStar.InteractiveHelpers.Effectful.fst" + (Prims.of_int (829)) + (Prims.of_int (12)) + (Prims.of_int (829)) + (Prims.of_int (66))) + (Prims.mk_range + "FStar.InteractiveHelpers.Effectful.fst" + (Prims.of_int (833)) + (Prims.of_int (12)) + (Prims.of_int (860)) + (Prims.of_int (34))) + (Obj.magic + (FStar_Tactics_Effect.tac_bind + (Prims.mk_range + "FStar.InteractiveHelpers.Effectful.fst" + (Prims.of_int (829)) + (Prims.of_int (26)) + (Prims.of_int (829)) + (Prims.of_int (66))) + (Prims.mk_range + "FStar.InteractiveHelpers.Effectful.fst" + (Prims.of_int (829)) + (Prims.of_int (12)) + (Prims.of_int (829)) + (Prims.of_int (66))) + (Obj.magic + (FStar_Tactics_Effect.tac_bind + (Prims.mk_range + "FStar.InteractiveHelpers.Effectful.fst" + (Prims.of_int (829)) + (Prims.of_int (47)) + (Prims.of_int (829)) + (Prims.of_int (65))) + (Prims.mk_range + "prims.fst" + (Prims.of_int (606)) + (Prims.of_int (19)) + (Prims.of_int (606)) + (Prims.of_int (31))) + (Obj.magic + (FStar_InteractiveHelpers_Base.genv_to_string + ge1)) + (fun + uu___11 + -> + FStar_Tactics_Effect.lift_div_tac + (fun + uu___12 + -> + Prims.strcat + "Current genv:\n" + uu___11)))) + (fun + uu___11 + -> + (fun + uu___11 + -> + Obj.magic + (FStar_InteractiveHelpers_Base.print_dbg + dbg + uu___11)) + uu___11))) + (fun + uu___11 + -> + (fun + uu___11 + -> + Obj.magic + (FStar_Tactics_Effect.tac_bind + (Prims.mk_range + "FStar.InteractiveHelpers.Effectful.fst" + (Prims.of_int (834)) + (Prims.of_int (14)) + (Prims.of_int (834)) + (Prims.of_int (91))) + (Prims.mk_range + "FStar.InteractiveHelpers.Effectful.fst" + (Prims.of_int (835)) + (Prims.of_int (12)) + (Prims.of_int (860)) + (Prims.of_int (34))) + (FStar_Tactics_Effect.lift_div_tac + (fun + uu___12 + -> + FStar_List_Tot_Base.rev + (FStar_List_Tot_Base.map + (fun x -> + (x, + (FStar_Reflection_Derived.type_of_binder + x))) + (FStar_InteractiveHelpers_ExploreTerm.params_of_typ_or_comp + c)))) + (fun + uu___12 + -> + (fun + params -> + Obj.magic + (FStar_Tactics_Effect.tac_bind + (Prims.mk_range + "FStar.InteractiveHelpers.Effectful.fst" + (Prims.of_int (835)) + (Prims.of_int (12)) + (Prims.of_int (836)) + (Prims.of_int (74))) + (Prims.mk_range + "FStar.InteractiveHelpers.Effectful.fst" + (Prims.of_int (838)) + (Prims.of_int (12)) + (Prims.of_int (860)) + (Prims.of_int (34))) + (Obj.magic + (FStar_Tactics_Util.iteri + (fun i -> + fun + uu___12 + -> + match uu___12 + with + | + (b, + uu___13) + -> + FStar_InteractiveHelpers_Base.print_dbg + dbg + (Prims.strcat + "Global parameter " + (Prims.strcat + (Prims.string_of_int + i) + (Prims.strcat + ": " + (FStar_Reflection_Derived.binder_to_string + b))))) + params)) + (fun + uu___12 + -> + (fun + uu___12 + -> + Obj.magic + (FStar_Tactics_Effect.tac_bind + (Prims.mk_range + "FStar.InteractiveHelpers.Effectful.fst" + (Prims.of_int (838)) + (Prims.of_int (25)) + (Prims.of_int (838)) + (Prims.of_int (84))) + (Prims.mk_range + "FStar.InteractiveHelpers.Effectful.fst" + (Prims.of_int (840)) + (Prims.of_int (12)) + (Prims.of_int (860)) + (Prims.of_int (34))) + (Obj.magic + (FStar_Tactics_Util.filter + (fun + uu___13 + -> + (fun + uu___13 + -> + Obj.magic + (FStar_Tactics_Effect.lift_div_tac + (fun + uu___14 + -> + match uu___13 + with + | + (b, + uu___15) + -> + Prims.op_Negation + (FStar_InteractiveHelpers_Base.binder_is_shadowed + ge1 b)))) + uu___13) + params)) + (fun + uu___13 + -> + (fun + params1 + -> + Obj.magic + (FStar_Tactics_Effect.tac_bind + (Prims.mk_range + "FStar.InteractiveHelpers.Effectful.fst" + (Prims.of_int (841)) + (Prims.of_int (14)) + (Prims.of_int (857)) + (Prims.of_int (22))) + (Prims.mk_range + "FStar.InteractiveHelpers.Effectful.fst" + (Prims.of_int (859)) + (Prims.of_int (12)) + (Prims.of_int (860)) + (Prims.of_int (34))) + (FStar_Tactics_Effect.lift_div_tac + (fun + uu___13 + -> + fun x -> + FStar_Tactics_Effect.tac_bind + (Prims.mk_range + "FStar.InteractiveHelpers.Effectful.fst" + (Prims.of_int (841)) + (Prims.of_int (26)) + (Prims.of_int (841)) + (Prims.of_int (27))) + (Prims.mk_range + "FStar.InteractiveHelpers.Effectful.fst" + (Prims.of_int (841)) + (Prims.of_int (14)) + (Prims.of_int (857)) + (Prims.of_int (22))) + (FStar_Tactics_Effect.lift_div_tac + (fun + uu___14 + -> x)) + (fun + uu___14 + -> + (fun + uu___14 + -> + match uu___14 + with + | + (b, ty) + -> + Obj.magic + (FStar_Tactics_Effect.tac_bind + (Prims.mk_range + "FStar.InteractiveHelpers.Effectful.fst" + (Prims.of_int (842)) + (Prims.of_int (23)) + (Prims.of_int (842)) + (Prims.of_int (37))) + (Prims.mk_range + "FStar.InteractiveHelpers.Effectful.fst" + (Prims.of_int (843)) + (Prims.of_int (14)) + (Prims.of_int (857)) + (Prims.of_int (22))) + (FStar_Tactics_Effect.lift_div_tac + (fun + uu___15 + -> + FStar_Reflection_Derived.bv_of_binder + b)) + (fun + uu___15 + -> + (fun bv + -> + Obj.magic + (FStar_Tactics_Effect.tac_bind + (Prims.mk_range + "FStar.InteractiveHelpers.Effectful.fst" + (Prims.of_int (843)) + (Prims.of_int (14)) + (Prims.of_int (843)) + (Prims.of_int (98))) + (Prims.mk_range + "FStar.InteractiveHelpers.Effectful.fst" + (Prims.of_int (844)) + (Prims.of_int (14)) + (Prims.of_int (857)) + (Prims.of_int (22))) + (Obj.magic + (FStar_InteractiveHelpers_Base.print_dbg + dbg + (Prims.strcat + "Generating assertions from global parameter: " + (FStar_Reflection_Derived.binder_to_string + b)))) + (fun + uu___15 + -> + (fun + uu___15 + -> + Obj.magic + (FStar_Tactics_Effect.tac_bind + (Prims.mk_range + "FStar.InteractiveHelpers.Effectful.fst" + (Prims.of_int (844)) + (Prims.of_int (26)) + (Prims.of_int (844)) + (Prims.of_int (52))) + (Prims.mk_range + "FStar.InteractiveHelpers.Effectful.fst" + (Prims.of_int (845)) + (Prims.of_int (14)) + (Prims.of_int (857)) + (Prims.of_int (22))) + (Obj.magic + (FStar_InteractiveHelpers_ExploreTerm.get_type_info_from_type + ty)) + (fun + uu___16 + -> + (fun + tinfo -> + Obj.magic + (FStar_Tactics_Effect.tac_bind + (Prims.mk_range + "FStar.InteractiveHelpers.Effectful.fst" + (Prims.of_int (845)) + (Prims.of_int (22)) + (Prims.of_int (845)) + (Prims.of_int (38))) + (Prims.mk_range + "FStar.InteractiveHelpers.Effectful.fst" + (Prims.of_int (846)) + (Prims.of_int (14)) + (Prims.of_int (857)) + (Prims.of_int (22))) + (Obj.magic + (FStar_Tactics_Builtins.pack + (FStar_Reflection_Data.Tv_Var + bv))) + (fun + uu___16 + -> + (fun v2 + -> + Obj.magic + (FStar_Tactics_Effect.tac_bind + (Prims.mk_range + "FStar.InteractiveHelpers.Effectful.fst" + (Prims.of_int (846)) + (Prims.of_int (23)) + (Prims.of_int (846)) + (Prims.of_int (45))) + (Prims.mk_range + "FStar.InteractiveHelpers.Effectful.fst" + (Prims.of_int (847)) + (Prims.of_int (14)) + (Prims.of_int (857)) + (Prims.of_int (22))) + (Obj.magic + (mk_has_type + v2 + tinfo.FStar_InteractiveHelpers_ExploreTerm.ty)) + (fun + uu___16 + -> + (fun p1 + -> + Obj.magic + (FStar_Tactics_Effect.tac_bind + (Prims.mk_range + "FStar.InteractiveHelpers.Effectful.fst" + (Prims.of_int (847)) + (Prims.of_int (23)) + (Prims.of_int (855)) + (Prims.of_int (76))) + (Prims.mk_range + "FStar.InteractiveHelpers.Effectful.fst" + (Prims.of_int (857)) + (Prims.of_int (17)) + (Prims.of_int (857)) + (Prims.of_int (19))) + (match + tinfo.FStar_InteractiveHelpers_ExploreTerm.refin + with + | + FStar_Pervasives_Native.None + -> + Obj.magic + (Obj.repr + (FStar_Tactics_Effect.lift_div_tac + (fun + uu___16 + -> []))) + | + FStar_Pervasives_Native.Some + r -> + Obj.magic + (Obj.repr + (FStar_Tactics_Effect.tac_bind + (Prims.mk_range + "FStar.InteractiveHelpers.Effectful.fst" + (Prims.of_int (850)) + (Prims.of_int (25)) + (Prims.of_int (850)) + (Prims.of_int (50))) + (Prims.mk_range + "FStar.InteractiveHelpers.Effectful.fst" + (Prims.of_int (853)) + (Prims.of_int (16)) + (Prims.of_int (855)) + (Prims.of_int (76))) + (Obj.magic + (FStar_InteractiveHelpers_Base.mk_app_norm + ge1.FStar_InteractiveHelpers_Base.env + r [v2])) + (fun + uu___16 + -> + (fun p2 + -> + Obj.magic + (FStar_Tactics_Effect.tac_bind + (Prims.mk_range + "FStar.InteractiveHelpers.Effectful.fst" + (Prims.of_int (853)) + (Prims.of_int (19)) + (Prims.of_int (853)) + (Prims.of_int (53))) + (Prims.mk_range + "FStar.InteractiveHelpers.Effectful.fst" + (Prims.of_int (853)) + (Prims.of_int (16)) + (Prims.of_int (855)) + (Prims.of_int (76))) + (Obj.magic + (FStar_InteractiveHelpers_ExploreTerm.term_has_shadowed_variables + ge1 p2)) + (fun + uu___16 + -> + (fun + uu___16 + -> + if + uu___16 + then + Obj.magic + (FStar_Tactics_Effect.tac_bind + (Prims.mk_range + "FStar.InteractiveHelpers.Effectful.fst" + (Prims.of_int (854)) + (Prims.of_int (27)) + (Prims.of_int (854)) + (Prims.of_int (99))) + (Prims.mk_range + "FStar.InteractiveHelpers.Effectful.fst" + (Prims.of_int (854)) + (Prims.of_int (101)) + (Prims.of_int (854)) + (Prims.of_int (103))) + (Obj.magic + (FStar_InteractiveHelpers_Base.print_dbg + dbg + "Discarding type refinement because of shadowed variables")) + (fun + uu___17 + -> + FStar_Tactics_Effect.lift_div_tac + (fun + uu___18 + -> []))) + else + Obj.magic + (FStar_Tactics_Effect.tac_bind + (Prims.mk_range + "FStar.InteractiveHelpers.Effectful.fst" + (Prims.of_int (855)) + (Prims.of_int (27)) + (Prims.of_int (855)) + (Prims.of_int (66))) + (Prims.mk_range + "FStar.InteractiveHelpers.Effectful.fst" + (Prims.of_int (855)) + (Prims.of_int (68)) + (Prims.of_int (855)) + (Prims.of_int (72))) + (Obj.magic + (FStar_InteractiveHelpers_Base.print_dbg + dbg + "Keeping type refinement")) + (fun + uu___18 + -> + FStar_Tactics_Effect.lift_div_tac + (fun + uu___19 + -> [p2])))) + uu___16))) + uu___16)))) + (fun pl + -> + FStar_Tactics_Effect.lift_div_tac + (fun + uu___16 + -> p1 :: + pl)))) + uu___16))) + uu___16))) + uu___16))) + uu___15))) + uu___15))) + uu___14))) + (fun + uu___13 + -> + (fun + param_to_props + -> + Obj.magic + (FStar_Tactics_Effect.tac_bind + (Prims.mk_range + "FStar.InteractiveHelpers.Effectful.fst" + (Prims.of_int (859)) + (Prims.of_int (24)) + (Prims.of_int (859)) + (Prims.of_int (49))) + (Prims.mk_range + "FStar.InteractiveHelpers.Effectful.fst" + (Prims.of_int (860)) + (Prims.of_int (12)) + (Prims.of_int (860)) + (Prims.of_int (34))) + (Obj.magic + (FStar_Tactics_Util.map + param_to_props + params1)) + (fun + props -> + FStar_Tactics_Effect.lift_div_tac + (fun + uu___13 + -> + FStar_List_Tot_Base.flatten + props)))) + uu___13))) + uu___13))) + uu___12))) + uu___12))) + uu___11))) + uu___10)) + else + Obj.magic + (FStar_Tactics_Effect.tac_bind + (Prims.mk_range + "FStar.InteractiveHelpers.Effectful.fst" + (Prims.of_int (864)) + (Prims.of_int (12)) + (Prims.of_int (864)) + (Prims.of_int (65))) + (Prims.mk_range + "FStar.InteractiveHelpers.Effectful.fst" + (Prims.of_int (865)) + (Prims.of_int (12)) + (Prims.of_int (865)) + (Prims.of_int (14))) + (Obj.magic + (FStar_InteractiveHelpers_Base.print_dbg + dbg + "Ignoring the global parameters' types")) + (fun + uu___11 + -> + FStar_Tactics_Effect.lift_div_tac + (fun + uu___12 + -> [])))) + (fun + uu___10 + -> + (fun + gparams_props + -> + Obj.magic + (FStar_Tactics_Effect.tac_bind + (Prims.mk_range + "FStar.InteractiveHelpers.Effectful.fst" + (Prims.of_int (873)) + (Prims.of_int (10)) + (Prims.of_int (881)) + (Prims.of_int (21))) + (Prims.mk_range + "FStar.InteractiveHelpers.Effectful.fst" + (Prims.of_int (885)) + (Prims.of_int (8)) + (Prims.of_int (935)) + (Prims.of_int (62))) + (match + ((ei.ei_pre), + with_gpre) + with + | + (FStar_Pervasives_Native.Some + pre, + true) -> + Obj.magic + (Obj.repr + (FStar_Tactics_Effect.tac_bind + (Prims.mk_range + "FStar.InteractiveHelpers.Effectful.fst" + (Prims.of_int (875)) + (Prims.of_int (15)) + (Prims.of_int (875)) + (Prims.of_int (50))) + (Prims.mk_range + "FStar.InteractiveHelpers.Effectful.fst" + (Prims.of_int (875)) + (Prims.of_int (12)) + (Prims.of_int (880)) + (Prims.of_int (26))) + (Obj.magic + (FStar_InteractiveHelpers_ExploreTerm.term_has_shadowed_variables + ge1 pre)) + (fun + uu___10 + -> + (fun + uu___10 + -> + if + uu___10 + then + Obj.magic + (Obj.repr + (FStar_Tactics_Effect.tac_bind + (Prims.mk_range + "FStar.InteractiveHelpers.Effectful.fst" + (Prims.of_int (877)) + (Prims.of_int (14)) + (Prims.of_int (877)) + (Prims.of_int (92))) + (Prims.mk_range + "FStar.InteractiveHelpers.Effectful.fst" + (Prims.of_int (878)) + (Prims.of_int (14)) + (Prims.of_int (878)) + (Prims.of_int (18))) + (Obj.magic + (FStar_InteractiveHelpers_Base.print_dbg + dbg + "Dropping the global precondition because of shadowed variables")) + (fun + uu___11 + -> + FStar_Tactics_Effect.lift_div_tac + (fun + uu___12 + -> + FStar_Pervasives_Native.None)))) + else + Obj.magic + (Obj.repr + (FStar_Tactics_Effect.lift_div_tac + (fun + uu___12 + -> + ei.ei_pre)))) + uu___10))) + | + uu___10 + -> + Obj.magic + (Obj.repr + (FStar_Tactics_Effect.lift_div_tac + (fun + uu___11 + -> + FStar_Pervasives_Native.None)))) + (fun + uu___10 + -> + (fun gpre + -> + Obj.magic + (FStar_Tactics_Effect.tac_bind + (Prims.mk_range + "FStar.InteractiveHelpers.Effectful.fst" + (Prims.of_int (886)) + (Prims.of_int (10)) + (Prims.of_int (913)) + (Prims.of_int (22))) + (Prims.mk_range + "FStar.InteractiveHelpers.Effectful.fst" + (Prims.of_int (885)) + (Prims.of_int (8)) + (Prims.of_int (935)) + (Prims.of_int (62))) + (if + Prims.op_Negation + with_gpost + then + Obj.magic + (Obj.repr + (FStar_Tactics_Effect.lift_div_tac + (fun + uu___10 + -> + (FStar_Pervasives_Native.None, + [])))) + else + Obj.magic + (Obj.repr + (if + is_let + then + FStar_Tactics_Effect.tac_bind + (Prims.mk_range + "FStar.InteractiveHelpers.Effectful.fst" + (Prims.of_int (889)) + (Prims.of_int (12)) + (Prims.of_int (889)) + (Prims.of_int (118))) + (Prims.mk_range + "FStar.InteractiveHelpers.Effectful.fst" + (Prims.of_int (890)) + (Prims.of_int (12)) + (Prims.of_int (890)) + (Prims.of_int (20))) + (Obj.magic + (FStar_InteractiveHelpers_Base.print_dbg + dbg + "Dropping the global postcondition and return type because we are studying a let expression")) + (fun + uu___11 + -> + FStar_Tactics_Effect.lift_div_tac + (fun + uu___12 + -> + (FStar_Pervasives_Native.None, + []))) + else + FStar_Tactics_Derived.try_with + (fun + uu___12 + -> + match () + with + | + () -> + FStar_Tactics_Effect.tac_bind + (Prims.mk_range + "FStar.InteractiveHelpers.Effectful.fst" + (Prims.of_int (901)) + (Prims.of_int (14)) + (Prims.of_int (901)) + (Prims.of_int (81))) + (Prims.mk_range + "FStar.InteractiveHelpers.Effectful.fst" + (Prims.of_int (902)) + (Prims.of_int (14)) + (Prims.of_int (909)) + (Prims.of_int (50))) + (Obj.magic + (FStar_InteractiveHelpers_Base.print_dbg + dbg + "> Generating propositions from the global type cast")) + (fun + uu___13 + -> + (fun + uu___13 + -> + Obj.magic + (FStar_Tactics_Effect.tac_bind + (Prims.mk_range + "FStar.InteractiveHelpers.Effectful.fst" + (Prims.of_int (902)) + (Prims.of_int (14)) + (Prims.of_int (902)) + (Prims.of_int (86))) + (Prims.mk_range + "FStar.InteractiveHelpers.Effectful.fst" + (Prims.of_int (903)) + (Prims.of_int (14)) + (Prims.of_int (909)) + (Prims.of_int (50))) + (Obj.magic + (FStar_Tactics_Effect.tac_bind + (Prims.mk_range + "FStar.InteractiveHelpers.Effectful.fst" + (Prims.of_int (902)) + (Prims.of_int (28)) + (Prims.of_int (902)) + (Prims.of_int (86))) + (Prims.mk_range + "FStar.InteractiveHelpers.Effectful.fst" + (Prims.of_int (902)) + (Prims.of_int (14)) + (Prims.of_int (902)) + (Prims.of_int (86))) + (Obj.magic + (FStar_Tactics_Effect.tac_bind + (Prims.mk_range + "FStar.InteractiveHelpers.Effectful.fst" + (Prims.of_int (902)) + (Prims.of_int (48)) + (Prims.of_int (902)) + (Prims.of_int (85))) + (Prims.mk_range + "prims.fst" + (Prims.of_int (606)) + (Prims.of_int (19)) + (Prims.of_int (606)) + (Prims.of_int (31))) + (Obj.magic + (FStar_InteractiveHelpers_ExploreTerm.type_info_to_string + einfo.ei_ret_type)) + (fun + uu___14 + -> + FStar_Tactics_Effect.lift_div_tac + (fun + uu___15 + -> + Prims.strcat + "- known type: " + uu___14)))) + (fun + uu___14 + -> + (fun + uu___14 + -> + Obj.magic + (FStar_InteractiveHelpers_Base.print_dbg + dbg + uu___14)) + uu___14))) + (fun + uu___14 + -> + (fun + uu___14 + -> + Obj.magic + (FStar_Tactics_Effect.tac_bind + (Prims.mk_range + "FStar.InteractiveHelpers.Effectful.fst" + (Prims.of_int (903)) + (Prims.of_int (14)) + (Prims.of_int (903)) + (Prims.of_int (83))) + (Prims.mk_range + "FStar.InteractiveHelpers.Effectful.fst" + (Prims.of_int (904)) + (Prims.of_int (14)) + (Prims.of_int (909)) + (Prims.of_int (50))) + (Obj.magic + (FStar_Tactics_Effect.tac_bind + (Prims.mk_range + "FStar.InteractiveHelpers.Effectful.fst" + (Prims.of_int (903)) + (Prims.of_int (28)) + (Prims.of_int (903)) + (Prims.of_int (83))) + (Prims.mk_range + "FStar.InteractiveHelpers.Effectful.fst" + (Prims.of_int (903)) + (Prims.of_int (14)) + (Prims.of_int (903)) + (Prims.of_int (83))) + (Obj.magic + (FStar_Tactics_Effect.tac_bind + (Prims.mk_range + "FStar.InteractiveHelpers.Effectful.fst" + (Prims.of_int (903)) + (Prims.of_int (48)) + (Prims.of_int (903)) + (Prims.of_int (82))) + (Prims.mk_range + "prims.fst" + (Prims.of_int (606)) + (Prims.of_int (19)) + (Prims.of_int (606)) + (Prims.of_int (31))) + (Obj.magic + (FStar_InteractiveHelpers_ExploreTerm.type_info_to_string + ei.ei_ret_type)) + (fun + uu___15 + -> + FStar_Tactics_Effect.lift_div_tac + (fun + uu___16 + -> + Prims.strcat + "- exp. type : " + uu___15)))) + (fun + uu___15 + -> + (fun + uu___15 + -> + Obj.magic + (FStar_InteractiveHelpers_Base.print_dbg + dbg + uu___15)) + uu___15))) + (fun + uu___15 + -> + (fun + uu___15 + -> + Obj.magic + (FStar_Tactics_Effect.tac_bind + (Prims.mk_range + "FStar.InteractiveHelpers.Effectful.fst" + (Prims.of_int (904)) + (Prims.of_int (26)) + (Prims.of_int (904)) + (Prims.of_int (87))) + (Prims.mk_range + "FStar.InteractiveHelpers.Effectful.fst" + (Prims.of_int (905)) + (Prims.of_int (14)) + (Prims.of_int (909)) + (Prims.of_int (50))) + (FStar_Tactics_Effect.lift_div_tac + (fun + uu___16 + -> + mk_cast_info + v1 + (FStar_Pervasives_Native.Some + (einfo.ei_ret_type)) + (FStar_Pervasives_Native.Some + (ei.ei_ret_type)))) + (fun + uu___16 + -> + (fun + gcast -> + Obj.magic + (FStar_Tactics_Effect.tac_bind + (Prims.mk_range + "FStar.InteractiveHelpers.Effectful.fst" + (Prims.of_int (905)) + (Prims.of_int (14)) + (Prims.of_int (905)) + (Prims.of_int (55))) + (Prims.mk_range + "FStar.InteractiveHelpers.Effectful.fst" + (Prims.of_int (906)) + (Prims.of_int (14)) + (Prims.of_int (909)) + (Prims.of_int (50))) + (Obj.magic + (FStar_Tactics_Effect.tac_bind + (Prims.mk_range + "FStar.InteractiveHelpers.Effectful.fst" + (Prims.of_int (905)) + (Prims.of_int (28)) + (Prims.of_int (905)) + (Prims.of_int (55))) + (Prims.mk_range + "FStar.InteractiveHelpers.Effectful.fst" + (Prims.of_int (905)) + (Prims.of_int (14)) + (Prims.of_int (905)) + (Prims.of_int (55))) + (Obj.magic + (cast_info_to_string + gcast)) + (fun + uu___16 + -> + (fun + uu___16 + -> + Obj.magic + (FStar_InteractiveHelpers_Base.print_dbg + dbg + uu___16)) + uu___16))) + (fun + uu___16 + -> + (fun + uu___16 + -> + Obj.magic + (FStar_Tactics_Effect.tac_bind + (Prims.mk_range + "FStar.InteractiveHelpers.Effectful.fst" + (Prims.of_int (906)) + (Prims.of_int (32)) + (Prims.of_int (906)) + (Prims.of_int (71))) + (Prims.mk_range + "FStar.InteractiveHelpers.Effectful.fst" + (Prims.of_int (907)) + (Prims.of_int (14)) + (Prims.of_int (909)) + (Prims.of_int (50))) + (Obj.magic + (cast_info_to_propositions + dbg ge1 + gcast)) + (fun + uu___17 + -> + (fun + gcast_props + -> + Obj.magic + (FStar_Tactics_Effect.tac_bind + (Prims.mk_range + "FStar.InteractiveHelpers.Effectful.fst" + (Prims.of_int (907)) + (Prims.of_int (14)) + (Prims.of_int (907)) + (Prims.of_int (66))) + (Prims.mk_range + "FStar.InteractiveHelpers.Effectful.fst" + (Prims.of_int (908)) + (Prims.of_int (14)) + (Prims.of_int (909)) + (Prims.of_int (50))) + (Obj.magic + (FStar_InteractiveHelpers_Base.print_dbg + dbg + "> Propositions for global type cast:")) + (fun + uu___17 + -> + (fun + uu___17 + -> + Obj.magic + (FStar_Tactics_Effect.tac_bind + (Prims.mk_range + "FStar.InteractiveHelpers.Effectful.fst" + (Prims.of_int (908)) + (Prims.of_int (14)) + (Prims.of_int (908)) + (Prims.of_int (71))) + (Prims.mk_range + "FStar.InteractiveHelpers.Effectful.fst" + (Prims.of_int (909)) + (Prims.of_int (14)) + (Prims.of_int (909)) + (Prims.of_int (50))) + (Obj.magic + (FStar_Tactics_Effect.tac_bind + (Prims.mk_range + "FStar.InteractiveHelpers.Effectful.fst" + (Prims.of_int (908)) + (Prims.of_int (28)) + (Prims.of_int (908)) + (Prims.of_int (71))) + (Prims.mk_range + "FStar.InteractiveHelpers.Effectful.fst" + (Prims.of_int (908)) + (Prims.of_int (14)) + (Prims.of_int (908)) + (Prims.of_int (71))) + (Obj.magic + (FStar_InteractiveHelpers_Base.list_to_string + FStar_Tactics_Builtins.term_to_string + gcast_props)) + (fun + uu___18 + -> + (fun + uu___18 + -> + Obj.magic + (FStar_InteractiveHelpers_Base.print_dbg + dbg + uu___18)) + uu___18))) + (fun + uu___18 + -> + FStar_Tactics_Effect.lift_div_tac + (fun + uu___19 + -> + ((ei.ei_post), + (FStar_List_Tot_Base.rev + gcast_props)))))) + uu___17))) + uu___17))) + uu___16))) + uu___16))) + uu___15))) + uu___14))) + uu___13)) + (fun + uu___12 + -> + FStar_Tactics_Effect.tac_bind + (Prims.mk_range + "FStar.InteractiveHelpers.Effectful.fst" + (Prims.of_int (912)) + (Prims.of_int (14)) + (Prims.of_int (912)) + (Prims.of_int (108))) + (Prims.mk_range + "FStar.InteractiveHelpers.Effectful.fst" + (Prims.of_int (913)) + (Prims.of_int (14)) + (Prims.of_int (913)) + (Prims.of_int (22))) + (Obj.magic + (FStar_InteractiveHelpers_Base.print_dbg + dbg + "Dropping the global postcondition and return type because of incoherent typing")) + (fun + uu___13 + -> + FStar_Tactics_Effect.lift_div_tac + (fun + uu___14 + -> + (FStar_Pervasives_Native.None, + []))))))) + (fun + uu___10 + -> + (fun + uu___10 + -> + match uu___10 + with + | + (gpost, + gcast_props) + -> + Obj.magic + (FStar_Tactics_Effect.tac_bind + (Prims.mk_range + "FStar.InteractiveHelpers.Effectful.fst" + (Prims.of_int (917)) + (Prims.of_int (8)) + (Prims.of_int (917)) + (Prims.of_int (55))) + (Prims.mk_range + "FStar.InteractiveHelpers.Effectful.fst" + (Prims.of_int (923)) + (Prims.of_int (8)) + (Prims.of_int (935)) + (Prims.of_int (62))) + (Obj.magic + (FStar_InteractiveHelpers_Base.print_dbg + dbg + "> Instantiating global pre/post")) + (fun + uu___11 + -> + (fun + uu___11 + -> + Obj.magic + (FStar_Tactics_Effect.tac_bind + (Prims.mk_range + "FStar.InteractiveHelpers.Effectful.fst" + (Prims.of_int (924)) + (Prims.of_int (10)) + (Prims.of_int (926)) + (Prims.of_int (22))) + (Prims.mk_range + "FStar.InteractiveHelpers.Effectful.fst" + (Prims.of_int (928)) + (Prims.of_int (8)) + (Prims.of_int (935)) + (Prims.of_int (62))) + (FStar_Tactics_Effect.lift_div_tac + (fun + uu___12 + -> + if is_let + then + FStar_List_Tot_Base.rev + children + else + if + effect_type_is_stateful + einfo.ei_type + then + FStar_List_Tot_Base.rev + children + else + parents)) + (fun + uu___12 + -> + (fun + gchildren + -> + Obj.magic + (FStar_Tactics_Effect.tac_bind + (Prims.mk_range + "FStar.InteractiveHelpers.Effectful.fst" + (Prims.of_int (929)) + (Prims.of_int (10)) + (Prims.of_int (930)) + (Prims.of_int (69))) + (Prims.mk_range + "FStar.InteractiveHelpers.Effectful.fst" + (Prims.of_int (928)) + (Prims.of_int (8)) + (Prims.of_int (935)) + (Prims.of_int (62))) + (Obj.magic + (pre_post_to_propositions + dbg ge1 + ei.ei_type + v1 opt_b + einfo.ei_ret_type + gpre + gpost + (FStar_List_Tot_Base.rev + parents) + gchildren)) + (fun + uu___12 + -> + (fun + uu___12 + -> + match uu___12 + with + | + (ge2, + gpre_prop, + gpost_prop) + -> + Obj.magic + (FStar_Tactics_Effect.tac_bind + (Prims.mk_range + "FStar.InteractiveHelpers.Effectful.fst" + (Prims.of_int (932)) + (Prims.of_int (8)) + (Prims.of_int (932)) + (Prims.of_int (89))) + (Prims.mk_range + "FStar.InteractiveHelpers.Effectful.fst" + (Prims.of_int (933)) + (Prims.of_int (8)) + (Prims.of_int (935)) + (Prims.of_int (62))) + (Obj.magic + (FStar_Tactics_Effect.tac_bind + (Prims.mk_range + "FStar.InteractiveHelpers.Effectful.fst" + (Prims.of_int (932)) + (Prims.of_int (22)) + (Prims.of_int (932)) + (Prims.of_int (89))) + (Prims.mk_range + "FStar.InteractiveHelpers.Effectful.fst" + (Prims.of_int (932)) + (Prims.of_int (8)) + (Prims.of_int (932)) + (Prims.of_int (89))) + (Obj.magic + (FStar_Tactics_Effect.tac_bind + (Prims.mk_range + "FStar.InteractiveHelpers.Effectful.fst" + (Prims.of_int (932)) + (Prims.of_int (47)) + (Prims.of_int (932)) + (Prims.of_int (88))) + (Prims.mk_range + "prims.fst" + (Prims.of_int (606)) + (Prims.of_int (19)) + (Prims.of_int (606)) + (Prims.of_int (31))) + (Obj.magic + (FStar_InteractiveHelpers_Base.option_to_string + FStar_Tactics_Builtins.term_to_string + gpre_prop)) + (fun + uu___13 + -> + FStar_Tactics_Effect.lift_div_tac + (fun + uu___14 + -> + Prims.strcat + "- global pre prop: " + uu___13)))) + (fun + uu___13 + -> + (fun + uu___13 + -> + Obj.magic + (FStar_InteractiveHelpers_Base.print_dbg + dbg + uu___13)) + uu___13))) + (fun + uu___13 + -> + (fun + uu___13 + -> + Obj.magic + (FStar_Tactics_Effect.tac_bind + (Prims.mk_range + "FStar.InteractiveHelpers.Effectful.fst" + (Prims.of_int (933)) + (Prims.of_int (8)) + (Prims.of_int (933)) + (Prims.of_int (91))) + (Prims.mk_range + "FStar.InteractiveHelpers.Effectful.fst" + (Prims.of_int (935)) + (Prims.of_int (8)) + (Prims.of_int (935)) + (Prims.of_int (62))) + (Obj.magic + (FStar_Tactics_Effect.tac_bind + (Prims.mk_range + "FStar.InteractiveHelpers.Effectful.fst" + (Prims.of_int (933)) + (Prims.of_int (22)) + (Prims.of_int (933)) + (Prims.of_int (91))) + (Prims.mk_range + "FStar.InteractiveHelpers.Effectful.fst" + (Prims.of_int (933)) + (Prims.of_int (8)) + (Prims.of_int (933)) + (Prims.of_int (91))) + (Obj.magic + (FStar_Tactics_Effect.tac_bind + (Prims.mk_range + "FStar.InteractiveHelpers.Effectful.fst" + (Prims.of_int (933)) + (Prims.of_int (48)) + (Prims.of_int (933)) + (Prims.of_int (90))) + (Prims.mk_range + "prims.fst" + (Prims.of_int (606)) + (Prims.of_int (19)) + (Prims.of_int (606)) + (Prims.of_int (31))) + (Obj.magic + (FStar_InteractiveHelpers_Base.option_to_string + FStar_Tactics_Builtins.term_to_string + gpost_prop)) + (fun + uu___14 + -> + FStar_Tactics_Effect.lift_div_tac + (fun + uu___15 + -> + Prims.strcat + "- global post prop: " + uu___14)))) + (fun + uu___14 + -> + (fun + uu___14 + -> + Obj.magic + (FStar_InteractiveHelpers_Base.print_dbg + dbg + uu___14)) + uu___14))) + (fun + uu___14 + -> + FStar_Tactics_Effect.lift_div_tac + (fun + uu___15 + -> + (ge2, + gparams_props, + gpre_prop, + gcast_props, + gpost_prop))))) + uu___13))) + uu___12))) + uu___12))) + uu___11))) + uu___10))) + uu___10))) + uu___10))) + uu___9))) + uu___8))) + uu___7))) + uu___7))) + | + (uu___7, + uu___8) + -> + Obj.magic + (Obj.repr + (FStar_Tactics_Effect.lift_div_tac + (fun + uu___9 -> + (ge1, [], + FStar_Pervasives_Native.None, + [], + FStar_Pervasives_Native.None))))) + uu___7))) + (fun + uu___7 -> + (fun + uu___7 -> + match uu___7 + with + | + (ge2, + gparams_props, + gpre_prop, + gcast_props, + gpost_prop) + -> + Obj.magic + (FStar_Tactics_Effect.tac_bind + (Prims.mk_range + "FStar.InteractiveHelpers.Effectful.fst" + (Prims.of_int (942)) + (Prims.of_int (23)) + (Prims.of_int (942)) + (Prims.of_int (77))) + (Prims.mk_range + "FStar.InteractiveHelpers.Effectful.fst" + (Prims.of_int (944)) + (Prims.of_int (4)) + (Prims.of_int (964)) + (Prims.of_int (39))) + (Obj.magic + (cast_info_list_to_propositions + dbg ge2 + info.parameters)) + (fun + uu___8 -> + (fun + params_props + -> + Obj.magic + (FStar_Tactics_Effect.tac_bind + (Prims.mk_range + "FStar.InteractiveHelpers.Effectful.fst" + (Prims.of_int (945)) + (Prims.of_int (6)) + (Prims.of_int (946)) + (Prims.of_int (63))) + (Prims.mk_range + "FStar.InteractiveHelpers.Effectful.fst" + (Prims.of_int (944)) + (Prims.of_int (4)) + (Prims.of_int (964)) + (Prims.of_int (39))) + (FStar_Tactics_Effect.lift_div_tac + (fun + uu___8 -> + if + FStar_InteractiveHelpers_ExploreTerm.uu___is_E_Lemma + einfo.ei_type + then + ([], []) + else + ([v1], + ((match opt_b + with + | FStar_Pervasives_Native.Some + b -> + [b] + | FStar_Pervasives_Native.None + -> []))))) + (fun + uu___8 -> + (fun + uu___8 -> + match uu___8 + with + | + (ret_values, + ret_binders) + -> + Obj.magic + (FStar_Tactics_Effect.tac_bind + (Prims.mk_range + "FStar.InteractiveHelpers.Effectful.fst" + (Prims.of_int (947)) + (Prims.of_int (4)) + (Prims.of_int (964)) + (Prims.of_int (39))) + (Prims.mk_range + "FStar.InteractiveHelpers.Effectful.fst" + (Prims.of_int (947)) + (Prims.of_int (4)) + (Prims.of_int (964)) + (Prims.of_int (39))) + (FStar_Tactics_Effect.lift_div_tac + (fun + uu___9 -> + ret_values)) + (fun + uu___9 -> + (fun + ret_values1 + -> + Obj.magic + (FStar_Tactics_Effect.tac_bind + (Prims.mk_range + "FStar.InteractiveHelpers.Effectful.fst" + (Prims.of_int (948)) + (Prims.of_int (6)) + (Prims.of_int (950)) + (Prims.of_int (17))) + (Prims.mk_range + "FStar.InteractiveHelpers.Effectful.fst" + (Prims.of_int (952)) + (Prims.of_int (4)) + (Prims.of_int (964)) + (Prims.of_int (39))) + (match ret_values1 + with + | + v2::[] -> + Obj.magic + (Obj.repr + (FStar_Tactics_Effect.tac_bind + (Prims.mk_range + "FStar.InteractiveHelpers.Effectful.fst" + (Prims.of_int (949)) + (Prims.of_int (20)) + (Prims.of_int (949)) + (Prims.of_int (56))) + (Prims.mk_range + "FStar.InteractiveHelpers.Effectful.fst" + (Prims.of_int (949)) + (Prims.of_int (15)) + (Prims.of_int (949)) + (Prims.of_int (56))) + (Obj.magic + (mk_has_type + v2 + (einfo.ei_ret_type).FStar_InteractiveHelpers_ExploreTerm.ty)) + (fun + uu___9 -> + FStar_Tactics_Effect.lift_div_tac + (fun + uu___10 + -> + FStar_Pervasives_Native.Some + uu___9)))) + | + uu___9 -> + Obj.magic + (Obj.repr + (FStar_Tactics_Effect.lift_div_tac + (fun + uu___10 + -> + FStar_Pervasives_Native.None)))) + (fun + uu___9 -> + (fun + ret_has_type_prop + -> + Obj.magic + (FStar_Tactics_Effect.tac_bind + (Prims.mk_range + "FStar.InteractiveHelpers.Effectful.fst" + (Prims.of_int (952)) + (Prims.of_int (25)) + (Prims.of_int (952)) + (Prims.of_int (97))) + (Prims.mk_range + "FStar.InteractiveHelpers.Effectful.fst" + (Prims.of_int (954)) + (Prims.of_int (4)) + (Prims.of_int (964)) + (Prims.of_int (39))) + (Obj.magic + (FStar_InteractiveHelpers_Base.opt_mk_app_norm + ge2.FStar_InteractiveHelpers_Base.env + (get_opt_refinment + einfo.ei_ret_type) + ret_values1)) + (fun + uu___9 -> + (fun + ret_refin_prop + -> + Obj.magic + (FStar_Tactics_Effect.tac_bind + (Prims.mk_range + "FStar.InteractiveHelpers.Effectful.fst" + (Prims.of_int (954)) + (Prims.of_int (15)) + (Prims.of_int (954)) + (Prims.of_int (83))) + (Prims.mk_range + "FStar.InteractiveHelpers.Effectful.fst" + (Prims.of_int (955)) + (Prims.of_int (4)) + (Prims.of_int (964)) + (Prims.of_int (39))) + (FStar_Tactics_Effect.lift_div_tac + (fun + uu___9 -> + FStar_InteractiveHelpers_Base.opt_cons + gpre_prop + (FStar_List_Tot_Base.append + params_props + (FStar_InteractiveHelpers_Base.opt_cons + pre_prop + [])))) + (fun + uu___9 -> + (fun pres + -> + Obj.magic + (FStar_Tactics_Effect.tac_bind + (Prims.mk_range + "FStar.InteractiveHelpers.Effectful.fst" + (Prims.of_int (955)) + (Prims.of_int (15)) + (Prims.of_int (955)) + (Prims.of_int (40))) + (Prims.mk_range + "FStar.InteractiveHelpers.Effectful.fst" + (Prims.of_int (956)) + (Prims.of_int (4)) + (Prims.of_int (964)) + (Prims.of_int (39))) + (FStar_Tactics_Effect.lift_div_tac + (fun + uu___9 -> + FStar_List_Tot_Base.append + gparams_props + pres)) + (fun + uu___9 -> + (fun + pres1 -> + Obj.magic + (FStar_Tactics_Effect.tac_bind + (Prims.mk_range + "FStar.InteractiveHelpers.Effectful.fst" + (Prims.of_int (956)) + (Prims.of_int (16)) + (Prims.of_int (958)) + (Prims.of_int (69))) + (Prims.mk_range + "FStar.InteractiveHelpers.Effectful.fst" + (Prims.of_int (960)) + (Prims.of_int (4)) + (Prims.of_int (964)) + (Prims.of_int (39))) + (FStar_Tactics_Effect.lift_div_tac + (fun + uu___9 -> + FStar_InteractiveHelpers_Base.opt_cons + ret_has_type_prop + (FStar_InteractiveHelpers_Base.opt_cons + ret_refin_prop + (FStar_InteractiveHelpers_Base.opt_cons + post_prop + (FStar_List_Tot_Base.append + gcast_props + (FStar_InteractiveHelpers_Base.opt_cons + gpost_prop + [])))))) + (fun + uu___9 -> + (fun + posts -> + Obj.magic + (FStar_Tactics_Effect.tac_bind + (Prims.mk_range + "FStar.InteractiveHelpers.Effectful.fst" + (Prims.of_int (960)) + (Prims.of_int (4)) + (Prims.of_int (960)) + (Prims.of_int (37))) + (Prims.mk_range + "FStar.InteractiveHelpers.Effectful.fst" + (Prims.of_int (961)) + (Prims.of_int (4)) + (Prims.of_int (964)) + (Prims.of_int (39))) + (Obj.magic + (FStar_InteractiveHelpers_Base.print_dbg + dbg + "- generated pres:")) + (fun + uu___9 -> + (fun + uu___9 -> + Obj.magic + (FStar_Tactics_Effect.tac_bind + (Prims.mk_range + "FStar.InteractiveHelpers.Effectful.fst" + (Prims.of_int (961)) + (Prims.of_int (4)) + (Prims.of_int (961)) + (Prims.of_int (61))) + (Prims.mk_range + "FStar.InteractiveHelpers.Effectful.fst" + (Prims.of_int (962)) + (Prims.of_int (4)) + (Prims.of_int (964)) + (Prims.of_int (39))) + (if dbg + then + Obj.magic + (Obj.repr + (FStar_Tactics_Util.iter + (fun x -> + FStar_Tactics_Effect.tac_bind + (Prims.mk_range + "FStar.InteractiveHelpers.Effectful.fst" + (Prims.of_int (961)) + (Prims.of_int (37)) + (Prims.of_int (961)) + (Prims.of_int (55))) + (Prims.mk_range + "FStar.InteractiveHelpers.Effectful.fst" + (Prims.of_int (961)) + (Prims.of_int (31)) + (Prims.of_int (961)) + (Prims.of_int (55))) + (Obj.magic + (FStar_Tactics_Builtins.term_to_string + x)) + (fun + uu___10 + -> + (fun + uu___10 + -> + Obj.magic + (FStar_Tactics_Builtins.print + uu___10)) + uu___10)) + pres1)) + else + Obj.magic + (Obj.repr + (FStar_Tactics_Effect.lift_div_tac + (fun + uu___11 + -> ())))) + (fun + uu___10 + -> + (fun + uu___10 + -> + Obj.magic + (FStar_Tactics_Effect.tac_bind + (Prims.mk_range + "FStar.InteractiveHelpers.Effectful.fst" + (Prims.of_int (962)) + (Prims.of_int (4)) + (Prims.of_int (962)) + (Prims.of_int (38))) + (Prims.mk_range + "FStar.InteractiveHelpers.Effectful.fst" + (Prims.of_int (963)) + (Prims.of_int (4)) + (Prims.of_int (964)) + (Prims.of_int (39))) + (Obj.magic + (FStar_InteractiveHelpers_Base.print_dbg + dbg + "- generated posts:")) + (fun + uu___11 + -> + (fun + uu___11 + -> + Obj.magic + (FStar_Tactics_Effect.tac_bind + (Prims.mk_range + "FStar.InteractiveHelpers.Effectful.fst" + (Prims.of_int (963)) + (Prims.of_int (4)) + (Prims.of_int (963)) + (Prims.of_int (62))) + (Prims.mk_range + "FStar.InteractiveHelpers.Effectful.fst" + (Prims.of_int (964)) + (Prims.of_int (4)) + (Prims.of_int (964)) + (Prims.of_int (39))) + (if dbg + then + Obj.magic + (Obj.repr + (FStar_Tactics_Util.iter + (fun x -> + FStar_Tactics_Effect.tac_bind + (Prims.mk_range + "FStar.InteractiveHelpers.Effectful.fst" + (Prims.of_int (963)) + (Prims.of_int (37)) + (Prims.of_int (963)) + (Prims.of_int (55))) + (Prims.mk_range + "FStar.InteractiveHelpers.Effectful.fst" + (Prims.of_int (963)) + (Prims.of_int (31)) + (Prims.of_int (963)) + (Prims.of_int (55))) + (Obj.magic + (FStar_Tactics_Builtins.term_to_string + x)) + (fun + uu___12 + -> + (fun + uu___12 + -> + Obj.magic + (FStar_Tactics_Builtins.print + uu___12)) + uu___12)) + posts)) + else + Obj.magic + (Obj.repr + (FStar_Tactics_Effect.lift_div_tac + (fun + uu___13 + -> ())))) + (fun + uu___12 + -> + FStar_Tactics_Effect.lift_div_tac + (fun + uu___13 + -> + (ge2, + { + FStar_InteractiveHelpers_Propositions.pres + = pres1; + FStar_InteractiveHelpers_Propositions.posts + = posts + }))))) + uu___11))) + uu___10))) + uu___9))) + uu___9))) + uu___9))) + uu___9))) + uu___9))) + uu___9))) + uu___9))) + uu___8))) + uu___8))) + uu___7))) + uu___5))) + uu___4))) + uu___3))) + uu___2))) + uu___2))) + uu___1))) uu___1))) + uu___) \ No newline at end of file diff --git a/ocaml/fstar-lib/generated/FStar_InteractiveHelpers_ExploreTerm.ml b/ocaml/fstar-lib/generated/FStar_InteractiveHelpers_ExploreTerm.ml new file mode 100644 index 00000000000..7428ba9e9f6 --- /dev/null +++ b/ocaml/fstar-lib/generated/FStar_InteractiveHelpers_ExploreTerm.ml @@ -0,0 +1,4256 @@ +open Prims +let (pure_effect_qn : Prims.string) = "Prims.PURE" +let (pure_hoare_effect_qn : Prims.string) = "Prims.Pure" +let (stack_effect_qn : Prims.string) = "FStar.HyperStack.ST.Stack" +let (st_effect_qn : Prims.string) = "FStar.HyperStack.ST.ST" +let (comp_qualifier : + FStar_Reflection_Types.comp -> + (Prims.string, unit) FStar_Tactics_Effect.tac_repr) + = + fun uu___ -> + (fun c -> + Obj.magic + (FStar_Tactics_Effect.lift_div_tac + (fun uu___ -> + match FStar_Reflection_Builtins.inspect_comp c with + | FStar_Reflection_Data.C_Total uu___1 -> "C_Total" + | FStar_Reflection_Data.C_GTotal uu___1 -> "C_GTotal" + | FStar_Reflection_Data.C_Lemma (uu___1, uu___2, uu___3) -> + "C_Lemma" + | FStar_Reflection_Data.C_Eff + (uu___1, uu___2, uu___3, uu___4, uu___5) -> "C_Eff"))) + uu___ +type effect_type = + | E_Total + | E_GTotal + | E_Lemma + | E_PURE + | E_Pure + | E_Stack + | E_ST + | E_Unknown +let (uu___is_E_Total : effect_type -> Prims.bool) = + fun projectee -> match projectee with | E_Total -> true | uu___ -> false +let (uu___is_E_GTotal : effect_type -> Prims.bool) = + fun projectee -> match projectee with | E_GTotal -> true | uu___ -> false +let (uu___is_E_Lemma : effect_type -> Prims.bool) = + fun projectee -> match projectee with | E_Lemma -> true | uu___ -> false +let (uu___is_E_PURE : effect_type -> Prims.bool) = + fun projectee -> match projectee with | E_PURE -> true | uu___ -> false +let (uu___is_E_Pure : effect_type -> Prims.bool) = + fun projectee -> match projectee with | E_Pure -> true | uu___ -> false +let (uu___is_E_Stack : effect_type -> Prims.bool) = + fun projectee -> match projectee with | E_Stack -> true | uu___ -> false +let (uu___is_E_ST : effect_type -> Prims.bool) = + fun projectee -> match projectee with | E_ST -> true | uu___ -> false +let (uu___is_E_Unknown : effect_type -> Prims.bool) = + fun projectee -> match projectee with | E_Unknown -> true | uu___ -> false +let (effect_type_to_string : effect_type -> Prims.string) = + fun ety -> + match ety with + | E_Total -> "E_Total" + | E_GTotal -> "E_GTotal" + | E_Lemma -> "E_Lemma" + | E_PURE -> "E_PURE" + | E_Pure -> "E_Pure" + | E_Stack -> "E_Stack" + | E_ST -> "E_ST" + | E_Unknown -> "E_Unknown" +let (effect_name_to_type : FStar_Reflection_Types.name -> effect_type) = + fun ename -> + let ename1 = FStar_Reflection_Derived.flatten_name ename in + if ename1 = pure_effect_qn + then E_PURE + else + if ename1 = pure_hoare_effect_qn + then E_Pure + else + if ename1 = stack_effect_qn + then E_Stack + else if ename1 = st_effect_qn then E_ST else E_Unknown +let (effect_type_is_pure : effect_type -> Prims.bool) = + fun etype -> + match etype with + | E_Total -> true + | E_GTotal -> true + | E_Lemma -> true + | E_PURE -> true + | E_Pure -> true + | E_Stack -> false + | E_ST -> false + | E_Unknown -> false +type type_info = + { + ty: FStar_Reflection_Types.typ ; + refin: FStar_Reflection_Types.term FStar_Pervasives_Native.option } +let (__proj__Mktype_info__item__ty : type_info -> FStar_Reflection_Types.typ) + = fun projectee -> match projectee with | { ty; refin;_} -> ty +let (__proj__Mktype_info__item__refin : + type_info -> FStar_Reflection_Types.term FStar_Pervasives_Native.option) = + fun projectee -> match projectee with | { ty; refin;_} -> refin +let (mk_type_info : + FStar_Reflection_Types.typ -> + FStar_Reflection_Types.term FStar_Pervasives_Native.option -> type_info) + = fun uu___ -> fun uu___1 -> { ty = uu___; refin = uu___1 } +let (type_info_to_string : + type_info -> (Prims.string, unit) FStar_Tactics_Effect.tac_repr) = + fun info -> + FStar_Tactics_Effect.tac_bind + (Prims.mk_range "FStar.InteractiveHelpers.ExploreTerm.fst" + (Prims.of_int (84)) (Prims.of_int (2)) (Prims.of_int (85)) + (Prims.of_int (50))) + (Prims.mk_range "prims.fst" (Prims.of_int (606)) (Prims.of_int (19)) + (Prims.of_int (606)) (Prims.of_int (31))) + (Obj.magic + (FStar_Tactics_Effect.tac_bind + (Prims.mk_range "FStar.InteractiveHelpers.ExploreTerm.fst" + (Prims.of_int (84)) (Prims.of_int (2)) (Prims.of_int (84)) + (Prims.of_int (24))) + (Prims.mk_range "FStar.InteractiveHelpers.ExploreTerm.fst" + (Prims.of_int (84)) (Prims.of_int (2)) (Prims.of_int (85)) + (Prims.of_int (50))) + (Obj.magic (FStar_Tactics_Builtins.term_to_string info.ty)) + (fun uu___ -> + (fun uu___ -> + Obj.magic + (FStar_Tactics_Effect.tac_bind + (Prims.mk_range + "FStar.InteractiveHelpers.ExploreTerm.fst" + (Prims.of_int (84)) (Prims.of_int (27)) + (Prims.of_int (85)) (Prims.of_int (50))) + (Prims.mk_range "prims.fst" (Prims.of_int (606)) + (Prims.of_int (19)) (Prims.of_int (606)) + (Prims.of_int (31))) + (Obj.magic + (FStar_Tactics_Effect.tac_bind + (Prims.mk_range + "FStar.InteractiveHelpers.ExploreTerm.fst" + (Prims.of_int (85)) (Prims.of_int (2)) + (Prims.of_int (85)) (Prims.of_int (50))) + (Prims.mk_range "prims.fst" (Prims.of_int (606)) + (Prims.of_int (19)) (Prims.of_int (606)) + (Prims.of_int (31))) + (Obj.magic + (FStar_Tactics_Effect.tac_bind + (Prims.mk_range + "FStar.InteractiveHelpers.ExploreTerm.fst" + (Prims.of_int (85)) (Prims.of_int (2)) + (Prims.of_int (85)) (Prims.of_int (44))) + (Prims.mk_range "prims.fst" + (Prims.of_int (606)) + (Prims.of_int (19)) + (Prims.of_int (606)) + (Prims.of_int (31))) + (Obj.magic + (FStar_InteractiveHelpers_Base.option_to_string + FStar_Tactics_Builtins.term_to_string + info.refin)) + (fun uu___1 -> + FStar_Tactics_Effect.lift_div_tac + (fun uu___2 -> + Prims.strcat uu___1 ")")))) + (fun uu___1 -> + FStar_Tactics_Effect.lift_div_tac + (fun uu___2 -> Prims.strcat ") (" uu___1)))) + (fun uu___1 -> + FStar_Tactics_Effect.lift_div_tac + (fun uu___2 -> Prims.strcat uu___ uu___1)))) + uu___))) + (fun uu___ -> + FStar_Tactics_Effect.lift_div_tac + (fun uu___1 -> Prims.strcat "Mktype_info (" uu___)) +let (unit_type_info : type_info) = + mk_type_info + (FStar_Reflection_Builtins.pack_ln + (FStar_Reflection_Data.Tv_FVar + (FStar_Reflection_Builtins.pack_fv ["Prims"; "unit"]))) + FStar_Pervasives_Native.None +let (safe_tc : + FStar_Reflection_Types.env -> + FStar_Reflection_Types.term -> + (FStar_Reflection_Types.term FStar_Pervasives_Native.option, unit) + FStar_Tactics_Effect.tac_repr) + = + fun e -> + fun t -> + FStar_Tactics_Derived.try_with + (fun uu___ -> + match () with + | () -> + FStar_Tactics_Effect.tac_bind + (Prims.mk_range "FStar.InteractiveHelpers.ExploreTerm.fst" + (Prims.of_int (91)) (Prims.of_int (11)) + (Prims.of_int (91)) (Prims.of_int (19))) + (Prims.mk_range "FStar.InteractiveHelpers.ExploreTerm.fst" + (Prims.of_int (91)) (Prims.of_int (6)) + (Prims.of_int (91)) (Prims.of_int (19))) + (Obj.magic (FStar_Tactics_Builtins.tc e t)) + (fun uu___1 -> + FStar_Tactics_Effect.lift_div_tac + (fun uu___2 -> FStar_Pervasives_Native.Some uu___1))) + (fun uu___ -> + (fun uu___ -> + Obj.magic + (FStar_Tactics_Effect.lift_div_tac + (fun uu___1 -> FStar_Pervasives_Native.None))) uu___) +let (safe_tcc : + FStar_Reflection_Types.env -> + FStar_Reflection_Types.term -> + (FStar_Reflection_Types.comp FStar_Pervasives_Native.option, unit) + FStar_Tactics_Effect.tac_repr) + = + fun e -> + fun t -> + FStar_Tactics_Derived.try_with + (fun uu___ -> + match () with + | () -> + FStar_Tactics_Effect.tac_bind + (Prims.mk_range "FStar.InteractiveHelpers.ExploreTerm.fst" + (Prims.of_int (95)) (Prims.of_int (11)) + (Prims.of_int (95)) (Prims.of_int (20))) + (Prims.mk_range "FStar.InteractiveHelpers.ExploreTerm.fst" + (Prims.of_int (95)) (Prims.of_int (6)) + (Prims.of_int (95)) (Prims.of_int (20))) + (Obj.magic (FStar_Tactics_Builtins.tcc e t)) + (fun uu___1 -> + FStar_Tactics_Effect.lift_div_tac + (fun uu___2 -> FStar_Pervasives_Native.Some uu___1))) + (fun uu___ -> + (fun uu___ -> + Obj.magic + (FStar_Tactics_Effect.lift_div_tac + (fun uu___1 -> FStar_Pervasives_Native.None))) uu___) +let (get_type_info_from_type : + FStar_Reflection_Types.typ -> + (type_info, unit) FStar_Tactics_Effect.tac_repr) + = + fun ty -> + FStar_Tactics_Effect.tac_bind + (Prims.mk_range "FStar.InteractiveHelpers.ExploreTerm.fst" + (Prims.of_int (98)) (Prims.of_int (8)) (Prims.of_int (98)) + (Prims.of_int (18))) + (Prims.mk_range "FStar.InteractiveHelpers.ExploreTerm.fst" + (Prims.of_int (98)) (Prims.of_int (2)) (Prims.of_int (109)) + (Prims.of_int (24))) (Obj.magic (FStar_Tactics_Builtins.inspect ty)) + (fun uu___ -> + (fun uu___ -> + match uu___ with + | FStar_Reflection_Data.Tv_Refine (bv, refin) -> + Obj.magic + (FStar_Tactics_Effect.tac_bind + (Prims.mk_range + "FStar.InteractiveHelpers.ExploreTerm.fst" + (Prims.of_int (100)) (Prims.of_int (26)) + (Prims.of_int (100)) (Prims.of_int (39))) + (Prims.mk_range + "FStar.InteractiveHelpers.ExploreTerm.fst" + (Prims.of_int (101)) (Prims.of_int (4)) + (Prims.of_int (106)) (Prims.of_int (38))) + (FStar_Tactics_Effect.lift_div_tac + (fun uu___1 -> + FStar_Reflection_Builtins.inspect_bv bv)) + (fun uu___1 -> + (fun bview -> + Obj.magic + (FStar_Tactics_Effect.tac_bind + (Prims.mk_range + "FStar.InteractiveHelpers.ExploreTerm.fst" + (Prims.of_int (101)) (Prims.of_int (25)) + (Prims.of_int (101)) (Prims.of_int (38))) + (Prims.mk_range + "FStar.InteractiveHelpers.ExploreTerm.fst" + (Prims.of_int (102)) (Prims.of_int (4)) + (Prims.of_int (106)) (Prims.of_int (38))) + (FStar_Tactics_Effect.lift_div_tac + (fun uu___1 -> + bview.FStar_Reflection_Data.bv_sort)) + (fun uu___1 -> + (fun raw_type -> + Obj.magic + (FStar_Tactics_Effect.tac_bind + (Prims.mk_range + "FStar.InteractiveHelpers.ExploreTerm.fst" + (Prims.of_int (102)) + (Prims.of_int (19)) + (Prims.of_int (102)) + (Prims.of_int (47))) + (Prims.mk_range + "FStar.InteractiveHelpers.ExploreTerm.fst" + (Prims.of_int (103)) + (Prims.of_int (4)) + (Prims.of_int (106)) + (Prims.of_int (38))) + (Obj.magic + (FStar_InteractiveHelpers_Base.prettify_term + false raw_type)) + (fun uu___1 -> + (fun raw_type1 -> + Obj.magic + (FStar_Tactics_Effect.tac_bind + (Prims.mk_range + "FStar.InteractiveHelpers.ExploreTerm.fst" + (Prims.of_int (103)) + (Prims.of_int (21)) + (Prims.of_int (103)) + (Prims.of_int (33))) + (Prims.mk_range + "FStar.InteractiveHelpers.ExploreTerm.fst" + (Prims.of_int (104)) + (Prims.of_int (4)) + (Prims.of_int (106)) + (Prims.of_int (38))) + (FStar_Tactics_Effect.lift_div_tac + (fun uu___1 -> + FStar_Reflection_Derived.mk_binder + bv)) + (fun uu___1 -> + (fun b -> + Obj.magic + (FStar_Tactics_Effect.tac_bind + (Prims.mk_range + "FStar.InteractiveHelpers.ExploreTerm.fst" + (Prims.of_int (104)) + (Prims.of_int (16)) + (Prims.of_int (104)) + (Prims.of_int (41))) + (Prims.mk_range + "FStar.InteractiveHelpers.ExploreTerm.fst" + (Prims.of_int (105)) + (Prims.of_int (4)) + (Prims.of_int (106)) + (Prims.of_int (38))) + (Obj.magic + ( + FStar_InteractiveHelpers_Base.prettify_term + false + refin)) + (fun uu___1 + -> + (fun + refin1 -> + Obj.magic + (FStar_Tactics_Effect.tac_bind + (Prims.mk_range + "FStar.InteractiveHelpers.ExploreTerm.fst" + (Prims.of_int (105)) + (Prims.of_int (16)) + (Prims.of_int (105)) + (Prims.of_int (37))) + (Prims.mk_range + "FStar.InteractiveHelpers.ExploreTerm.fst" + (Prims.of_int (106)) + (Prims.of_int (4)) + (Prims.of_int (106)) + (Prims.of_int (38))) + (Obj.magic + (FStar_Tactics_Builtins.pack + (FStar_Reflection_Data.Tv_Abs + (b, + refin1)))) + (fun + refin2 -> + FStar_Tactics_Effect.lift_div_tac + (fun + uu___1 -> + mk_type_info + raw_type1 + (FStar_Pervasives_Native.Some + refin2))))) + uu___1))) + uu___1))) uu___1))) + uu___1))) uu___1)) + | uu___1 -> + Obj.magic + (FStar_Tactics_Effect.tac_bind + (Prims.mk_range + "FStar.InteractiveHelpers.ExploreTerm.fst" + (Prims.of_int (108)) (Prims.of_int (13)) + (Prims.of_int (108)) (Prims.of_int (35))) + (Prims.mk_range + "FStar.InteractiveHelpers.ExploreTerm.fst" + (Prims.of_int (109)) (Prims.of_int (4)) + (Prims.of_int (109)) (Prims.of_int (24))) + (Obj.magic + (FStar_InteractiveHelpers_Base.prettify_term false ty)) + (fun ty1 -> + FStar_Tactics_Effect.lift_div_tac + (fun uu___2 -> + mk_type_info ty1 FStar_Pervasives_Native.None)))) + uu___) +let (get_type_info : + FStar_Reflection_Types.env -> + FStar_Reflection_Types.term -> + (type_info FStar_Pervasives_Native.option, unit) + FStar_Tactics_Effect.tac_repr) + = + fun e -> + fun t -> + FStar_Tactics_Effect.tac_bind + (Prims.mk_range "FStar.InteractiveHelpers.ExploreTerm.fst" + (Prims.of_int (113)) (Prims.of_int (8)) (Prims.of_int (113)) + (Prims.of_int (19))) + (Prims.mk_range "FStar.InteractiveHelpers.ExploreTerm.fst" + (Prims.of_int (113)) (Prims.of_int (2)) (Prims.of_int (115)) + (Prims.of_int (48))) (Obj.magic (safe_tc e t)) + (fun uu___ -> + (fun uu___ -> + match uu___ with + | FStar_Pervasives_Native.None -> + Obj.magic + (Obj.repr + (FStar_Tactics_Effect.lift_div_tac + (fun uu___1 -> FStar_Pervasives_Native.None))) + | FStar_Pervasives_Native.Some ty -> + Obj.magic + (Obj.repr + (FStar_Tactics_Effect.tac_bind + (Prims.mk_range + "FStar.InteractiveHelpers.ExploreTerm.fst" + (Prims.of_int (115)) (Prims.of_int (20)) + (Prims.of_int (115)) (Prims.of_int (48))) + (Prims.mk_range + "FStar.InteractiveHelpers.ExploreTerm.fst" + (Prims.of_int (115)) (Prims.of_int (15)) + (Prims.of_int (115)) (Prims.of_int (48))) + (Obj.magic (get_type_info_from_type ty)) + (fun uu___1 -> + FStar_Tactics_Effect.lift_div_tac + (fun uu___2 -> + FStar_Pervasives_Native.Some uu___1))))) + uu___) +let (get_total_or_gtotal_ret_type : + FStar_Reflection_Types.comp -> + FStar_Reflection_Types.typ FStar_Pervasives_Native.option) + = + fun c -> + match FStar_Reflection_Builtins.inspect_comp c with + | FStar_Reflection_Data.C_Total ret_ty -> + FStar_Pervasives_Native.Some ret_ty + | FStar_Reflection_Data.C_GTotal ret_ty -> + FStar_Pervasives_Native.Some ret_ty + | uu___ -> FStar_Pervasives_Native.None +let (get_comp_ret_type : + FStar_Reflection_Types.comp -> FStar_Reflection_Types.typ) = + fun c -> + match FStar_Reflection_Builtins.inspect_comp c with + | FStar_Reflection_Data.C_Total ret_ty -> ret_ty + | FStar_Reflection_Data.C_GTotal ret_ty -> ret_ty + | FStar_Reflection_Data.C_Eff (uu___, uu___1, ret_ty, uu___2, uu___3) -> + ret_ty + | FStar_Reflection_Data.C_Lemma (uu___, uu___1, uu___2) -> + FStar_Reflection_Builtins.pack_ln + (FStar_Reflection_Data.Tv_FVar + (FStar_Reflection_Builtins.pack_fv ["Prims"; "unit"])) +let (is_total_or_gtotal : FStar_Reflection_Types.comp -> Prims.bool) = + fun c -> + FStar_Pervasives_Native.uu___is_Some (get_total_or_gtotal_ret_type c) +let (is_unit_type : + FStar_Reflection_Types.typ -> + (Prims.bool, unit) FStar_Tactics_Effect.tac_repr) + = + fun ty -> + FStar_Tactics_Effect.tac_bind + (Prims.mk_range "FStar.InteractiveHelpers.ExploreTerm.fst" + (Prims.of_int (137)) (Prims.of_int (8)) (Prims.of_int (137)) + (Prims.of_int (18))) + (Prims.mk_range "FStar.InteractiveHelpers.ExploreTerm.fst" + (Prims.of_int (137)) (Prims.of_int (2)) (Prims.of_int (139)) + (Prims.of_int (14))) (Obj.magic (FStar_Tactics_Builtins.inspect ty)) + (fun uu___ -> + FStar_Tactics_Effect.lift_div_tac + (fun uu___1 -> + match uu___ with + | FStar_Reflection_Data.Tv_FVar fv -> + FStar_InteractiveHelpers_Base.fv_eq_name fv + FStar_Reflection_Const.unit_lid + | uu___2 -> false)) +type typ_or_comp = + | TC_Typ of FStar_Reflection_Types.typ * FStar_Reflection_Types.binder + Prims.list * Prims.nat + | TC_Comp of FStar_Reflection_Types.comp * FStar_Reflection_Types.binder + Prims.list * Prims.nat +let (uu___is_TC_Typ : typ_or_comp -> Prims.bool) = + fun projectee -> + match projectee with + | TC_Typ (v, pl, num_unflushed) -> true + | uu___ -> false +let (__proj__TC_Typ__item__v : typ_or_comp -> FStar_Reflection_Types.typ) = + fun projectee -> match projectee with | TC_Typ (v, pl, num_unflushed) -> v +let (__proj__TC_Typ__item__pl : + typ_or_comp -> FStar_Reflection_Types.binder Prims.list) = + fun projectee -> match projectee with | TC_Typ (v, pl, num_unflushed) -> pl +let (__proj__TC_Typ__item__num_unflushed : typ_or_comp -> Prims.nat) = + fun projectee -> + match projectee with | TC_Typ (v, pl, num_unflushed) -> num_unflushed +let (uu___is_TC_Comp : typ_or_comp -> Prims.bool) = + fun projectee -> + match projectee with + | TC_Comp (v, pl, num_unflushed) -> true + | uu___ -> false +let (__proj__TC_Comp__item__v : typ_or_comp -> FStar_Reflection_Types.comp) = + fun projectee -> match projectee with | TC_Comp (v, pl, num_unflushed) -> v +let (__proj__TC_Comp__item__pl : + typ_or_comp -> FStar_Reflection_Types.binder Prims.list) = + fun projectee -> + match projectee with | TC_Comp (v, pl, num_unflushed) -> pl +let (__proj__TC_Comp__item__num_unflushed : typ_or_comp -> Prims.nat) = + fun projectee -> + match projectee with | TC_Comp (v, pl, num_unflushed) -> num_unflushed +let (typ_or_comp_to_string : + typ_or_comp -> (Prims.string, unit) FStar_Tactics_Effect.tac_repr) = + fun tyc -> + match tyc with + | TC_Typ (v, pl, num_unflushed) -> + FStar_Tactics_Effect.tac_bind + (Prims.mk_range "FStar.InteractiveHelpers.ExploreTerm.fst" + (Prims.of_int (165)) (Prims.of_int (17)) (Prims.of_int (166)) + (Prims.of_int (37))) + (Prims.mk_range "prims.fst" (Prims.of_int (606)) + (Prims.of_int (19)) (Prims.of_int (606)) (Prims.of_int (31))) + (Obj.magic + (FStar_Tactics_Effect.tac_bind + (Prims.mk_range "FStar.InteractiveHelpers.ExploreTerm.fst" + (Prims.of_int (165)) (Prims.of_int (17)) + (Prims.of_int (165)) (Prims.of_int (33))) + (Prims.mk_range "FStar.InteractiveHelpers.ExploreTerm.fst" + (Prims.of_int (165)) (Prims.of_int (17)) + (Prims.of_int (166)) (Prims.of_int (37))) + (Obj.magic (FStar_Tactics_Builtins.term_to_string v)) + (fun uu___ -> + (fun uu___ -> + Obj.magic + (FStar_Tactics_Effect.tac_bind + (Prims.mk_range + "FStar.InteractiveHelpers.ExploreTerm.fst" + (Prims.of_int (165)) (Prims.of_int (36)) + (Prims.of_int (166)) (Prims.of_int (37))) + (Prims.mk_range "prims.fst" (Prims.of_int (606)) + (Prims.of_int (19)) (Prims.of_int (606)) + (Prims.of_int (31))) + (Obj.magic + (FStar_Tactics_Effect.tac_bind + (Prims.mk_range + "FStar.InteractiveHelpers.ExploreTerm.fst" + (Prims.of_int (165)) (Prims.of_int (43)) + (Prims.of_int (166)) (Prims.of_int (37))) + (Prims.mk_range "prims.fst" + (Prims.of_int (606)) (Prims.of_int (19)) + (Prims.of_int (606)) (Prims.of_int (31))) + (Obj.magic + (FStar_Tactics_Effect.tac_bind + (Prims.mk_range + "FStar.InteractiveHelpers.ExploreTerm.fst" + (Prims.of_int (165)) + (Prims.of_int (43)) + (Prims.of_int (165)) + (Prims.of_int (88))) + (Prims.mk_range "prims.fst" + (Prims.of_int (606)) + (Prims.of_int (19)) + (Prims.of_int (606)) + (Prims.of_int (31))) + (Obj.magic + (FStar_InteractiveHelpers_Base.list_to_string + (fun uu___1 -> + (fun b -> + Obj.magic + (FStar_Tactics_Effect.lift_div_tac + (fun uu___1 -> + FStar_Reflection_Derived.name_of_binder + b))) uu___1) pl)) + (fun uu___1 -> + FStar_Tactics_Effect.lift_div_tac + (fun uu___2 -> + Prims.strcat uu___1 + (Prims.strcat " " + (Prims.string_of_int + num_unflushed)))))) + (fun uu___1 -> + FStar_Tactics_Effect.lift_div_tac + (fun uu___2 -> Prims.strcat ") " uu___1)))) + (fun uu___1 -> + FStar_Tactics_Effect.lift_div_tac + (fun uu___2 -> Prims.strcat uu___ uu___1)))) + uu___))) + (fun uu___ -> + FStar_Tactics_Effect.lift_div_tac + (fun uu___1 -> Prims.strcat "TC_Typ (" uu___)) + | TC_Comp (c, pl, num_unflushed) -> + FStar_Tactics_Effect.tac_bind + (Prims.mk_range "FStar.InteractiveHelpers.ExploreTerm.fst" + (Prims.of_int (168)) (Prims.of_int (18)) (Prims.of_int (169)) + (Prims.of_int (37))) + (Prims.mk_range "prims.fst" (Prims.of_int (606)) + (Prims.of_int (19)) (Prims.of_int (606)) (Prims.of_int (31))) + (Obj.magic + (FStar_Tactics_Effect.tac_bind + (Prims.mk_range "FStar.InteractiveHelpers.ExploreTerm.fst" + (Prims.of_int (168)) (Prims.of_int (18)) + (Prims.of_int (168)) (Prims.of_int (35))) + (Prims.mk_range "FStar.InteractiveHelpers.ExploreTerm.fst" + (Prims.of_int (168)) (Prims.of_int (18)) + (Prims.of_int (169)) (Prims.of_int (37))) + (Obj.magic (FStar_InteractiveHelpers_Base.acomp_to_string c)) + (fun uu___ -> + (fun uu___ -> + Obj.magic + (FStar_Tactics_Effect.tac_bind + (Prims.mk_range + "FStar.InteractiveHelpers.ExploreTerm.fst" + (Prims.of_int (168)) (Prims.of_int (38)) + (Prims.of_int (169)) (Prims.of_int (37))) + (Prims.mk_range "prims.fst" (Prims.of_int (606)) + (Prims.of_int (19)) (Prims.of_int (606)) + (Prims.of_int (31))) + (Obj.magic + (FStar_Tactics_Effect.tac_bind + (Prims.mk_range + "FStar.InteractiveHelpers.ExploreTerm.fst" + (Prims.of_int (168)) (Prims.of_int (45)) + (Prims.of_int (169)) (Prims.of_int (37))) + (Prims.mk_range "prims.fst" + (Prims.of_int (606)) (Prims.of_int (19)) + (Prims.of_int (606)) (Prims.of_int (31))) + (Obj.magic + (FStar_Tactics_Effect.tac_bind + (Prims.mk_range + "FStar.InteractiveHelpers.ExploreTerm.fst" + (Prims.of_int (168)) + (Prims.of_int (45)) + (Prims.of_int (168)) + (Prims.of_int (90))) + (Prims.mk_range "prims.fst" + (Prims.of_int (606)) + (Prims.of_int (19)) + (Prims.of_int (606)) + (Prims.of_int (31))) + (Obj.magic + (FStar_InteractiveHelpers_Base.list_to_string + (fun uu___1 -> + (fun b -> + Obj.magic + (FStar_Tactics_Effect.lift_div_tac + (fun uu___1 -> + FStar_Reflection_Derived.name_of_binder + b))) uu___1) pl)) + (fun uu___1 -> + FStar_Tactics_Effect.lift_div_tac + (fun uu___2 -> + Prims.strcat uu___1 + (Prims.strcat " " + (Prims.string_of_int + num_unflushed)))))) + (fun uu___1 -> + FStar_Tactics_Effect.lift_div_tac + (fun uu___2 -> Prims.strcat ") " uu___1)))) + (fun uu___1 -> + FStar_Tactics_Effect.lift_div_tac + (fun uu___2 -> Prims.strcat uu___ uu___1)))) + uu___))) + (fun uu___ -> + FStar_Tactics_Effect.lift_div_tac + (fun uu___1 -> Prims.strcat "TC_Comp (" uu___)) +let (params_of_typ_or_comp : + typ_or_comp -> FStar_Reflection_Types.binder Prims.list) = + fun c -> + match c with + | TC_Typ (uu___, pl, uu___1) -> pl + | TC_Comp (uu___, pl, uu___1) -> pl +let (num_unflushed_of_typ_or_comp : typ_or_comp -> Prims.nat) = + fun c -> + match c with + | TC_Typ (uu___, uu___1, n) -> n + | TC_Comp (uu___, uu___1, n) -> n +let (safe_typ_or_comp : + Prims.bool -> + FStar_Reflection_Types.env -> + FStar_Reflection_Types.term -> + (typ_or_comp FStar_Pervasives_Native.option, unit) + FStar_Tactics_Effect.tac_repr) + = + fun dbg -> + fun e -> + fun t -> + FStar_Tactics_Effect.tac_bind + (Prims.mk_range "FStar.InteractiveHelpers.ExploreTerm.fst" + (Prims.of_int (185)) (Prims.of_int (8)) (Prims.of_int (185)) + (Prims.of_int (20))) + (Prims.mk_range "FStar.InteractiveHelpers.ExploreTerm.fst" + (Prims.of_int (185)) (Prims.of_int (2)) (Prims.of_int (195)) + (Prims.of_int (25))) (Obj.magic (safe_tcc e t)) + (fun uu___ -> + (fun uu___ -> + match uu___ with + | FStar_Pervasives_Native.None -> + Obj.magic + (FStar_Tactics_Effect.tac_bind + (Prims.mk_range + "FStar.InteractiveHelpers.ExploreTerm.fst" + (Prims.of_int (187)) (Prims.of_int (4)) + (Prims.of_int (189)) (Prims.of_int (35))) + (Prims.mk_range + "FStar.InteractiveHelpers.ExploreTerm.fst" + (Prims.of_int (190)) (Prims.of_int (4)) + (Prims.of_int (190)) (Prims.of_int (8))) + (Obj.magic + (FStar_Tactics_Effect.tac_bind + (Prims.mk_range + "FStar.InteractiveHelpers.ExploreTerm.fst" + (Prims.of_int (187)) (Prims.of_int (18)) + (Prims.of_int (189)) (Prims.of_int (35))) + (Prims.mk_range + "FStar.InteractiveHelpers.ExploreTerm.fst" + (Prims.of_int (187)) (Prims.of_int (4)) + (Prims.of_int (189)) (Prims.of_int (35))) + (Obj.magic + (FStar_Tactics_Effect.tac_bind + (Prims.mk_range + "FStar.InteractiveHelpers.ExploreTerm.fst" + (Prims.of_int (188)) + (Prims.of_int (19)) + (Prims.of_int (189)) + (Prims.of_int (34))) + (Prims.mk_range "prims.fst" + (Prims.of_int (606)) + (Prims.of_int (19)) + (Prims.of_int (606)) + (Prims.of_int (31))) + (Obj.magic + (FStar_Tactics_Effect.tac_bind + (Prims.mk_range + "FStar.InteractiveHelpers.ExploreTerm.fst" + (Prims.of_int (188)) + (Prims.of_int (33)) + (Prims.of_int (189)) + (Prims.of_int (34))) + (Prims.mk_range "prims.fst" + (Prims.of_int (606)) + (Prims.of_int (19)) + (Prims.of_int (606)) + (Prims.of_int (31))) + (Obj.magic + (FStar_Tactics_Effect.tac_bind + (Prims.mk_range + "FStar.InteractiveHelpers.ExploreTerm.fst" + (Prims.of_int (188)) + (Prims.of_int (33)) + (Prims.of_int (188)) + (Prims.of_int (49))) + (Prims.mk_range "prims.fst" + (Prims.of_int (606)) + (Prims.of_int (19)) + (Prims.of_int (606)) + (Prims.of_int (31))) + (Obj.magic + (FStar_Tactics_Builtins.term_to_string + t)) + (fun uu___1 -> + FStar_Tactics_Effect.lift_div_tac + (fun uu___2 -> + Prims.strcat uu___1 + "\n-comp: None")))) + (fun uu___1 -> + FStar_Tactics_Effect.lift_div_tac + (fun uu___2 -> + Prims.strcat "\n-term: " + uu___1)))) + (fun uu___1 -> + FStar_Tactics_Effect.lift_div_tac + (fun uu___2 -> + Prims.strcat + "[> safe_typ_or_comp:" uu___1)))) + (fun uu___1 -> + (fun uu___1 -> + Obj.magic + (FStar_InteractiveHelpers_Base.print_dbg + dbg uu___1)) uu___1))) + (fun uu___1 -> + FStar_Tactics_Effect.lift_div_tac + (fun uu___2 -> FStar_Pervasives_Native.None))) + | FStar_Pervasives_Native.Some c -> + Obj.magic + (FStar_Tactics_Effect.tac_bind + (Prims.mk_range + "FStar.InteractiveHelpers.ExploreTerm.fst" + (Prims.of_int (192)) (Prims.of_int (4)) + (Prims.of_int (194)) (Prims.of_int (51))) + (Prims.mk_range + "FStar.InteractiveHelpers.ExploreTerm.fst" + (Prims.of_int (195)) (Prims.of_int (4)) + (Prims.of_int (195)) (Prims.of_int (25))) + (Obj.magic + (FStar_Tactics_Effect.tac_bind + (Prims.mk_range + "FStar.InteractiveHelpers.ExploreTerm.fst" + (Prims.of_int (192)) (Prims.of_int (18)) + (Prims.of_int (194)) (Prims.of_int (51))) + (Prims.mk_range + "FStar.InteractiveHelpers.ExploreTerm.fst" + (Prims.of_int (192)) (Prims.of_int (4)) + (Prims.of_int (194)) (Prims.of_int (51))) + (Obj.magic + (FStar_Tactics_Effect.tac_bind + (Prims.mk_range + "FStar.InteractiveHelpers.ExploreTerm.fst" + (Prims.of_int (193)) + (Prims.of_int (19)) + (Prims.of_int (194)) + (Prims.of_int (50))) + (Prims.mk_range "prims.fst" + (Prims.of_int (606)) + (Prims.of_int (19)) + (Prims.of_int (606)) + (Prims.of_int (31))) + (Obj.magic + (FStar_Tactics_Effect.tac_bind + (Prims.mk_range + "FStar.InteractiveHelpers.ExploreTerm.fst" + (Prims.of_int (193)) + (Prims.of_int (33)) + (Prims.of_int (194)) + (Prims.of_int (50))) + (Prims.mk_range "prims.fst" + (Prims.of_int (606)) + (Prims.of_int (19)) + (Prims.of_int (606)) + (Prims.of_int (31))) + (Obj.magic + (FStar_Tactics_Effect.tac_bind + (Prims.mk_range + "FStar.InteractiveHelpers.ExploreTerm.fst" + (Prims.of_int (193)) + (Prims.of_int (33)) + (Prims.of_int (193)) + (Prims.of_int (49))) + (Prims.mk_range + "FStar.InteractiveHelpers.ExploreTerm.fst" + (Prims.of_int (193)) + (Prims.of_int (33)) + (Prims.of_int (194)) + (Prims.of_int (50))) + (Obj.magic + (FStar_Tactics_Builtins.term_to_string + t)) + (fun uu___1 -> + (fun uu___1 -> + Obj.magic + (FStar_Tactics_Effect.tac_bind + (Prims.mk_range + "FStar.InteractiveHelpers.ExploreTerm.fst" + (Prims.of_int (194)) + (Prims.of_int (19)) + (Prims.of_int (194)) + (Prims.of_int (50))) + (Prims.mk_range + "prims.fst" + (Prims.of_int (606)) + (Prims.of_int (19)) + (Prims.of_int (606)) + (Prims.of_int (31))) + (Obj.magic + (FStar_Tactics_Effect.tac_bind + (Prims.mk_range + "FStar.InteractiveHelpers.ExploreTerm.fst" + (Prims.of_int (194)) + (Prims.of_int (33)) + (Prims.of_int (194)) + (Prims.of_int (50))) + (Prims.mk_range + "prims.fst" + (Prims.of_int (606)) + (Prims.of_int (19)) + (Prims.of_int (606)) + (Prims.of_int (31))) + (Obj.magic + (FStar_InteractiveHelpers_Base.acomp_to_string + c)) + (fun uu___2 + -> + FStar_Tactics_Effect.lift_div_tac + (fun + uu___3 -> + Prims.strcat + "\n-comp: " + uu___2)))) + (fun uu___2 -> + FStar_Tactics_Effect.lift_div_tac + (fun uu___3 + -> + Prims.strcat + uu___1 + uu___2)))) + uu___1))) + (fun uu___1 -> + FStar_Tactics_Effect.lift_div_tac + (fun uu___2 -> + Prims.strcat "\n-term: " + uu___1)))) + (fun uu___1 -> + FStar_Tactics_Effect.lift_div_tac + (fun uu___2 -> + Prims.strcat + "[> safe_typ_or_comp:" uu___1)))) + (fun uu___1 -> + (fun uu___1 -> + Obj.magic + (FStar_InteractiveHelpers_Base.print_dbg + dbg uu___1)) uu___1))) + (fun uu___1 -> + FStar_Tactics_Effect.lift_div_tac + (fun uu___2 -> + FStar_Pervasives_Native.Some + (TC_Comp (c, [], Prims.int_zero)))))) + uu___) +let (subst_bv_in_comp : + FStar_Reflection_Types.env -> + FStar_Reflection_Types.bv -> + FStar_Reflection_Types.term -> + FStar_Reflection_Types.comp -> + (FStar_Reflection_Types.comp, unit) FStar_Tactics_Effect.tac_repr) + = + fun e -> + fun b -> + fun t -> + fun c -> + FStar_InteractiveHelpers_Base.apply_subst_in_comp e c [(b, t)] +let (subst_binder_in_comp : + FStar_Reflection_Types.env -> + FStar_Reflection_Types.binder -> + FStar_Reflection_Types.term -> + FStar_Reflection_Types.comp -> + (FStar_Reflection_Types.comp, unit) FStar_Tactics_Effect.tac_repr) + = + fun e -> + fun b -> + fun t -> + fun c -> + subst_bv_in_comp e (FStar_Reflection_Derived.bv_of_binder b) t c +let rec (unfold_until_arrow : + FStar_Reflection_Types.env -> + FStar_Reflection_Types.typ -> + (FStar_Reflection_Types.typ, unit) FStar_Tactics_Effect.tac_repr) + = + fun e -> + fun ty0 -> + FStar_Tactics_Effect.tac_bind + (Prims.mk_range "FStar.InteractiveHelpers.ExploreTerm.fst" + (Prims.of_int (209)) (Prims.of_int (5)) (Prims.of_int (209)) + (Prims.of_int (28))) + (Prims.mk_range "FStar.InteractiveHelpers.ExploreTerm.fst" + (Prims.of_int (209)) (Prims.of_int (2)) (Prims.of_int (255)) + (Prims.of_int (7))) + (Obj.magic + (FStar_Tactics_Effect.tac_bind + (Prims.mk_range "FStar.InteractiveHelpers.ExploreTerm.fst" + (Prims.of_int (209)) (Prims.of_int (15)) + (Prims.of_int (209)) (Prims.of_int (28))) + (Prims.mk_range "FStar.InteractiveHelpers.ExploreTerm.fst" + (Prims.of_int (209)) (Prims.of_int (5)) (Prims.of_int (209)) + (Prims.of_int (28))) + (Obj.magic (FStar_Tactics_Builtins.inspect ty0)) + (fun uu___ -> + FStar_Tactics_Effect.lift_div_tac + (fun uu___1 -> + FStar_Reflection_Data.uu___is_Tv_Arrow uu___)))) + (fun uu___ -> + (fun uu___ -> + if uu___ + then + Obj.magic + (Obj.repr + (FStar_Tactics_Effect.lift_div_tac (fun uu___1 -> ty0))) + else + Obj.magic + (Obj.repr + (FStar_Tactics_Effect.tac_bind + (Prims.mk_range + "FStar.InteractiveHelpers.ExploreTerm.fst" + (Prims.of_int (213)) (Prims.of_int (13)) + (Prims.of_int (213)) (Prims.of_int (35))) + (Prims.mk_range + "FStar.InteractiveHelpers.ExploreTerm.fst" + (Prims.of_int (215)) (Prims.of_int (4)) + (Prims.of_int (254)) (Prims.of_int (75))) + (Obj.magic + (FStar_Tactics_Builtins.norm_term_env e [] ty0)) + (fun uu___2 -> + (fun ty -> + Obj.magic + (FStar_Tactics_Effect.tac_bind + (Prims.mk_range + "FStar.InteractiveHelpers.ExploreTerm.fst" + (Prims.of_int (216)) (Prims.of_int (6)) + (Prims.of_int (226)) (Prims.of_int (9))) + (Prims.mk_range + "FStar.InteractiveHelpers.ExploreTerm.fst" + (Prims.of_int (229)) (Prims.of_int (4)) + (Prims.of_int (254)) + (Prims.of_int (75))) + (FStar_Tactics_Effect.lift_div_tac + (fun uu___2 -> + fun fv -> + FStar_Tactics_Effect.tac_bind + (Prims.mk_range + "FStar.InteractiveHelpers.ExploreTerm.fst" + (Prims.of_int (216)) + (Prims.of_int (15)) + (Prims.of_int (216)) + (Prims.of_int (32))) + (Prims.mk_range + "FStar.InteractiveHelpers.ExploreTerm.fst" + (Prims.of_int (217)) + (Prims.of_int (6)) + (Prims.of_int (226)) + (Prims.of_int (9))) + (Obj.magic + (FStar_Tactics_Builtins.pack + (FStar_Reflection_Data.Tv_FVar + fv))) + (fun uu___3 -> + (fun ty1 -> + Obj.magic + (FStar_Tactics_Effect.tac_bind + (Prims.mk_range + "FStar.InteractiveHelpers.ExploreTerm.fst" + (Prims.of_int (217)) + (Prims.of_int (16)) + (Prims.of_int (217)) + (Prims.of_int (44))) + (Prims.mk_range + "FStar.InteractiveHelpers.ExploreTerm.fst" + (Prims.of_int (219)) + (Prims.of_int (6)) + (Prims.of_int (226)) + (Prims.of_int (9))) + (FStar_Tactics_Effect.lift_div_tac + (fun uu___3 -> + FStar_Reflection_Derived.flatten_name + (FStar_Reflection_Builtins.inspect_fv + fv))) + (fun uu___3 -> + (fun fvn -> + Obj.magic + (FStar_Tactics_Effect.tac_bind + (Prims.mk_range + "FStar.InteractiveHelpers.ExploreTerm.fst" + (Prims.of_int (219)) + (Prims.of_int (16)) + (Prims.of_int (219)) + (Prims.of_int (53))) + (Prims.mk_range + "FStar.InteractiveHelpers.ExploreTerm.fst" + (Prims.of_int (221)) + (Prims.of_int (12)) + (Prims.of_int (225)) + (Prims.of_int (16))) + (Obj.magic + (FStar_Tactics_Builtins.norm_term_env + e + [ + FStar_Pervasives.delta_only + [fvn]] + ty1)) + (fun + uu___3 -> + (fun ty' + -> + Obj.magic + (FStar_Tactics_Effect.tac_bind + (Prims.mk_range + "FStar.InteractiveHelpers.ExploreTerm.fst" + (Prims.of_int (221)) + (Prims.of_int (18)) + (Prims.of_int (221)) + (Prims.of_int (29))) + (Prims.mk_range + "FStar.InteractiveHelpers.ExploreTerm.fst" + (Prims.of_int (221)) + (Prims.of_int (12)) + (Prims.of_int (225)) + (Prims.of_int (16))) + (Obj.magic + (FStar_Tactics_Builtins.inspect + ty')) + (fun + uu___3 -> + (fun + uu___3 -> + match uu___3 + with + | + FStar_Reflection_Data.Tv_FVar + fv' -> + Obj.magic + (Obj.repr + (if + (FStar_Reflection_Derived.flatten_name + (FStar_Reflection_Builtins.inspect_fv + fv')) = + fvn + then + Obj.repr + (FStar_Tactics_Effect.tac_bind + (Prims.mk_range + "FStar.InteractiveHelpers.ExploreTerm.fst" + (Prims.of_int (224)) + (Prims.of_int (19)) + (Prims.of_int (224)) + (Prims.of_int (82))) + (Prims.mk_range + "FStar.InteractiveHelpers.ExploreTerm.fst" + (Prims.of_int (224)) + (Prims.of_int (13)) + (Prims.of_int (224)) + (Prims.of_int (82))) + (Obj.magic + (FStar_Tactics_Effect.tac_bind + (Prims.mk_range + "FStar.InteractiveHelpers.ExploreTerm.fst" + (Prims.of_int (224)) + (Prims.of_int (63)) + (Prims.of_int (224)) + (Prims.of_int (81))) + (Prims.mk_range + "prims.fst" + (Prims.of_int (606)) + (Prims.of_int (19)) + (Prims.of_int (606)) + (Prims.of_int (31))) + (Obj.magic + (FStar_Tactics_Builtins.term_to_string + ty0)) + (fun + uu___4 -> + FStar_Tactics_Effect.lift_div_tac + (fun + uu___5 -> + Prims.strcat + "unfold_until_arrow: could not unfold: " + uu___4)))) + (fun + uu___4 -> + (fun + uu___4 -> + Obj.magic + (FStar_InteractiveHelpers_Base.mfail + uu___4)) + uu___4)) + else + Obj.repr + (FStar_Tactics_Effect.lift_div_tac + (fun + uu___5 -> + ty')))) + | + uu___4 -> + Obj.magic + (Obj.repr + (FStar_Tactics_Effect.lift_div_tac + (fun + uu___5 -> + ty')))) + uu___3))) + uu___3))) + uu___3))) uu___3))) + (fun uu___2 -> + (fun unfold_fv -> + Obj.magic + (FStar_Tactics_Effect.tac_bind + (Prims.mk_range + "FStar.InteractiveHelpers.ExploreTerm.fst" + (Prims.of_int (229)) + (Prims.of_int (10)) + (Prims.of_int (229)) + (Prims.of_int (20))) + (Prims.mk_range + "FStar.InteractiveHelpers.ExploreTerm.fst" + (Prims.of_int (229)) + (Prims.of_int (4)) + (Prims.of_int (254)) + (Prims.of_int (75))) + (Obj.magic + (FStar_Tactics_Builtins.inspect + ty)) + (fun uu___2 -> + (fun uu___2 -> + match uu___2 with + | FStar_Reflection_Data.Tv_Arrow + (uu___3, uu___4) -> + Obj.magic + (Obj.repr + (FStar_Tactics_Effect.lift_div_tac + (fun uu___5 + -> ty))) + | FStar_Reflection_Data.Tv_FVar + fv -> + Obj.magic + (Obj.repr + (FStar_Tactics_Effect.tac_bind + (Prims.mk_range + "FStar.InteractiveHelpers.ExploreTerm.fst" + (Prims.of_int (233)) + (Prims.of_int (16)) + (Prims.of_int (233)) + (Prims.of_int (28))) + (Prims.mk_range + "FStar.InteractiveHelpers.ExploreTerm.fst" + (Prims.of_int (234)) + (Prims.of_int (6)) + (Prims.of_int (234)) + (Prims.of_int (30))) + (Obj.magic + (unfold_fv + fv)) + (fun uu___3 + -> + (fun ty' + -> + Obj.magic + (unfold_until_arrow + e ty')) + uu___3))) + | FStar_Reflection_Data.Tv_App + (uu___3, uu___4) -> + Obj.magic + (Obj.repr + (FStar_Tactics_Effect.tac_bind + (Prims.mk_range + "FStar.InteractiveHelpers.ExploreTerm.fst" + (Prims.of_int (237)) + (Prims.of_int (21)) + (Prims.of_int (237)) + (Prims.of_int (35))) + (Prims.mk_range + "FStar.InteractiveHelpers.ExploreTerm.fst" + (Prims.of_int (237)) + (Prims.of_int (6)) + (Prims.of_int (244)) + (Prims.of_int (9))) + (FStar_Tactics_Effect.lift_div_tac + (fun + uu___5 -> + FStar_Reflection_Derived.collect_app + ty)) + (fun uu___5 + -> + (fun + uu___5 -> + match uu___5 + with + | + (hd, + args) -> + Obj.magic + (FStar_Tactics_Effect.tac_bind + (Prims.mk_range + "FStar.InteractiveHelpers.ExploreTerm.fst" + (Prims.of_int (238)) + (Prims.of_int (18)) + (Prims.of_int (238)) + (Prims.of_int (28))) + (Prims.mk_range + "FStar.InteractiveHelpers.ExploreTerm.fst" + (Prims.of_int (238)) + (Prims.of_int (12)) + (Prims.of_int (243)) + (Prims.of_int (82))) + (Obj.magic + (FStar_Tactics_Builtins.inspect + hd)) + (fun + uu___6 -> + (fun + uu___6 -> + match uu___6 + with + | + FStar_Reflection_Data.Tv_FVar + fv -> + Obj.magic + (FStar_Tactics_Effect.tac_bind + (Prims.mk_range + "FStar.InteractiveHelpers.ExploreTerm.fst" + (Prims.of_int (240)) + (Prims.of_int (18)) + (Prims.of_int (240)) + (Prims.of_int (30))) + (Prims.mk_range + "FStar.InteractiveHelpers.ExploreTerm.fst" + (Prims.of_int (241)) + (Prims.of_int (8)) + (Prims.of_int (242)) + (Prims.of_int (32))) + (Obj.magic + (unfold_fv + fv)) + (fun + uu___7 -> + (fun hd' + -> + Obj.magic + (FStar_Tactics_Effect.tac_bind + (Prims.mk_range + "FStar.InteractiveHelpers.ExploreTerm.fst" + (Prims.of_int (241)) + (Prims.of_int (18)) + (Prims.of_int (241)) + (Prims.of_int (33))) + (Prims.mk_range + "FStar.InteractiveHelpers.ExploreTerm.fst" + (Prims.of_int (242)) + (Prims.of_int (8)) + (Prims.of_int (242)) + (Prims.of_int (32))) + (FStar_Tactics_Effect.lift_div_tac + (fun + uu___7 -> + FStar_Reflection_Derived.mk_app + hd' args)) + (fun + uu___7 -> + (fun ty' + -> + Obj.magic + (unfold_until_arrow + e ty')) + uu___7))) + uu___7)) + | + uu___7 -> + Obj.magic + (FStar_Tactics_Effect.tac_bind + (Prims.mk_range + "FStar.InteractiveHelpers.ExploreTerm.fst" + (Prims.of_int (243)) + (Prims.of_int (19)) + (Prims.of_int (243)) + (Prims.of_int (82))) + (Prims.mk_range + "FStar.InteractiveHelpers.ExploreTerm.fst" + (Prims.of_int (243)) + (Prims.of_int (13)) + (Prims.of_int (243)) + (Prims.of_int (82))) + (Obj.magic + (FStar_Tactics_Effect.tac_bind + (Prims.mk_range + "FStar.InteractiveHelpers.ExploreTerm.fst" + (Prims.of_int (243)) + (Prims.of_int (63)) + (Prims.of_int (243)) + (Prims.of_int (81))) + (Prims.mk_range + "prims.fst" + (Prims.of_int (606)) + (Prims.of_int (19)) + (Prims.of_int (606)) + (Prims.of_int (31))) + (Obj.magic + (FStar_Tactics_Builtins.term_to_string + ty0)) + (fun + uu___8 -> + FStar_Tactics_Effect.lift_div_tac + (fun + uu___9 -> + Prims.strcat + "unfold_until_arrow: could not unfold: " + uu___8)))) + (fun + uu___8 -> + (fun + uu___8 -> + Obj.magic + (FStar_InteractiveHelpers_Base.mfail + uu___8)) + uu___8))) + uu___6))) + uu___5))) + | FStar_Reflection_Data.Tv_Refine + (bv, ref) -> + Obj.magic + (Obj.repr + (FStar_Tactics_Effect.tac_bind + (Prims.mk_range + "FStar.InteractiveHelpers.ExploreTerm.fst" + (Prims.of_int (247)) + (Prims.of_int (16)) + (Prims.of_int (247)) + (Prims.of_int (29))) + (Prims.mk_range + "FStar.InteractiveHelpers.ExploreTerm.fst" + (Prims.of_int (248)) + (Prims.of_int (6)) + (Prims.of_int (248)) + (Prims.of_int (30))) + (FStar_Tactics_Effect.lift_div_tac + (fun + uu___3 -> + FStar_Reflection_Derived.type_of_bv + bv)) + (fun uu___3 + -> + (fun ty' + -> + Obj.magic + (unfold_until_arrow + e ty')) + uu___3))) + | FStar_Reflection_Data.Tv_AscribedT + (body, uu___3, + uu___4, uu___5) + -> + Obj.magic + (Obj.repr + (unfold_until_arrow + e body)) + | FStar_Reflection_Data.Tv_AscribedC + (body, uu___3, + uu___4, uu___5) + -> + Obj.magic + (Obj.repr + (unfold_until_arrow + e body)) + | uu___3 -> + Obj.magic + (Obj.repr + (FStar_Tactics_Effect.tac_bind + (Prims.mk_range + "FStar.InteractiveHelpers.ExploreTerm.fst" + (Prims.of_int (254)) + (Prims.of_int (12)) + (Prims.of_int (254)) + (Prims.of_int (75))) + (Prims.mk_range + "FStar.InteractiveHelpers.ExploreTerm.fst" + (Prims.of_int (254)) + (Prims.of_int (6)) + (Prims.of_int (254)) + (Prims.of_int (75))) + (Obj.magic + (FStar_Tactics_Effect.tac_bind + (Prims.mk_range + "FStar.InteractiveHelpers.ExploreTerm.fst" + (Prims.of_int (254)) + (Prims.of_int (56)) + (Prims.of_int (254)) + (Prims.of_int (74))) + (Prims.mk_range + "prims.fst" + (Prims.of_int (606)) + (Prims.of_int (19)) + (Prims.of_int (606)) + (Prims.of_int (31))) + (Obj.magic + (FStar_Tactics_Builtins.term_to_string + ty0)) + (fun + uu___4 -> + FStar_Tactics_Effect.lift_div_tac + (fun + uu___5 -> + Prims.strcat + "unfold_until_arrow: could not unfold: " + uu___4)))) + (fun uu___4 + -> + (fun + uu___4 -> + Obj.magic + (FStar_InteractiveHelpers_Base.mfail + uu___4)) + uu___4)))) + uu___2))) uu___2))) uu___2)))) + uu___) +let (inst_comp_once : + FStar_Reflection_Types.env -> + FStar_Reflection_Types.comp -> + FStar_Reflection_Types.term -> + (FStar_Reflection_Types.comp, unit) FStar_Tactics_Effect.tac_repr) + = + fun e -> + fun c -> + fun t -> + FStar_Tactics_Effect.tac_bind + (Prims.mk_range "FStar.InteractiveHelpers.ExploreTerm.fst" + (Prims.of_int (260)) (Prims.of_int (11)) (Prims.of_int (260)) + (Prims.of_int (30))) + (Prims.mk_range "FStar.InteractiveHelpers.ExploreTerm.fst" + (Prims.of_int (261)) (Prims.of_int (2)) (Prims.of_int (267)) + (Prims.of_int (5))) + (FStar_Tactics_Effect.lift_div_tac + (fun uu___ -> get_comp_ret_type c)) + (fun uu___ -> + (fun ty -> + Obj.magic + (FStar_Tactics_Effect.tac_bind + (Prims.mk_range + "FStar.InteractiveHelpers.ExploreTerm.fst" + (Prims.of_int (261)) (Prims.of_int (12)) + (Prims.of_int (261)) (Prims.of_int (35))) + (Prims.mk_range + "FStar.InteractiveHelpers.ExploreTerm.fst" + (Prims.of_int (262)) (Prims.of_int (8)) + (Prims.of_int (266)) (Prims.of_int (46))) + (Obj.magic (unfold_until_arrow e ty)) + (fun uu___ -> + (fun ty' -> + Obj.magic + (FStar_Tactics_Effect.tac_bind + (Prims.mk_range + "FStar.InteractiveHelpers.ExploreTerm.fst" + (Prims.of_int (262)) (Prims.of_int (14)) + (Prims.of_int (262)) (Prims.of_int (25))) + (Prims.mk_range + "FStar.InteractiveHelpers.ExploreTerm.fst" + (Prims.of_int (262)) (Prims.of_int (8)) + (Prims.of_int (266)) (Prims.of_int (46))) + (Obj.magic + (FStar_Tactics_Builtins.inspect ty')) + (fun uu___ -> + (fun uu___ -> + match uu___ with + | FStar_Reflection_Data.Tv_Arrow + (b1, c1) -> + Obj.magic + (subst_binder_in_comp e b1 t c1) + | uu___1 -> + Obj.magic + (FStar_InteractiveHelpers_Base.mfail + "inst_comp_once: inconsistent state")) + uu___))) uu___))) uu___) +let rec (inst_comp : + FStar_Reflection_Types.env -> + FStar_Reflection_Types.comp -> + FStar_Reflection_Types.term Prims.list -> + (FStar_Reflection_Types.comp, unit) FStar_Tactics_Effect.tac_repr) + = + fun uu___2 -> + fun uu___1 -> + fun uu___ -> + (fun e -> + fun c -> + fun tl -> + match tl with + | [] -> + Obj.magic + (Obj.repr + (FStar_Tactics_Effect.lift_div_tac (fun uu___ -> c))) + | t::tl' -> + Obj.magic + (Obj.repr + (FStar_Tactics_Effect.tac_bind + (Prims.mk_range + "FStar.InteractiveHelpers.ExploreTerm.fst" + (Prims.of_int (274)) (Prims.of_int (13)) + (Prims.of_int (276)) (Prims.of_int (36))) + (Prims.mk_range + "FStar.InteractiveHelpers.ExploreTerm.fst" + (Prims.of_int (278)) (Prims.of_int (4)) + (Prims.of_int (278)) (Prims.of_int (22))) + (Obj.magic + (FStar_Tactics_Derived.try_with + (fun uu___ -> + match () with + | () -> inst_comp_once e c t) + (fun uu___ -> + match uu___ with + | FStar_InteractiveHelpers_Base.MetaAnalysis + msg -> + FStar_InteractiveHelpers_Base.mfail + (Prims.strcat "inst_comp: error: " + msg) + | err -> FStar_Tactics_Effect.raise err))) + (fun uu___ -> + (fun c' -> Obj.magic (inst_comp e c' tl')) + uu___)))) uu___2 uu___1 uu___ +let (_abs_update_typ : + FStar_Reflection_Types.binder -> + FStar_Reflection_Types.typ -> + FStar_Reflection_Types.binder Prims.list -> + FStar_Reflection_Types.env -> + (typ_or_comp, unit) FStar_Tactics_Effect.tac_repr) + = + fun b -> + fun ty -> + fun pl -> + fun e -> + FStar_Tactics_Derived.try_with + (fun uu___ -> + match () with + | () -> + FStar_Tactics_Effect.tac_bind + (Prims.mk_range + "FStar.InteractiveHelpers.ExploreTerm.fst" + (Prims.of_int (293)) (Prims.of_int (14)) + (Prims.of_int (293)) (Prims.of_int (37))) + (Prims.mk_range + "FStar.InteractiveHelpers.ExploreTerm.fst" + (Prims.of_int (294)) (Prims.of_int (10)) + (Prims.of_int (299)) (Prims.of_int (49))) + (Obj.magic (unfold_until_arrow e ty)) + (fun uu___1 -> + (fun ty' -> + Obj.magic + (FStar_Tactics_Effect.tac_bind + (Prims.mk_range + "FStar.InteractiveHelpers.ExploreTerm.fst" + (Prims.of_int (294)) (Prims.of_int (16)) + (Prims.of_int (294)) (Prims.of_int (27))) + (Prims.mk_range + "FStar.InteractiveHelpers.ExploreTerm.fst" + (Prims.of_int (294)) (Prims.of_int (10)) + (Prims.of_int (299)) (Prims.of_int (49))) + (Obj.magic + (FStar_Tactics_Builtins.inspect ty')) + (fun uu___1 -> + (fun uu___1 -> + match uu___1 with + | FStar_Reflection_Data.Tv_Arrow + (b1, c1) -> + Obj.magic + (FStar_Tactics_Effect.tac_bind + (Prims.mk_range + "FStar.InteractiveHelpers.ExploreTerm.fst" + (Prims.of_int (296)) + (Prims.of_int (16)) + (Prims.of_int (296)) + (Prims.of_int (77))) + (Prims.mk_range + "FStar.InteractiveHelpers.ExploreTerm.fst" + (Prims.of_int (297)) + (Prims.of_int (6)) + (Prims.of_int (297)) + (Prims.of_int (29))) + (Obj.magic + (FStar_Tactics_Effect.tac_bind + (Prims.mk_range + "FStar.InteractiveHelpers.ExploreTerm.fst" + (Prims.of_int (296)) + (Prims.of_int (42)) + (Prims.of_int (296)) + (Prims.of_int (74))) + (Prims.mk_range + "FStar.InteractiveHelpers.ExploreTerm.fst" + (Prims.of_int (296)) + (Prims.of_int (16)) + (Prims.of_int (296)) + (Prims.of_int (77))) + (Obj.magic + (FStar_Tactics_Builtins.pack + (FStar_Reflection_Data.Tv_Var + (FStar_Reflection_Derived.bv_of_binder + b)))) + (fun uu___2 -> + (fun uu___2 -> + Obj.magic + (subst_binder_in_comp + e b1 uu___2 + c1)) uu___2))) + (fun c1' -> + FStar_Tactics_Effect.lift_div_tac + (fun uu___2 -> + TC_Comp + (c1', (b :: pl), + Prims.int_zero)))) + | uu___2 -> + Obj.magic + (FStar_InteractiveHelpers_Base.mfail + "_abs_update_typ: inconsistent state")) + uu___1))) uu___1)) + (fun uu___ -> + match uu___ with + | FStar_InteractiveHelpers_Base.MetaAnalysis msg -> + FStar_Tactics_Effect.tac_bind + (Prims.mk_range + "FStar.InteractiveHelpers.ExploreTerm.fst" + (Prims.of_int (303)) (Prims.of_int (10)) + (Prims.of_int (303)) (Prims.of_int (93))) + (Prims.mk_range + "FStar.InteractiveHelpers.ExploreTerm.fst" + (Prims.of_int (303)) (Prims.of_int (4)) + (Prims.of_int (303)) (Prims.of_int (93))) + (Obj.magic + (FStar_Tactics_Effect.tac_bind + (Prims.mk_range + "FStar.InteractiveHelpers.ExploreTerm.fst" + (Prims.of_int (303)) (Prims.of_int (61)) + (Prims.of_int (303)) (Prims.of_int (92))) + (Prims.mk_range "prims.fst" (Prims.of_int (606)) + (Prims.of_int (19)) (Prims.of_int (606)) + (Prims.of_int (31))) + (Obj.magic + (FStar_Tactics_Effect.tac_bind + (Prims.mk_range + "FStar.InteractiveHelpers.ExploreTerm.fst" + (Prims.of_int (303)) (Prims.of_int (61)) + (Prims.of_int (303)) (Prims.of_int (78))) + (Prims.mk_range "prims.fst" + (Prims.of_int (606)) (Prims.of_int (19)) + (Prims.of_int (606)) (Prims.of_int (31))) + (Obj.magic + (FStar_Tactics_Builtins.term_to_string ty)) + (fun uu___1 -> + FStar_Tactics_Effect.lift_div_tac + (fun uu___2 -> + Prims.strcat uu___1 + (Prims.strcat ":\n" msg))))) + (fun uu___1 -> + FStar_Tactics_Effect.lift_div_tac + (fun uu___2 -> + Prims.strcat + "_abs_update_typ: could not find an arrow in: " + uu___1)))) + (fun uu___1 -> + (fun uu___1 -> + Obj.magic + (FStar_InteractiveHelpers_Base.mfail uu___1)) + uu___1) + | err -> FStar_Tactics_Effect.raise err) +let (abs_update_typ_or_comp : + FStar_Reflection_Types.binder -> + typ_or_comp -> + FStar_Reflection_Types.env -> + (typ_or_comp, unit) FStar_Tactics_Effect.tac_repr) + = + fun uu___2 -> + fun uu___1 -> + fun uu___ -> + (fun b -> + fun c -> + fun e -> + Obj.magic + (FStar_Tactics_Effect.lift_div_tac + (fun uu___ -> + match c with + | TC_Typ (v, pl, n) -> + TC_Typ (v, (b :: pl), (n + Prims.int_one)) + | TC_Comp (v, pl, n) -> + TC_Comp (v, (b :: pl), (n + Prims.int_one))))) + uu___2 uu___1 uu___ +let (abs_update_opt_typ_or_comp : + FStar_Reflection_Types.binder -> + typ_or_comp FStar_Pervasives_Native.option -> + FStar_Reflection_Types.env -> + (typ_or_comp FStar_Pervasives_Native.option, unit) + FStar_Tactics_Effect.tac_repr) + = + fun uu___2 -> + fun uu___1 -> + fun uu___ -> + (fun b -> + fun opt_c -> + fun e -> + match opt_c with + | FStar_Pervasives_Native.None -> + Obj.magic + (Obj.repr + (FStar_Tactics_Effect.lift_div_tac + (fun uu___ -> FStar_Pervasives_Native.None))) + | FStar_Pervasives_Native.Some c -> + Obj.magic + (Obj.repr + (FStar_Tactics_Derived.try_with + (fun uu___ -> + match () with + | () -> + FStar_Tactics_Effect.tac_bind + (Prims.mk_range + "FStar.InteractiveHelpers.ExploreTerm.fst" + (Prims.of_int (325)) + (Prims.of_int (14)) + (Prims.of_int (325)) + (Prims.of_int (42))) + (Prims.mk_range + "FStar.InteractiveHelpers.ExploreTerm.fst" + (Prims.of_int (326)) + (Prims.of_int (6)) + (Prims.of_int (326)) + (Prims.of_int (12))) + (Obj.magic (abs_update_typ_or_comp b c e)) + (fun c1 -> + FStar_Tactics_Effect.lift_div_tac + (fun uu___1 -> + FStar_Pervasives_Native.Some c1))) + (fun uu___ -> + (fun uu___ -> + match uu___ with + | FStar_InteractiveHelpers_Base.MetaAnalysis + msg -> + Obj.magic + (Obj.repr + (FStar_Tactics_Effect.lift_div_tac + (fun uu___1 -> + FStar_Pervasives_Native.None))) + | err -> + Obj.magic + (Obj.repr + (FStar_Tactics_Effect.raise err))) + uu___)))) uu___2 uu___1 uu___ +let rec (_flush_typ_or_comp_comp : + Prims.bool -> + FStar_Reflection_Types.env -> + FStar_Reflection_Types.binder Prims.list -> + (FStar_Reflection_Types.bv * FStar_Reflection_Types.term) Prims.list + -> + FStar_Reflection_Types.comp -> + (FStar_Reflection_Types.comp, unit) FStar_Tactics_Effect.tac_repr) + = + fun dbg -> + fun e -> + fun rem -> + fun inst -> + fun c -> + FStar_Tactics_Effect.tac_bind + (Prims.mk_range "FStar.InteractiveHelpers.ExploreTerm.fst" + (Prims.of_int (343)) (Prims.of_int (4)) (Prims.of_int (344)) + (Prims.of_int (32))) + (Prims.mk_range "FStar.InteractiveHelpers.ExploreTerm.fst" + (Prims.of_int (346)) (Prims.of_int (2)) (Prims.of_int (363)) + (Prims.of_int (86))) + (FStar_Tactics_Effect.lift_div_tac + (fun uu___ -> + fun c1 -> + fun inst1 -> + FStar_Tactics_Effect.tac_bind + (Prims.mk_range + "FStar.InteractiveHelpers.ExploreTerm.fst" + (Prims.of_int (343)) (Prims.of_int (15)) + (Prims.of_int (343)) (Prims.of_int (28))) + (Prims.mk_range + "FStar.InteractiveHelpers.ExploreTerm.fst" + (Prims.of_int (344)) (Prims.of_int (4)) + (Prims.of_int (344)) (Prims.of_int (32))) + (FStar_Tactics_Effect.lift_div_tac + (fun uu___1 -> FStar_List_Tot_Base.rev inst1)) + (fun uu___1 -> + (fun inst2 -> + Obj.magic + (FStar_InteractiveHelpers_Base.apply_subst_in_comp + e c1 inst2)) uu___1))) + (fun uu___ -> + (fun flush -> + match rem with + | [] -> Obj.magic (flush c inst) + | b::rem' -> + Obj.magic + (FStar_Tactics_Effect.tac_bind + (Prims.mk_range + "FStar.InteractiveHelpers.ExploreTerm.fst" + (Prims.of_int (352)) (Prims.of_int (13)) + (Prims.of_int (352)) (Prims.of_int (32))) + (Prims.mk_range + "FStar.InteractiveHelpers.ExploreTerm.fst" + (Prims.of_int (353)) (Prims.of_int (4)) + (Prims.of_int (363)) (Prims.of_int (86))) + (FStar_Tactics_Effect.lift_div_tac + (fun uu___ -> get_comp_ret_type c)) + (fun uu___ -> + (fun ty -> + Obj.magic + (FStar_Tactics_Effect.tac_bind + (Prims.mk_range + "FStar.InteractiveHelpers.ExploreTerm.fst" + (Prims.of_int (354)) + (Prims.of_int (6)) + (Prims.of_int (355)) + (Prims.of_int (47))) + (Prims.mk_range + "FStar.InteractiveHelpers.ExploreTerm.fst" + (Prims.of_int (353)) + (Prims.of_int (4)) + (Prims.of_int (363)) + (Prims.of_int (86))) + (Obj.magic + (FStar_Tactics_Effect.tac_bind + (Prims.mk_range + "FStar.InteractiveHelpers.ExploreTerm.fst" + (Prims.of_int (354)) + (Prims.of_int (9)) + (Prims.of_int (354)) + (Prims.of_int (31))) + (Prims.mk_range + "FStar.InteractiveHelpers.ExploreTerm.fst" + (Prims.of_int (354)) + (Prims.of_int (6)) + (Prims.of_int (355)) + (Prims.of_int (47))) + (Obj.magic + (FStar_Tactics_Effect.tac_bind + (Prims.mk_range + "FStar.InteractiveHelpers.ExploreTerm.fst" + (Prims.of_int (354)) + (Prims.of_int (19)) + (Prims.of_int (354)) + (Prims.of_int (31))) + (Prims.mk_range + "FStar.InteractiveHelpers.ExploreTerm.fst" + (Prims.of_int (354)) + (Prims.of_int (9)) + (Prims.of_int (354)) + (Prims.of_int (31))) + (Obj.magic + (FStar_Tactics_Builtins.inspect + ty)) + (fun uu___ -> + FStar_Tactics_Effect.lift_div_tac + (fun uu___1 -> + FStar_Reflection_Data.uu___is_Tv_Arrow + uu___)))) + (fun uu___ -> + (fun uu___ -> + if uu___ + then + Obj.magic + (Obj.repr + (FStar_Tactics_Effect.lift_div_tac + (fun uu___1 -> + (ty, inst)))) + else + Obj.magic + (Obj.repr + (FStar_Tactics_Effect.tac_bind + (Prims.mk_range + "FStar.InteractiveHelpers.ExploreTerm.fst" + (Prims.of_int (355)) + (Prims.of_int (11)) + (Prims.of_int (355)) + (Prims.of_int (43))) + (Prims.mk_range + "FStar.InteractiveHelpers.ExploreTerm.fst" + (Prims.of_int (355)) + (Prims.of_int (11)) + (Prims.of_int (355)) + (Prims.of_int (47))) + (Obj.magic + (FStar_Tactics_Effect.tac_bind + ( + Prims.mk_range + "FStar.InteractiveHelpers.ExploreTerm.fst" + (Prims.of_int (355)) + (Prims.of_int (29)) + (Prims.of_int (355)) + (Prims.of_int (43))) + ( + Prims.mk_range + "FStar.InteractiveHelpers.ExploreTerm.fst" + (Prims.of_int (355)) + (Prims.of_int (11)) + (Prims.of_int (355)) + (Prims.of_int (43))) + ( + Obj.magic + (flush c + inst)) + ( + fun + uu___2 -> + FStar_Tactics_Effect.lift_div_tac + (fun + uu___3 -> + get_comp_ret_type + uu___2)))) + (fun uu___2 -> + FStar_Tactics_Effect.lift_div_tac + (fun + uu___3 -> + (uu___2, + [])))))) + uu___))) + (fun uu___ -> + (fun uu___ -> + match uu___ with + | (ty1, inst') -> + Obj.magic + (FStar_Tactics_Effect.tac_bind + (Prims.mk_range + "FStar.InteractiveHelpers.ExploreTerm.fst" + (Prims.of_int (357)) + (Prims.of_int (10)) + (Prims.of_int (357)) + (Prims.of_int (20))) + (Prims.mk_range + "FStar.InteractiveHelpers.ExploreTerm.fst" + (Prims.of_int (357)) + (Prims.of_int (4)) + (Prims.of_int (363)) + (Prims.of_int (86))) + (Obj.magic + (FStar_Tactics_Builtins.inspect + ty1)) + (fun uu___1 -> + (fun uu___1 -> + match uu___1 + with + | FStar_Reflection_Data.Tv_Arrow + (b', c') -> + Obj.magic + (FStar_Tactics_Effect.tac_bind + (Prims.mk_range + "FStar.InteractiveHelpers.ExploreTerm.fst" + (Prims.of_int (359)) + (Prims.of_int (41)) + (Prims.of_int (359)) + (Prims.of_int (98))) + (Prims.mk_range + "FStar.InteractiveHelpers.ExploreTerm.fst" + (Prims.of_int (359)) + (Prims.of_int (6)) + (Prims.of_int (359)) + (Prims.of_int (101))) + (Obj.magic + (FStar_Tactics_Effect.tac_bind + (Prims.mk_range + "FStar.InteractiveHelpers.ExploreTerm.fst" + (Prims.of_int (359)) + (Prims.of_int (42)) + (Prims.of_int (359)) + (Prims.of_int (91))) + (Prims.mk_range + "FStar.InteractiveHelpers.ExploreTerm.fst" + (Prims.of_int (359)) + (Prims.of_int (41)) + (Prims.of_int (359)) + (Prims.of_int (98))) + (Obj.magic + (FStar_Tactics_Effect.tac_bind + (Prims.mk_range + "FStar.InteractiveHelpers.ExploreTerm.fst" + (Prims.of_int (359)) + (Prims.of_int (60)) + (Prims.of_int (359)) + (Prims.of_int (90))) + (Prims.mk_range + "FStar.InteractiveHelpers.ExploreTerm.fst" + (Prims.of_int (359)) + (Prims.of_int (42)) + (Prims.of_int (359)) + (Prims.of_int (91))) + (Obj.magic + (FStar_Tactics_Builtins.pack + (FStar_Reflection_Data.Tv_Var + (FStar_Reflection_Derived.bv_of_binder + b)))) + (fun + uu___2 -> + FStar_Tactics_Effect.lift_div_tac + (fun + uu___3 -> + ((FStar_Reflection_Derived.bv_of_binder + b'), + uu___2))))) + (fun + uu___2 -> + FStar_Tactics_Effect.lift_div_tac + (fun + uu___3 -> + uu___2 :: + inst)))) + (fun + uu___2 -> + (fun + uu___2 -> + Obj.magic + (_flush_typ_or_comp_comp + dbg e + rem' + uu___2 c')) + uu___2)) + | uu___2 -> + Obj.magic + (FStar_Tactics_Effect.tac_bind + (Prims.mk_range + "FStar.InteractiveHelpers.ExploreTerm.fst" + (Prims.of_int (361)) + (Prims.of_int (12)) + (Prims.of_int (363)) + (Prims.of_int (86))) + (Prims.mk_range + "FStar.InteractiveHelpers.ExploreTerm.fst" + (Prims.of_int (361)) + (Prims.of_int (6)) + (Prims.of_int (363)) + (Prims.of_int (86))) + (Obj.magic + (FStar_Tactics_Effect.tac_bind + (Prims.mk_range + "FStar.InteractiveHelpers.ExploreTerm.fst" + (Prims.of_int (362)) + (Prims.of_int (13)) + (Prims.of_int (363)) + (Prims.of_int (85))) + (Prims.mk_range + "prims.fst" + (Prims.of_int (606)) + (Prims.of_int (19)) + (Prims.of_int (606)) + (Prims.of_int (31))) + (Obj.magic + (FStar_Tactics_Effect.tac_bind + (Prims.mk_range + "FStar.InteractiveHelpers.ExploreTerm.fst" + (Prims.of_int (362)) + (Prims.of_int (27)) + (Prims.of_int (363)) + (Prims.of_int (85))) + (Prims.mk_range + "prims.fst" + (Prims.of_int (606)) + (Prims.of_int (19)) + (Prims.of_int (606)) + (Prims.of_int (31))) + (Obj.magic + (FStar_Tactics_Effect.tac_bind + (Prims.mk_range + "FStar.InteractiveHelpers.ExploreTerm.fst" + (Prims.of_int (362)) + (Prims.of_int (27)) + (Prims.of_int (362)) + (Prims.of_int (44))) + (Prims.mk_range + "FStar.InteractiveHelpers.ExploreTerm.fst" + (Prims.of_int (362)) + (Prims.of_int (27)) + (Prims.of_int (363)) + (Prims.of_int (85))) + (Obj.magic + (FStar_InteractiveHelpers_Base.acomp_to_string + c)) + (fun + uu___3 -> + (fun + uu___3 -> + Obj.magic + (FStar_Tactics_Effect.tac_bind + (Prims.mk_range + "FStar.InteractiveHelpers.ExploreTerm.fst" + (Prims.of_int (363)) + (Prims.of_int (13)) + (Prims.of_int (363)) + (Prims.of_int (85))) + (Prims.mk_range + "prims.fst" + (Prims.of_int (606)) + (Prims.of_int (19)) + (Prims.of_int (606)) + (Prims.of_int (31))) + (Obj.magic + (FStar_Tactics_Effect.tac_bind + (Prims.mk_range + "FStar.InteractiveHelpers.ExploreTerm.fst" + (Prims.of_int (363)) + (Prims.of_int (39)) + (Prims.of_int (363)) + (Prims.of_int (85))) + (Prims.mk_range + "prims.fst" + (Prims.of_int (606)) + (Prims.of_int (19)) + (Prims.of_int (606)) + (Prims.of_int (31))) + (Obj.magic + (FStar_InteractiveHelpers_Base.list_to_string + (fun + uu___4 -> + (fun b1 + -> + Obj.magic + (FStar_Tactics_Effect.lift_div_tac + (fun + uu___4 -> + FStar_Reflection_Derived.name_of_binder + b1))) + uu___4) + rem)) + (fun + uu___4 -> + FStar_Tactics_Effect.lift_div_tac + (fun + uu___5 -> + Prims.strcat + "\n-remaning binders: " + uu___4)))) + (fun + uu___4 -> + FStar_Tactics_Effect.lift_div_tac + (fun + uu___5 -> + Prims.strcat + uu___3 + uu___4)))) + uu___3))) + (fun + uu___3 -> + FStar_Tactics_Effect.lift_div_tac + (fun + uu___4 -> + Prims.strcat + "\n-comp: " + uu___3)))) + (fun + uu___3 -> + FStar_Tactics_Effect.lift_div_tac + (fun + uu___4 -> + Prims.strcat + "_flush_typ_or_comp: inconsistent state" + uu___3)))) + (fun + uu___3 -> + (fun + uu___3 -> + Obj.magic + (FStar_InteractiveHelpers_Base.mfail + uu___3)) + uu___3))) + uu___1))) uu___))) + uu___))) uu___) +let (flush_typ_or_comp : + Prims.bool -> + FStar_Reflection_Types.env -> + typ_or_comp -> (typ_or_comp, unit) FStar_Tactics_Effect.tac_repr) + = + fun dbg -> + fun e -> + fun tyc -> + FStar_Tactics_Effect.tac_bind + (Prims.mk_range "FStar.InteractiveHelpers.ExploreTerm.fst" + (Prims.of_int (367)) (Prims.of_int (4)) (Prims.of_int (370)) + (Prims.of_int (18))) + (Prims.mk_range "FStar.InteractiveHelpers.ExploreTerm.fst" + (Prims.of_int (372)) (Prims.of_int (2)) (Prims.of_int (380)) + (Prims.of_int (25))) + (FStar_Tactics_Effect.lift_div_tac + (fun uu___ -> + fun pl -> + fun n -> + fun c -> + FStar_Tactics_Effect.tac_bind + (Prims.mk_range + "FStar.InteractiveHelpers.ExploreTerm.fst" + (Prims.of_int (367)) (Prims.of_int (17)) + (Prims.of_int (367)) (Prims.of_int (38))) + (Prims.mk_range + "FStar.InteractiveHelpers.ExploreTerm.fst" + (Prims.of_int (367)) (Prims.of_int (4)) + (Prims.of_int (370)) (Prims.of_int (18))) + (FStar_Tactics_Effect.lift_div_tac + (fun uu___1 -> FStar_List_Tot_Base.splitAt n pl)) + (fun uu___1 -> + (fun uu___1 -> + match uu___1 with + | (pl', uu___2) -> + Obj.magic + (FStar_Tactics_Effect.tac_bind + (Prims.mk_range + "FStar.InteractiveHelpers.ExploreTerm.fst" + (Prims.of_int (368)) + (Prims.of_int (14)) + (Prims.of_int (368)) + (Prims.of_int (26))) + (Prims.mk_range + "FStar.InteractiveHelpers.ExploreTerm.fst" + (Prims.of_int (369)) + (Prims.of_int (4)) + (Prims.of_int (370)) + (Prims.of_int (18))) + (FStar_Tactics_Effect.lift_div_tac + (fun uu___3 -> + FStar_List_Tot_Base.rev pl')) + (fun uu___3 -> + (fun pl'1 -> + Obj.magic + (FStar_Tactics_Effect.tac_bind + (Prims.mk_range + "FStar.InteractiveHelpers.ExploreTerm.fst" + (Prims.of_int (369)) + (Prims.of_int (12)) + (Prims.of_int (369)) + (Prims.of_int (50))) + (Prims.mk_range + "FStar.InteractiveHelpers.ExploreTerm.fst" + (Prims.of_int (370)) + (Prims.of_int (4)) + (Prims.of_int (370)) + (Prims.of_int (18))) + (Obj.magic + (_flush_typ_or_comp_comp + dbg e pl'1 [] c)) + (fun c1 -> + FStar_Tactics_Effect.lift_div_tac + (fun uu___3 -> + TC_Comp + (c1, pl, + Prims.int_zero))))) + uu___3))) uu___1))) + (fun uu___ -> + (fun flush_comp -> + Obj.magic + (FStar_Tactics_Derived.try_with + (fun uu___ -> + match () with + | () -> + (match tyc with + | TC_Typ (ty, pl, n) -> + FStar_Tactics_Effect.tac_bind + (Prims.mk_range + "FStar.InteractiveHelpers.ExploreTerm.fst" + (Prims.of_int (374)) + (Prims.of_int (12)) + (Prims.of_int (374)) + (Prims.of_int (34))) + (Prims.mk_range + "FStar.InteractiveHelpers.ExploreTerm.fst" + (Prims.of_int (375)) (Prims.of_int (4)) + (Prims.of_int (375)) + (Prims.of_int (21))) + (FStar_Tactics_Effect.lift_div_tac + (fun uu___1 -> + FStar_Reflection_Builtins.pack_comp + (FStar_Reflection_Data.C_Total ty))) + (fun uu___1 -> + (fun c -> Obj.magic (flush_comp pl n c)) + uu___1) + | TC_Comp (c, pl, n) -> flush_comp pl n c)) + (fun uu___ -> + match uu___ with + | FStar_InteractiveHelpers_Base.MetaAnalysis msg -> + FStar_Tactics_Effect.tac_bind + (Prims.mk_range + "FStar.InteractiveHelpers.ExploreTerm.fst" + (Prims.of_int (379)) (Prims.of_int (15)) + (Prims.of_int (379)) (Prims.of_int (90))) + (Prims.mk_range + "FStar.InteractiveHelpers.ExploreTerm.fst" + (Prims.of_int (379)) (Prims.of_int (9)) + (Prims.of_int (379)) (Prims.of_int (90))) + (Obj.magic + (FStar_Tactics_Effect.tac_bind + (Prims.mk_range + "FStar.InteractiveHelpers.ExploreTerm.fst" + (Prims.of_int (379)) + (Prims.of_int (50)) + (Prims.of_int (379)) + (Prims.of_int (89))) + (Prims.mk_range "prims.fst" + (Prims.of_int (606)) + (Prims.of_int (19)) + (Prims.of_int (606)) + (Prims.of_int (31))) + (Obj.magic + (FStar_Tactics_Effect.tac_bind + (Prims.mk_range + "FStar.InteractiveHelpers.ExploreTerm.fst" + (Prims.of_int (379)) + (Prims.of_int (50)) + (Prims.of_int (379)) + (Prims.of_int (75))) + (Prims.mk_range "prims.fst" + (Prims.of_int (606)) + (Prims.of_int (19)) + (Prims.of_int (606)) + (Prims.of_int (31))) + (Obj.magic + (typ_or_comp_to_string tyc)) + (fun uu___1 -> + FStar_Tactics_Effect.lift_div_tac + (fun uu___2 -> + Prims.strcat uu___1 + (Prims.strcat ":\n" msg))))) + (fun uu___1 -> + FStar_Tactics_Effect.lift_div_tac + (fun uu___2 -> + Prims.strcat + "flush_typ_or_comp failed on: " + uu___1)))) + (fun uu___1 -> + (fun uu___1 -> + Obj.magic + (FStar_InteractiveHelpers_Base.mfail + uu___1)) uu___1) + | err -> FStar_Tactics_Effect.raise err))) uu___) +let (safe_arg_typ_or_comp : + Prims.bool -> + FStar_Reflection_Types.env -> + FStar_Reflection_Types.term -> + (typ_or_comp FStar_Pervasives_Native.option, unit) + FStar_Tactics_Effect.tac_repr) + = + fun dbg -> + fun e -> + fun hd -> + FStar_Tactics_Effect.tac_bind + (Prims.mk_range "FStar.InteractiveHelpers.ExploreTerm.fst" + (Prims.of_int (387)) (Prims.of_int (2)) (Prims.of_int (387)) + (Prims.of_int (62))) + (Prims.mk_range "FStar.InteractiveHelpers.ExploreTerm.fst" + (Prims.of_int (388)) (Prims.of_int (2)) (Prims.of_int (408)) + (Prims.of_int (15))) + (Obj.magic + (FStar_Tactics_Effect.tac_bind + (Prims.mk_range "FStar.InteractiveHelpers.ExploreTerm.fst" + (Prims.of_int (387)) (Prims.of_int (16)) + (Prims.of_int (387)) (Prims.of_int (62))) + (Prims.mk_range "FStar.InteractiveHelpers.ExploreTerm.fst" + (Prims.of_int (387)) (Prims.of_int (2)) + (Prims.of_int (387)) (Prims.of_int (62))) + (Obj.magic + (FStar_Tactics_Effect.tac_bind + (Prims.mk_range + "FStar.InteractiveHelpers.ExploreTerm.fst" + (Prims.of_int (387)) (Prims.of_int (44)) + (Prims.of_int (387)) (Prims.of_int (61))) + (Prims.mk_range "prims.fst" (Prims.of_int (606)) + (Prims.of_int (19)) (Prims.of_int (606)) + (Prims.of_int (31))) + (Obj.magic (FStar_Tactics_Builtins.term_to_string hd)) + (fun uu___ -> + FStar_Tactics_Effect.lift_div_tac + (fun uu___1 -> + Prims.strcat "safe_arg_typ_or_comp: " uu___)))) + (fun uu___ -> + (fun uu___ -> + Obj.magic + (FStar_InteractiveHelpers_Base.print_dbg dbg uu___)) + uu___))) + (fun uu___ -> + (fun uu___ -> + Obj.magic + (FStar_Tactics_Effect.tac_bind + (Prims.mk_range + "FStar.InteractiveHelpers.ExploreTerm.fst" + (Prims.of_int (388)) (Prims.of_int (8)) + (Prims.of_int (388)) (Prims.of_int (20))) + (Prims.mk_range + "FStar.InteractiveHelpers.ExploreTerm.fst" + (Prims.of_int (388)) (Prims.of_int (2)) + (Prims.of_int (408)) (Prims.of_int (15))) + (Obj.magic (safe_tc e hd)) + (fun uu___1 -> + (fun uu___1 -> + match uu___1 with + | FStar_Pervasives_Native.None -> + Obj.magic + (Obj.repr + (FStar_Tactics_Effect.lift_div_tac + (fun uu___2 -> + FStar_Pervasives_Native.None))) + | FStar_Pervasives_Native.Some ty -> + Obj.magic + (Obj.repr + (FStar_Tactics_Effect.tac_bind + (Prims.mk_range + "FStar.InteractiveHelpers.ExploreTerm.fst" + (Prims.of_int (391)) + (Prims.of_int (4)) + (Prims.of_int (391)) + (Prims.of_int (51))) + (Prims.mk_range + "FStar.InteractiveHelpers.ExploreTerm.fst" + (Prims.of_int (392)) + (Prims.of_int (4)) + (Prims.of_int (408)) + (Prims.of_int (15))) + (Obj.magic + (FStar_Tactics_Effect.tac_bind + (Prims.mk_range + "FStar.InteractiveHelpers.ExploreTerm.fst" + (Prims.of_int (391)) + (Prims.of_int (18)) + (Prims.of_int (391)) + (Prims.of_int (51))) + (Prims.mk_range + "FStar.InteractiveHelpers.ExploreTerm.fst" + (Prims.of_int (391)) + (Prims.of_int (4)) + (Prims.of_int (391)) + (Prims.of_int (51))) + (Obj.magic + (FStar_Tactics_Effect.tac_bind + (Prims.mk_range + "FStar.InteractiveHelpers.ExploreTerm.fst" + (Prims.of_int (391)) + (Prims.of_int (33)) + (Prims.of_int (391)) + (Prims.of_int (50))) + (Prims.mk_range + "prims.fst" + (Prims.of_int (606)) + (Prims.of_int (19)) + (Prims.of_int (606)) + (Prims.of_int (31))) + (Obj.magic + (FStar_Tactics_Builtins.term_to_string + ty)) + (fun uu___2 -> + FStar_Tactics_Effect.lift_div_tac + (fun uu___3 -> + Prims.strcat + "hd type: " + uu___2)))) + (fun uu___2 -> + (fun uu___2 -> + Obj.magic + (FStar_InteractiveHelpers_Base.print_dbg + dbg uu___2)) uu___2))) + (fun uu___2 -> + (fun uu___2 -> + Obj.magic + (FStar_Tactics_Effect.tac_bind + (Prims.mk_range + "FStar.InteractiveHelpers.ExploreTerm.fst" + (Prims.of_int (393)) + (Prims.of_int (6)) + (Prims.of_int (404)) + (Prims.of_int (11))) + (Prims.mk_range + "FStar.InteractiveHelpers.ExploreTerm.fst" + (Prims.of_int (406)) + (Prims.of_int (4)) + (Prims.of_int (408)) + (Prims.of_int (15))) + (Obj.magic + (FStar_Tactics_Effect.tac_bind + (Prims.mk_range + "FStar.InteractiveHelpers.ExploreTerm.fst" + (Prims.of_int (393)) + (Prims.of_int (9)) + (Prims.of_int (393)) + (Prims.of_int (31))) + (Prims.mk_range + "FStar.InteractiveHelpers.ExploreTerm.fst" + (Prims.of_int (393)) + (Prims.of_int (6)) + (Prims.of_int (404)) + (Prims.of_int (11))) + (Obj.magic + (FStar_Tactics_Effect.tac_bind + (Prims.mk_range + "FStar.InteractiveHelpers.ExploreTerm.fst" + (Prims.of_int (393)) + (Prims.of_int (19)) + (Prims.of_int (393)) + (Prims.of_int (31))) + (Prims.mk_range + "FStar.InteractiveHelpers.ExploreTerm.fst" + (Prims.of_int (393)) + (Prims.of_int (9)) + (Prims.of_int (393)) + (Prims.of_int (31))) + (Obj.magic + (FStar_Tactics_Builtins.inspect + ty)) + (fun uu___3 -> + FStar_Tactics_Effect.lift_div_tac + (fun + uu___4 -> + FStar_Reflection_Data.uu___is_Tv_Arrow + uu___3)))) + (fun uu___3 -> + (fun uu___3 -> + if uu___3 + then + Obj.magic + (FStar_Tactics_Effect.tac_bind + (Prims.mk_range + "FStar.InteractiveHelpers.ExploreTerm.fst" + (Prims.of_int (395)) + (Prims.of_int (8)) + (Prims.of_int (395)) + (Prims.of_int (50))) + (Prims.mk_range + "FStar.InteractiveHelpers.ExploreTerm.fst" + (Prims.of_int (390)) + (Prims.of_int (9)) + (Prims.of_int (390)) + (Prims.of_int (11))) + (Obj.magic + (FStar_InteractiveHelpers_Base.print_dbg + dbg + "no need to unfold the type")) + (fun + uu___4 -> + FStar_Tactics_Effect.lift_div_tac + (fun + uu___5 -> + ty))) + else + Obj.magic + (FStar_Tactics_Effect.tac_bind + (Prims.mk_range + "FStar.InteractiveHelpers.ExploreTerm.fst" + (Prims.of_int (400)) + (Prims.of_int (8)) + (Prims.of_int (400)) + (Prims.of_int (47))) + (Prims.mk_range + "FStar.InteractiveHelpers.ExploreTerm.fst" + (Prims.of_int (401)) + (Prims.of_int (8)) + (Prims.of_int (403)) + (Prims.of_int (10))) + (Obj.magic + (FStar_InteractiveHelpers_Base.print_dbg + dbg + "need to unfold the type")) + (fun + uu___5 -> + (fun + uu___5 -> + Obj.magic + (FStar_Tactics_Effect.tac_bind + (Prims.mk_range + "FStar.InteractiveHelpers.ExploreTerm.fst" + (Prims.of_int (401)) + (Prims.of_int (17)) + (Prims.of_int (401)) + (Prims.of_int (40))) + (Prims.mk_range + "FStar.InteractiveHelpers.ExploreTerm.fst" + (Prims.of_int (402)) + (Prims.of_int (8)) + (Prims.of_int (403)) + (Prims.of_int (10))) + (Obj.magic + (unfold_until_arrow + e ty)) + (fun + uu___6 -> + (fun ty1 + -> + Obj.magic + (FStar_Tactics_Effect.tac_bind + (Prims.mk_range + "FStar.InteractiveHelpers.ExploreTerm.fst" + (Prims.of_int (402)) + (Prims.of_int (8)) + (Prims.of_int (402)) + (Prims.of_int (67))) + (Prims.mk_range + "FStar.InteractiveHelpers.ExploreTerm.fst" + (Prims.of_int (401)) + (Prims.of_int (12)) + (Prims.of_int (401)) + (Prims.of_int (14))) + (Obj.magic + (FStar_Tactics_Effect.tac_bind + (Prims.mk_range + "FStar.InteractiveHelpers.ExploreTerm.fst" + (Prims.of_int (402)) + (Prims.of_int (22)) + (Prims.of_int (402)) + (Prims.of_int (67))) + (Prims.mk_range + "FStar.InteractiveHelpers.ExploreTerm.fst" + (Prims.of_int (402)) + (Prims.of_int (8)) + (Prims.of_int (402)) + (Prims.of_int (67))) + (Obj.magic + (FStar_Tactics_Effect.tac_bind + (Prims.mk_range + "FStar.InteractiveHelpers.ExploreTerm.fst" + (Prims.of_int (402)) + (Prims.of_int (49)) + (Prims.of_int (402)) + (Prims.of_int (66))) + (Prims.mk_range + "prims.fst" + (Prims.of_int (606)) + (Prims.of_int (19)) + (Prims.of_int (606)) + (Prims.of_int (31))) + (Obj.magic + (FStar_Tactics_Builtins.term_to_string + ty1)) + (fun + uu___6 -> + FStar_Tactics_Effect.lift_div_tac + (fun + uu___7 -> + Prims.strcat + "result of unfolding : " + uu___6)))) + (fun + uu___6 -> + (fun + uu___6 -> + Obj.magic + (FStar_InteractiveHelpers_Base.print_dbg + dbg + uu___6)) + uu___6))) + (fun + uu___6 -> + FStar_Tactics_Effect.lift_div_tac + (fun + uu___7 -> + ty1)))) + uu___6))) + uu___5))) + uu___3))) + (fun uu___3 -> + (fun ty1 -> + Obj.magic + (FStar_Tactics_Effect.tac_bind + (Prims.mk_range + "FStar.InteractiveHelpers.ExploreTerm.fst" + (Prims.of_int (406)) + (Prims.of_int (10)) + (Prims.of_int (406)) + (Prims.of_int (20))) + (Prims.mk_range + "FStar.InteractiveHelpers.ExploreTerm.fst" + (Prims.of_int (406)) + (Prims.of_int (4)) + (Prims.of_int (408)) + (Prims.of_int (15))) + (Obj.magic + (FStar_Tactics_Builtins.inspect + ty1)) + (fun uu___3 -> + FStar_Tactics_Effect.lift_div_tac + (fun uu___4 + -> + match uu___3 + with + | + FStar_Reflection_Data.Tv_Arrow + (b, c) -> + FStar_Pervasives_Native.Some + (TC_Typ + ((FStar_Reflection_Derived.type_of_binder + b), [], + Prims.int_zero)) + | + uu___5 -> + FStar_Pervasives_Native.None)))) + uu___3))) uu___2)))) + uu___1))) uu___) +let (convert_ctrl_flag : + FStar_Tactics_Types.ctrl_flag -> FStar_Tactics_Types.ctrl_flag) = + fun flag -> + match flag with + | FStar_Tactics_Types.Continue -> FStar_Tactics_Types.Continue + | FStar_Tactics_Types.Skip -> FStar_Tactics_Types.Continue + | FStar_Tactics_Types.Abort -> FStar_Tactics_Types.Abort +type 'a explorer = + 'a -> + FStar_InteractiveHelpers_Base.genv -> + (FStar_InteractiveHelpers_Base.genv * FStar_Reflection_Data.term_view) + Prims.list -> + typ_or_comp FStar_Pervasives_Native.option -> + FStar_Reflection_Data.term_view -> + (('a * FStar_Tactics_Types.ctrl_flag), unit) + FStar_Tactics_Effect.tac_repr +let bind_expl : + 'a . + 'a -> + ('a -> + (('a * FStar_Tactics_Types.ctrl_flag), unit) + FStar_Tactics_Effect.tac_repr) + -> + ('a -> + (('a * FStar_Tactics_Types.ctrl_flag), unit) + FStar_Tactics_Effect.tac_repr) + -> + (('a * FStar_Tactics_Types.ctrl_flag), unit) + FStar_Tactics_Effect.tac_repr + = + fun x -> + fun f1 -> + fun f2 -> + FStar_Tactics_Effect.tac_bind + (Prims.mk_range "FStar.InteractiveHelpers.ExploreTerm.fst" + (Prims.of_int (439)) (Prims.of_int (18)) (Prims.of_int (439)) + (Prims.of_int (22))) + (Prims.mk_range "FStar.InteractiveHelpers.ExploreTerm.fst" + (Prims.of_int (439)) (Prims.of_int (2)) (Prims.of_int (442)) + (Prims.of_int (34))) (Obj.magic (f1 x)) + (fun uu___ -> + (fun uu___ -> + match uu___ with + | (x1, flag1) -> + if flag1 = FStar_Tactics_Types.Continue + then Obj.magic (Obj.repr (f2 x1)) + else + Obj.magic + (Obj.repr + (FStar_Tactics_Effect.lift_div_tac + (fun uu___2 -> (x1, (convert_ctrl_flag flag1)))))) + uu___) +let rec (explore_term : + Prims.bool -> + Prims.bool -> + unit -> + Obj.t explorer -> + Obj.t -> + FStar_InteractiveHelpers_Base.genv -> + (FStar_InteractiveHelpers_Base.genv * + FStar_Reflection_Data.term_view) Prims.list -> + typ_or_comp FStar_Pervasives_Native.option -> + FStar_Reflection_Types.term -> + ((Obj.t * FStar_Tactics_Types.ctrl_flag), unit) + FStar_Tactics_Effect.tac_repr) + = + fun dbg -> + fun dfs -> + fun a -> + fun f -> + fun x -> + fun ge0 -> + fun pl0 -> + fun c0 -> + fun t0 -> + FStar_Tactics_Effect.tac_bind + (Prims.mk_range + "FStar.InteractiveHelpers.ExploreTerm.fst" + (Prims.of_int (471)) (Prims.of_int (2)) + (Prims.of_int (471)) (Prims.of_int (85))) + (Prims.mk_range + "FStar.InteractiveHelpers.ExploreTerm.fst" + (Prims.of_int (472)) (Prims.of_int (2)) + (Prims.of_int (551)) (Prims.of_int (33))) + (Obj.magic + (FStar_Tactics_Effect.tac_bind + (Prims.mk_range + "FStar.InteractiveHelpers.ExploreTerm.fst" + (Prims.of_int (471)) (Prims.of_int (16)) + (Prims.of_int (471)) (Prims.of_int (85))) + (Prims.mk_range + "FStar.InteractiveHelpers.ExploreTerm.fst" + (Prims.of_int (471)) (Prims.of_int (2)) + (Prims.of_int (471)) (Prims.of_int (85))) + (Obj.magic + (FStar_Tactics_Effect.tac_bind + (Prims.mk_range + "FStar.InteractiveHelpers.ExploreTerm.fst" + (Prims.of_int (471)) (Prims.of_int (39)) + (Prims.of_int (471)) (Prims.of_int (84))) + (Prims.mk_range "prims.fst" + (Prims.of_int (606)) (Prims.of_int (19)) + (Prims.of_int (606)) (Prims.of_int (31))) + (Obj.magic + (FStar_Tactics_Effect.tac_bind + (Prims.mk_range + "FStar.InteractiveHelpers.ExploreTerm.fst" + (Prims.of_int (471)) + (Prims.of_int (39)) + (Prims.of_int (471)) + (Prims.of_int (56))) + (Prims.mk_range + "FStar.InteractiveHelpers.ExploreTerm.fst" + (Prims.of_int (471)) + (Prims.of_int (39)) + (Prims.of_int (471)) + (Prims.of_int (84))) + (Obj.magic + (FStar_InteractiveHelpers_Base.term_construct + t0)) + (fun uu___ -> + (fun uu___ -> + Obj.magic + (FStar_Tactics_Effect.tac_bind + (Prims.mk_range + "FStar.InteractiveHelpers.ExploreTerm.fst" + (Prims.of_int (471)) + (Prims.of_int (59)) + (Prims.of_int (471)) + (Prims.of_int (84))) + (Prims.mk_range + "prims.fst" + (Prims.of_int (606)) + (Prims.of_int (19)) + (Prims.of_int (606)) + (Prims.of_int (31))) + (Obj.magic + (FStar_Tactics_Effect.tac_bind + (Prims.mk_range + "FStar.InteractiveHelpers.ExploreTerm.fst" + (Prims.of_int (471)) + (Prims.of_int (67)) + (Prims.of_int (471)) + (Prims.of_int (84))) + (Prims.mk_range + "prims.fst" + (Prims.of_int (606)) + (Prims.of_int (19)) + (Prims.of_int (606)) + (Prims.of_int (31))) + (Obj.magic + (FStar_Tactics_Builtins.term_to_string + t0)) + (fun uu___1 -> + FStar_Tactics_Effect.lift_div_tac + (fun uu___2 -> + Prims.strcat + ":\n" + uu___1)))) + (fun uu___1 -> + FStar_Tactics_Effect.lift_div_tac + (fun uu___2 -> + Prims.strcat uu___ + uu___1)))) uu___))) + (fun uu___ -> + FStar_Tactics_Effect.lift_div_tac + (fun uu___1 -> + Prims.strcat "[> explore_term: " + uu___)))) + (fun uu___ -> + (fun uu___ -> + Obj.magic + (FStar_InteractiveHelpers_Base.print_dbg + dbg uu___)) uu___))) + (fun uu___ -> + (fun uu___ -> + Obj.magic + (FStar_Tactics_Effect.tac_bind + (Prims.mk_range + "FStar.InteractiveHelpers.ExploreTerm.fst" + (Prims.of_int (472)) (Prims.of_int (12)) + (Prims.of_int (472)) (Prims.of_int (22))) + (Prims.mk_range + "FStar.InteractiveHelpers.ExploreTerm.fst" + (Prims.of_int (473)) (Prims.of_int (2)) + (Prims.of_int (551)) (Prims.of_int (33))) + (Obj.magic + (FStar_Tactics_Builtins.inspect t0)) + (fun uu___1 -> + (fun tv0 -> + Obj.magic + (FStar_Tactics_Effect.tac_bind + (Prims.mk_range + "FStar.InteractiveHelpers.ExploreTerm.fst" + (Prims.of_int (473)) + (Prims.of_int (17)) + (Prims.of_int (473)) + (Prims.of_int (35))) + (Prims.mk_range + "FStar.InteractiveHelpers.ExploreTerm.fst" + (Prims.of_int (473)) + (Prims.of_int (2)) + (Prims.of_int (551)) + (Prims.of_int (33))) + (Obj.magic (f x ge0 pl0 c0 tv0)) + (fun uu___1 -> + (fun uu___1 -> + match uu___1 with + | (x0, flag) -> + Obj.magic + (FStar_Tactics_Effect.tac_bind + (Prims.mk_range + "FStar.InteractiveHelpers.ExploreTerm.fst" + (Prims.of_int (474)) + (Prims.of_int (23)) + (Prims.of_int (474)) + (Prims.of_int (25))) + (Prims.mk_range + "FStar.InteractiveHelpers.ExploreTerm.fst" + (Prims.of_int (475)) + (Prims.of_int (2)) + (Prims.of_int (551)) + (Prims.of_int (33))) + (FStar_Tactics_Effect.lift_div_tac + (fun uu___2 -> + (ge0, tv0) + :: pl0)) + (fun uu___2 -> + (fun pl1 -> + if + flag = + FStar_Tactics_Types.Continue + then + Obj.magic + (Obj.repr + (match tv0 + with + | + FStar_Reflection_Data.Tv_Var + uu___2 -> + Obj.repr + (FStar_Tactics_Effect.lift_div_tac + (fun + uu___3 -> + (x0, + FStar_Tactics_Types.Continue))) + | + FStar_Reflection_Data.Tv_BVar + uu___2 -> + Obj.repr + (FStar_Tactics_Effect.lift_div_tac + (fun + uu___3 -> + (x0, + FStar_Tactics_Types.Continue))) + | + FStar_Reflection_Data.Tv_FVar + uu___2 -> + Obj.repr + (FStar_Tactics_Effect.lift_div_tac + (fun + uu___3 -> + (x0, + FStar_Tactics_Types.Continue))) + | + FStar_Reflection_Data.Tv_App + (hd, + (a1, + qual)) -> + Obj.repr + (FStar_Tactics_Effect.tac_bind + (Prims.mk_range + "FStar.InteractiveHelpers.ExploreTerm.fst" + (Prims.of_int (482)) + (Prims.of_int (16)) + (Prims.of_int (482)) + (Prims.of_int (51))) + (Prims.mk_range + "FStar.InteractiveHelpers.ExploreTerm.fst" + (Prims.of_int (483)) + (Prims.of_int (6)) + (Prims.of_int (490)) + (Prims.of_int (38))) + (Obj.magic + (safe_arg_typ_or_comp + dbg + ge0.FStar_InteractiveHelpers_Base.env + hd)) + (fun + uu___2 -> + (fun a_c + -> + Obj.magic + (FStar_Tactics_Effect.tac_bind + (Prims.mk_range + "FStar.InteractiveHelpers.ExploreTerm.fst" + (Prims.of_int (483)) + (Prims.of_int (6)) + (Prims.of_int (484)) + (Prims.of_int (64))) + (Prims.mk_range + "FStar.InteractiveHelpers.ExploreTerm.fst" + (Prims.of_int (485)) + (Prims.of_int (6)) + (Prims.of_int (490)) + (Prims.of_int (38))) + (Obj.magic + (FStar_Tactics_Effect.tac_bind + (Prims.mk_range + "FStar.InteractiveHelpers.ExploreTerm.fst" + (Prims.of_int (483)) + (Prims.of_int (20)) + (Prims.of_int (484)) + (Prims.of_int (64))) + (Prims.mk_range + "FStar.InteractiveHelpers.ExploreTerm.fst" + (Prims.of_int (483)) + (Prims.of_int (6)) + (Prims.of_int (484)) + (Prims.of_int (64))) + (Obj.magic + (FStar_Tactics_Effect.tac_bind + (Prims.mk_range + "FStar.InteractiveHelpers.ExploreTerm.fst" + (Prims.of_int (484)) + (Prims.of_int (21)) + (Prims.of_int (484)) + (Prims.of_int (63))) + (Prims.mk_range + "prims.fst" + (Prims.of_int (606)) + (Prims.of_int (19)) + (Prims.of_int (606)) + (Prims.of_int (31))) + (Obj.magic + (FStar_InteractiveHelpers_Base.option_to_string + typ_or_comp_to_string + a_c)) + (fun + uu___2 -> + FStar_Tactics_Effect.lift_div_tac + (fun + uu___3 -> + Prims.strcat + "Tv_App: updated target typ_or_comp to:\n" + uu___2)))) + (fun + uu___2 -> + (fun + uu___2 -> + Obj.magic + (FStar_InteractiveHelpers_Base.print_dbg + dbg + uu___2)) + uu___2))) + (fun + uu___2 -> + (fun + uu___2 -> + Obj.magic + (FStar_Tactics_Effect.tac_bind + (Prims.mk_range + "FStar.InteractiveHelpers.ExploreTerm.fst" + (Prims.of_int (485)) + (Prims.of_int (22)) + (Prims.of_int (485)) + (Prims.of_int (61))) + (Prims.mk_range + "FStar.InteractiveHelpers.ExploreTerm.fst" + (Prims.of_int (485)) + (Prims.of_int (6)) + (Prims.of_int (490)) + (Prims.of_int (38))) + (Obj.magic + (explore_term + dbg dfs + () f x0 + ge0 pl1 + a_c a1)) + (fun + uu___3 -> + (fun + uu___3 -> + match uu___3 + with + | + (x1, + flag1) -> + if + flag1 = + FStar_Tactics_Types.Continue + then + Obj.magic + (Obj.repr + (explore_term + dbg dfs + () f x1 + ge0 pl1 + FStar_Pervasives_Native.None + hd)) + else + Obj.magic + (Obj.repr + (FStar_Tactics_Effect.lift_div_tac + (fun + uu___5 -> + (x1, + (convert_ctrl_flag + flag1)))))) + uu___3))) + uu___2))) + uu___2)) + | + FStar_Reflection_Data.Tv_Abs + (br, + body) -> + Obj.repr + (FStar_Tactics_Effect.tac_bind + (Prims.mk_range + "FStar.InteractiveHelpers.ExploreTerm.fst" + (Prims.of_int (492)) + (Prims.of_int (16)) + (Prims.of_int (492)) + (Prims.of_int (50))) + (Prims.mk_range + "FStar.InteractiveHelpers.ExploreTerm.fst" + (Prims.of_int (493)) + (Prims.of_int (6)) + (Prims.of_int (494)) + (Prims.of_int (47))) + (Obj.magic + (FStar_InteractiveHelpers_Base.genv_push_binder + ge0 br + false + FStar_Pervasives_Native.None)) + (fun + uu___2 -> + (fun ge1 + -> + Obj.magic + (FStar_Tactics_Effect.tac_bind + (Prims.mk_range + "FStar.InteractiveHelpers.ExploreTerm.fst" + (Prims.of_int (493)) + (Prims.of_int (15)) + (Prims.of_int (493)) + (Prims.of_int (55))) + (Prims.mk_range + "FStar.InteractiveHelpers.ExploreTerm.fst" + (Prims.of_int (494)) + (Prims.of_int (6)) + (Prims.of_int (494)) + (Prims.of_int (47))) + (Obj.magic + (abs_update_opt_typ_or_comp + br c0 + ge1.FStar_InteractiveHelpers_Base.env)) + (fun + uu___2 -> + (fun c1 + -> + Obj.magic + (explore_term + dbg dfs + () f x0 + ge1 pl1 + c1 body)) + uu___2))) + uu___2)) + | + FStar_Reflection_Data.Tv_Arrow + (br, c01) + -> + Obj.repr + (FStar_Tactics_Effect.lift_div_tac + (fun + uu___2 -> + (x0, + FStar_Tactics_Types.Continue))) + | + FStar_Reflection_Data.Tv_Type + uu___2 -> + Obj.repr + (FStar_Tactics_Effect.lift_div_tac + (fun + uu___3 -> + (x0, + FStar_Tactics_Types.Continue))) + | + FStar_Reflection_Data.Tv_Refine + (bv, ref) + -> + Obj.repr + (FStar_Tactics_Effect.tac_bind + (Prims.mk_range + "FStar.InteractiveHelpers.ExploreTerm.fst" + (Prims.of_int (498)) + (Prims.of_int (16)) + (Prims.of_int (498)) + (Prims.of_int (29))) + (Prims.mk_range + "FStar.InteractiveHelpers.ExploreTerm.fst" + (Prims.of_int (499)) + (Prims.of_int (6)) + (Prims.of_int (503)) + (Prims.of_int (38))) + (FStar_Tactics_Effect.lift_div_tac + (fun + uu___2 -> + FStar_Reflection_Builtins.inspect_bv + bv)) + (fun + uu___2 -> + (fun bvv + -> + Obj.magic + (FStar_Tactics_Effect.tac_bind + (Prims.mk_range + "FStar.InteractiveHelpers.ExploreTerm.fst" + (Prims.of_int (499)) + (Prims.of_int (22)) + (Prims.of_int (499)) + (Prims.of_int (72))) + (Prims.mk_range + "FStar.InteractiveHelpers.ExploreTerm.fst" + (Prims.of_int (499)) + (Prims.of_int (6)) + (Prims.of_int (503)) + (Prims.of_int (38))) + (Obj.magic + (explore_term + dbg dfs + () f x0 + ge0 pl1 + FStar_Pervasives_Native.None + bvv.FStar_Reflection_Data.bv_sort)) + (fun + uu___2 -> + (fun + uu___2 -> + match uu___2 + with + | + (x1, + flag1) -> + if + flag1 = + FStar_Tactics_Types.Continue + then + Obj.magic + (Obj.repr + (FStar_Tactics_Effect.tac_bind + (Prims.mk_range + "FStar.InteractiveHelpers.ExploreTerm.fst" + (Prims.of_int (501)) + (Prims.of_int (18)) + (Prims.of_int (501)) + (Prims.of_int (48))) + (Prims.mk_range + "FStar.InteractiveHelpers.ExploreTerm.fst" + (Prims.of_int (502)) + (Prims.of_int (8)) + (Prims.of_int (502)) + (Prims.of_int (50))) + (Obj.magic + (FStar_InteractiveHelpers_Base.genv_push_bv + ge0 bv + false + FStar_Pervasives_Native.None)) + (fun + uu___3 -> + (fun ge1 + -> + Obj.magic + (explore_term + dbg dfs + () f x1 + ge1 pl1 + FStar_Pervasives_Native.None + ref)) + uu___3))) + else + Obj.magic + (Obj.repr + (FStar_Tactics_Effect.lift_div_tac + (fun + uu___4 -> + (x1, + (convert_ctrl_flag + flag1)))))) + uu___2))) + uu___2)) + | + FStar_Reflection_Data.Tv_Const + uu___2 -> + Obj.repr + (FStar_Tactics_Effect.lift_div_tac + (fun + uu___3 -> + (x0, + FStar_Tactics_Types.Continue))) + | + FStar_Reflection_Data.Tv_Uvar + (uu___2, + uu___3) + -> + Obj.repr + (FStar_Tactics_Effect.lift_div_tac + (fun + uu___4 -> + (x0, + FStar_Tactics_Types.Continue))) + | + FStar_Reflection_Data.Tv_Let + (recf, + attrs, + bv, def, + body) -> + Obj.repr + (FStar_Tactics_Effect.tac_bind + (Prims.mk_range + "FStar.InteractiveHelpers.ExploreTerm.fst" + (Prims.of_int (510)) + (Prims.of_int (18)) + (Prims.of_int (510)) + (Prims.of_int (52))) + (Prims.mk_range + "FStar.InteractiveHelpers.ExploreTerm.fst" + (Prims.of_int (511)) + (Prims.of_int (6)) + (Prims.of_int (517)) + (Prims.of_int (30))) + (FStar_Tactics_Effect.lift_div_tac + (fun + uu___2 -> + FStar_Pervasives_Native.Some + (TC_Typ + ((FStar_Reflection_Derived.type_of_bv + bv), [], + Prims.int_zero)))) + (fun + uu___2 -> + (fun + def_c -> + Obj.magic + (FStar_Tactics_Effect.tac_bind + (Prims.mk_range + "FStar.InteractiveHelpers.ExploreTerm.fst" + (Prims.of_int (511)) + (Prims.of_int (26)) + (Prims.of_int (511)) + (Prims.of_int (68))) + (Prims.mk_range + "FStar.InteractiveHelpers.ExploreTerm.fst" + (Prims.of_int (513)) + (Prims.of_int (6)) + (Prims.of_int (517)) + (Prims.of_int (30))) + (FStar_Tactics_Effect.lift_div_tac + (fun + uu___2 -> + fun x1 -> + explore_term + dbg dfs + () f x1 + ge0 pl1 + def_c def)) + (fun + uu___2 -> + (fun + explore_def + -> + Obj.magic + (FStar_Tactics_Effect.tac_bind + (Prims.mk_range + "FStar.InteractiveHelpers.ExploreTerm.fst" + (Prims.of_int (513)) + (Prims.of_int (16)) + (Prims.of_int (513)) + (Prims.of_int (52))) + (Prims.mk_range + "FStar.InteractiveHelpers.ExploreTerm.fst" + (Prims.of_int (514)) + (Prims.of_int (6)) + (Prims.of_int (517)) + (Prims.of_int (30))) + (Obj.magic + (FStar_InteractiveHelpers_Base.genv_push_bv + ge0 bv + false + (FStar_Pervasives_Native.Some + def))) + (fun + uu___2 -> + (fun ge1 + -> + Obj.magic + (FStar_Tactics_Effect.tac_bind + (Prims.mk_range + "FStar.InteractiveHelpers.ExploreTerm.fst" + (Prims.of_int (514)) + (Prims.of_int (27)) + (Prims.of_int (514)) + (Prims.of_int (67))) + (Prims.mk_range + "FStar.InteractiveHelpers.ExploreTerm.fst" + (Prims.of_int (516)) + (Prims.of_int (6)) + (Prims.of_int (517)) + (Prims.of_int (30))) + (FStar_Tactics_Effect.lift_div_tac + (fun + uu___2 -> + fun x1 -> + explore_term + dbg dfs + () f x1 + ge1 pl1 + c0 body)) + (fun + uu___2 -> + (fun + explore_next + -> + Obj.magic + (FStar_Tactics_Effect.tac_bind + (Prims.mk_range + "FStar.InteractiveHelpers.ExploreTerm.fst" + (Prims.of_int (516)) + (Prims.of_int (25)) + (Prims.of_int (516)) + (Prims.of_int (93))) + (Prims.mk_range + "FStar.InteractiveHelpers.ExploreTerm.fst" + (Prims.of_int (516)) + (Prims.of_int (6)) + (Prims.of_int (517)) + (Prims.of_int (30))) + (FStar_Tactics_Effect.lift_div_tac + (fun + uu___2 -> + if dfs + then + (explore_next, + explore_def) + else + (explore_def, + explore_next))) + (fun + uu___2 -> + (fun + uu___2 -> + match uu___2 + with + | + (expl1, + expl2) -> + Obj.magic + (bind_expl + x0 expl1 + expl2)) + uu___2))) + uu___2))) + uu___2))) + uu___2))) + uu___2)) + | + FStar_Reflection_Data.Tv_Match + (scrutinee, + _ret_opt, + branches) + -> + Obj.repr + (FStar_Tactics_Effect.tac_bind + (Prims.mk_range + "FStar.InteractiveHelpers.ExploreTerm.fst" + (Prims.of_int (521)) + (Prims.of_int (8)) + (Prims.of_int (531)) + (Prims.of_int (21))) + (Prims.mk_range + "FStar.InteractiveHelpers.ExploreTerm.fst" + (Prims.of_int (534)) + (Prims.of_int (6)) + (Prims.of_int (537)) + (Prims.of_int (42))) + (FStar_Tactics_Effect.lift_div_tac + (fun + uu___2 -> + fun + x_flag -> + fun br -> + FStar_Tactics_Effect.tac_bind + (Prims.mk_range + "FStar.InteractiveHelpers.ExploreTerm.fst" + (Prims.of_int (521)) + (Prims.of_int (23)) + (Prims.of_int (521)) + (Prims.of_int (29))) + (Prims.mk_range + "FStar.InteractiveHelpers.ExploreTerm.fst" + (Prims.of_int (521)) + (Prims.of_int (8)) + (Prims.of_int (531)) + (Prims.of_int (21))) + (FStar_Tactics_Effect.lift_div_tac + (fun + uu___3 -> + x_flag)) + (fun + uu___3 -> + (fun + uu___3 -> + match uu___3 + with + | + (x01, + flag1) -> + if + flag1 = + FStar_Tactics_Types.Continue + then + Obj.magic + (Obj.repr + (FStar_Tactics_Effect.tac_bind + (Prims.mk_range + "FStar.InteractiveHelpers.ExploreTerm.fst" + (Prims.of_int (523)) + (Prims.of_int (33)) + (Prims.of_int (523)) + (Prims.of_int (35))) + (Prims.mk_range + "FStar.InteractiveHelpers.ExploreTerm.fst" + (Prims.of_int (523)) + (Prims.of_int (10)) + (Prims.of_int (529)) + (Prims.of_int (42))) + (FStar_Tactics_Effect.lift_div_tac + (fun + uu___4 -> + br)) + (fun + uu___4 -> + (fun + uu___4 -> + match uu___4 + with + | + (pat, + branch_body) + -> + Obj.magic + (FStar_Tactics_Effect.tac_bind + (Prims.mk_range + "FStar.InteractiveHelpers.ExploreTerm.fst" + (Prims.of_int (525)) + (Prims.of_int (31)) + (Prims.of_int (525)) + (Prims.of_int (70))) + (Prims.mk_range + "FStar.InteractiveHelpers.ExploreTerm.fst" + (Prims.of_int (525)) + (Prims.of_int (10)) + (Prims.of_int (529)) + (Prims.of_int (42))) + (Obj.magic + (explore_pattern + dbg dfs + () f x01 + ge0 pat)) + (fun + uu___5 -> + (fun + uu___5 -> + match uu___5 + with + | + (ge1, x1, + flag11) + -> + if + flag11 = + FStar_Tactics_Types.Continue + then + Obj.magic + (Obj.repr + (explore_term + dbg dfs + () f x1 + ge1 pl1 + c0 + branch_body)) + else + Obj.magic + (Obj.repr + (FStar_Tactics_Effect.lift_div_tac + (fun + uu___7 -> + (x1, + (convert_ctrl_flag + flag11)))))) + uu___5))) + uu___4))) + else + Obj.magic + (Obj.repr + (FStar_Tactics_Effect.lift_div_tac + (fun + uu___5 -> + (x01, + flag1))))) + uu___3))) + (fun + uu___2 -> + (fun + explore_branch + -> + Obj.magic + (FStar_Tactics_Effect.tac_bind + (Prims.mk_range + "FStar.InteractiveHelpers.ExploreTerm.fst" + (Prims.of_int (534)) + (Prims.of_int (20)) + (Prims.of_int (534)) + (Prims.of_int (58))) + (Prims.mk_range + "FStar.InteractiveHelpers.ExploreTerm.fst" + (Prims.of_int (535)) + (Prims.of_int (6)) + (Prims.of_int (537)) + (Prims.of_int (42))) + (Obj.magic + (safe_typ_or_comp + dbg + ge0.FStar_InteractiveHelpers_Base.env + scrutinee)) + (fun + uu___2 -> + (fun + scrut_c + -> + Obj.magic + (FStar_Tactics_Effect.tac_bind + (Prims.mk_range + "FStar.InteractiveHelpers.ExploreTerm.fst" + (Prims.of_int (535)) + (Prims.of_int (15)) + (Prims.of_int (535)) + (Prims.of_int (69))) + (Prims.mk_range + "FStar.InteractiveHelpers.ExploreTerm.fst" + (Prims.of_int (537)) + (Prims.of_int (6)) + (Prims.of_int (537)) + (Prims.of_int (42))) + (Obj.magic + (explore_term + dbg dfs + () f x0 + ge0 pl1 + scrut_c + scrutinee)) + (fun + uu___2 -> + (fun x1 + -> + Obj.magic + (FStar_Tactics_Util.fold_left + explore_branch + x1 + branches)) + uu___2))) + uu___2))) + uu___2)) + | + FStar_Reflection_Data.Tv_AscribedT + (e, ty, + tac, + uu___2) + -> + Obj.repr + (FStar_Tactics_Effect.tac_bind + (Prims.mk_range + "FStar.InteractiveHelpers.ExploreTerm.fst" + (Prims.of_int (539)) + (Prims.of_int (15)) + (Prims.of_int (539)) + (Prims.of_int (36))) + (Prims.mk_range + "FStar.InteractiveHelpers.ExploreTerm.fst" + (Prims.of_int (540)) + (Prims.of_int (6)) + (Prims.of_int (543)) + (Prims.of_int (37))) + (FStar_Tactics_Effect.lift_div_tac + (fun + uu___3 -> + FStar_Pervasives_Native.Some + (TC_Typ + (ty, [], + Prims.int_zero)))) + (fun + uu___3 -> + (fun c1 + -> + Obj.magic + (FStar_Tactics_Effect.tac_bind + (Prims.mk_range + "FStar.InteractiveHelpers.ExploreTerm.fst" + (Prims.of_int (540)) + (Prims.of_int (21)) + (Prims.of_int (540)) + (Prims.of_int (65))) + (Prims.mk_range + "FStar.InteractiveHelpers.ExploreTerm.fst" + (Prims.of_int (540)) + (Prims.of_int (6)) + (Prims.of_int (543)) + (Prims.of_int (37))) + (Obj.magic + (explore_term + dbg dfs + () f x0 + ge0 pl1 + FStar_Pervasives_Native.None + ty)) + (fun + uu___3 -> + (fun + uu___3 -> + match uu___3 + with + | + (x1, + flag1) -> + if + flag1 = + FStar_Tactics_Types.Continue + then + Obj.magic + (Obj.repr + (explore_term + dbg dfs + () f x1 + ge0 pl1 + c1 e)) + else + Obj.magic + (Obj.repr + (FStar_Tactics_Effect.lift_div_tac + (fun + uu___5 -> + (x1, + (convert_ctrl_flag + flag1)))))) + uu___3))) + uu___3)) + | + FStar_Reflection_Data.Tv_AscribedC + (e, c1, + tac, + uu___2) + -> + Obj.repr + (explore_term + dbg dfs + () f x0 + ge0 pl1 + (FStar_Pervasives_Native.Some + (TC_Comp + (c1, [], + Prims.int_zero))) + e) + | + uu___2 -> + Obj.repr + (FStar_Tactics_Effect.lift_div_tac + (fun + uu___3 -> + (x0, + FStar_Tactics_Types.Continue))))) + else + Obj.magic + (Obj.repr + (FStar_Tactics_Effect.lift_div_tac + (fun + uu___3 -> + (x0, + (convert_ctrl_flag + flag)))))) + uu___2))) + uu___1))) uu___1))) uu___) +and (explore_pattern : + Prims.bool -> + Prims.bool -> + unit -> + Obj.t explorer -> + Obj.t -> + FStar_InteractiveHelpers_Base.genv -> + FStar_Reflection_Data.pattern -> + ((FStar_InteractiveHelpers_Base.genv * Obj.t * + FStar_Tactics_Types.ctrl_flag), + unit) FStar_Tactics_Effect.tac_repr) + = + fun dbg -> + fun dfs -> + fun a -> + fun f -> + fun x -> + fun ge0 -> + fun pat -> + FStar_Tactics_Effect.tac_bind + (Prims.mk_range "FStar.InteractiveHelpers.ExploreTerm.fst" + (Prims.of_int (554)) (Prims.of_int (2)) + (Prims.of_int (554)) (Prims.of_int (39))) + (Prims.mk_range "FStar.InteractiveHelpers.ExploreTerm.fst" + (Prims.of_int (555)) (Prims.of_int (2)) + (Prims.of_int (571)) (Prims.of_int (38))) + (Obj.magic + (FStar_InteractiveHelpers_Base.print_dbg dbg + "[> explore_pattern:")) + (fun uu___ -> + (fun uu___ -> + match pat with + | FStar_Reflection_Data.Pat_Constant uu___1 -> + Obj.magic + (Obj.repr + (FStar_Tactics_Effect.lift_div_tac + (fun uu___2 -> + (ge0, x, FStar_Tactics_Types.Continue)))) + | FStar_Reflection_Data.Pat_Cons (fv, us, patterns) + -> + Obj.magic + (Obj.repr + (FStar_Tactics_Effect.tac_bind + (Prims.mk_range + "FStar.InteractiveHelpers.ExploreTerm.fst" + (Prims.of_int (559)) + (Prims.of_int (6)) + (Prims.of_int (565)) + (Prims.of_int (20))) + (Prims.mk_range + "FStar.InteractiveHelpers.ExploreTerm.fst" + (Prims.of_int (567)) + (Prims.of_int (4)) + (Prims.of_int (567)) + (Prims.of_int (53))) + (FStar_Tactics_Effect.lift_div_tac + (fun uu___1 -> + fun ge_x_flag -> + fun pat1 -> + FStar_Tactics_Effect.tac_bind + (Prims.mk_range + "FStar.InteractiveHelpers.ExploreTerm.fst" + (Prims.of_int (559)) + (Prims.of_int (25)) + (Prims.of_int (559)) + (Prims.of_int (34))) + (Prims.mk_range + "FStar.InteractiveHelpers.ExploreTerm.fst" + (Prims.of_int (559)) + (Prims.of_int (6)) + (Prims.of_int (565)) + (Prims.of_int (20))) + (FStar_Tactics_Effect.lift_div_tac + (fun uu___2 -> ge_x_flag)) + (fun uu___2 -> + (fun uu___2 -> + match uu___2 with + | (ge01, x1, flag) -> + Obj.magic + (FStar_Tactics_Effect.tac_bind + (Prims.mk_range + "FStar.InteractiveHelpers.ExploreTerm.fst" + (Prims.of_int (560)) + (Prims.of_int (20)) + (Prims.of_int (560)) + (Prims.of_int (23))) + (Prims.mk_range + "FStar.InteractiveHelpers.ExploreTerm.fst" + (Prims.of_int (560)) + (Prims.of_int (6)) + (Prims.of_int (565)) + (Prims.of_int (20))) + (FStar_Tactics_Effect.lift_div_tac + (fun uu___3 + -> pat1)) + (fun uu___3 -> + (fun uu___3 + -> + match uu___3 + with + | + (pat11, + uu___4) + -> + if + flag = + FStar_Tactics_Types.Continue + then + Obj.magic + (Obj.repr + (explore_pattern + dbg dfs + () f x1 + ge01 + pat11)) + else + Obj.magic + (Obj.repr + (FStar_Tactics_Effect.lift_div_tac + (fun + uu___6 -> + (ge01, + x1, flag))))) + uu___3))) + uu___2))) + (fun uu___1 -> + (fun explore_pat -> + Obj.magic + (FStar_Tactics_Util.fold_left + explore_pat + (ge0, x, + FStar_Tactics_Types.Continue) + patterns)) uu___1))) + | FStar_Reflection_Data.Pat_Var bv -> + Obj.magic + (Obj.repr + (FStar_Tactics_Effect.tac_bind + (Prims.mk_range + "FStar.InteractiveHelpers.ExploreTerm.fst" + (Prims.of_int (569)) + (Prims.of_int (14)) + (Prims.of_int (569)) + (Prims.of_int (44))) + (Prims.mk_range + "FStar.InteractiveHelpers.ExploreTerm.fst" + (Prims.of_int (570)) + (Prims.of_int (4)) + (Prims.of_int (570)) + (Prims.of_int (20))) + (Obj.magic + (FStar_InteractiveHelpers_Base.genv_push_bv + ge0 bv false + FStar_Pervasives_Native.None)) + (fun ge1 -> + FStar_Tactics_Effect.lift_div_tac + (fun uu___1 -> + (ge1, x, + FStar_Tactics_Types.Continue))))) + | FStar_Reflection_Data.Pat_Wild bv -> + Obj.magic + (Obj.repr + (FStar_Tactics_Effect.tac_bind + (Prims.mk_range + "FStar.InteractiveHelpers.ExploreTerm.fst" + (Prims.of_int (569)) + (Prims.of_int (14)) + (Prims.of_int (569)) + (Prims.of_int (44))) + (Prims.mk_range + "FStar.InteractiveHelpers.ExploreTerm.fst" + (Prims.of_int (570)) + (Prims.of_int (4)) + (Prims.of_int (570)) + (Prims.of_int (20))) + (Obj.magic + (FStar_InteractiveHelpers_Base.genv_push_bv + ge0 bv false + FStar_Pervasives_Native.None)) + (fun ge1 -> + FStar_Tactics_Effect.lift_div_tac + (fun uu___1 -> + (ge1, x, + FStar_Tactics_Types.Continue))))) + | FStar_Reflection_Data.Pat_Dot_Term uu___1 -> + Obj.magic + (Obj.repr + (FStar_Tactics_Effect.lift_div_tac + (fun uu___2 -> + (ge0, x, FStar_Tactics_Types.Continue))))) + uu___) +let (free_in : + FStar_Reflection_Types.term -> + (FStar_Reflection_Types.bv Prims.list, unit) + FStar_Tactics_Effect.tac_repr) + = + fun t -> + FStar_Tactics_Effect.tac_bind + (Prims.mk_range "FStar.InteractiveHelpers.ExploreTerm.fst" + (Prims.of_int (578)) (Prims.of_int (4)) (Prims.of_int (578)) + (Prims.of_int (35))) + (Prims.mk_range "FStar.InteractiveHelpers.ExploreTerm.fst" + (Prims.of_int (580)) (Prims.of_int (2)) (Prims.of_int (598)) + (Prims.of_int (75))) + (FStar_Tactics_Effect.lift_div_tac + (fun uu___ -> + fun bv1 -> + fun bv2 -> + (FStar_Reflection_Derived.name_of_bv bv1) = + (FStar_Reflection_Derived.name_of_bv bv2))) + (fun uu___ -> + (fun same_name -> + Obj.magic + (FStar_Tactics_Effect.tac_bind + (Prims.mk_range "FStar.InteractiveHelpers.ExploreTerm.fst" + (Prims.of_int (583)) (Prims.of_int (4)) + (Prims.of_int (594)) (Prims.of_int (23))) + (Prims.mk_range "FStar.InteractiveHelpers.ExploreTerm.fst" + (Prims.of_int (596)) (Prims.of_int (2)) + (Prims.of_int (598)) (Prims.of_int (75))) + (FStar_Tactics_Effect.lift_div_tac + (fun uu___5 -> + fun uu___4 -> + fun uu___3 -> + fun uu___2 -> + fun uu___1 -> + fun uu___ -> + (fun uu___ -> + fun fl -> + fun ge -> + fun pl -> + fun c -> + fun tv -> + Obj.magic + (FStar_Tactics_Effect.lift_div_tac + (fun uu___1 -> + match tv with + | FStar_Reflection_Data.Tv_Var + bv -> + (match FStar_InteractiveHelpers_Base.genv_get_from_name + ge + (FStar_Reflection_Builtins.inspect_bv + bv).FStar_Reflection_Data.bv_ppname + with + | FStar_Pervasives_Native.None + -> + ((if + FStar_Pervasives_Native.uu___is_Some + (FStar_List_Tot_Base.tryFind + (same_name + bv) fl) + then fl + else bv :: + fl), + FStar_Tactics_Types.Continue) + | FStar_Pervasives_Native.Some + uu___2 -> + (fl, + FStar_Tactics_Types.Continue)) + | FStar_Reflection_Data.Tv_BVar + bv -> + (match FStar_InteractiveHelpers_Base.genv_get_from_name + ge + (FStar_Reflection_Builtins.inspect_bv + bv).FStar_Reflection_Data.bv_ppname + with + | FStar_Pervasives_Native.None + -> + ((if + FStar_Pervasives_Native.uu___is_Some + (FStar_List_Tot_Base.tryFind + (same_name + bv) fl) + then fl + else bv :: + fl), + FStar_Tactics_Types.Continue) + | FStar_Pervasives_Native.Some + uu___2 -> + (fl, + FStar_Tactics_Types.Continue)) + | uu___2 -> + (fl, + FStar_Tactics_Types.Continue)))) + uu___5 uu___4 uu___3 uu___2 uu___1 uu___)) + (fun uu___ -> + (fun update_free -> + Obj.magic + (FStar_Tactics_Effect.tac_bind + (Prims.mk_range + "FStar.InteractiveHelpers.ExploreTerm.fst" + (Prims.of_int (596)) (Prims.of_int (10)) + (Prims.of_int (596)) (Prims.of_int (20))) + (Prims.mk_range + "FStar.InteractiveHelpers.ExploreTerm.fst" + (Prims.of_int (597)) (Prims.of_int (2)) + (Prims.of_int (598)) (Prims.of_int (75))) + (Obj.magic (FStar_Tactics_Builtins.top_env ())) + (fun uu___ -> + (fun e -> + Obj.magic + (FStar_Tactics_Effect.tac_bind + (Prims.mk_range + "FStar.InteractiveHelpers.ExploreTerm.fst" + (Prims.of_int (597)) + (Prims.of_int (11)) + (Prims.of_int (597)) + (Prims.of_int (26))) + (Prims.mk_range + "FStar.InteractiveHelpers.ExploreTerm.fst" + (Prims.of_int (598)) + (Prims.of_int (2)) + (Prims.of_int (598)) + (Prims.of_int (75))) + (FStar_Tactics_Effect.lift_div_tac + (fun uu___ -> + FStar_InteractiveHelpers_Base.mk_genv + e [] [])) + (fun uu___ -> + (fun ge -> + Obj.magic + (FStar_Tactics_Effect.tac_bind + (Prims.mk_range + "FStar.InteractiveHelpers.ExploreTerm.fst" + (Prims.of_int (598)) + (Prims.of_int (15)) + (Prims.of_int (598)) + (Prims.of_int (75))) + (Prims.mk_range + "FStar.InteractiveHelpers.ExploreTerm.fst" + (Prims.of_int (598)) + (Prims.of_int (2)) + (Prims.of_int (598)) + (Prims.of_int (75))) + (Obj.magic + (FStar_Tactics_Effect.tac_bind + (Prims.mk_range + "FStar.InteractiveHelpers.ExploreTerm.fst" + (Prims.of_int (598)) + (Prims.of_int (20)) + (Prims.of_int (598)) + (Prims.of_int (74))) + (Prims.mk_range + "FStar.InteractiveHelpers.ExploreTerm.fst" + (Prims.of_int (598)) + (Prims.of_int (15)) + (Prims.of_int (598)) + (Prims.of_int (75))) + (Obj.magic + (explore_term + false false () + (Obj.magic + update_free) + (Obj.magic []) + ge [] + FStar_Pervasives_Native.None + t)) + (fun uu___ -> + FStar_Tactics_Effect.lift_div_tac + (fun uu___1 -> + FStar_Pervasives_Native.fst + uu___)))) + (fun uu___ -> + FStar_Tactics_Effect.lift_div_tac + (fun uu___1 -> + FStar_List_Tot_Base.rev + uu___)))) uu___))) + uu___))) uu___))) uu___) +let (abs_free_in : + FStar_InteractiveHelpers_Base.genv -> + FStar_Reflection_Types.term -> + (FStar_Reflection_Types.bv Prims.list, unit) + FStar_Tactics_Effect.tac_repr) + = + fun ge -> + fun t -> + FStar_Tactics_Effect.tac_bind + (Prims.mk_range "FStar.InteractiveHelpers.ExploreTerm.fst" + (Prims.of_int (604)) (Prims.of_int (12)) (Prims.of_int (604)) + (Prims.of_int (21))) + (Prims.mk_range "FStar.InteractiveHelpers.ExploreTerm.fst" + (Prims.of_int (605)) (Prims.of_int (2)) (Prims.of_int (610)) + (Prims.of_int (9))) (Obj.magic (free_in t)) + (fun fvl -> + FStar_Tactics_Effect.lift_div_tac + (fun uu___ -> + FStar_List_Tot_Base.filter + (fun bv -> + FStar_Pervasives_Native.uu___is_Some + (FStar_List_Tot_Base.find + (FStar_InteractiveHelpers_Base.bv_eq bv) fvl)) + (FStar_List_Tot_Base.rev + (FStar_InteractiveHelpers_Base.genv_abstract_bvs ge)))) +let (shadowed_free_in : + FStar_InteractiveHelpers_Base.genv -> + FStar_Reflection_Types.term -> + (FStar_Reflection_Types.bv Prims.list, unit) + FStar_Tactics_Effect.tac_repr) + = + fun ge -> + fun t -> + FStar_Tactics_Effect.tac_bind + (Prims.mk_range "FStar.InteractiveHelpers.ExploreTerm.fst" + (Prims.of_int (615)) (Prims.of_int (12)) (Prims.of_int (615)) + (Prims.of_int (21))) + (Prims.mk_range "FStar.InteractiveHelpers.ExploreTerm.fst" + (Prims.of_int (616)) (Prims.of_int (2)) (Prims.of_int (616)) + (Prims.of_int (54))) (Obj.magic (free_in t)) + (fun fvl -> + FStar_Tactics_Effect.lift_div_tac + (fun uu___ -> + FStar_List_Tot_Base.filter + (fun bv -> + FStar_InteractiveHelpers_Base.bv_is_shadowed ge bv) fvl)) +let (term_has_shadowed_variables : + FStar_InteractiveHelpers_Base.genv -> + FStar_Reflection_Types.term -> + (Prims.bool, unit) FStar_Tactics_Effect.tac_repr) + = + fun ge -> + fun t -> + FStar_Tactics_Effect.tac_bind + (Prims.mk_range "FStar.InteractiveHelpers.ExploreTerm.fst" + (Prims.of_int (621)) (Prims.of_int (12)) (Prims.of_int (621)) + (Prims.of_int (21))) + (Prims.mk_range "FStar.InteractiveHelpers.ExploreTerm.fst" + (Prims.of_int (622)) (Prims.of_int (2)) (Prims.of_int (622)) + (Prims.of_int (50))) (Obj.magic (free_in t)) + (fun fvl -> + FStar_Tactics_Effect.lift_div_tac + (fun uu___ -> + FStar_Pervasives_Native.uu___is_Some + (FStar_List_Tot_Base.tryFind + (FStar_InteractiveHelpers_Base.bv_is_shadowed ge) fvl))) \ No newline at end of file diff --git a/ocaml/fstar-lib/generated/FStar_InteractiveHelpers_Output.ml b/ocaml/fstar-lib/generated/FStar_InteractiveHelpers_Output.ml new file mode 100644 index 00000000000..4c668263d78 --- /dev/null +++ b/ocaml/fstar-lib/generated/FStar_InteractiveHelpers_Output.ml @@ -0,0 +1,1598 @@ +open Prims +let rec _split_subst_at_bv : + 'a . + FStar_Reflection_Types.bv -> + (FStar_Reflection_Types.bv * 'a) Prims.list -> + ((FStar_Reflection_Types.bv * 'a) Prims.list * + (FStar_Reflection_Types.bv * 'a) Prims.list) + = + fun b -> + fun subst -> + match subst with + | [] -> ([], []) + | (src, tgt)::subst' -> + if FStar_InteractiveHelpers_Base.bv_eq b src + then ([], subst') + else + (let uu___1 = _split_subst_at_bv b subst' in + match uu___1 with | (s1, s2) -> (((src, tgt) :: s1), s2)) +let (subst_shadowed_with_abs_in_assertions : + Prims.bool -> + FStar_InteractiveHelpers_Base.genv -> + FStar_Reflection_Types.bv FStar_Pervasives_Native.option -> + FStar_InteractiveHelpers_Propositions.assertions -> + ((FStar_InteractiveHelpers_Base.genv * + FStar_InteractiveHelpers_Propositions.assertions), + unit) FStar_Tactics_Effect.tac_repr) + = + fun dbg -> + fun ge -> + fun shadowed_bv -> + fun es -> + FStar_Tactics_Effect.tac_bind + (Prims.mk_range "FStar.InteractiveHelpers.Output.fst" + (Prims.of_int (44)) (Prims.of_int (2)) (Prims.of_int (44)) + (Prims.of_int (80))) + (Prims.mk_range "FStar.InteractiveHelpers.Output.fst" + (Prims.of_int (46)) (Prims.of_int (2)) (Prims.of_int (73)) + (Prims.of_int (31))) + (Obj.magic + (FStar_Tactics_Effect.tac_bind + (Prims.mk_range "FStar.InteractiveHelpers.Output.fst" + (Prims.of_int (44)) (Prims.of_int (16)) + (Prims.of_int (44)) (Prims.of_int (80))) + (Prims.mk_range "FStar.InteractiveHelpers.Output.fst" + (Prims.of_int (44)) (Prims.of_int (2)) + (Prims.of_int (44)) (Prims.of_int (80))) + (Obj.magic + (FStar_Tactics_Effect.tac_bind + (Prims.mk_range "FStar.InteractiveHelpers.Output.fst" + (Prims.of_int (44)) (Prims.of_int (62)) + (Prims.of_int (44)) (Prims.of_int (79))) + (Prims.mk_range "prims.fst" (Prims.of_int (606)) + (Prims.of_int (19)) (Prims.of_int (606)) + (Prims.of_int (31))) + (Obj.magic + (FStar_InteractiveHelpers_Base.genv_to_string ge)) + (fun uu___ -> + FStar_Tactics_Effect.lift_div_tac + (fun uu___1 -> + Prims.strcat + "subst_shadowed_with_abs_in_assertions:\n" + uu___)))) + (fun uu___ -> + (fun uu___ -> + Obj.magic + (FStar_InteractiveHelpers_Base.print_dbg dbg uu___)) + uu___))) + (fun uu___ -> + (fun uu___ -> + Obj.magic + (FStar_Tactics_Effect.tac_bind + (Prims.mk_range "FStar.InteractiveHelpers.Output.fst" + (Prims.of_int (46)) (Prims.of_int (19)) + (Prims.of_int (46)) (Prims.of_int (45))) + (Prims.mk_range "FStar.InteractiveHelpers.Output.fst" + (Prims.of_int (46)) (Prims.of_int (2)) + (Prims.of_int (73)) (Prims.of_int (31))) + (Obj.magic + (FStar_InteractiveHelpers_Base.generate_shadowed_subst + ge)) + (fun uu___1 -> + (fun uu___1 -> + match uu___1 with + | (ge1, subst) -> + Obj.magic + (FStar_Tactics_Effect.tac_bind + (Prims.mk_range + "FStar.InteractiveHelpers.Output.fst" + (Prims.of_int (47)) + (Prims.of_int (19)) + (Prims.of_int (47)) + (Prims.of_int (71))) + (Prims.mk_range + "FStar.InteractiveHelpers.Output.fst" + (Prims.of_int (53)) + (Prims.of_int (2)) + (Prims.of_int (73)) + (Prims.of_int (31))) + (Obj.magic + (FStar_Tactics_Util.map + (fun uu___2 -> + match uu___2 with + | (src, tgt) -> + FStar_Tactics_Effect.tac_bind + (Prims.mk_range + "FStar.InteractiveHelpers.Output.fst" + (Prims.of_int (47)) + (Prims.of_int (47)) + (Prims.of_int (47)) + (Prims.of_int (64))) + (Prims.mk_range + "FStar.InteractiveHelpers.Output.fst" + (Prims.of_int (47)) + (Prims.of_int (42)) + (Prims.of_int (47)) + (Prims.of_int (64))) + (Obj.magic + (FStar_Tactics_Builtins.pack + (FStar_Reflection_Data.Tv_Var + tgt))) + (fun uu___3 -> + FStar_Tactics_Effect.lift_div_tac + (fun uu___4 -> + (src, uu___3)))) + subst)) + (fun uu___2 -> + (fun post_subst -> + Obj.magic + (FStar_Tactics_Effect.tac_bind + (Prims.mk_range + "FStar.InteractiveHelpers.Output.fst" + (Prims.of_int (54)) + (Prims.of_int (4)) + (Prims.of_int (55)) + (Prims.of_int (19))) + (Prims.mk_range + "FStar.InteractiveHelpers.Output.fst" + (Prims.of_int (57)) + (Prims.of_int (2)) + (Prims.of_int (73)) + (Prims.of_int (31))) + (FStar_Tactics_Effect.lift_div_tac + (fun uu___2 -> + if + FStar_Pervasives_Native.uu___is_Some + shadowed_bv + then + FStar_Pervasives_Native.fst + (_split_subst_at_bv + (FStar_Pervasives_Native.__proj__Some__item__v + shadowed_bv) + post_subst) + else post_subst)) + (fun uu___2 -> + (fun pre_subst -> + Obj.magic + (FStar_Tactics_Effect.tac_bind + (Prims.mk_range + "FStar.InteractiveHelpers.Output.fst" + (Prims.of_int (58)) + (Prims.of_int (4)) + (Prims.of_int (62)) + (Prims.of_int (48))) + (Prims.mk_range + "FStar.InteractiveHelpers.Output.fst" + (Prims.of_int (64)) + (Prims.of_int (2)) + (Prims.of_int (73)) + (Prims.of_int (31))) + (FStar_Tactics_Effect.lift_div_tac + (fun uu___2 -> + fun subst1 + -> + FStar_Tactics_Effect.tac_bind + (Prims.mk_range + "FStar.InteractiveHelpers.Output.fst" + (Prims.of_int (59)) + (Prims.of_int (6)) + (Prims.of_int (59)) + (Prims.of_int (63))) + (Prims.mk_range + "FStar.InteractiveHelpers.Output.fst" + (Prims.of_int (61)) + (Prims.of_int (4)) + (Prims.of_int (62)) + (Prims.of_int (48))) + (FStar_Tactics_Effect.lift_div_tac + (fun + uu___3 -> + fun + uu___4 -> + match uu___4 + with + | + (x, y) -> + FStar_Tactics_Effect.tac_bind + (Prims.mk_range + "FStar.InteractiveHelpers.Output.fst" + (Prims.of_int (59)) + (Prims.of_int (12)) + (Prims.of_int (59)) + (Prims.of_int (63))) + (Prims.mk_range + "prims.fst" + (Prims.of_int (606)) + (Prims.of_int (19)) + (Prims.of_int (606)) + (Prims.of_int (31))) + (Obj.magic + (FStar_Tactics_Effect.tac_bind + (Prims.mk_range + "FStar.InteractiveHelpers.Output.fst" + (Prims.of_int (59)) + (Prims.of_int (12)) + (Prims.of_int (59)) + (Prims.of_int (27))) + (Prims.mk_range + "FStar.InteractiveHelpers.Output.fst" + (Prims.of_int (59)) + (Prims.of_int (12)) + (Prims.of_int (59)) + (Prims.of_int (63))) + (Obj.magic + (FStar_InteractiveHelpers_Base.abv_to_string + x)) + (fun + uu___5 -> + (fun + uu___5 -> + Obj.magic + (FStar_Tactics_Effect.tac_bind + (Prims.mk_range + "FStar.InteractiveHelpers.Output.fst" + (Prims.of_int (59)) + (Prims.of_int (30)) + (Prims.of_int (59)) + (Prims.of_int (63))) + (Prims.mk_range + "prims.fst" + (Prims.of_int (606)) + (Prims.of_int (19)) + (Prims.of_int (606)) + (Prims.of_int (31))) + (Obj.magic + (FStar_Tactics_Effect.tac_bind + (Prims.mk_range + "FStar.InteractiveHelpers.Output.fst" + (Prims.of_int (59)) + (Prims.of_int (39)) + (Prims.of_int (59)) + (Prims.of_int (63))) + (Prims.mk_range + "prims.fst" + (Prims.of_int (606)) + (Prims.of_int (19)) + (Prims.of_int (606)) + (Prims.of_int (31))) + (Obj.magic + (FStar_Tactics_Effect.tac_bind + (Prims.mk_range + "FStar.InteractiveHelpers.Output.fst" + (Prims.of_int (59)) + (Prims.of_int (39)) + (Prims.of_int (59)) + (Prims.of_int (55))) + (Prims.mk_range + "prims.fst" + (Prims.of_int (606)) + (Prims.of_int (19)) + (Prims.of_int (606)) + (Prims.of_int (31))) + (Obj.magic + (FStar_Tactics_Builtins.term_to_string + y)) + (fun + uu___6 -> + FStar_Tactics_Effect.lift_div_tac + (fun + uu___7 -> + Prims.strcat + uu___6 + ")\n")))) + (fun + uu___6 -> + FStar_Tactics_Effect.lift_div_tac + (fun + uu___7 -> + Prims.strcat + " -> " + uu___6)))) + (fun + uu___6 -> + FStar_Tactics_Effect.lift_div_tac + (fun + uu___7 -> + Prims.strcat + uu___5 + uu___6)))) + uu___5))) + (fun + uu___5 -> + FStar_Tactics_Effect.lift_div_tac + (fun + uu___6 -> + Prims.strcat + "(" + uu___5)))) + (fun + uu___3 -> + (fun + to_string + -> + Obj.magic + (FStar_Tactics_Effect.tac_bind + (Prims.mk_range + "FStar.InteractiveHelpers.Output.fst" + (Prims.of_int (61)) + (Prims.of_int (14)) + (Prims.of_int (61)) + (Prims.of_int (33))) + (Prims.mk_range + "FStar.InteractiveHelpers.Output.fst" + (Prims.of_int (62)) + (Prims.of_int (4)) + (Prims.of_int (62)) + (Prims.of_int (48))) + (Obj.magic + (FStar_Tactics_Util.map + to_string + subst1)) + (fun str + -> + FStar_Tactics_Effect.lift_div_tac + (fun + uu___3 -> + FStar_List_Tot_Base.fold_left + (fun x -> + fun y -> + Prims.strcat + x y) "" + str)))) + uu___3))) + (fun uu___2 -> + (fun + subst_to_string + -> + Obj.magic + ( + FStar_Tactics_Effect.tac_bind + (Prims.mk_range + "FStar.InteractiveHelpers.Output.fst" + (Prims.of_int (64)) + (Prims.of_int (2)) + (Prims.of_int (68)) + (Prims.of_int (7))) + (Prims.mk_range + "FStar.InteractiveHelpers.Output.fst" + (Prims.of_int (70)) + (Prims.of_int (2)) + (Prims.of_int (73)) + (Prims.of_int (31))) + (if dbg + then + Obj.magic + (Obj.repr + (FStar_Tactics_Effect.tac_bind + (Prims.mk_range + "FStar.InteractiveHelpers.Output.fst" + (Prims.of_int (66)) + (Prims.of_int (4)) + (Prims.of_int (66)) + (Prims.of_int (64))) + (Prims.mk_range + "FStar.InteractiveHelpers.Output.fst" + (Prims.of_int (67)) + (Prims.of_int (4)) + (Prims.of_int (67)) + (Prims.of_int (66))) + (Obj.magic + (FStar_Tactics_Effect.tac_bind + (Prims.mk_range + "FStar.InteractiveHelpers.Output.fst" + (Prims.of_int (66)) + (Prims.of_int (18)) + (Prims.of_int (66)) + (Prims.of_int (64))) + (Prims.mk_range + "FStar.InteractiveHelpers.Output.fst" + (Prims.of_int (66)) + (Prims.of_int (4)) + (Prims.of_int (66)) + (Prims.of_int (64))) + (Obj.magic + (FStar_Tactics_Effect.tac_bind + (Prims.mk_range + "FStar.InteractiveHelpers.Output.fst" + (Prims.of_int (66)) + (Prims.of_int (38)) + (Prims.of_int (66)) + (Prims.of_int (63))) + (Prims.mk_range + "prims.fst" + (Prims.of_int (606)) + (Prims.of_int (19)) + (Prims.of_int (606)) + (Prims.of_int (31))) + (Obj.magic + (subst_to_string + pre_subst)) + (fun + uu___2 -> + FStar_Tactics_Effect.lift_div_tac + (fun + uu___3 -> + Prims.strcat + "- pre_subst:\n" + uu___2)))) + (fun + uu___2 -> + (fun + uu___2 -> + Obj.magic + (FStar_InteractiveHelpers_Base.print_dbg + dbg + uu___2)) + uu___2))) + (fun + uu___2 -> + (fun + uu___2 -> + Obj.magic + (FStar_Tactics_Effect.tac_bind + (Prims.mk_range + "FStar.InteractiveHelpers.Output.fst" + (Prims.of_int (67)) + (Prims.of_int (18)) + (Prims.of_int (67)) + (Prims.of_int (66))) + (Prims.mk_range + "FStar.InteractiveHelpers.Output.fst" + (Prims.of_int (67)) + (Prims.of_int (4)) + (Prims.of_int (67)) + (Prims.of_int (66))) + (Obj.magic + (FStar_Tactics_Effect.tac_bind + (Prims.mk_range + "FStar.InteractiveHelpers.Output.fst" + (Prims.of_int (67)) + (Prims.of_int (39)) + (Prims.of_int (67)) + (Prims.of_int (65))) + (Prims.mk_range + "prims.fst" + (Prims.of_int (606)) + (Prims.of_int (19)) + (Prims.of_int (606)) + (Prims.of_int (31))) + (Obj.magic + (subst_to_string + post_subst)) + (fun + uu___3 -> + FStar_Tactics_Effect.lift_div_tac + (fun + uu___4 -> + Prims.strcat + "- post_subst:\n" + uu___3)))) + (fun + uu___3 -> + (fun + uu___3 -> + Obj.magic + (FStar_InteractiveHelpers_Base.print_dbg + dbg + uu___3)) + uu___3))) + uu___2))) + else + Obj.magic + (Obj.repr + (FStar_Tactics_Effect.lift_div_tac + (fun + uu___3 -> + ())))) + (fun + uu___2 -> + (fun + uu___2 -> + Obj.magic + (FStar_Tactics_Effect.tac_bind + (Prims.mk_range + "FStar.InteractiveHelpers.Output.fst" + (Prims.of_int (70)) + (Prims.of_int (14)) + (Prims.of_int (70)) + (Prims.of_int (63))) + (Prims.mk_range + "FStar.InteractiveHelpers.Output.fst" + (Prims.of_int (71)) + (Prims.of_int (2)) + (Prims.of_int (73)) + (Prims.of_int (31))) + (FStar_Tactics_Effect.lift_div_tac + (fun + uu___3 -> + fun s -> + FStar_Tactics_Util.map + (fun t -> + FStar_InteractiveHelpers_Base.apply_subst + ge1.FStar_InteractiveHelpers_Base.env + t s))) + (fun + uu___3 -> + (fun + apply -> + Obj.magic + (FStar_Tactics_Effect.tac_bind + (Prims.mk_range + "FStar.InteractiveHelpers.Output.fst" + (Prims.of_int (71)) + (Prims.of_int (13)) + (Prims.of_int (71)) + (Prims.of_int (36))) + (Prims.mk_range + "FStar.InteractiveHelpers.Output.fst" + (Prims.of_int (72)) + (Prims.of_int (2)) + (Prims.of_int (73)) + (Prims.of_int (31))) + (Obj.magic + (apply + pre_subst + es.FStar_InteractiveHelpers_Propositions.pres)) + (fun + uu___3 -> + (fun pres + -> + Obj.magic + (FStar_Tactics_Effect.tac_bind + (Prims.mk_range + "FStar.InteractiveHelpers.Output.fst" + (Prims.of_int (72)) + (Prims.of_int (14)) + (Prims.of_int (72)) + (Prims.of_int (39))) + (Prims.mk_range + "FStar.InteractiveHelpers.Output.fst" + (Prims.of_int (73)) + (Prims.of_int (2)) + (Prims.of_int (73)) + (Prims.of_int (31))) + (Obj.magic + (apply + post_subst + es.FStar_InteractiveHelpers_Propositions.posts)) + (fun + posts -> + FStar_Tactics_Effect.lift_div_tac + (fun + uu___3 -> + (ge1, + (FStar_InteractiveHelpers_Propositions.mk_assertions + pres + posts)))))) + uu___3))) + uu___3))) + uu___2))) + uu___2))) + uu___2))) uu___2))) + uu___1))) uu___) +let (string_to_printout : Prims.string -> Prims.string -> Prims.string) = + fun prefix -> + fun data -> + Prims.strcat prefix (Prims.strcat ":\n" (Prims.strcat data "\n")) +let (term_to_printout : + FStar_InteractiveHelpers_Base.genv -> + Prims.string -> + FStar_Reflection_Types.term -> + (Prims.string, unit) FStar_Tactics_Effect.tac_repr) + = + fun ge -> + fun prefix -> + fun t -> + FStar_Tactics_Effect.tac_bind + (Prims.mk_range "FStar.InteractiveHelpers.Output.fst" + (Prims.of_int (87)) (Prims.of_int (12)) (Prims.of_int (87)) + (Prims.of_int (28))) + (Prims.mk_range "FStar.InteractiveHelpers.Output.fst" + (Prims.of_int (88)) (Prims.of_int (2)) (Prims.of_int (92)) + (Prims.of_int (46))) + (Obj.magic (FStar_InteractiveHelpers_ExploreTerm.abs_free_in ge t)) + (fun uu___ -> + (fun abs -> + Obj.magic + (FStar_Tactics_Effect.tac_bind + (Prims.mk_range "FStar.InteractiveHelpers.Output.fst" + (Prims.of_int (88)) (Prims.of_int (20)) + (Prims.of_int (88)) (Prims.of_int (46))) + (Prims.mk_range "FStar.InteractiveHelpers.Output.fst" + (Prims.of_int (89)) (Prims.of_int (2)) + (Prims.of_int (92)) (Prims.of_int (46))) + (FStar_Tactics_Effect.lift_div_tac + (fun uu___ -> + FStar_List_Tot_Base.map + FStar_Reflection_Derived.mk_binder abs)) + (fun uu___ -> + (fun abs_binders -> + Obj.magic + (FStar_Tactics_Effect.tac_bind + (Prims.mk_range + "FStar.InteractiveHelpers.Output.fst" + (Prims.of_int (89)) (Prims.of_int (18)) + (Prims.of_int (89)) (Prims.of_int (54))) + (Prims.mk_range + "FStar.InteractiveHelpers.Output.fst" + (Prims.of_int (90)) (Prims.of_int (2)) + (Prims.of_int (92)) (Prims.of_int (46))) + (Obj.magic + (FStar_Tactics_Util.map + (fun bv -> + FStar_Tactics_Builtins.pack + (FStar_Reflection_Data.Tv_Var bv)) + abs)) + (fun uu___ -> + (fun abs_terms -> + Obj.magic + (FStar_Tactics_Effect.tac_bind + (Prims.mk_range + "FStar.InteractiveHelpers.Output.fst" + (Prims.of_int (90)) + (Prims.of_int (10)) + (Prims.of_int (90)) + (Prims.of_int (30))) + (Prims.mk_range + "FStar.InteractiveHelpers.Output.fst" + (Prims.of_int (91)) + (Prims.of_int (2)) + (Prims.of_int (92)) + (Prims.of_int (46))) + (Obj.magic + (FStar_Tactics_Derived.mk_abs + abs_binders t)) + (fun uu___ -> + (fun t1 -> + Obj.magic + (FStar_Tactics_Effect.tac_bind + (Prims.mk_range + "FStar.InteractiveHelpers.Output.fst" + (Prims.of_int (91)) + (Prims.of_int (10)) + (Prims.of_int (91)) + (Prims.of_int (30))) + (Prims.mk_range + "FStar.InteractiveHelpers.Output.fst" + (Prims.of_int (92)) + (Prims.of_int (2)) + (Prims.of_int (92)) + (Prims.of_int (46))) + (FStar_Tactics_Effect.lift_div_tac + (fun uu___ -> + FStar_Reflection_Derived.mk_e_app + t1 abs_terms)) + (fun uu___ -> + (fun t2 -> + Obj.magic + (FStar_Tactics_Effect.tac_bind + (Prims.mk_range + "FStar.InteractiveHelpers.Output.fst" + (Prims.of_int (92)) + (Prims.of_int (28)) + (Prims.of_int (92)) + (Prims.of_int (46))) + (Prims.mk_range + "FStar.InteractiveHelpers.Output.fst" + (Prims.of_int (92)) + (Prims.of_int (2)) + (Prims.of_int (92)) + (Prims.of_int (46))) + (Obj.magic + ( + FStar_Tactics_Builtins.term_to_string + t2)) + (fun uu___ + -> + FStar_Tactics_Effect.lift_div_tac + (fun + uu___1 -> + string_to_printout + prefix + uu___)))) + uu___))) uu___))) + uu___))) uu___))) uu___) +let (opt_term_to_printout : + FStar_InteractiveHelpers_Base.genv -> + Prims.string -> + FStar_Reflection_Types.term FStar_Pervasives_Native.option -> + (Prims.string, unit) FStar_Tactics_Effect.tac_repr) + = + fun uu___2 -> + fun uu___1 -> + fun uu___ -> + (fun ge -> + fun prefix -> + fun t -> + match t with + | FStar_Pervasives_Native.Some t' -> + Obj.magic (Obj.repr (term_to_printout ge prefix t')) + | FStar_Pervasives_Native.None -> + Obj.magic + (Obj.repr + (FStar_Tactics_Effect.lift_div_tac + (fun uu___ -> string_to_printout prefix "")))) + uu___2 uu___1 uu___ +let (proposition_to_printout : + FStar_InteractiveHelpers_Base.genv -> + Prims.string -> + FStar_InteractiveHelpers_Propositions.proposition -> + (Prims.string, unit) FStar_Tactics_Effect.tac_repr) + = fun ge -> fun prefix -> fun p -> term_to_printout ge prefix p +let (propositions_to_printout : + FStar_InteractiveHelpers_Base.genv -> + Prims.string -> + FStar_InteractiveHelpers_Propositions.proposition Prims.list -> + (Prims.string, unit) FStar_Tactics_Effect.tac_repr) + = + fun ge -> + fun prefix -> + fun pl -> + FStar_Tactics_Effect.tac_bind + (Prims.mk_range "FStar.InteractiveHelpers.Output.fst" + (Prims.of_int (104)) (Prims.of_int (4)) (Prims.of_int (105)) + (Prims.of_int (40))) + (Prims.mk_range "FStar.InteractiveHelpers.Output.fst" + (Prims.of_int (107)) (Prims.of_int (2)) (Prims.of_int (113)) + (Prims.of_int (5))) + (FStar_Tactics_Effect.lift_div_tac + (fun uu___ -> + fun i -> + fun p -> + FStar_Tactics_Effect.tac_bind + (Prims.mk_range "FStar.InteractiveHelpers.Output.fst" + (Prims.of_int (104)) (Prims.of_int (18)) + (Prims.of_int (104)) (Prims.of_int (52))) + (Prims.mk_range "FStar.InteractiveHelpers.Output.fst" + (Prims.of_int (105)) (Prims.of_int (4)) + (Prims.of_int (105)) (Prims.of_int (40))) + (FStar_Tactics_Effect.lift_div_tac + (fun uu___1 -> + Prims.strcat prefix + (Prims.strcat ":prop" (Prims.string_of_int i)))) + (fun uu___1 -> + (fun prefix' -> + Obj.magic (proposition_to_printout ge prefix' p)) + uu___1))) + (fun uu___ -> + (fun prop_to_printout -> + Obj.magic + (FStar_Tactics_Effect.tac_bind + (Prims.mk_range "FStar.InteractiveHelpers.Output.fst" + (Prims.of_int (107)) (Prims.of_int (12)) + (Prims.of_int (107)) (Prims.of_int (85))) + (Prims.mk_range "FStar.InteractiveHelpers.Output.fst" + (Prims.of_int (108)) (Prims.of_int (2)) + (Prims.of_int (113)) (Prims.of_int (5))) + (FStar_Tactics_Effect.lift_div_tac + (fun uu___ -> + string_to_printout (Prims.strcat prefix ":num") + (Prims.string_of_int + (FStar_List_Tot_Base.length pl)))) + (fun uu___ -> + (fun str -> + Obj.magic + (FStar_Tactics_Effect.tac_bind + (Prims.mk_range + "FStar.InteractiveHelpers.Output.fst" + (Prims.of_int (109)) (Prims.of_int (4)) + (Prims.of_int (110)) (Prims.of_int (33))) + (Prims.mk_range + "FStar.InteractiveHelpers.Output.fst" + (Prims.of_int (112)) (Prims.of_int (2)) + (Prims.of_int (113)) (Prims.of_int (5))) + (FStar_Tactics_Effect.lift_div_tac + (fun uu___ -> + fun s_i -> + fun p -> + FStar_Tactics_Effect.tac_bind + (Prims.mk_range + "FStar.InteractiveHelpers.Output.fst" + (Prims.of_int (109)) + (Prims.of_int (15)) + (Prims.of_int (109)) + (Prims.of_int (18))) + (Prims.mk_range + "FStar.InteractiveHelpers.Output.fst" + (Prims.of_int (109)) + (Prims.of_int (4)) + (Prims.of_int (110)) + (Prims.of_int (33))) + (FStar_Tactics_Effect.lift_div_tac + (fun uu___1 -> s_i)) + (fun uu___1 -> + (fun uu___1 -> + match uu___1 with + | (s, i) -> + Obj.magic + (FStar_Tactics_Effect.tac_bind + (Prims.mk_range + "FStar.InteractiveHelpers.Output.fst" + (Prims.of_int (110)) + (Prims.of_int (4)) + (Prims.of_int (110)) + (Prims.of_int (28))) + (Prims.mk_range + "FStar.InteractiveHelpers.Output.fst" + (Prims.of_int (110)) + (Prims.of_int (4)) + (Prims.of_int (110)) + (Prims.of_int (33))) + (Obj.magic + (FStar_Tactics_Effect.tac_bind + (Prims.mk_range + "FStar.InteractiveHelpers.Output.fst" + (Prims.of_int (110)) + (Prims.of_int (8)) + (Prims.of_int (110)) + (Prims.of_int (28))) + (Prims.mk_range + "prims.fst" + (Prims.of_int (606)) + (Prims.of_int (19)) + (Prims.of_int (606)) + (Prims.of_int (31))) + (Obj.magic + ( + prop_to_printout + i p)) + (fun uu___2 + -> + FStar_Tactics_Effect.lift_div_tac + (fun + uu___3 -> + Prims.strcat + s uu___2)))) + (fun uu___2 -> + FStar_Tactics_Effect.lift_div_tac + (fun uu___3 + -> + (uu___2, + (i + + Prims.int_one)))))) + uu___1))) + (fun uu___ -> + (fun concat_prop -> + Obj.magic + (FStar_Tactics_Effect.tac_bind + (Prims.mk_range + "FStar.InteractiveHelpers.Output.fst" + (Prims.of_int (112)) + (Prims.of_int (15)) + (Prims.of_int (112)) + (Prims.of_int (47))) + (Prims.mk_range + "FStar.InteractiveHelpers.Output.fst" + (Prims.of_int (112)) + (Prims.of_int (2)) + (Prims.of_int (113)) + (Prims.of_int (5))) + (Obj.magic + (FStar_Tactics_Util.fold_left + concat_prop + (str, Prims.int_zero) pl)) + (fun uu___ -> + FStar_Tactics_Effect.lift_div_tac + (fun uu___1 -> + match uu___ with + | (str1, uu___2) -> str1)))) + uu___))) uu___))) uu___) +let (error_message_to_printout : + Prims.string -> Prims.string FStar_Pervasives_Native.option -> Prims.string) + = + fun prefix -> + fun message -> + let msg = + match message with + | FStar_Pervasives_Native.Some msg1 -> msg1 + | uu___ -> "" in + string_to_printout (Prims.strcat prefix ":error") msg +type export_result = + | ESuccess of FStar_InteractiveHelpers_Base.genv * + FStar_InteractiveHelpers_Propositions.assertions + | EFailure of Prims.string +let (uu___is_ESuccess : export_result -> Prims.bool) = + fun projectee -> + match projectee with | ESuccess (ge, a) -> true | uu___ -> false +let (__proj__ESuccess__item__ge : + export_result -> FStar_InteractiveHelpers_Base.genv) = + fun projectee -> match projectee with | ESuccess (ge, a) -> ge +let (__proj__ESuccess__item__a : + export_result -> FStar_InteractiveHelpers_Propositions.assertions) = + fun projectee -> match projectee with | ESuccess (ge, a) -> a +let (uu___is_EFailure : export_result -> Prims.bool) = + fun projectee -> + match projectee with | EFailure err -> true | uu___ -> false +let (__proj__EFailure__item__err : export_result -> Prims.string) = + fun projectee -> match projectee with | EFailure err -> err +let (result_to_printout : + Prims.string -> + export_result -> (Prims.string, unit) FStar_Tactics_Effect.tac_repr) + = + fun prefix -> + fun res -> + FStar_Tactics_Effect.tac_bind + (Prims.mk_range "FStar.InteractiveHelpers.Output.fst" + (Prims.of_int (126)) (Prims.of_int (12)) (Prims.of_int (126)) + (Prims.of_int (31))) + (Prims.mk_range "FStar.InteractiveHelpers.Output.fst" + (Prims.of_int (130)) (Prims.of_int (2)) (Prims.of_int (142)) + (Prims.of_int (50))) + (FStar_Tactics_Effect.lift_div_tac + (fun uu___ -> Prims.strcat prefix ":BEGIN\n")) + (fun uu___ -> + (fun str -> + Obj.magic + (FStar_Tactics_Effect.tac_bind + (Prims.mk_range "FStar.InteractiveHelpers.Output.fst" + (Prims.of_int (131)) (Prims.of_int (4)) + (Prims.of_int (135)) (Prims.of_int (26))) + (Prims.mk_range "FStar.InteractiveHelpers.Output.fst" + (Prims.of_int (130)) (Prims.of_int (2)) + (Prims.of_int (142)) (Prims.of_int (50))) + (match res with + | ESuccess (ge, a) -> + Obj.magic + (Obj.repr + (FStar_Tactics_Effect.lift_div_tac + (fun uu___ -> + (FStar_Pervasives_Native.None, ge, + (a.FStar_InteractiveHelpers_Propositions.pres), + (a.FStar_InteractiveHelpers_Propositions.posts))))) + | EFailure err -> + Obj.magic + (Obj.repr + (FStar_Tactics_Effect.tac_bind + (Prims.mk_range + "FStar.InteractiveHelpers.Output.fst" + (Prims.of_int (134)) (Prims.of_int (15)) + (Prims.of_int (134)) (Prims.of_int (40))) + (Prims.mk_range + "FStar.InteractiveHelpers.Output.fst" + (Prims.of_int (135)) (Prims.of_int (6)) + (Prims.of_int (135)) (Prims.of_int (26))) + (Obj.magic + (FStar_Tactics_Effect.tac_bind + (Prims.mk_range + "FStar.InteractiveHelpers.Output.fst" + (Prims.of_int (134)) + (Prims.of_int (28)) + (Prims.of_int (134)) + (Prims.of_int (40))) + (Prims.mk_range + "FStar.InteractiveHelpers.Output.fst" + (Prims.of_int (134)) + (Prims.of_int (15)) + (Prims.of_int (134)) + (Prims.of_int (40))) + (Obj.magic + (FStar_Tactics_Builtins.top_env ())) + (fun uu___ -> + FStar_Tactics_Effect.lift_div_tac + (fun uu___1 -> + FStar_InteractiveHelpers_Base.mk_init_genv + uu___)))) + (fun ge -> + FStar_Tactics_Effect.lift_div_tac + (fun uu___ -> + ((FStar_Pervasives_Native.Some err), + ge, [], [])))))) + (fun uu___ -> + (fun uu___ -> + match uu___ with + | (err, ge, pres, posts) -> + Obj.magic + (FStar_Tactics_Effect.tac_bind + (Prims.mk_range + "FStar.InteractiveHelpers.Output.fst" + (Prims.of_int (138)) (Prims.of_int (12)) + (Prims.of_int (138)) (Prims.of_int (54))) + (Prims.mk_range + "FStar.InteractiveHelpers.Output.fst" + (Prims.of_int (140)) (Prims.of_int (2)) + (Prims.of_int (142)) (Prims.of_int (50))) + (FStar_Tactics_Effect.lift_div_tac + (fun uu___1 -> + Prims.strcat str + (error_message_to_printout prefix + err))) + (fun uu___1 -> + (fun str1 -> + Obj.magic + (FStar_Tactics_Effect.tac_bind + (Prims.mk_range + "FStar.InteractiveHelpers.Output.fst" + (Prims.of_int (140)) + (Prims.of_int (12)) + (Prims.of_int (140)) + (Prims.of_int (69))) + (Prims.mk_range + "FStar.InteractiveHelpers.Output.fst" + (Prims.of_int (141)) + (Prims.of_int (2)) + (Prims.of_int (142)) + (Prims.of_int (50))) + (Obj.magic + (FStar_Tactics_Effect.tac_bind + (Prims.mk_range + "FStar.InteractiveHelpers.Output.fst" + (Prims.of_int (140)) + (Prims.of_int (18)) + (Prims.of_int (140)) + (Prims.of_int (69))) + (Prims.mk_range + "prims.fst" + (Prims.of_int (606)) + (Prims.of_int (19)) + (Prims.of_int (606)) + (Prims.of_int (31))) + (Obj.magic + (propositions_to_printout + ge + (Prims.strcat prefix + ":pres") pres)) + (fun uu___1 -> + FStar_Tactics_Effect.lift_div_tac + (fun uu___2 -> + Prims.strcat str1 + uu___1)))) + (fun uu___1 -> + (fun str2 -> + Obj.magic + (FStar_Tactics_Effect.tac_bind + (Prims.mk_range + "FStar.InteractiveHelpers.Output.fst" + (Prims.of_int (141)) + (Prims.of_int (12)) + (Prims.of_int (141)) + (Prims.of_int (71))) + (Prims.mk_range + "prims.fst" + (Prims.of_int (606)) + (Prims.of_int (19)) + (Prims.of_int (606)) + (Prims.of_int (31))) + (Obj.magic + (FStar_Tactics_Effect.tac_bind + (Prims.mk_range + "FStar.InteractiveHelpers.Output.fst" + (Prims.of_int (141)) + (Prims.of_int (18)) + (Prims.of_int (141)) + (Prims.of_int (71))) + (Prims.mk_range + "prims.fst" + (Prims.of_int (606)) + (Prims.of_int (19)) + (Prims.of_int (606)) + (Prims.of_int (31))) + (Obj.magic + (propositions_to_printout + ge + ( + Prims.strcat + prefix + ":posts") + posts)) + (fun uu___1 -> + FStar_Tactics_Effect.lift_div_tac + (fun + uu___2 -> + Prims.strcat + str2 + uu___1)))) + (fun str3 -> + FStar_Tactics_Effect.lift_div_tac + (fun uu___1 -> + Prims.strcat + str3 + (Prims.strcat + prefix + ":END\n%FIH:FSTAR_META:END%"))))) + uu___1))) uu___1))) uu___))) + uu___) +let (printout_result : + Prims.string -> export_result -> (unit, unit) FStar_Tactics_Effect.tac_repr) + = + fun prefix -> + fun res -> + FStar_Tactics_Effect.tac_bind + (Prims.mk_range "FStar.InteractiveHelpers.Output.fst" + (Prims.of_int (146)) (Prims.of_int (8)) (Prims.of_int (146)) + (Prims.of_int (39))) + (Prims.mk_range "FStar.InteractiveHelpers.Output.fst" + (Prims.of_int (146)) (Prims.of_int (2)) (Prims.of_int (146)) + (Prims.of_int (39))) (Obj.magic (result_to_printout prefix res)) + (fun uu___ -> + (fun uu___ -> Obj.magic (FStar_Tactics_Builtins.print uu___)) + uu___) +let (printout_success : + FStar_InteractiveHelpers_Base.genv -> + FStar_InteractiveHelpers_Propositions.assertions -> + (unit, unit) FStar_Tactics_Effect.tac_repr) + = fun ge -> fun a -> printout_result "ainfo" (ESuccess (ge, a)) +let (printout_failure : + Prims.string -> (unit, unit) FStar_Tactics_Effect.tac_repr) = + fun err -> printout_result "ainfo" (EFailure err) +let (_debug_print_var : + Prims.string -> + FStar_Reflection_Types.term -> (unit, unit) FStar_Tactics_Effect.tac_repr) + = + fun name -> + fun t -> + FStar_Tactics_Effect.tac_bind + (Prims.mk_range "FStar.InteractiveHelpers.Output.fst" + (Prims.of_int (157)) (Prims.of_int (2)) (Prims.of_int (157)) + (Prims.of_int (63))) + (Prims.mk_range "FStar.InteractiveHelpers.Output.fst" + (Prims.of_int (158)) (Prims.of_int (2)) (Prims.of_int (171)) + (Prims.of_int (33))) + (Obj.magic + (FStar_Tactics_Effect.tac_bind + (Prims.mk_range "FStar.InteractiveHelpers.Output.fst" + (Prims.of_int (157)) (Prims.of_int (8)) (Prims.of_int (157)) + (Prims.of_int (63))) + (Prims.mk_range "FStar.InteractiveHelpers.Output.fst" + (Prims.of_int (157)) (Prims.of_int (2)) (Prims.of_int (157)) + (Prims.of_int (63))) + (Obj.magic + (FStar_Tactics_Effect.tac_bind + (Prims.mk_range "FStar.InteractiveHelpers.Output.fst" + (Prims.of_int (157)) (Prims.of_int (32)) + (Prims.of_int (157)) (Prims.of_int (62))) + (Prims.mk_range "prims.fst" (Prims.of_int (606)) + (Prims.of_int (19)) (Prims.of_int (606)) + (Prims.of_int (31))) + (Obj.magic + (FStar_Tactics_Effect.tac_bind + (Prims.mk_range + "FStar.InteractiveHelpers.Output.fst" + (Prims.of_int (157)) (Prims.of_int (39)) + (Prims.of_int (157)) (Prims.of_int (62))) + (Prims.mk_range "prims.fst" (Prims.of_int (606)) + (Prims.of_int (19)) (Prims.of_int (606)) + (Prims.of_int (31))) + (Obj.magic + (FStar_Tactics_Effect.tac_bind + (Prims.mk_range + "FStar.InteractiveHelpers.Output.fst" + (Prims.of_int (157)) (Prims.of_int (46)) + (Prims.of_int (157)) (Prims.of_int (62))) + (Prims.mk_range "prims.fst" + (Prims.of_int (606)) (Prims.of_int (19)) + (Prims.of_int (606)) (Prims.of_int (31))) + (Obj.magic + (FStar_Tactics_Builtins.term_to_string t)) + (fun uu___ -> + FStar_Tactics_Effect.lift_div_tac + (fun uu___1 -> Prims.strcat ": " uu___)))) + (fun uu___ -> + FStar_Tactics_Effect.lift_div_tac + (fun uu___1 -> Prims.strcat name uu___)))) + (fun uu___ -> + FStar_Tactics_Effect.lift_div_tac + (fun uu___1 -> + Prims.strcat "_debug_print_var: " uu___)))) + (fun uu___ -> + (fun uu___ -> Obj.magic (FStar_Tactics_Builtins.print uu___)) + uu___))) + (fun uu___ -> + (fun uu___ -> + Obj.magic + (FStar_Tactics_Effect.tac_bind + (Prims.mk_range "FStar.InteractiveHelpers.Output.fst" + (Prims.of_int (158)) (Prims.of_int (8)) + (Prims.of_int (160)) (Prims.of_int (11))) + (Prims.mk_range "FStar.InteractiveHelpers.Output.fst" + (Prims.of_int (162)) (Prims.of_int (2)) + (Prims.of_int (171)) (Prims.of_int (33))) + (Obj.magic + (FStar_Tactics_Effect.tac_bind + (Prims.mk_range + "FStar.InteractiveHelpers.Output.fst" + (Prims.of_int (158)) (Prims.of_int (14)) + (Prims.of_int (158)) (Prims.of_int (36))) + (Prims.mk_range + "FStar.InteractiveHelpers.Output.fst" + (Prims.of_int (158)) (Prims.of_int (8)) + (Prims.of_int (160)) (Prims.of_int (11))) + (Obj.magic + (FStar_Tactics_Effect.tac_bind + (Prims.mk_range + "FStar.InteractiveHelpers.Output.fst" + (Prims.of_int (158)) (Prims.of_int (22)) + (Prims.of_int (158)) (Prims.of_int (34))) + (Prims.mk_range + "FStar.InteractiveHelpers.Output.fst" + (Prims.of_int (158)) (Prims.of_int (14)) + (Prims.of_int (158)) (Prims.of_int (36))) + (Obj.magic (FStar_Tactics_Builtins.top_env ())) + (fun uu___1 -> + (fun uu___1 -> + Obj.magic + (FStar_InteractiveHelpers_ExploreTerm.safe_tc + uu___1 t)) uu___1))) + (fun uu___1 -> + (fun uu___1 -> + match uu___1 with + | FStar_Pervasives_Native.Some ty -> + Obj.magic + (Obj.repr + (FStar_Tactics_Effect.tac_bind + (Prims.mk_range + "FStar.InteractiveHelpers.Output.fst" + (Prims.of_int (159)) + (Prims.of_int (21)) + (Prims.of_int (159)) + (Prims.of_int (51))) + (Prims.mk_range + "FStar.InteractiveHelpers.Output.fst" + (Prims.of_int (159)) + (Prims.of_int (15)) + (Prims.of_int (159)) + (Prims.of_int (51))) + (Obj.magic + (FStar_Tactics_Effect.tac_bind + (Prims.mk_range + "FStar.InteractiveHelpers.Output.fst" + (Prims.of_int (159)) + (Prims.of_int (33)) + (Prims.of_int (159)) + (Prims.of_int (50))) + (Prims.mk_range "prims.fst" + (Prims.of_int (606)) + (Prims.of_int (19)) + (Prims.of_int (606)) + (Prims.of_int (31))) + (Obj.magic + (FStar_Tactics_Builtins.term_to_string + ty)) + (fun uu___2 -> + FStar_Tactics_Effect.lift_div_tac + (fun uu___3 -> + Prims.strcat + "type: " uu___2)))) + (fun uu___2 -> + (fun uu___2 -> + Obj.magic + (FStar_Tactics_Builtins.print + uu___2)) uu___2))) + | uu___2 -> + Obj.magic + (Obj.repr + (FStar_Tactics_Effect.lift_div_tac + (fun uu___3 -> ())))) uu___1))) + (fun uu___1 -> + (fun uu___1 -> + Obj.magic + (FStar_Tactics_Effect.tac_bind + (Prims.mk_range + "FStar.InteractiveHelpers.Output.fst" + (Prims.of_int (162)) (Prims.of_int (2)) + (Prims.of_int (162)) (Prims.of_int (42))) + (Prims.mk_range + "FStar.InteractiveHelpers.Output.fst" + (Prims.of_int (163)) (Prims.of_int (2)) + (Prims.of_int (171)) (Prims.of_int (33))) + (Obj.magic + (FStar_Tactics_Effect.tac_bind + (Prims.mk_range + "FStar.InteractiveHelpers.Output.fst" + (Prims.of_int (162)) + (Prims.of_int (8)) + (Prims.of_int (162)) + (Prims.of_int (42))) + (Prims.mk_range + "FStar.InteractiveHelpers.Output.fst" + (Prims.of_int (162)) + (Prims.of_int (2)) + (Prims.of_int (162)) + (Prims.of_int (42))) + (Obj.magic + (FStar_Tactics_Effect.tac_bind + (Prims.mk_range + "FStar.InteractiveHelpers.Output.fst" + (Prims.of_int (162)) + (Prims.of_int (25)) + (Prims.of_int (162)) + (Prims.of_int (41))) + (Prims.mk_range "prims.fst" + (Prims.of_int (606)) + (Prims.of_int (19)) + (Prims.of_int (606)) + (Prims.of_int (31))) + (Obj.magic + (FStar_InteractiveHelpers_Base.term_construct + t)) + (fun uu___2 -> + FStar_Tactics_Effect.lift_div_tac + (fun uu___3 -> + Prims.strcat "qualifier: " + uu___2)))) + (fun uu___2 -> + (fun uu___2 -> + Obj.magic + (FStar_Tactics_Builtins.print + uu___2)) uu___2))) + (fun uu___2 -> + (fun uu___2 -> + Obj.magic + (FStar_Tactics_Effect.tac_bind + (Prims.mk_range + "FStar.InteractiveHelpers.Output.fst" + (Prims.of_int (163)) + (Prims.of_int (8)) + (Prims.of_int (169)) + (Prims.of_int (11))) + (Prims.mk_range + "FStar.InteractiveHelpers.Output.fst" + (Prims.of_int (171)) + (Prims.of_int (2)) + (Prims.of_int (171)) + (Prims.of_int (33))) + (Obj.magic + (FStar_Tactics_Effect.tac_bind + (Prims.mk_range + "FStar.InteractiveHelpers.Output.fst" + (Prims.of_int (163)) + (Prims.of_int (14)) + (Prims.of_int (163)) + (Prims.of_int (23))) + (Prims.mk_range + "FStar.InteractiveHelpers.Output.fst" + (Prims.of_int (163)) + (Prims.of_int (8)) + (Prims.of_int (169)) + (Prims.of_int (11))) + (Obj.magic + (FStar_Tactics_Builtins.inspect + t)) + (fun uu___3 -> + (fun uu___3 -> + match uu___3 with + | FStar_Reflection_Data.Tv_Var + bv -> + Obj.magic + (Obj.repr + (FStar_Tactics_Effect.tac_bind + (Prims.mk_range + "FStar.InteractiveHelpers.Output.fst" + (Prims.of_int (165)) + (Prims.of_int (22)) + (Prims.of_int (165)) + (Prims.of_int (35))) + (Prims.mk_range + "FStar.InteractiveHelpers.Output.fst" + (Prims.of_int (166)) + (Prims.of_int (4)) + (Prims.of_int (168)) + (Prims.of_int (49))) + (FStar_Tactics_Effect.lift_div_tac + ( + fun + uu___4 -> + FStar_Reflection_Builtins.inspect_bv + bv)) + (fun uu___4 + -> + (fun b -> + Obj.magic + (FStar_Tactics_Effect.tac_bind + (Prims.mk_range + "FStar.InteractiveHelpers.Output.fst" + (Prims.of_int (166)) + (Prims.of_int (10)) + (Prims.of_int (168)) + (Prims.of_int (49))) + (Prims.mk_range + "FStar.InteractiveHelpers.Output.fst" + (Prims.of_int (166)) + (Prims.of_int (4)) + (Prims.of_int (168)) + (Prims.of_int (49))) + (Obj.magic + (FStar_Tactics_Effect.tac_bind + (Prims.mk_range + "FStar.InteractiveHelpers.Output.fst" + (Prims.of_int (166)) + (Prims.of_int (32)) + (Prims.of_int (168)) + (Prims.of_int (48))) + (Prims.mk_range + "prims.fst" + (Prims.of_int (606)) + (Prims.of_int (19)) + (Prims.of_int (606)) + (Prims.of_int (31))) + (Obj.magic + (FStar_Tactics_Effect.tac_bind + (Prims.mk_range + "FStar.InteractiveHelpers.Output.fst" + (Prims.of_int (167)) + (Prims.of_int (11)) + (Prims.of_int (168)) + (Prims.of_int (48))) + (Prims.mk_range + "prims.fst" + (Prims.of_int (606)) + (Prims.of_int (19)) + (Prims.of_int (606)) + (Prims.of_int (31))) + (Obj.magic + (FStar_Tactics_Effect.tac_bind + (Prims.mk_range + "FStar.InteractiveHelpers.Output.fst" + (Prims.of_int (167)) + (Prims.of_int (25)) + (Prims.of_int (168)) + (Prims.of_int (48))) + (Prims.mk_range + "prims.fst" + (Prims.of_int (606)) + (Prims.of_int (19)) + (Prims.of_int (606)) + (Prims.of_int (31))) + (Obj.magic + (FStar_Tactics_Effect.tac_bind + (Prims.mk_range + "FStar.InteractiveHelpers.Output.fst" + (Prims.of_int (168)) + (Prims.of_int (11)) + (Prims.of_int (168)) + (Prims.of_int (48))) + (Prims.mk_range + "prims.fst" + (Prims.of_int (606)) + (Prims.of_int (19)) + (Prims.of_int (606)) + (Prims.of_int (31))) + (Obj.magic + (FStar_Tactics_Effect.tac_bind + (Prims.mk_range + "FStar.InteractiveHelpers.Output.fst" + (Prims.of_int (168)) + (Prims.of_int (24)) + (Prims.of_int (168)) + (Prims.of_int (48))) + (Prims.mk_range + "prims.fst" + (Prims.of_int (606)) + (Prims.of_int (19)) + (Prims.of_int (606)) + (Prims.of_int (31))) + (Obj.magic + (FStar_Tactics_Builtins.term_to_string + b.FStar_Reflection_Data.bv_sort)) + (fun + uu___4 -> + FStar_Tactics_Effect.lift_div_tac + (fun + uu___5 -> + Prims.strcat + "; sort: " + uu___4)))) + (fun + uu___4 -> + FStar_Tactics_Effect.lift_div_tac + (fun + uu___5 -> + Prims.strcat + (Prims.string_of_int + b.FStar_Reflection_Data.bv_index) + uu___4)))) + (fun + uu___4 -> + FStar_Tactics_Effect.lift_div_tac + (fun + uu___5 -> + Prims.strcat + "; index: " + uu___4)))) + (fun + uu___4 -> + FStar_Tactics_Effect.lift_div_tac + (fun + uu___5 -> + Prims.strcat + b.FStar_Reflection_Data.bv_ppname + uu___4)))) + (fun + uu___4 -> + FStar_Tactics_Effect.lift_div_tac + (fun + uu___5 -> + Prims.strcat + "Tv_Var: ppname: " + uu___4)))) + (fun + uu___4 -> + (fun + uu___4 -> + Obj.magic + (FStar_Tactics_Builtins.print + uu___4)) + uu___4))) + uu___4))) + | uu___4 -> + Obj.magic + (Obj.repr + (FStar_Tactics_Effect.lift_div_tac + (fun uu___5 + -> ())))) + uu___3))) + (fun uu___3 -> + (fun uu___3 -> + Obj.magic + (FStar_Tactics_Builtins.print + "end of _debug_print_var")) + uu___3))) uu___2))) uu___1))) + uu___) +let magic_witness : 'a . unit -> 'a = + fun uu___ -> failwith "Not yet implemented:magic_witness" +let (tadmit_no_warning : unit -> (unit, unit) FStar_Tactics_Effect.tac_repr) + = + fun uu___ -> + FStar_Tactics_Derived.apply + (FStar_Reflection_Builtins.pack_ln + (FStar_Reflection_Data.Tv_FVar + (FStar_Reflection_Builtins.pack_fv + ["FStar"; "InteractiveHelpers"; "Output"; "magic_witness"]))) +let (pp_tac : unit -> (unit, unit) FStar_Tactics_Effect.tac_repr) = + fun uu___ -> + FStar_Tactics_Effect.tac_bind + (Prims.mk_range "FStar.InteractiveHelpers.Output.fst" + (Prims.of_int (185)) (Prims.of_int (2)) (Prims.of_int (185)) + (Prims.of_int (62))) + (Prims.mk_range "FStar.InteractiveHelpers.Output.fst" + (Prims.of_int (186)) (Prims.of_int (2)) (Prims.of_int (187)) + (Prims.of_int (9))) + (Obj.magic + (FStar_Tactics_Effect.tac_bind + (Prims.mk_range "FStar.InteractiveHelpers.Output.fst" + (Prims.of_int (185)) (Prims.of_int (8)) (Prims.of_int (185)) + (Prims.of_int (62))) + (Prims.mk_range "FStar.InteractiveHelpers.Output.fst" + (Prims.of_int (185)) (Prims.of_int (2)) (Prims.of_int (185)) + (Prims.of_int (62))) + (Obj.magic + (FStar_Tactics_Effect.tac_bind + (Prims.mk_range "FStar.InteractiveHelpers.Output.fst" + (Prims.of_int (185)) (Prims.of_int (31)) + (Prims.of_int (185)) (Prims.of_int (61))) + (Prims.mk_range "prims.fst" (Prims.of_int (606)) + (Prims.of_int (19)) (Prims.of_int (606)) + (Prims.of_int (31))) + (Obj.magic + (FStar_Tactics_Effect.tac_bind + (Prims.mk_range "FStar.InteractiveHelpers.Output.fst" + (Prims.of_int (185)) (Prims.of_int (47)) + (Prims.of_int (185)) (Prims.of_int (60))) + (Prims.mk_range "FStar.InteractiveHelpers.Output.fst" + (Prims.of_int (185)) (Prims.of_int (31)) + (Prims.of_int (185)) (Prims.of_int (61))) + (Obj.magic (FStar_Tactics_Derived.cur_goal ())) + (fun uu___1 -> + (fun uu___1 -> + Obj.magic + (FStar_Tactics_Builtins.term_to_string uu___1)) + uu___1))) + (fun uu___1 -> + FStar_Tactics_Effect.lift_div_tac + (fun uu___2 -> Prims.strcat "post-processing: " uu___1)))) + (fun uu___1 -> + (fun uu___1 -> Obj.magic (FStar_Tactics_Builtins.print uu___1)) + uu___1))) + (fun uu___1 -> + (fun uu___1 -> + Obj.magic + (FStar_Tactics_Effect.tac_bind + (Prims.mk_range "FStar.InteractiveHelpers.Output.fst" + (Prims.of_int (186)) (Prims.of_int (2)) + (Prims.of_int (186)) (Prims.of_int (9))) + (Prims.mk_range "FStar.InteractiveHelpers.Output.fst" + (Prims.of_int (187)) (Prims.of_int (2)) + (Prims.of_int (187)) (Prims.of_int (9))) + (Obj.magic (FStar_Tactics_Builtins.dump "")) + (fun uu___2 -> + (fun uu___2 -> Obj.magic (FStar_Tactics_Derived.trefl ())) + uu___2))) uu___1) \ No newline at end of file diff --git a/ocaml/fstar-lib/generated/FStar_InteractiveHelpers_PostProcess.ml b/ocaml/fstar-lib/generated/FStar_InteractiveHelpers_PostProcess.ml new file mode 100644 index 00000000000..a3e884e6b41 --- /dev/null +++ b/ocaml/fstar-lib/generated/FStar_InteractiveHelpers_PostProcess.ml @@ -0,0 +1,6941 @@ +open Prims +let (term_eq : + FStar_Reflection_Types.term -> + FStar_Reflection_Types.term -> + (Prims.bool, unit) FStar_Tactics_Effect.tac_repr) + = FStar_Tactics_Builtins.term_eq_old +type meta_info = unit +let (focus_on_term : meta_info) = + Obj.magic (fun uu___ -> failwith "Not yet implemented:focus_on_term") +let (end_proof : unit -> (unit, unit) FStar_Tactics_Effect.tac_repr) = + fun uu___ -> + FStar_Tactics_Builtins.tadmit_t + (FStar_Reflection_Builtins.pack_ln + (FStar_Reflection_Data.Tv_Const FStar_Reflection_Data.C_Unit)) +let (unsquash_equality : + FStar_Reflection_Types.term -> + ((FStar_Reflection_Types.term * FStar_Reflection_Types.term) + FStar_Pervasives_Native.option, + unit) FStar_Tactics_Effect.tac_repr) + = + fun t -> + FStar_Tactics_Effect.tac_bind + (Prims.mk_range "FStar.InteractiveHelpers.PostProcess.fst" + (Prims.of_int (33)) (Prims.of_int (14)) (Prims.of_int (33)) + (Prims.of_int (31))) + (Prims.mk_range "FStar.InteractiveHelpers.PostProcess.fst" + (Prims.of_int (33)) (Prims.of_int (8)) (Prims.of_int (35)) + (Prims.of_int (13))) + (Obj.magic (FStar_Reflection_Formula.term_as_formula t)) + (fun uu___ -> + FStar_Tactics_Effect.lift_div_tac + (fun uu___1 -> + match uu___ with + | FStar_Reflection_Formula.Comp + (FStar_Reflection_Formula.Eq uu___2, l, r) -> + FStar_Pervasives_Native.Some (l, r) + | uu___2 -> FStar_Pervasives_Native.None)) +let (pp_explore : + Prims.bool -> + Prims.bool -> + unit -> + Obj.t FStar_InteractiveHelpers_ExploreTerm.explorer -> + Obj.t -> (unit, unit) FStar_Tactics_Effect.tac_repr) + = + fun dbg -> + fun dfs -> + fun a -> + fun f -> + fun x -> + FStar_Tactics_Effect.tac_bind + (Prims.mk_range "FStar.InteractiveHelpers.PostProcess.fst" + (Prims.of_int (44)) (Prims.of_int (10)) (Prims.of_int (44)) + (Prims.of_int (21))) + (Prims.mk_range "FStar.InteractiveHelpers.PostProcess.fst" + (Prims.of_int (45)) (Prims.of_int (2)) (Prims.of_int (55)) + (Prims.of_int (5))) + (Obj.magic (FStar_Tactics_Derived.cur_goal ())) + (fun uu___ -> + (fun g -> + Obj.magic + (FStar_Tactics_Effect.tac_bind + (Prims.mk_range + "FStar.InteractiveHelpers.PostProcess.fst" + (Prims.of_int (45)) (Prims.of_int (10)) + (Prims.of_int (45)) (Prims.of_int (20))) + (Prims.mk_range + "FStar.InteractiveHelpers.PostProcess.fst" + (Prims.of_int (46)) (Prims.of_int (2)) + (Prims.of_int (55)) (Prims.of_int (5))) + (Obj.magic (FStar_Tactics_Derived.cur_env ())) + (fun uu___ -> + (fun e -> + Obj.magic + (FStar_Tactics_Effect.tac_bind + (Prims.mk_range + "FStar.InteractiveHelpers.PostProcess.fst" + (Prims.of_int (46)) (Prims.of_int (2)) + (Prims.of_int (46)) + (Prims.of_int (55))) + (Prims.mk_range + "FStar.InteractiveHelpers.PostProcess.fst" + (Prims.of_int (47)) (Prims.of_int (8)) + (Prims.of_int (54)) + (Prims.of_int (52))) + (Obj.magic + (FStar_Tactics_Effect.tac_bind + (Prims.mk_range + "FStar.InteractiveHelpers.PostProcess.fst" + (Prims.of_int (46)) + (Prims.of_int (16)) + (Prims.of_int (46)) + (Prims.of_int (55))) + (Prims.mk_range + "FStar.InteractiveHelpers.PostProcess.fst" + (Prims.of_int (46)) + (Prims.of_int (2)) + (Prims.of_int (46)) + (Prims.of_int (55))) + (Obj.magic + (FStar_Tactics_Effect.tac_bind + (Prims.mk_range + "FStar.InteractiveHelpers.PostProcess.fst" + (Prims.of_int (46)) + (Prims.of_int (38)) + (Prims.of_int (46)) + (Prims.of_int (54))) + (Prims.mk_range "prims.fst" + (Prims.of_int (606)) + (Prims.of_int (19)) + (Prims.of_int (606)) + (Prims.of_int (31))) + (Obj.magic + (FStar_Tactics_Builtins.term_to_string + g)) + (fun uu___ -> + FStar_Tactics_Effect.lift_div_tac + (fun uu___1 -> + Prims.strcat + "[> pp_explore:\n" + uu___)))) + (fun uu___ -> + (fun uu___ -> + Obj.magic + (FStar_InteractiveHelpers_Base.print_dbg + dbg uu___)) uu___))) + (fun uu___ -> + (fun uu___ -> + Obj.magic + (FStar_Tactics_Effect.tac_bind + (Prims.mk_range + "FStar.InteractiveHelpers.PostProcess.fst" + (Prims.of_int (47)) + (Prims.of_int (14)) + (Prims.of_int (47)) + (Prims.of_int (33))) + (Prims.mk_range + "FStar.InteractiveHelpers.PostProcess.fst" + (Prims.of_int (47)) + (Prims.of_int (8)) + (Prims.of_int (54)) + (Prims.of_int (52))) + (Obj.magic + (unsquash_equality g)) + (fun uu___1 -> + (fun uu___1 -> + match uu___1 with + | FStar_Pervasives_Native.Some + (l, uu___2) -> + Obj.magic + (FStar_Tactics_Effect.tac_bind + (Prims.mk_range + "FStar.InteractiveHelpers.PostProcess.fst" + (Prims.of_int (49)) + (Prims.of_int (12)) + (Prims.of_int (49)) + (Prims.of_int (36))) + (Prims.mk_range + "FStar.InteractiveHelpers.PostProcess.fst" + (Prims.of_int (50)) + (Prims.of_int (4)) + (Prims.of_int (53)) + (Prims.of_int (16))) + (Obj.magic + (FStar_InteractiveHelpers_ExploreTerm.safe_typ_or_comp + dbg e l)) + (fun uu___3 -> + (fun c -> + Obj.magic + (FStar_Tactics_Effect.tac_bind + (Prims.mk_range + "FStar.InteractiveHelpers.PostProcess.fst" + (Prims.of_int (50)) + (Prims.of_int (13)) + (Prims.of_int (50)) + (Prims.of_int (28))) + (Prims.mk_range + "FStar.InteractiveHelpers.PostProcess.fst" + (Prims.of_int (51)) + (Prims.of_int (4)) + (Prims.of_int (53)) + (Prims.of_int (16))) + (FStar_Tactics_Effect.lift_div_tac + (fun + uu___3 -> + FStar_InteractiveHelpers_Base.mk_genv + e [] [])) + (fun + uu___3 -> + (fun ge + -> + Obj.magic + (FStar_Tactics_Effect.tac_bind + (Prims.mk_range + "FStar.InteractiveHelpers.PostProcess.fst" + (Prims.of_int (51)) + (Prims.of_int (4)) + (Prims.of_int (51)) + (Prims.of_int (68))) + (Prims.mk_range + "FStar.InteractiveHelpers.PostProcess.fst" + (Prims.of_int (52)) + (Prims.of_int (4)) + (Prims.of_int (53)) + (Prims.of_int (16))) + (Obj.magic + (FStar_Tactics_Effect.tac_bind + (Prims.mk_range + "FStar.InteractiveHelpers.PostProcess.fst" + (Prims.of_int (51)) + (Prims.of_int (18)) + (Prims.of_int (51)) + (Prims.of_int (68))) + (Prims.mk_range + "FStar.InteractiveHelpers.PostProcess.fst" + (Prims.of_int (51)) + (Prims.of_int (4)) + (Prims.of_int (51)) + (Prims.of_int (68))) + (Obj.magic + (FStar_Tactics_Effect.tac_bind + (Prims.mk_range + "FStar.InteractiveHelpers.PostProcess.fst" + (Prims.of_int (51)) + (Prims.of_int (51)) + (Prims.of_int (51)) + (Prims.of_int (67))) + (Prims.mk_range + "prims.fst" + (Prims.of_int (606)) + (Prims.of_int (19)) + (Prims.of_int (606)) + (Prims.of_int (31))) + (Obj.magic + (FStar_Tactics_Builtins.term_to_string + l)) + (fun + uu___3 -> + FStar_Tactics_Effect.lift_div_tac + (fun + uu___4 -> + Prims.strcat + "[> About to explore term:\n" + uu___3)))) + (fun + uu___3 -> + (fun + uu___3 -> + Obj.magic + (FStar_InteractiveHelpers_Base.print_dbg + dbg + uu___3)) + uu___3))) + (fun + uu___3 -> + (fun + uu___3 -> + Obj.magic + (FStar_Tactics_Effect.tac_bind + (Prims.mk_range + "FStar.InteractiveHelpers.PostProcess.fst" + (Prims.of_int (52)) + (Prims.of_int (12)) + (Prims.of_int (52)) + (Prims.of_int (49))) + (Prims.mk_range + "FStar.InteractiveHelpers.PostProcess.fst" + (Prims.of_int (53)) + (Prims.of_int (4)) + (Prims.of_int (53)) + (Prims.of_int (16))) + (Obj.magic + (FStar_InteractiveHelpers_ExploreTerm.explore_term + dbg dfs + () f x ge + [] c l)) + (fun + uu___4 -> + (fun x1 + -> + Obj.magic + (end_proof + ())) + uu___4))) + uu___3))) + uu___3))) + uu___3)) + | uu___2 -> + Obj.magic + (FStar_InteractiveHelpers_Base.mfail + "pp_explore: not a squashed equality")) + uu___1))) uu___))) uu___))) + uu___) +let (pp_explore_print_goal : + unit -> (unit, unit) FStar_Tactics_Effect.tac_repr) = + fun uu___ -> + FStar_Tactics_Effect.tac_bind + (Prims.mk_range "FStar.InteractiveHelpers.PostProcess.fst" + (Prims.of_int (63)) (Prims.of_int (4)) (Prims.of_int (63)) + (Prims.of_int (35))) + (Prims.mk_range "FStar.InteractiveHelpers.PostProcess.fst" + (Prims.of_int (65)) (Prims.of_int (2)) (Prims.of_int (65)) + (Prims.of_int (28))) + (FStar_Tactics_Effect.lift_div_tac + (fun uu___1 -> + (fun uu___1 -> + Obj.magic + (fun uu___2 -> + fun uu___3 -> + fun uu___4 -> + fun uu___5 -> + fun uu___6 -> + FStar_Tactics_Effect.lift_div_tac + (fun uu___7 -> + ((), FStar_Tactics_Types.Continue)))) uu___1)) + (fun uu___1 -> + (fun f -> + Obj.magic (pp_explore true false () (Obj.magic f) (Obj.repr ()))) + uu___1) +let (is_focus_on_term : + FStar_Reflection_Types.term -> + (Prims.bool, unit) FStar_Tactics_Effect.tac_repr) + = + fun uu___ -> + (fun t -> + Obj.magic + (FStar_Tactics_Effect.lift_div_tac + (fun uu___ -> + FStar_Reflection_Derived.is_fvar t + "FStar.InteractiveHelpers.PostProcess.focus_on_term"))) + uu___ +let (term_is_assert_or_assume : + FStar_Reflection_Types.term -> + (FStar_Reflection_Types.term FStar_Pervasives_Native.option, unit) + FStar_Tactics_Effect.tac_repr) + = + fun t -> + FStar_Tactics_Effect.tac_bind + (Prims.mk_range "FStar.InteractiveHelpers.PostProcess.fst" + (Prims.of_int (76)) (Prims.of_int (8)) (Prims.of_int (76)) + (Prims.of_int (17))) + (Prims.mk_range "FStar.InteractiveHelpers.PostProcess.fst" + (Prims.of_int (76)) (Prims.of_int (2)) (Prims.of_int (81)) + (Prims.of_int (13))) (Obj.magic (FStar_Tactics_Builtins.inspect t)) + (fun uu___ -> + FStar_Tactics_Effect.lift_div_tac + (fun uu___1 -> + match uu___ with + | FStar_Reflection_Data.Tv_App + (hd, (a, FStar_Reflection_Data.Q_Explicit)) -> + if + FStar_Reflection_Derived.is_any_fvar a + ["Prims._assert"; + "FStar.Pervasives.assert_norm"; + "Prims._assume"] + then FStar_Pervasives_Native.Some a + else FStar_Pervasives_Native.None + | uu___2 -> FStar_Pervasives_Native.None)) +let (is_focused_term : + FStar_Reflection_Data.term_view -> + (FStar_Reflection_Types.term FStar_Pervasives_Native.option, unit) + FStar_Tactics_Effect.tac_repr) + = + fun uu___ -> + (fun tv -> + match tv with + | FStar_Reflection_Data.Tv_Let (recf, attrs, uu___, def, body) -> + Obj.magic + (Obj.repr + (FStar_Tactics_Effect.tac_bind + (Prims.mk_range "FStar.InteractiveHelpers.PostProcess.fst" + (Prims.of_int (89)) (Prims.of_int (7)) + (Prims.of_int (89)) (Prims.of_int (27))) + (Prims.mk_range "FStar.InteractiveHelpers.PostProcess.fst" + (Prims.of_int (89)) (Prims.of_int (4)) + (Prims.of_int (89)) (Prims.of_int (52))) + (Obj.magic (is_focus_on_term def)) + (fun uu___1 -> + FStar_Tactics_Effect.lift_div_tac + (fun uu___2 -> + if uu___1 + then FStar_Pervasives_Native.Some body + else FStar_Pervasives_Native.None)))) + | uu___ -> + Obj.magic + (Obj.repr + (FStar_Tactics_Effect.lift_div_tac + (fun uu___1 -> FStar_Pervasives_Native.None)))) uu___ +type 'a exploration_result = + { + ge: FStar_InteractiveHelpers_Base.genv ; + parents: + (FStar_InteractiveHelpers_Base.genv * FStar_Reflection_Data.term_view) + Prims.list + ; + tgt_comp: + FStar_InteractiveHelpers_ExploreTerm.typ_or_comp + FStar_Pervasives_Native.option + ; + res: 'a } +let __proj__Mkexploration_result__item__ge : + 'a . 'a exploration_result -> FStar_InteractiveHelpers_Base.genv = + fun projectee -> + match projectee with | { ge; parents; tgt_comp; res;_} -> ge +let __proj__Mkexploration_result__item__parents : + 'a . + 'a exploration_result -> + (FStar_InteractiveHelpers_Base.genv * FStar_Reflection_Data.term_view) + Prims.list + = + fun projectee -> + match projectee with | { ge; parents; tgt_comp; res;_} -> parents +let __proj__Mkexploration_result__item__tgt_comp : + 'a . + 'a exploration_result -> + FStar_InteractiveHelpers_ExploreTerm.typ_or_comp + FStar_Pervasives_Native.option + = + fun projectee -> + match projectee with | { ge; parents; tgt_comp; res;_} -> tgt_comp +let __proj__Mkexploration_result__item__res : + 'a . 'a exploration_result -> 'a = + fun projectee -> + match projectee with | { ge; parents; tgt_comp; res;_} -> res +let mk_exploration_result : + 'uuuuu . + unit -> + FStar_InteractiveHelpers_Base.genv -> + (FStar_InteractiveHelpers_Base.genv * + FStar_Reflection_Data.term_view) Prims.list -> + FStar_InteractiveHelpers_ExploreTerm.typ_or_comp + FStar_Pervasives_Native.option -> + 'uuuuu -> 'uuuuu exploration_result + = + fun uu___ -> + fun uu___1 -> + fun uu___2 -> + fun uu___3 -> + fun uu___4 -> + { ge = uu___1; parents = uu___2; tgt_comp = uu___3; res = uu___4 + } +type 'a pred_explorer = + FStar_InteractiveHelpers_Base.genv -> + (FStar_InteractiveHelpers_Base.genv * FStar_Reflection_Data.term_view) + Prims.list -> + FStar_InteractiveHelpers_ExploreTerm.typ_or_comp + FStar_Pervasives_Native.option -> + FStar_Reflection_Data.term_view -> + ('a FStar_Pervasives_Native.option, unit) + FStar_Tactics_Effect.tac_repr +let find_predicated_term_explorer : + 'a . + 'a pred_explorer -> + Prims.bool -> + 'a exploration_result FStar_Pervasives_Native.option + FStar_InteractiveHelpers_ExploreTerm.explorer + = + fun pred -> + fun dbg -> + fun acc -> + fun ge -> + fun pl -> + fun opt_c -> + fun t -> + FStar_Tactics_Effect.tac_bind + (Prims.mk_range "FStar.InteractiveHelpers.PostProcess.fst" + (Prims.of_int (108)) (Prims.of_int (2)) + (Prims.of_int (108)) (Prims.of_int (77))) + (Prims.mk_range "FStar.InteractiveHelpers.PostProcess.fst" + (Prims.of_int (109)) (Prims.of_int (2)) + (Prims.of_int (115)) (Prims.of_int (26))) + (if FStar_Pervasives_Native.uu___is_Some acc + then + Obj.magic + (Obj.repr + (FStar_InteractiveHelpers_Base.mfail + "find_focused_term_explorer: non empty accumulator")) + else + Obj.magic + (Obj.repr + (FStar_Tactics_Effect.lift_div_tac + (fun uu___1 -> ())))) + (fun uu___ -> + (fun uu___ -> + Obj.magic + (FStar_Tactics_Effect.tac_bind + (Prims.mk_range + "FStar.InteractiveHelpers.PostProcess.fst" + (Prims.of_int (109)) (Prims.of_int (2)) + (Prims.of_int (112)) (Prims.of_int (7))) + (Prims.mk_range + "FStar.InteractiveHelpers.PostProcess.fst" + (Prims.of_int (113)) (Prims.of_int (2)) + (Prims.of_int (115)) (Prims.of_int (26))) + (if dbg + then + Obj.magic + (Obj.repr + (FStar_Tactics_Effect.tac_bind + (Prims.mk_range + "FStar.InteractiveHelpers.PostProcess.fst" + (Prims.of_int (111)) + (Prims.of_int (10)) + (Prims.of_int (111)) + (Prims.of_int (96))) + (Prims.mk_range + "FStar.InteractiveHelpers.PostProcess.fst" + (Prims.of_int (111)) + (Prims.of_int (4)) + (Prims.of_int (111)) + (Prims.of_int (96))) + (Obj.magic + (FStar_Tactics_Effect.tac_bind + (Prims.mk_range + "FStar.InteractiveHelpers.PostProcess.fst" + (Prims.of_int (111)) + (Prims.of_int (47)) + (Prims.of_int (111)) + (Prims.of_int (95))) + (Prims.mk_range "prims.fst" + (Prims.of_int (606)) + (Prims.of_int (19)) + (Prims.of_int (606)) + (Prims.of_int (31))) + (Obj.magic + (FStar_Tactics_Effect.tac_bind + (Prims.mk_range + "FStar.InteractiveHelpers.PostProcess.fst" + (Prims.of_int (111)) + (Prims.of_int (47)) + (Prims.of_int (111)) + (Prims.of_int (68))) + (Prims.mk_range + "FStar.InteractiveHelpers.PostProcess.fst" + (Prims.of_int (111)) + (Prims.of_int (47)) + (Prims.of_int (111)) + (Prims.of_int (95))) + (Obj.magic + (FStar_InteractiveHelpers_Base.term_view_construct + t)) + (fun uu___1 -> + (fun uu___1 -> + Obj.magic + (FStar_Tactics_Effect.tac_bind + (Prims.mk_range + "FStar.InteractiveHelpers.PostProcess.fst" + (Prims.of_int (111)) + (Prims.of_int (71)) + (Prims.of_int (111)) + (Prims.of_int (95))) + (Prims.mk_range + "prims.fst" + (Prims.of_int (606)) + (Prims.of_int (19)) + (Prims.of_int (606)) + (Prims.of_int (31))) + (Obj.magic + (FStar_Tactics_Effect.tac_bind + (Prims.mk_range + "FStar.InteractiveHelpers.PostProcess.fst" + (Prims.of_int (111)) + (Prims.of_int (79)) + (Prims.of_int (111)) + (Prims.of_int (95))) + (Prims.mk_range + "prims.fst" + (Prims.of_int (606)) + (Prims.of_int (19)) + (Prims.of_int (606)) + (Prims.of_int (31))) + (Obj.magic + (FStar_Tactics_Effect.tac_bind + (Prims.mk_range + "FStar.InteractiveHelpers.PostProcess.fst" + (Prims.of_int (107)) + (Prims.of_int (62)) + (Prims.of_int (107)) + (Prims.of_int (63))) + (Prims.mk_range + "FStar.InteractiveHelpers.PostProcess.fst" + (Prims.of_int (111)) + (Prims.of_int (79)) + (Prims.of_int (111)) + (Prims.of_int (95))) + (Obj.magic + (FStar_Tactics_Builtins.pack + t)) + (fun + uu___2 -> + (fun + uu___2 -> + Obj.magic + (FStar_Tactics_Builtins.term_to_string + uu___2)) + uu___2))) + (fun + uu___2 -> + FStar_Tactics_Effect.lift_div_tac + (fun + uu___3 -> + Prims.strcat + ":\n" + uu___2)))) + (fun uu___2 -> + FStar_Tactics_Effect.lift_div_tac + ( + fun + uu___3 -> + Prims.strcat + uu___1 + uu___2)))) + uu___1))) + (fun uu___1 -> + FStar_Tactics_Effect.lift_div_tac + (fun uu___2 -> + Prims.strcat + "[> find_focused_term_explorer: " + uu___1)))) + (fun uu___1 -> + (fun uu___1 -> + Obj.magic + (FStar_Tactics_Builtins.print + uu___1)) uu___1))) + else + Obj.magic + (Obj.repr + (FStar_Tactics_Effect.lift_div_tac + (fun uu___2 -> ())))) + (fun uu___1 -> + (fun uu___1 -> + Obj.magic + (FStar_Tactics_Effect.tac_bind + (Prims.mk_range + "FStar.InteractiveHelpers.PostProcess.fst" + (Prims.of_int (113)) + (Prims.of_int (8)) + (Prims.of_int (113)) + (Prims.of_int (26))) + (Prims.mk_range + "FStar.InteractiveHelpers.PostProcess.fst" + (Prims.of_int (113)) + (Prims.of_int (2)) + (Prims.of_int (115)) + (Prims.of_int (26))) + (Obj.magic (pred ge pl opt_c t)) + (fun uu___2 -> + FStar_Tactics_Effect.lift_div_tac + (fun uu___3 -> + match uu___2 with + | FStar_Pervasives_Native.Some + ft -> + ((FStar_Pervasives_Native.Some + ((mk_exploration_result + ()) ge pl opt_c + ft)), + FStar_Tactics_Types.Abort) + | FStar_Pervasives_Native.None + -> + (FStar_Pervasives_Native.None, + FStar_Tactics_Types.Continue))))) + uu___1))) uu___) +let find_predicated_term : + 'a . + 'a pred_explorer -> + Prims.bool -> + Prims.bool -> + FStar_InteractiveHelpers_Base.genv -> + (FStar_InteractiveHelpers_Base.genv * + FStar_Reflection_Data.term_view) Prims.list -> + FStar_InteractiveHelpers_ExploreTerm.typ_or_comp + FStar_Pervasives_Native.option -> + FStar_Reflection_Types.term -> + ('a exploration_result FStar_Pervasives_Native.option, + unit) FStar_Tactics_Effect.tac_repr + = + fun pred -> + fun dbg -> + fun dfs -> + fun ge -> + fun pl -> + fun opt_c -> + fun t -> + FStar_Tactics_Effect.tac_bind + (Prims.mk_range "FStar.InteractiveHelpers.PostProcess.fst" + (Prims.of_int (122)) (Prims.of_int (6)) + (Prims.of_int (124)) (Prims.of_int (39))) + (Prims.mk_range "FStar.InteractiveHelpers.PostProcess.fst" + (Prims.of_int (122)) (Prims.of_int (2)) + (Prims.of_int (124)) (Prims.of_int (39))) + (Obj.magic + (FStar_InteractiveHelpers_ExploreTerm.explore_term dbg + dfs () + (Obj.magic (find_predicated_term_explorer pred dbg)) + (Obj.magic FStar_Pervasives_Native.None) ge pl opt_c + t)) + (fun uu___ -> + FStar_Tactics_Effect.lift_div_tac + (fun uu___1 -> FStar_Pervasives_Native.fst uu___)) +let (_is_focused_term_explorer : FStar_Reflection_Types.term pred_explorer) = + fun ge -> fun pl -> fun opt_c -> fun tv -> is_focused_term tv +let (find_focused_term : + Prims.bool -> + Prims.bool -> + FStar_InteractiveHelpers_Base.genv -> + (FStar_InteractiveHelpers_Base.genv * + FStar_Reflection_Data.term_view) Prims.list -> + FStar_InteractiveHelpers_ExploreTerm.typ_or_comp + FStar_Pervasives_Native.option -> + FStar_Reflection_Types.term -> + (FStar_Reflection_Types.term exploration_result + FStar_Pervasives_Native.option, + unit) FStar_Tactics_Effect.tac_repr) + = + fun dbg -> + fun dfs -> + fun ge -> + fun pl -> + fun opt_c -> + fun t -> + find_predicated_term _is_focused_term_explorer dbg dfs ge pl + opt_c t +let (find_focused_term_in_current_goal : + Prims.bool -> + (FStar_Reflection_Types.term exploration_result, unit) + FStar_Tactics_Effect.tac_repr) + = + fun dbg -> + FStar_Tactics_Effect.tac_bind + (Prims.mk_range "FStar.InteractiveHelpers.PostProcess.fst" + (Prims.of_int (138)) (Prims.of_int (10)) (Prims.of_int (138)) + (Prims.of_int (21))) + (Prims.mk_range "FStar.InteractiveHelpers.PostProcess.fst" + (Prims.of_int (139)) (Prims.of_int (2)) (Prims.of_int (155)) + (Prims.of_int (5))) (Obj.magic (FStar_Tactics_Derived.cur_goal ())) + (fun uu___ -> + (fun g -> + Obj.magic + (FStar_Tactics_Effect.tac_bind + (Prims.mk_range "FStar.InteractiveHelpers.PostProcess.fst" + (Prims.of_int (139)) (Prims.of_int (10)) + (Prims.of_int (139)) (Prims.of_int (20))) + (Prims.mk_range "FStar.InteractiveHelpers.PostProcess.fst" + (Prims.of_int (140)) (Prims.of_int (2)) + (Prims.of_int (155)) (Prims.of_int (5))) + (Obj.magic (FStar_Tactics_Derived.cur_env ())) + (fun uu___ -> + (fun e -> + Obj.magic + (FStar_Tactics_Effect.tac_bind + (Prims.mk_range + "FStar.InteractiveHelpers.PostProcess.fst" + (Prims.of_int (140)) (Prims.of_int (2)) + (Prims.of_int (140)) (Prims.of_int (80))) + (Prims.mk_range + "FStar.InteractiveHelpers.PostProcess.fst" + (Prims.of_int (141)) (Prims.of_int (8)) + (Prims.of_int (154)) (Prims.of_int (75))) + (Obj.magic + (FStar_Tactics_Effect.tac_bind + (Prims.mk_range + "FStar.InteractiveHelpers.PostProcess.fst" + (Prims.of_int (140)) (Prims.of_int (16)) + (Prims.of_int (140)) (Prims.of_int (80))) + (Prims.mk_range + "FStar.InteractiveHelpers.PostProcess.fst" + (Prims.of_int (140)) (Prims.of_int (2)) + (Prims.of_int (140)) (Prims.of_int (80))) + (Obj.magic + (FStar_Tactics_Effect.tac_bind + (Prims.mk_range + "FStar.InteractiveHelpers.PostProcess.fst" + (Prims.of_int (140)) + (Prims.of_int (63)) + (Prims.of_int (140)) + (Prims.of_int (79))) + (Prims.mk_range "prims.fst" + (Prims.of_int (606)) + (Prims.of_int (19)) + (Prims.of_int (606)) + (Prims.of_int (31))) + (Obj.magic + (FStar_Tactics_Builtins.term_to_string + g)) + (fun uu___ -> + FStar_Tactics_Effect.lift_div_tac + (fun uu___1 -> + Prims.strcat + "[> find_focused_assert_in_current_goal:\n" + uu___)))) + (fun uu___ -> + (fun uu___ -> + Obj.magic + (FStar_InteractiveHelpers_Base.print_dbg + dbg uu___)) uu___))) + (fun uu___ -> + (fun uu___ -> + Obj.magic + (FStar_Tactics_Effect.tac_bind + (Prims.mk_range + "FStar.InteractiveHelpers.PostProcess.fst" + (Prims.of_int (141)) + (Prims.of_int (14)) + (Prims.of_int (141)) + (Prims.of_int (33))) + (Prims.mk_range + "FStar.InteractiveHelpers.PostProcess.fst" + (Prims.of_int (141)) + (Prims.of_int (8)) + (Prims.of_int (154)) + (Prims.of_int (75))) + (Obj.magic (unsquash_equality g)) + (fun uu___1 -> + (fun uu___1 -> + match uu___1 with + | FStar_Pervasives_Native.Some + (l, uu___2) -> + Obj.magic + (FStar_Tactics_Effect.tac_bind + (Prims.mk_range + "FStar.InteractiveHelpers.PostProcess.fst" + (Prims.of_int (143)) + (Prims.of_int (12)) + (Prims.of_int (143)) + (Prims.of_int (36))) + (Prims.mk_range + "FStar.InteractiveHelpers.PostProcess.fst" + (Prims.of_int (144)) + (Prims.of_int (4)) + (Prims.of_int (153)) + (Prims.of_int (7))) + (Obj.magic + (FStar_InteractiveHelpers_ExploreTerm.safe_typ_or_comp + dbg e l)) + (fun uu___3 -> + (fun c -> + Obj.magic + (FStar_Tactics_Effect.tac_bind + (Prims.mk_range + "FStar.InteractiveHelpers.PostProcess.fst" + (Prims.of_int (144)) + (Prims.of_int (13)) + (Prims.of_int (144)) + (Prims.of_int (28))) + (Prims.mk_range + "FStar.InteractiveHelpers.PostProcess.fst" + (Prims.of_int (145)) + (Prims.of_int (4)) + (Prims.of_int (153)) + (Prims.of_int (7))) + (FStar_Tactics_Effect.lift_div_tac + ( + fun + uu___3 -> + FStar_InteractiveHelpers_Base.mk_genv + e [] [])) + (fun uu___3 + -> + (fun ge + -> + Obj.magic + (FStar_Tactics_Effect.tac_bind + (Prims.mk_range + "FStar.InteractiveHelpers.PostProcess.fst" + (Prims.of_int (145)) + (Prims.of_int (4)) + (Prims.of_int (145)) + (Prims.of_int (68))) + (Prims.mk_range + "FStar.InteractiveHelpers.PostProcess.fst" + (Prims.of_int (146)) + (Prims.of_int (10)) + (Prims.of_int (152)) + (Prims.of_int (32))) + (Obj.magic + (FStar_Tactics_Effect.tac_bind + (Prims.mk_range + "FStar.InteractiveHelpers.PostProcess.fst" + (Prims.of_int (145)) + (Prims.of_int (18)) + (Prims.of_int (145)) + (Prims.of_int (68))) + (Prims.mk_range + "FStar.InteractiveHelpers.PostProcess.fst" + (Prims.of_int (145)) + (Prims.of_int (4)) + (Prims.of_int (145)) + (Prims.of_int (68))) + (Obj.magic + (FStar_Tactics_Effect.tac_bind + (Prims.mk_range + "FStar.InteractiveHelpers.PostProcess.fst" + (Prims.of_int (145)) + (Prims.of_int (51)) + (Prims.of_int (145)) + (Prims.of_int (67))) + (Prims.mk_range + "prims.fst" + (Prims.of_int (606)) + (Prims.of_int (19)) + (Prims.of_int (606)) + (Prims.of_int (31))) + (Obj.magic + (FStar_Tactics_Builtins.term_to_string + l)) + (fun + uu___3 -> + FStar_Tactics_Effect.lift_div_tac + (fun + uu___4 -> + Prims.strcat + "[> About to explore term:\n" + uu___3)))) + (fun + uu___3 -> + (fun + uu___3 -> + Obj.magic + (FStar_InteractiveHelpers_Base.print_dbg + dbg + uu___3)) + uu___3))) + (fun + uu___3 -> + (fun + uu___3 -> + Obj.magic + (FStar_Tactics_Effect.tac_bind + (Prims.mk_range + "FStar.InteractiveHelpers.PostProcess.fst" + (Prims.of_int (146)) + (Prims.of_int (16)) + (Prims.of_int (146)) + (Prims.of_int (52))) + (Prims.mk_range + "FStar.InteractiveHelpers.PostProcess.fst" + (Prims.of_int (146)) + (Prims.of_int (10)) + (Prims.of_int (152)) + (Prims.of_int (32))) + (Obj.magic + (find_focused_term + dbg true + ge [] c l)) + (fun + uu___4 -> + (fun + uu___4 -> + match uu___4 + with + | + FStar_Pervasives_Native.Some + res -> + Obj.magic + (FStar_Tactics_Effect.tac_bind + (Prims.mk_range + "FStar.InteractiveHelpers.PostProcess.fst" + (Prims.of_int (148)) + (Prims.of_int (6)) + (Prims.of_int (148)) + (Prims.of_int (73))) + (Prims.mk_range + "FStar.InteractiveHelpers.PostProcess.fst" + (Prims.of_int (147)) + (Prims.of_int (11)) + (Prims.of_int (147)) + (Prims.of_int (14))) + (Obj.magic + (FStar_Tactics_Effect.tac_bind + (Prims.mk_range + "FStar.InteractiveHelpers.PostProcess.fst" + (Prims.of_int (148)) + (Prims.of_int (20)) + (Prims.of_int (148)) + (Prims.of_int (73))) + (Prims.mk_range + "FStar.InteractiveHelpers.PostProcess.fst" + (Prims.of_int (148)) + (Prims.of_int (6)) + (Prims.of_int (148)) + (Prims.of_int (73))) + (Obj.magic + (FStar_Tactics_Effect.tac_bind + (Prims.mk_range + "FStar.InteractiveHelpers.PostProcess.fst" + (Prims.of_int (148)) + (Prims.of_int (50)) + (Prims.of_int (148)) + (Prims.of_int (72))) + (Prims.mk_range + "prims.fst" + (Prims.of_int (606)) + (Prims.of_int (19)) + (Prims.of_int (606)) + (Prims.of_int (31))) + (Obj.magic + (FStar_Tactics_Builtins.term_to_string + res.res)) + (fun + uu___5 -> + FStar_Tactics_Effect.lift_div_tac + (fun + uu___6 -> + Prims.strcat + "[> Found focused term:\n" + uu___5)))) + (fun + uu___5 -> + (fun + uu___5 -> + Obj.magic + (FStar_InteractiveHelpers_Base.print_dbg + dbg + uu___5)) + uu___5))) + (fun + uu___5 -> + FStar_Tactics_Effect.lift_div_tac + (fun + uu___6 -> + res))) + | + FStar_Pervasives_Native.None + -> + Obj.magic + (FStar_Tactics_Effect.tac_bind + (Prims.mk_range + "FStar.InteractiveHelpers.PostProcess.fst" + (Prims.of_int (151)) + (Prims.of_int (12)) + (Prims.of_int (152)) + (Prims.of_int (32))) + (Prims.mk_range + "FStar.InteractiveHelpers.PostProcess.fst" + (Prims.of_int (151)) + (Prims.of_int (6)) + (Prims.of_int (152)) + (Prims.of_int (32))) + (Obj.magic + (FStar_Tactics_Effect.tac_bind + (Prims.mk_range + "FStar.InteractiveHelpers.PostProcess.fst" + (Prims.of_int (152)) + (Prims.of_int (15)) + (Prims.of_int (152)) + (Prims.of_int (31))) + (Prims.mk_range + "prims.fst" + (Prims.of_int (606)) + (Prims.of_int (19)) + (Prims.of_int (606)) + (Prims.of_int (31))) + (Obj.magic + (FStar_Tactics_Builtins.term_to_string + g)) + (fun + uu___5 -> + FStar_Tactics_Effect.lift_div_tac + (fun + uu___6 -> + Prims.strcat + "find_focused_term_in_current_goal: could not find a focused term in the current goal: " + uu___5)))) + (fun + uu___5 -> + (fun + uu___5 -> + Obj.magic + (FStar_InteractiveHelpers_Base.mfail + uu___5)) + uu___5))) + uu___4))) + uu___3))) + uu___3))) + uu___3)) + | uu___2 -> + Obj.magic + (FStar_InteractiveHelpers_Base.mfail + "find_focused_term_in_current_goal: not a squashed equality")) + uu___1))) uu___))) uu___))) uu___) +let (find_focused_assert_in_current_goal : + Prims.bool -> + (FStar_Reflection_Types.term exploration_result, unit) + FStar_Tactics_Effect.tac_repr) + = + fun dbg -> + FStar_Tactics_Effect.tac_bind + (Prims.mk_range "FStar.InteractiveHelpers.PostProcess.fst" + (Prims.of_int (160)) (Prims.of_int (2)) (Prims.of_int (160)) + (Prims.of_int (58))) + (Prims.mk_range "FStar.InteractiveHelpers.PostProcess.fst" + (Prims.of_int (161)) (Prims.of_int (2)) (Prims.of_int (174)) + (Prims.of_int (5))) + (Obj.magic + (FStar_InteractiveHelpers_Base.print_dbg dbg + "[> find_focused_assert_in_current_goal")) + (fun uu___ -> + (fun uu___ -> + Obj.magic + (FStar_Tactics_Effect.tac_bind + (Prims.mk_range "FStar.InteractiveHelpers.PostProcess.fst" + (Prims.of_int (161)) (Prims.of_int (12)) + (Prims.of_int (161)) (Prims.of_int (49))) + (Prims.mk_range "FStar.InteractiveHelpers.PostProcess.fst" + (Prims.of_int (162)) (Prims.of_int (2)) + (Prims.of_int (174)) (Prims.of_int (5))) + (Obj.magic (find_focused_term_in_current_goal dbg)) + (fun uu___1 -> + (fun res -> + Obj.magic + (FStar_Tactics_Effect.tac_bind + (Prims.mk_range + "FStar.InteractiveHelpers.PostProcess.fst" + (Prims.of_int (162)) (Prims.of_int (2)) + (Prims.of_int (162)) (Prims.of_int (69))) + (Prims.mk_range + "FStar.InteractiveHelpers.PostProcess.fst" + (Prims.of_int (164)) (Prims.of_int (2)) + (Prims.of_int (174)) (Prims.of_int (5))) + (Obj.magic + (FStar_Tactics_Effect.tac_bind + (Prims.mk_range + "FStar.InteractiveHelpers.PostProcess.fst" + (Prims.of_int (162)) (Prims.of_int (16)) + (Prims.of_int (162)) (Prims.of_int (69))) + (Prims.mk_range + "FStar.InteractiveHelpers.PostProcess.fst" + (Prims.of_int (162)) (Prims.of_int (2)) + (Prims.of_int (162)) (Prims.of_int (69))) + (Obj.magic + (FStar_Tactics_Effect.tac_bind + (Prims.mk_range + "FStar.InteractiveHelpers.PostProcess.fst" + (Prims.of_int (162)) + (Prims.of_int (46)) + (Prims.of_int (162)) + (Prims.of_int (68))) + (Prims.mk_range "prims.fst" + (Prims.of_int (606)) + (Prims.of_int (19)) + (Prims.of_int (606)) + (Prims.of_int (31))) + (Obj.magic + (FStar_Tactics_Builtins.term_to_string + res.res)) + (fun uu___1 -> + FStar_Tactics_Effect.lift_div_tac + (fun uu___2 -> + Prims.strcat + "[> Found focused term:\n" + uu___1)))) + (fun uu___1 -> + (fun uu___1 -> + Obj.magic + (FStar_InteractiveHelpers_Base.print_dbg + dbg uu___1)) uu___1))) + (fun uu___1 -> + (fun uu___1 -> + Obj.magic + (FStar_Tactics_Effect.tac_bind + (Prims.mk_range + "FStar.InteractiveHelpers.PostProcess.fst" + (Prims.of_int (165)) + (Prims.of_int (4)) + (Prims.of_int (169)) + (Prims.of_int (14))) + (Prims.mk_range + "FStar.InteractiveHelpers.PostProcess.fst" + (Prims.of_int (171)) + (Prims.of_int (8)) + (Prims.of_int (173)) + (Prims.of_int (38))) + (Obj.magic + (FStar_Tactics_Effect.tac_bind + (Prims.mk_range + "FStar.InteractiveHelpers.PostProcess.fst" + (Prims.of_int (165)) + (Prims.of_int (10)) + (Prims.of_int (165)) + (Prims.of_int (25))) + (Prims.mk_range + "FStar.InteractiveHelpers.PostProcess.fst" + (Prims.of_int (165)) + (Prims.of_int (4)) + (Prims.of_int (169)) + (Prims.of_int (14))) + (Obj.magic + (FStar_Tactics_Builtins.inspect + res.res)) + (fun uu___2 -> + (fun uu___2 -> + match uu___2 with + | FStar_Reflection_Data.Tv_Let + (uu___3, uu___4, bv0, + fterm, uu___5) + -> + Obj.magic + (Obj.repr + (FStar_Tactics_Effect.tac_bind + (Prims.mk_range + "FStar.InteractiveHelpers.PostProcess.fst" + (Prims.of_int (167)) + (Prims.of_int (16)) + (Prims.of_int (167)) + (Prims.of_int (50))) + (Prims.mk_range + "FStar.InteractiveHelpers.PostProcess.fst" + (Prims.of_int (168)) + (Prims.of_int (6)) + (Prims.of_int (168)) + (Prims.of_int (42))) + (Obj.magic + (FStar_InteractiveHelpers_Base.genv_push_bv + res.ge + bv0 false + FStar_Pervasives_Native.None)) + (fun ge' -> + FStar_Tactics_Effect.lift_div_tac + ( + fun + uu___6 -> + { + ge = ge'; + parents = + (res.parents); + tgt_comp + = + (res.tgt_comp); + res = + fterm + })))) + | uu___3 -> + Obj.magic + (Obj.repr + (FStar_Tactics_Effect.lift_div_tac + (fun uu___4 -> + res)))) + uu___2))) + (fun uu___2 -> + (fun res' -> + Obj.magic + (FStar_Tactics_Effect.tac_bind + (Prims.mk_range + "FStar.InteractiveHelpers.PostProcess.fst" + (Prims.of_int (171)) + (Prims.of_int (14)) + (Prims.of_int (171)) + (Prims.of_int (47))) + (Prims.mk_range + "FStar.InteractiveHelpers.PostProcess.fst" + (Prims.of_int (171)) + (Prims.of_int (8)) + (Prims.of_int (173)) + (Prims.of_int (38))) + (Obj.magic + (term_is_assert_or_assume + res'.res)) + (fun uu___2 -> + (fun uu___2 -> + match uu___2 with + | FStar_Pervasives_Native.None + -> + Obj.magic + (Obj.repr + (FStar_Tactics_Effect.tac_bind + ( + Prims.mk_range + "FStar.InteractiveHelpers.PostProcess.fst" + (Prims.of_int (172)) + (Prims.of_int (18)) + (Prims.of_int (172)) + (Prims.of_int (144))) + ( + Prims.mk_range + "FStar.InteractiveHelpers.PostProcess.fst" + (Prims.of_int (172)) + (Prims.of_int (12)) + (Prims.of_int (172)) + (Prims.of_int (144))) + ( + Obj.magic + (FStar_Tactics_Effect.tac_bind + (Prims.mk_range + "FStar.InteractiveHelpers.PostProcess.fst" + (Prims.of_int (172)) + (Prims.of_int (121)) + (Prims.of_int (172)) + (Prims.of_int (143))) + (Prims.mk_range + "prims.fst" + (Prims.of_int (606)) + (Prims.of_int (19)) + (Prims.of_int (606)) + (Prims.of_int (31))) + (Obj.magic + (FStar_Tactics_Builtins.term_to_string + res.res)) + (fun + uu___3 -> + FStar_Tactics_Effect.lift_div_tac + (fun + uu___4 -> + Prims.strcat + "find_focused_assert_in_current_goal: the found focused term is not an assertion or an assumption:" + uu___3)))) + ( + fun + uu___3 -> + (fun + uu___3 -> + Obj.magic + (FStar_InteractiveHelpers_Base.mfail + uu___3)) + uu___3))) + | FStar_Pervasives_Native.Some + tm -> + Obj.magic + (Obj.repr + (FStar_Tactics_Effect.lift_div_tac + ( + fun + uu___3 -> + { + ge = + (res'.ge); + parents = + (res'.parents); + tgt_comp + = + (res'.tgt_comp); + res = tm + })))) + uu___2))) uu___2))) + uu___1))) uu___1))) uu___) +let (analyze_effectful_term : + Prims.bool -> + Prims.bool -> + Prims.bool -> + FStar_Reflection_Types.term exploration_result -> + (unit, unit) FStar_Tactics_Effect.tac_repr) + = + fun dbg -> + fun with_gpre -> + fun with_gpost -> + fun res -> + FStar_Tactics_Effect.tac_bind + (Prims.mk_range "FStar.InteractiveHelpers.PostProcess.fst" + (Prims.of_int (190)) (Prims.of_int (11)) (Prims.of_int (190)) + (Prims.of_int (17))) + (Prims.mk_range "FStar.InteractiveHelpers.PostProcess.fst" + (Prims.of_int (191)) (Prims.of_int (2)) (Prims.of_int (247)) + (Prims.of_int (30))) + (FStar_Tactics_Effect.lift_div_tac (fun uu___ -> res.ge)) + (fun uu___ -> + (fun ge -> + Obj.magic + (FStar_Tactics_Effect.tac_bind + (Prims.mk_range + "FStar.InteractiveHelpers.PostProcess.fst" + (Prims.of_int (191)) (Prims.of_int (14)) + (Prims.of_int (191)) (Prims.of_int (26))) + (Prims.mk_range + "FStar.InteractiveHelpers.PostProcess.fst" + (Prims.of_int (193)) (Prims.of_int (2)) + (Prims.of_int (247)) (Prims.of_int (30))) + (FStar_Tactics_Effect.lift_div_tac + (fun uu___ -> res.tgt_comp)) + (fun uu___ -> + (fun opt_c -> + Obj.magic + (FStar_Tactics_Effect.tac_bind + (Prims.mk_range + "FStar.InteractiveHelpers.PostProcess.fst" + (Prims.of_int (194)) (Prims.of_int (10)) + (Prims.of_int (221)) (Prims.of_int (82))) + (Prims.mk_range + "FStar.InteractiveHelpers.PostProcess.fst" + (Prims.of_int (193)) (Prims.of_int (2)) + (Prims.of_int (247)) (Prims.of_int (30))) + (Obj.magic + (FStar_Tactics_Effect.tac_bind + (Prims.mk_range + "FStar.InteractiveHelpers.PostProcess.fst" + (Prims.of_int (194)) + (Prims.of_int (16)) + (Prims.of_int (194)) + (Prims.of_int (31))) + (Prims.mk_range + "FStar.InteractiveHelpers.PostProcess.fst" + (Prims.of_int (194)) + (Prims.of_int (10)) + (Prims.of_int (221)) + (Prims.of_int (82))) + (Obj.magic + (FStar_Tactics_Builtins.inspect + res.res)) + (fun uu___ -> + (fun uu___ -> + match uu___ with + | FStar_Reflection_Data.Tv_Let + (uu___1, uu___2, bv0, + fterm, uu___3) + -> + Obj.magic + (FStar_Tactics_Effect.tac_bind + (Prims.mk_range + "FStar.InteractiveHelpers.PostProcess.fst" + (Prims.of_int (201)) + (Prims.of_int (6)) + (Prims.of_int (201)) + (Prims.of_int (63))) + (Prims.mk_range + "FStar.InteractiveHelpers.PostProcess.fst" + (Prims.of_int (202)) + (Prims.of_int (6)) + (Prims.of_int (220)) + (Prims.of_int (69))) + (Obj.magic + (FStar_Tactics_Effect.tac_bind + (Prims.mk_range + "FStar.InteractiveHelpers.PostProcess.fst" + (Prims.of_int (201)) + (Prims.of_int (20)) + (Prims.of_int (201)) + (Prims.of_int (63))) + (Prims.mk_range + "FStar.InteractiveHelpers.PostProcess.fst" + (Prims.of_int (201)) + (Prims.of_int (6)) + (Prims.of_int (201)) + (Prims.of_int (63))) + (Obj.magic + (FStar_Tactics_Effect.tac_bind + (Prims.mk_range + "FStar.InteractiveHelpers.PostProcess.fst" + (Prims.of_int (201)) + (Prims.of_int (42)) + (Prims.of_int (201)) + (Prims.of_int (62))) + (Prims.mk_range + "prims.fst" + (Prims.of_int (606)) + (Prims.of_int (19)) + (Prims.of_int (606)) + (Prims.of_int (31))) + (Obj.magic + (FStar_Tactics_Builtins.term_to_string + fterm)) + (fun + uu___4 -> + FStar_Tactics_Effect.lift_div_tac + (fun + uu___5 -> + Prims.strcat + "Restraining to: " + uu___4)))) + (fun uu___4 -> + (fun uu___4 + -> + Obj.magic + (FStar_InteractiveHelpers_Base.print_dbg + dbg + uu___4)) + uu___4))) + (fun uu___4 -> + (fun uu___4 -> + Obj.magic + (FStar_Tactics_Effect.tac_bind + (Prims.mk_range + "FStar.InteractiveHelpers.PostProcess.fst" + (Prims.of_int (203)) + (Prims.of_int (8)) + (Prims.of_int (205)) + (Prims.of_int (35))) + (Prims.mk_range + "FStar.InteractiveHelpers.PostProcess.fst" + (Prims.of_int (207)) + (Prims.of_int (6)) + (Prims.of_int (220)) + (Prims.of_int (69))) + (FStar_Tactics_Effect.lift_div_tac + (fun + uu___5 -> + match + FStar_InteractiveHelpers_Base.genv_get_from_name + ge + (FStar_Reflection_Derived.name_of_bv + bv0) + with + | + FStar_Pervasives_Native.None + -> + FStar_Pervasives_Native.None + | + FStar_Pervasives_Native.Some + (sbv, + uu___6) + -> + FStar_Pervasives_Native.Some + sbv)) + (fun uu___5 + -> + (fun + shadowed_bv + -> + Obj.magic + (FStar_Tactics_Effect.tac_bind + (Prims.mk_range + "FStar.InteractiveHelpers.PostProcess.fst" + (Prims.of_int (207)) + (Prims.of_int (16)) + (Prims.of_int (207)) + (Prims.of_int (46))) + (Prims.mk_range + "FStar.InteractiveHelpers.PostProcess.fst" + (Prims.of_int (212)) + (Prims.of_int (6)) + (Prims.of_int (220)) + (Prims.of_int (69))) + (Obj.magic + (FStar_InteractiveHelpers_Base.genv_push_bv + ge bv0 + false + FStar_Pervasives_Native.None)) + (fun + uu___5 -> + (fun ge1 + -> + Obj.magic + (FStar_Tactics_Effect.tac_bind + (Prims.mk_range + "FStar.InteractiveHelpers.PostProcess.fst" + (Prims.of_int (213)) + (Prims.of_int (8)) + (Prims.of_int (217)) + (Prims.of_int (21))) + (Prims.mk_range + "FStar.InteractiveHelpers.PostProcess.fst" + (Prims.of_int (212)) + (Prims.of_int (6)) + (Prims.of_int (220)) + (Prims.of_int (69))) + (Obj.magic + (FStar_Tactics_Effect.tac_bind + (Prims.mk_range + "FStar.InteractiveHelpers.PostProcess.fst" + (Prims.of_int (213)) + (Prims.of_int (19)) + (Prims.of_int (213)) + (Prims.of_int (33))) + (Prims.mk_range + "FStar.InteractiveHelpers.PostProcess.fst" + (Prims.of_int (214)) + (Prims.of_int (8)) + (Prims.of_int (217)) + (Prims.of_int (21))) + (FStar_Tactics_Effect.lift_div_tac + (fun + uu___5 -> + FStar_Reflection_Builtins.inspect_bv + bv0)) + (fun + uu___5 -> + (fun bvv0 + -> + Obj.magic + (FStar_Tactics_Effect.tac_bind + (Prims.mk_range + "FStar.InteractiveHelpers.PostProcess.fst" + (Prims.of_int (214)) + (Prims.of_int (16)) + (Prims.of_int (214)) + (Prims.of_int (77))) + (Prims.mk_range + "FStar.InteractiveHelpers.PostProcess.fst" + (Prims.of_int (215)) + (Prims.of_int (8)) + (Prims.of_int (217)) + (Prims.of_int (21))) + (Obj.magic + (FStar_Tactics_Effect.tac_bind + (Prims.mk_range + "FStar.InteractiveHelpers.PostProcess.fst" + (Prims.of_int (214)) + (Prims.of_int (30)) + (Prims.of_int (214)) + (Prims.of_int (77))) + (Prims.mk_range + "FStar.InteractiveHelpers.PostProcess.fst" + (Prims.of_int (214)) + (Prims.of_int (16)) + (Prims.of_int (214)) + (Prims.of_int (77))) + (Obj.magic + (FStar_Tactics_Effect.tac_bind + (Prims.mk_range + "FStar.InteractiveHelpers.PostProcess.fst" + (Prims.of_int (214)) + (Prims.of_int (59)) + (Prims.of_int (214)) + (Prims.of_int (76))) + (Prims.mk_range + "prims.fst" + (Prims.of_int (606)) + (Prims.of_int (19)) + (Prims.of_int (606)) + (Prims.of_int (31))) + (Obj.magic + (FStar_InteractiveHelpers_Base.abv_to_string + bv0)) + (fun + uu___5 -> + FStar_Tactics_Effect.lift_div_tac + (fun + uu___6 -> + Prims.strcat + "Variable bound in let: " + uu___5)))) + (fun + uu___5 -> + (fun + uu___5 -> + Obj.magic + (FStar_InteractiveHelpers_Base.print_dbg + dbg + uu___5)) + uu___5))) + (fun + uu___5 -> + (fun + uu___5 -> + if + bvv0.FStar_Reflection_Data.bv_ppname + = "uu___" + then + Obj.magic + (Obj.repr + (FStar_InteractiveHelpers_Base.genv_push_fresh_bv + ge1 "ret" + bvv0.FStar_Reflection_Data.bv_sort)) + else + Obj.magic + (Obj.repr + (FStar_Tactics_Effect.lift_div_tac + (fun + uu___7 -> + (ge1, + bv0))))) + uu___5))) + uu___5))) + (fun + uu___5 -> + (fun + uu___5 -> + match uu___5 + with + | + (ge2, + bv1) -> + Obj.magic + (FStar_Tactics_Effect.tac_bind + (Prims.mk_range + "FStar.InteractiveHelpers.PostProcess.fst" + (Prims.of_int (219)) + (Prims.of_int (6)) + (Prims.of_int (220)) + (Prims.of_int (69))) + (Prims.mk_range + "FStar.InteractiveHelpers.PostProcess.fst" + (Prims.of_int (219)) + (Prims.of_int (6)) + (Prims.of_int (220)) + (Prims.of_int (69))) + (FStar_Tactics_Effect.lift_div_tac + (fun + uu___6 -> + bv1)) + (fun + uu___6 -> + (fun bv11 + -> + Obj.magic + (FStar_Tactics_Effect.tac_bind + (Prims.mk_range + "FStar.InteractiveHelpers.PostProcess.fst" + (Prims.of_int (219)) + (Prims.of_int (17)) + (Prims.of_int (219)) + (Prims.of_int (53))) + (Prims.mk_range + "FStar.InteractiveHelpers.PostProcess.fst" + (Prims.of_int (220)) + (Prims.of_int (6)) + (Prims.of_int (220)) + (Prims.of_int (69))) + (Obj.magic + (FStar_InteractiveHelpers_Effectful.compute_eterm_info + dbg + ge2.FStar_InteractiveHelpers_Base.env + fterm)) + (fun info + -> + FStar_Tactics_Effect.lift_div_tac + (fun + uu___6 -> + (ge2, + fterm, + info, + (FStar_Pervasives_Native.Some + bv11), + shadowed_bv, + true))))) + uu___6))) + uu___5))) + uu___5))) + uu___5))) + uu___4)) + | uu___1 -> + Obj.magic + (FStar_Tactics_Effect.tac_bind + (Prims.mk_range + "FStar.InteractiveHelpers.PostProcess.fst" + (Prims.of_int (221)) + (Prims.of_int (25)) + (Prims.of_int (221)) + (Prims.of_int (62))) + (Prims.mk_range + "FStar.InteractiveHelpers.PostProcess.fst" + (Prims.of_int (221)) + (Prims.of_int (11)) + (Prims.of_int (221)) + (Prims.of_int (82))) + (Obj.magic + (FStar_InteractiveHelpers_Effectful.compute_eterm_info + dbg + ge.FStar_InteractiveHelpers_Base.env + res.res)) + (fun uu___2 -> + FStar_Tactics_Effect.lift_div_tac + (fun uu___3 -> + (ge, + (res.res), + uu___2, + FStar_Pervasives_Native.None, + FStar_Pervasives_Native.None, + false))))) + uu___))) + (fun uu___ -> + (fun uu___ -> + match uu___ with + | (ge1, studied_term, info, ret_bv, + shadowed_bv, is_let) -> + Obj.magic + (FStar_Tactics_Effect.tac_bind + (Prims.mk_range + "FStar.InteractiveHelpers.PostProcess.fst" + (Prims.of_int (224)) + (Prims.of_int (2)) + (Prims.of_int (224)) + (Prims.of_int (79))) + (Prims.mk_range + "FStar.InteractiveHelpers.PostProcess.fst" + (Prims.of_int (225)) + (Prims.of_int (2)) + (Prims.of_int (247)) + (Prims.of_int (30))) + (Obj.magic + (FStar_Tactics_Effect.tac_bind + (Prims.mk_range + "FStar.InteractiveHelpers.PostProcess.fst" + (Prims.of_int (224)) + (Prims.of_int (16)) + (Prims.of_int (224)) + (Prims.of_int (79))) + (Prims.mk_range + "FStar.InteractiveHelpers.PostProcess.fst" + (Prims.of_int (224)) + (Prims.of_int (2)) + (Prims.of_int (224)) + (Prims.of_int (79))) + (Obj.magic + (FStar_Tactics_Effect.tac_bind + (Prims.mk_range + "FStar.InteractiveHelpers.PostProcess.fst" + (Prims.of_int (224)) + (Prims.of_int (51)) + (Prims.of_int (224)) + (Prims.of_int (78))) + (Prims.mk_range + "prims.fst" + (Prims.of_int (606)) + (Prims.of_int (19)) + (Prims.of_int (606)) + (Prims.of_int (31))) + (Obj.magic + (FStar_InteractiveHelpers_Base.term_construct + studied_term)) + (fun uu___1 -> + FStar_Tactics_Effect.lift_div_tac + (fun uu___2 + -> + Prims.strcat + "[> Focused term constructor: " + uu___1)))) + (fun uu___1 -> + (fun uu___1 -> + Obj.magic + (FStar_InteractiveHelpers_Base.print_dbg + dbg uu___1)) + uu___1))) + (fun uu___1 -> + (fun uu___1 -> + Obj.magic + (FStar_Tactics_Effect.tac_bind + (Prims.mk_range + "FStar.InteractiveHelpers.PostProcess.fst" + (Prims.of_int (225)) + (Prims.of_int (2)) + (Prims.of_int (225)) + (Prims.of_int (94))) + (Prims.mk_range + "FStar.InteractiveHelpers.PostProcess.fst" + (Prims.of_int (229)) + (Prims.of_int (2)) + (Prims.of_int (247)) + (Prims.of_int (30))) + (Obj.magic + (FStar_Tactics_Effect.tac_bind + (Prims.mk_range + "FStar.InteractiveHelpers.PostProcess.fst" + (Prims.of_int (225)) + (Prims.of_int (16)) + (Prims.of_int (225)) + (Prims.of_int (94))) + (Prims.mk_range + "FStar.InteractiveHelpers.PostProcess.fst" + (Prims.of_int (225)) + (Prims.of_int (2)) + (Prims.of_int (225)) + (Prims.of_int (94))) + (Obj.magic + (FStar_Tactics_Effect.tac_bind + (Prims.mk_range + "FStar.InteractiveHelpers.PostProcess.fst" + (Prims.of_int (225)) + (Prims.of_int (75)) + (Prims.of_int (225)) + (Prims.of_int (93))) + (Prims.mk_range + "prims.fst" + (Prims.of_int (606)) + (Prims.of_int (19)) + (Prims.of_int (606)) + (Prims.of_int (31))) + (Obj.magic + (FStar_InteractiveHelpers_Base.genv_to_string + ge1)) + (fun + uu___2 -> + FStar_Tactics_Effect.lift_div_tac + (fun + uu___3 -> + Prims.strcat + "[> Environment information (after effect analysis):\n" + uu___2)))) + (fun uu___2 + -> + (fun + uu___2 -> + Obj.magic + (FStar_InteractiveHelpers_Base.print_dbg + dbg + uu___2)) + uu___2))) + (fun uu___2 -> + (fun uu___2 -> + Obj.magic + ( + FStar_Tactics_Effect.tac_bind + (Prims.mk_range + "FStar.InteractiveHelpers.PostProcess.fst" + (Prims.of_int (229)) + (Prims.of_int (18)) + (Prims.of_int (229)) + (Prims.of_int (63))) + (Prims.mk_range + "FStar.InteractiveHelpers.PostProcess.fst" + (Prims.of_int (232)) + (Prims.of_int (2)) + (Prims.of_int (247)) + (Prims.of_int (30))) + (Obj.magic + (FStar_Tactics_Effect.tac_bind + (Prims.mk_range + "FStar.InteractiveHelpers.PostProcess.fst" + (Prims.of_int (229)) + (Prims.of_int (24)) + (Prims.of_int (229)) + (Prims.of_int (63))) + (Prims.mk_range + "FStar.InteractiveHelpers.PostProcess.fst" + (Prims.of_int (229)) + (Prims.of_int (18)) + (Prims.of_int (229)) + (Prims.of_int (63))) + (Obj.magic + (term_is_assert_or_assume + studied_term)) + (fun + uu___3 -> + FStar_Tactics_Effect.lift_div_tac + (fun + uu___4 -> + FStar_Pervasives_Native.uu___is_Some + uu___3)))) + (fun + uu___3 -> + (fun + is_assert + -> + Obj.magic + (FStar_Tactics_Effect.tac_bind + (Prims.mk_range + "FStar.InteractiveHelpers.PostProcess.fst" + (Prims.of_int (232)) + (Prims.of_int (16)) + (Prims.of_int (232)) + (Prims.of_int (60))) + (Prims.mk_range + "FStar.InteractiveHelpers.PostProcess.fst" + (Prims.of_int (233)) + (Prims.of_int (2)) + (Prims.of_int (247)) + (Prims.of_int (30))) + (Obj.magic + (FStar_InteractiveHelpers_Base.opt_tapply + (fun x -> + FStar_Tactics_Builtins.pack + (FStar_Reflection_Data.Tv_Var + x)) + ret_bv)) + (fun + uu___3 -> + (fun + ret_arg + -> + Obj.magic + (FStar_Tactics_Effect.tac_bind + (Prims.mk_range + "FStar.InteractiveHelpers.PostProcess.fst" + (Prims.of_int (233)) + (Prims.of_int (16)) + (Prims.of_int (233)) + (Prims.of_int (44))) + (Prims.mk_range + "FStar.InteractiveHelpers.PostProcess.fst" + (Prims.of_int (234)) + (Prims.of_int (2)) + (Prims.of_int (247)) + (Prims.of_int (30))) + (FStar_Tactics_Effect.lift_div_tac + (fun + uu___3 -> + FStar_List_Tot_Base.map + FStar_Pervasives_Native.snd + res.parents)) + (fun + uu___3 -> + (fun + parents + -> + Obj.magic + (FStar_Tactics_Effect.tac_bind + (Prims.mk_range + "FStar.InteractiveHelpers.PostProcess.fst" + (Prims.of_int (235)) + (Prims.of_int (4)) + (Prims.of_int (236)) + (Prims.of_int (68))) + (Prims.mk_range + "FStar.InteractiveHelpers.PostProcess.fst" + (Prims.of_int (234)) + (Prims.of_int (2)) + (Prims.of_int (247)) + (Prims.of_int (30))) + (Obj.magic + (FStar_InteractiveHelpers_Effectful.eterm_info_to_assertions + dbg + with_gpre + with_gpost + ge1 + studied_term + is_let + is_assert + info + ret_arg + opt_c + parents + [])) + (fun + uu___3 -> + (fun + uu___3 -> + match uu___3 + with + | + (ge2, + asserts) + -> + Obj.magic + (FStar_Tactics_Effect.tac_bind + (Prims.mk_range + "FStar.InteractiveHelpers.PostProcess.fst" + (Prims.of_int (238)) + (Prims.of_int (16)) + (Prims.of_int (238)) + (Prims.of_int (71))) + (Prims.mk_range + "FStar.InteractiveHelpers.PostProcess.fst" + (Prims.of_int (240)) + (Prims.of_int (2)) + (Prims.of_int (247)) + (Prims.of_int (30))) + (Obj.magic + (FStar_InteractiveHelpers_Propositions.simp_filter_assertions + ge2.FStar_InteractiveHelpers_Base.env + FStar_InteractiveHelpers_Propositions.simpl_norm_steps + asserts)) + (fun + uu___4 -> + (fun + asserts1 + -> + Obj.magic + (FStar_Tactics_Effect.tac_bind + (Prims.mk_range + "FStar.InteractiveHelpers.PostProcess.fst" + (Prims.of_int (240)) + (Prims.of_int (21)) + (Prims.of_int (240)) + (Prims.of_int (86))) + (Prims.mk_range + "FStar.InteractiveHelpers.PostProcess.fst" + (Prims.of_int (240)) + (Prims.of_int (2)) + (Prims.of_int (247)) + (Prims.of_int (30))) + (Obj.magic + (FStar_InteractiveHelpers_Output.subst_shadowed_with_abs_in_assertions + dbg ge2 + shadowed_bv + asserts1)) + (fun + uu___4 -> + (fun + uu___4 -> + match uu___4 + with + | + (ge3, + asserts2) + -> + Obj.magic + (FStar_Tactics_Effect.tac_bind + (Prims.mk_range + "FStar.InteractiveHelpers.PostProcess.fst" + (Prims.of_int (243)) + (Prims.of_int (4)) + (Prims.of_int (244)) + (Prims.of_int (70))) + (Prims.mk_range + "FStar.InteractiveHelpers.PostProcess.fst" + (Prims.of_int (247)) + (Prims.of_int (2)) + (Prims.of_int (247)) + (Prims.of_int (30))) + (FStar_Tactics_Effect.lift_div_tac + (fun + uu___5 -> + if is_let + then + asserts2 + else + FStar_InteractiveHelpers_Propositions.mk_assertions + (FStar_List_Tot_Base.append + asserts2.FStar_InteractiveHelpers_Propositions.pres + asserts2.FStar_InteractiveHelpers_Propositions.posts) + [])) + (fun + uu___5 -> + (fun + asserts3 + -> + Obj.magic + (FStar_InteractiveHelpers_Output.printout_success + ge3 + asserts3)) + uu___5))) + uu___4))) + uu___4))) + uu___3))) + uu___3))) + uu___3))) + uu___3))) + uu___2))) + uu___1))) uu___))) + uu___))) uu___) +let (pp_analyze_effectful_term : + Prims.bool -> + Prims.bool -> + Prims.bool -> unit -> (unit, unit) FStar_Tactics_Effect.tac_repr) + = + fun dbg -> + fun with_gpre -> + fun with_gpost -> + fun uu___ -> + FStar_Tactics_Derived.try_with + (fun uu___1 -> + match () with + | () -> + FStar_Tactics_Effect.tac_bind + (Prims.mk_range + "FStar.InteractiveHelpers.PostProcess.fst" + (Prims.of_int (253)) (Prims.of_int (14)) + (Prims.of_int (253)) (Prims.of_int (51))) + (Prims.mk_range + "FStar.InteractiveHelpers.PostProcess.fst" + (Prims.of_int (254)) (Prims.of_int (4)) + (Prims.of_int (255)) (Prims.of_int (16))) + (Obj.magic (find_focused_term_in_current_goal dbg)) + (fun uu___2 -> + (fun res -> + Obj.magic + (FStar_Tactics_Effect.tac_bind + (Prims.mk_range + "FStar.InteractiveHelpers.PostProcess.fst" + (Prims.of_int (254)) (Prims.of_int (4)) + (Prims.of_int (254)) (Prims.of_int (55))) + (Prims.mk_range + "FStar.InteractiveHelpers.PostProcess.fst" + (Prims.of_int (255)) (Prims.of_int (4)) + (Prims.of_int (255)) (Prims.of_int (16))) + (Obj.magic + (analyze_effectful_term dbg with_gpre + with_gpost res)) + (fun uu___2 -> + (fun uu___2 -> Obj.magic (end_proof ())) + uu___2))) uu___2)) + (fun uu___1 -> + match uu___1 with + | FStar_InteractiveHelpers_Base.MetaAnalysis msg -> + FStar_Tactics_Effect.tac_bind + (Prims.mk_range + "FStar.InteractiveHelpers.PostProcess.fst" + (Prims.of_int (256)) (Prims.of_int (29)) + (Prims.of_int (256)) (Prims.of_int (49))) + (Prims.mk_range + "FStar.InteractiveHelpers.PostProcess.fst" + (Prims.of_int (256)) (Prims.of_int (51)) + (Prims.of_int (256)) (Prims.of_int (63))) + (Obj.magic + (FStar_InteractiveHelpers_Output.printout_failure msg)) + (fun uu___2 -> + (fun uu___2 -> Obj.magic (end_proof ())) uu___2) + | err -> FStar_Tactics_Effect.raise err) +let _ = + FStar_Tactics_Native.register_tactic + "FStar.InteractiveHelpers.PostProcess.pp_analyze_effectful_term" + (Prims.of_int (5)) + (fun psc -> + fun ncb -> + fun args -> + FStar_Tactics_InterpFuns.mk_tactic_interpretation_4 + (FStar_Tactics_Native.from_tactic_4 pp_analyze_effectful_term) + FStar_Syntax_Embeddings.e_bool FStar_Syntax_Embeddings.e_bool + FStar_Syntax_Embeddings.e_bool FStar_Syntax_Embeddings.e_unit + FStar_Syntax_Embeddings.e_unit psc ncb args) +let (remove_b2t : + FStar_Reflection_Types.term -> + (FStar_Reflection_Types.term, unit) FStar_Tactics_Effect.tac_repr) + = + fun t -> + FStar_Tactics_Effect.tac_bind + (Prims.mk_range "FStar.InteractiveHelpers.PostProcess.fst" + (Prims.of_int (272)) (Prims.of_int (8)) (Prims.of_int (272)) + (Prims.of_int (17))) + (Prims.mk_range "FStar.InteractiveHelpers.PostProcess.fst" + (Prims.of_int (272)) (Prims.of_int (2)) (Prims.of_int (279)) + (Prims.of_int (10))) (Obj.magic (FStar_Tactics_Builtins.inspect t)) + (fun uu___ -> + (fun uu___ -> + match uu___ with + | FStar_Reflection_Data.Tv_App + (hd, (a, FStar_Reflection_Data.Q_Explicit)) -> + Obj.magic + (Obj.repr + (FStar_Tactics_Effect.tac_bind + (Prims.mk_range + "FStar.InteractiveHelpers.PostProcess.fst" + (Prims.of_int (274)) (Prims.of_int (16)) + (Prims.of_int (274)) (Prims.of_int (26))) + (Prims.mk_range + "FStar.InteractiveHelpers.PostProcess.fst" + (Prims.of_int (274)) (Prims.of_int (10)) + (Prims.of_int (277)) (Prims.of_int (12))) + (Obj.magic (FStar_Tactics_Builtins.inspect hd)) + (fun uu___1 -> + FStar_Tactics_Effect.lift_div_tac + (fun uu___2 -> + match uu___1 with + | FStar_Reflection_Data.Tv_FVar fv -> + if + FStar_InteractiveHelpers_Base.fv_eq_name + fv FStar_Reflection_Const.b2t_qn + then a + else t + | uu___3 -> t)))) + | uu___1 -> + Obj.magic + (Obj.repr + (FStar_Tactics_Effect.lift_div_tac (fun uu___2 -> t)))) + uu___) +let (is_conjunction : + FStar_Reflection_Types.term -> + ((FStar_Reflection_Types.term * FStar_Reflection_Types.term) + FStar_Pervasives_Native.option, + unit) FStar_Tactics_Effect.tac_repr) + = + fun t -> + FStar_Tactics_Effect.tac_bind + (Prims.mk_range "FStar.InteractiveHelpers.PostProcess.fst" + (Prims.of_int (285)) (Prims.of_int (10)) (Prims.of_int (285)) + (Prims.of_int (22))) + (Prims.mk_range "FStar.InteractiveHelpers.PostProcess.fst" + (Prims.of_int (286)) (Prims.of_int (2)) (Prims.of_int (296)) + (Prims.of_int (13))) (Obj.magic (remove_b2t t)) + (fun uu___ -> + (fun t1 -> + Obj.magic + (FStar_Tactics_Effect.tac_bind + (Prims.mk_range "FStar.InteractiveHelpers.PostProcess.fst" + (Prims.of_int (286)) (Prims.of_int (19)) + (Prims.of_int (286)) (Prims.of_int (32))) + (Prims.mk_range "FStar.InteractiveHelpers.PostProcess.fst" + (Prims.of_int (286)) (Prims.of_int (2)) + (Prims.of_int (296)) (Prims.of_int (13))) + (FStar_Tactics_Effect.lift_div_tac + (fun uu___ -> FStar_Reflection_Derived.collect_app t1)) + (fun uu___ -> + (fun uu___ -> + match uu___ with + | (hd, params) -> + (match params with + | (x, FStar_Reflection_Data.Q_Explicit):: + (y, FStar_Reflection_Data.Q_Explicit)::[] -> + Obj.magic + (Obj.repr + (FStar_Tactics_Effect.tac_bind + (Prims.mk_range + "FStar.InteractiveHelpers.PostProcess.fst" + (Prims.of_int (289)) + (Prims.of_int (16)) + (Prims.of_int (289)) + (Prims.of_int (26))) + (Prims.mk_range + "FStar.InteractiveHelpers.PostProcess.fst" + (Prims.of_int (289)) + (Prims.of_int (10)) + (Prims.of_int (294)) + (Prims.of_int (15))) + (Obj.magic + (FStar_Tactics_Builtins.inspect hd)) + (fun uu___1 -> + FStar_Tactics_Effect.lift_div_tac + (fun uu___2 -> + match uu___1 with + | FStar_Reflection_Data.Tv_FVar + fv -> + if + ((FStar_Reflection_Builtins.inspect_fv + fv) + = + FStar_Reflection_Const.and_qn) + || + ((FStar_Reflection_Builtins.inspect_fv + fv) + = + ["Prims"; + "op_AmpAmp"]) + then + FStar_Pervasives_Native.Some + (x, y) + else + FStar_Pervasives_Native.None + | uu___3 -> + FStar_Pervasives_Native.None)))) + | uu___1 -> + Obj.magic + (Obj.repr + (FStar_Tactics_Effect.lift_div_tac + (fun uu___2 -> + FStar_Pervasives_Native.None))))) + uu___))) uu___) +let rec (_split_conjunctions : + FStar_Reflection_Types.term Prims.list -> + FStar_Reflection_Types.term -> + (FStar_Reflection_Types.term Prims.list, unit) + FStar_Tactics_Effect.tac_repr) + = + fun ls -> + fun t -> + FStar_Tactics_Effect.tac_bind + (Prims.mk_range "FStar.InteractiveHelpers.PostProcess.fst" + (Prims.of_int (301)) (Prims.of_int (8)) (Prims.of_int (301)) + (Prims.of_int (24))) + (Prims.mk_range "FStar.InteractiveHelpers.PostProcess.fst" + (Prims.of_int (301)) (Prims.of_int (2)) (Prims.of_int (306)) + (Prims.of_int (7))) (Obj.magic (is_conjunction t)) + (fun uu___ -> + (fun uu___ -> + match uu___ with + | FStar_Pervasives_Native.None -> + Obj.magic + (Obj.repr + (FStar_Tactics_Effect.lift_div_tac + (fun uu___1 -> t :: ls))) + | FStar_Pervasives_Native.Some (l, r) -> + Obj.magic + (Obj.repr + (FStar_Tactics_Effect.tac_bind + (Prims.mk_range + "FStar.InteractiveHelpers.PostProcess.fst" + (Prims.of_int (304)) (Prims.of_int (14)) + (Prims.of_int (304)) (Prims.of_int (38))) + (Prims.mk_range + "FStar.InteractiveHelpers.PostProcess.fst" + (Prims.of_int (305)) (Prims.of_int (4)) + (Prims.of_int (306)) (Prims.of_int (7))) + (Obj.magic (_split_conjunctions ls r)) + (fun uu___1 -> + (fun ls1 -> + Obj.magic + (FStar_Tactics_Effect.tac_bind + (Prims.mk_range + "FStar.InteractiveHelpers.PostProcess.fst" + (Prims.of_int (305)) + (Prims.of_int (14)) + (Prims.of_int (305)) + (Prims.of_int (39))) + (Prims.mk_range + "FStar.InteractiveHelpers.PostProcess.fst" + (Prims.of_int (305)) + (Prims.of_int (8)) + (Prims.of_int (305)) + (Prims.of_int (11))) + (Obj.magic (_split_conjunctions ls1 l)) + (fun ls2 -> + FStar_Tactics_Effect.lift_div_tac + (fun uu___1 -> ls2)))) uu___1)))) + uu___) +let (split_conjunctions : + FStar_Reflection_Types.term -> + (FStar_Reflection_Types.term Prims.list, unit) + FStar_Tactics_Effect.tac_repr) + = fun t -> _split_conjunctions [] t +let (split_conjunctions_under_match : + Prims.bool -> + FStar_Reflection_Types.term -> + (FStar_Reflection_Types.term Prims.list, unit) + FStar_Tactics_Effect.tac_repr) + = + fun dbg -> + fun t -> + FStar_Tactics_Effect.tac_bind + (Prims.mk_range "FStar.InteractiveHelpers.PostProcess.fst" + (Prims.of_int (320)) (Prims.of_int (11)) (Prims.of_int (320)) + (Prims.of_int (23))) + (Prims.mk_range "FStar.InteractiveHelpers.PostProcess.fst" + (Prims.of_int (321)) (Prims.of_int (2)) (Prims.of_int (328)) + (Prims.of_int (7))) (Obj.magic (remove_b2t t)) + (fun uu___ -> + (fun t1 -> + Obj.magic + (FStar_Tactics_Effect.tac_bind + (Prims.mk_range "FStar.InteractiveHelpers.PostProcess.fst" + (Prims.of_int (321)) (Prims.of_int (2)) + (Prims.of_int (321)) (Prims.of_int (75))) + (Prims.mk_range "FStar.InteractiveHelpers.PostProcess.fst" + (Prims.of_int (322)) (Prims.of_int (2)) + (Prims.of_int (328)) (Prims.of_int (7))) + (Obj.magic + (FStar_Tactics_Effect.tac_bind + (Prims.mk_range + "FStar.InteractiveHelpers.PostProcess.fst" + (Prims.of_int (321)) (Prims.of_int (16)) + (Prims.of_int (321)) (Prims.of_int (75))) + (Prims.mk_range + "FStar.InteractiveHelpers.PostProcess.fst" + (Prims.of_int (321)) (Prims.of_int (2)) + (Prims.of_int (321)) (Prims.of_int (75))) + (Obj.magic + (FStar_Tactics_Effect.tac_bind + (Prims.mk_range + "FStar.InteractiveHelpers.PostProcess.fst" + (Prims.of_int (321)) (Prims.of_int (57)) + (Prims.of_int (321)) (Prims.of_int (74))) + (Prims.mk_range "prims.fst" + (Prims.of_int (606)) (Prims.of_int (19)) + (Prims.of_int (606)) (Prims.of_int (31))) + (Obj.magic + (FStar_InteractiveHelpers_Base.term_construct + t1)) + (fun uu___ -> + FStar_Tactics_Effect.lift_div_tac + (fun uu___1 -> + Prims.strcat + "[> split_conjunctions_under_match: " + uu___)))) + (fun uu___ -> + (fun uu___ -> + Obj.magic + (FStar_InteractiveHelpers_Base.print_dbg dbg + uu___)) uu___))) + (fun uu___ -> + (fun uu___ -> + Obj.magic + (FStar_Tactics_Effect.tac_bind + (Prims.mk_range + "FStar.InteractiveHelpers.PostProcess.fst" + (Prims.of_int (322)) (Prims.of_int (8)) + (Prims.of_int (322)) (Prims.of_int (18))) + (Prims.mk_range + "FStar.InteractiveHelpers.PostProcess.fst" + (Prims.of_int (322)) (Prims.of_int (2)) + (Prims.of_int (328)) (Prims.of_int (7))) + (Obj.magic (FStar_Tactics_Builtins.inspect t1)) + (fun uu___1 -> + (fun uu___1 -> + match uu___1 with + | FStar_Reflection_Data.Tv_Match + (scrut, ret_opt, (pat, br)::[]) -> + Obj.magic + (Obj.repr + (FStar_Tactics_Effect.tac_bind + (Prims.mk_range + "FStar.InteractiveHelpers.PostProcess.fst" + (Prims.of_int (324)) + (Prims.of_int (13)) + (Prims.of_int (324)) + (Prims.of_int (34))) + (Prims.mk_range + "FStar.InteractiveHelpers.PostProcess.fst" + (Prims.of_int (325)) + (Prims.of_int (4)) + (Prims.of_int (325)) + (Prims.of_int (62))) + (Obj.magic + (split_conjunctions br)) + (fun uu___2 -> + (fun tl -> + Obj.magic + (FStar_Tactics_Util.map + (fun x -> + FStar_Tactics_Builtins.pack + (FStar_Reflection_Data.Tv_Match + (scrut, + ret_opt, + [ + (pat, x)]))) + tl)) uu___2))) + | uu___2 -> + Obj.magic + (Obj.repr + (FStar_Tactics_Effect.lift_div_tac + (fun uu___3 -> [t])))) uu___1))) + uu___))) uu___) +let (split_assert_conjs : + Prims.bool -> + FStar_Reflection_Types.term exploration_result -> + (unit, unit) FStar_Tactics_Effect.tac_repr) + = + fun dbg -> + fun res -> + FStar_Tactics_Effect.tac_bind + (Prims.mk_range "FStar.InteractiveHelpers.PostProcess.fst" + (Prims.of_int (332)) (Prims.of_int (12)) (Prims.of_int (332)) + (Prims.of_int (18))) + (Prims.mk_range "FStar.InteractiveHelpers.PostProcess.fst" + (Prims.of_int (334)) (Prims.of_int (2)) (Prims.of_int (347)) + (Prims.of_int (30))) + (FStar_Tactics_Effect.lift_div_tac (fun uu___ -> res.ge)) + (fun uu___ -> + (fun ge0 -> + Obj.magic + (FStar_Tactics_Effect.tac_bind + (Prims.mk_range "FStar.InteractiveHelpers.PostProcess.fst" + (Prims.of_int (334)) (Prims.of_int (10)) + (Prims.of_int (334)) (Prims.of_int (56))) + (Prims.mk_range "FStar.InteractiveHelpers.PostProcess.fst" + (Prims.of_int (336)) (Prims.of_int (2)) + (Prims.of_int (347)) (Prims.of_int (30))) + (Obj.magic + (FStar_Tactics_Builtins.norm_term_env + ge0.FStar_InteractiveHelpers_Base.env + FStar_InteractiveHelpers_Propositions.simpl_norm_steps + res.res)) + (fun uu___ -> + (fun t -> + Obj.magic + (FStar_Tactics_Effect.tac_bind + (Prims.mk_range + "FStar.InteractiveHelpers.PostProcess.fst" + (Prims.of_int (336)) (Prims.of_int (14)) + (Prims.of_int (336)) (Prims.of_int (34))) + (Prims.mk_range + "FStar.InteractiveHelpers.PostProcess.fst" + (Prims.of_int (341)) (Prims.of_int (2)) + (Prims.of_int (347)) (Prims.of_int (30))) + (Obj.magic (split_conjunctions t)) + (fun uu___ -> + (fun conjs -> + Obj.magic + (FStar_Tactics_Effect.tac_bind + (Prims.mk_range + "FStar.InteractiveHelpers.PostProcess.fst" + (Prims.of_int (342)) + (Prims.of_int (4)) + (Prims.of_int (343)) + (Prims.of_int (14))) + (Prims.mk_range + "FStar.InteractiveHelpers.PostProcess.fst" + (Prims.of_int (345)) + (Prims.of_int (2)) + (Prims.of_int (347)) + (Prims.of_int (30))) + (if + (FStar_List_Tot_Base.length conjs) + = Prims.int_one + then + Obj.magic + (Obj.repr + (split_conjunctions_under_match + dbg t)) + else + Obj.magic + (Obj.repr + (FStar_Tactics_Effect.lift_div_tac + (fun uu___1 -> conjs)))) + (fun uu___ -> + (fun conjs1 -> + Obj.magic + (FStar_Tactics_Effect.tac_bind + (Prims.mk_range + "FStar.InteractiveHelpers.PostProcess.fst" + (Prims.of_int (345)) + (Prims.of_int (16)) + (Prims.of_int (345)) + (Prims.of_int (38))) + (Prims.mk_range + "FStar.InteractiveHelpers.PostProcess.fst" + (Prims.of_int (347)) + (Prims.of_int (2)) + (Prims.of_int (347)) + (Prims.of_int (30))) + (FStar_Tactics_Effect.lift_div_tac + (fun uu___ -> + FStar_InteractiveHelpers_Propositions.mk_assertions + conjs1 [])) + (fun uu___ -> + (fun asserts -> + Obj.magic + (FStar_InteractiveHelpers_Output.printout_success + ge0 asserts)) + uu___))) uu___))) + uu___))) uu___))) uu___) +let (pp_split_assert_conjs : + Prims.bool -> unit -> (unit, unit) FStar_Tactics_Effect.tac_repr) = + fun dbg -> + fun uu___ -> + FStar_Tactics_Derived.try_with + (fun uu___1 -> + match () with + | () -> + FStar_Tactics_Effect.tac_bind + (Prims.mk_range "FStar.InteractiveHelpers.PostProcess.fst" + (Prims.of_int (353)) (Prims.of_int (14)) + (Prims.of_int (353)) (Prims.of_int (53))) + (Prims.mk_range "FStar.InteractiveHelpers.PostProcess.fst" + (Prims.of_int (354)) (Prims.of_int (4)) + (Prims.of_int (355)) (Prims.of_int (16))) + (Obj.magic (find_focused_assert_in_current_goal dbg)) + (fun uu___2 -> + (fun res -> + Obj.magic + (FStar_Tactics_Effect.tac_bind + (Prims.mk_range + "FStar.InteractiveHelpers.PostProcess.fst" + (Prims.of_int (354)) (Prims.of_int (4)) + (Prims.of_int (354)) (Prims.of_int (30))) + (Prims.mk_range + "FStar.InteractiveHelpers.PostProcess.fst" + (Prims.of_int (355)) (Prims.of_int (4)) + (Prims.of_int (355)) (Prims.of_int (16))) + (Obj.magic (split_assert_conjs dbg res)) + (fun uu___2 -> + (fun uu___2 -> Obj.magic (end_proof ())) + uu___2))) uu___2)) + (fun uu___1 -> + match uu___1 with + | FStar_InteractiveHelpers_Base.MetaAnalysis msg -> + FStar_Tactics_Effect.tac_bind + (Prims.mk_range "FStar.InteractiveHelpers.PostProcess.fst" + (Prims.of_int (356)) (Prims.of_int (29)) + (Prims.of_int (356)) (Prims.of_int (49))) + (Prims.mk_range "FStar.InteractiveHelpers.PostProcess.fst" + (Prims.of_int (356)) (Prims.of_int (51)) + (Prims.of_int (356)) (Prims.of_int (63))) + (Obj.magic + (FStar_InteractiveHelpers_Output.printout_failure msg)) + (fun uu___2 -> + (fun uu___2 -> Obj.magic (end_proof ())) uu___2) + | err -> FStar_Tactics_Effect.raise err) +let _ = + FStar_Tactics_Native.register_tactic + "FStar.InteractiveHelpers.PostProcess.pp_split_assert_conjs" + (Prims.of_int (3)) + (fun psc -> + fun ncb -> + fun args -> + FStar_Tactics_InterpFuns.mk_tactic_interpretation_2 + (FStar_Tactics_Native.from_tactic_2 pp_split_assert_conjs) + FStar_Syntax_Embeddings.e_bool FStar_Syntax_Embeddings.e_unit + FStar_Syntax_Embeddings.e_unit psc ncb args) +type eq_kind = + | Eq_Dec of FStar_Reflection_Types.typ + | Eq_Undec of FStar_Reflection_Types.typ + | Eq_Hetero of FStar_Reflection_Types.typ * FStar_Reflection_Types.typ +let (uu___is_Eq_Dec : eq_kind -> Prims.bool) = + fun projectee -> match projectee with | Eq_Dec _0 -> true | uu___ -> false +let (__proj__Eq_Dec__item___0 : eq_kind -> FStar_Reflection_Types.typ) = + fun projectee -> match projectee with | Eq_Dec _0 -> _0 +let (uu___is_Eq_Undec : eq_kind -> Prims.bool) = + fun projectee -> + match projectee with | Eq_Undec _0 -> true | uu___ -> false +let (__proj__Eq_Undec__item___0 : eq_kind -> FStar_Reflection_Types.typ) = + fun projectee -> match projectee with | Eq_Undec _0 -> _0 +let (uu___is_Eq_Hetero : eq_kind -> Prims.bool) = + fun projectee -> + match projectee with | Eq_Hetero (_0, _1) -> true | uu___ -> false +let (__proj__Eq_Hetero__item___0 : eq_kind -> FStar_Reflection_Types.typ) = + fun projectee -> match projectee with | Eq_Hetero (_0, _1) -> _0 +let (__proj__Eq_Hetero__item___1 : eq_kind -> FStar_Reflection_Types.typ) = + fun projectee -> match projectee with | Eq_Hetero (_0, _1) -> _1 +let (is_eq : + Prims.bool -> + FStar_Reflection_Types.term -> + ((eq_kind * FStar_Reflection_Types.term * FStar_Reflection_Types.term) + FStar_Pervasives_Native.option, + unit) FStar_Tactics_Effect.tac_repr) + = + fun dbg -> + fun t -> + FStar_Tactics_Effect.tac_bind + (Prims.mk_range "FStar.InteractiveHelpers.PostProcess.fst" + (Prims.of_int (377)) (Prims.of_int (10)) (Prims.of_int (377)) + (Prims.of_int (22))) + (Prims.mk_range "FStar.InteractiveHelpers.PostProcess.fst" + (Prims.of_int (378)) (Prims.of_int (2)) (Prims.of_int (397)) + (Prims.of_int (13))) (Obj.magic (remove_b2t t)) + (fun uu___ -> + (fun t1 -> + Obj.magic + (FStar_Tactics_Effect.tac_bind + (Prims.mk_range "FStar.InteractiveHelpers.PostProcess.fst" + (Prims.of_int (378)) (Prims.of_int (2)) + (Prims.of_int (378)) (Prims.of_int (49))) + (Prims.mk_range "FStar.InteractiveHelpers.PostProcess.fst" + (Prims.of_int (379)) (Prims.of_int (2)) + (Prims.of_int (397)) (Prims.of_int (13))) + (Obj.magic + (FStar_Tactics_Effect.tac_bind + (Prims.mk_range + "FStar.InteractiveHelpers.PostProcess.fst" + (Prims.of_int (378)) (Prims.of_int (16)) + (Prims.of_int (378)) (Prims.of_int (49))) + (Prims.mk_range + "FStar.InteractiveHelpers.PostProcess.fst" + (Prims.of_int (378)) (Prims.of_int (2)) + (Prims.of_int (378)) (Prims.of_int (49))) + (Obj.magic + (FStar_Tactics_Effect.tac_bind + (Prims.mk_range + "FStar.InteractiveHelpers.PostProcess.fst" + (Prims.of_int (378)) (Prims.of_int (32)) + (Prims.of_int (378)) (Prims.of_int (48))) + (Prims.mk_range "prims.fst" + (Prims.of_int (606)) (Prims.of_int (19)) + (Prims.of_int (606)) (Prims.of_int (31))) + (Obj.magic + (FStar_Tactics_Builtins.term_to_string t1)) + (fun uu___ -> + FStar_Tactics_Effect.lift_div_tac + (fun uu___1 -> + Prims.strcat "[> is_eq: " uu___)))) + (fun uu___ -> + (fun uu___ -> + Obj.magic + (FStar_InteractiveHelpers_Base.print_dbg dbg + uu___)) uu___))) + (fun uu___ -> + (fun uu___ -> + Obj.magic + (FStar_Tactics_Effect.tac_bind + (Prims.mk_range + "FStar.InteractiveHelpers.PostProcess.fst" + (Prims.of_int (379)) (Prims.of_int (19)) + (Prims.of_int (379)) (Prims.of_int (32))) + (Prims.mk_range + "FStar.InteractiveHelpers.PostProcess.fst" + (Prims.of_int (379)) (Prims.of_int (2)) + (Prims.of_int (397)) (Prims.of_int (13))) + (FStar_Tactics_Effect.lift_div_tac + (fun uu___1 -> + FStar_Reflection_Derived.collect_app t1)) + (fun uu___1 -> + (fun uu___1 -> + match uu___1 with + | (hd, params) -> + Obj.magic + (FStar_Tactics_Effect.tac_bind + (Prims.mk_range + "FStar.InteractiveHelpers.PostProcess.fst" + (Prims.of_int (380)) + (Prims.of_int (2)) + (Prims.of_int (380)) + (Prims.of_int (47))) + (Prims.mk_range + "FStar.InteractiveHelpers.PostProcess.fst" + (Prims.of_int (381)) + (Prims.of_int (2)) + (Prims.of_int (397)) + (Prims.of_int (13))) + (Obj.magic + (FStar_Tactics_Effect.tac_bind + (Prims.mk_range + "FStar.InteractiveHelpers.PostProcess.fst" + (Prims.of_int (380)) + (Prims.of_int (16)) + (Prims.of_int (380)) + (Prims.of_int (47))) + (Prims.mk_range + "FStar.InteractiveHelpers.PostProcess.fst" + (Prims.of_int (380)) + (Prims.of_int (2)) + (Prims.of_int (380)) + (Prims.of_int (47))) + (Obj.magic + (FStar_Tactics_Effect.tac_bind + (Prims.mk_range + "FStar.InteractiveHelpers.PostProcess.fst" + (Prims.of_int (380)) + (Prims.of_int (29)) + (Prims.of_int (380)) + (Prims.of_int (46))) + (Prims.mk_range + "prims.fst" + (Prims.of_int (606)) + (Prims.of_int (19)) + (Prims.of_int (606)) + (Prims.of_int (31))) + (Obj.magic + (FStar_Tactics_Builtins.term_to_string + hd)) + (fun uu___2 -> + FStar_Tactics_Effect.lift_div_tac + (fun uu___3 -> + Prims.strcat + "- hd:\n" + uu___2)))) + (fun uu___2 -> + (fun uu___2 -> + Obj.magic + (FStar_InteractiveHelpers_Base.print_dbg + dbg uu___2)) + uu___2))) + (fun uu___2 -> + (fun uu___2 -> + Obj.magic + (FStar_Tactics_Effect.tac_bind + (Prims.mk_range + "FStar.InteractiveHelpers.PostProcess.fst" + (Prims.of_int (381)) + (Prims.of_int (2)) + (Prims.of_int (381)) + (Prims.of_int (92))) + (Prims.mk_range + "FStar.InteractiveHelpers.PostProcess.fst" + (Prims.of_int (382)) + (Prims.of_int (2)) + (Prims.of_int (397)) + (Prims.of_int (13))) + (Obj.magic + (FStar_Tactics_Effect.tac_bind + (Prims.mk_range + "FStar.InteractiveHelpers.PostProcess.fst" + (Prims.of_int (381)) + (Prims.of_int (16)) + (Prims.of_int (381)) + (Prims.of_int (92))) + (Prims.mk_range + "FStar.InteractiveHelpers.PostProcess.fst" + (Prims.of_int (381)) + (Prims.of_int (2)) + (Prims.of_int (381)) + (Prims.of_int (92))) + (Obj.magic + (FStar_Tactics_Effect.tac_bind + ( + Prims.mk_range + "FStar.InteractiveHelpers.PostProcess.fst" + (Prims.of_int (381)) + (Prims.of_int (37)) + (Prims.of_int (381)) + (Prims.of_int (91))) + ( + Prims.mk_range + "prims.fst" + (Prims.of_int (606)) + (Prims.of_int (19)) + (Prims.of_int (606)) + (Prims.of_int (31))) + ( + Obj.magic + (FStar_InteractiveHelpers_Base.list_to_string + (fun + uu___3 -> + match uu___3 + with + | + (x, y) -> + FStar_Tactics_Builtins.term_to_string + x) params)) + ( + fun + uu___3 -> + FStar_Tactics_Effect.lift_div_tac + (fun + uu___4 -> + Prims.strcat + "- parameters:\n" + uu___3)))) + (fun uu___3 -> + (fun uu___3 + -> + Obj.magic + (FStar_InteractiveHelpers_Base.print_dbg + dbg + uu___3)) + uu___3))) + (fun uu___3 -> + (fun uu___3 -> + Obj.magic + (FStar_Tactics_Effect.tac_bind + (Prims.mk_range + "FStar.InteractiveHelpers.PostProcess.fst" + (Prims.of_int (382)) + (Prims.of_int (8)) + (Prims.of_int (382)) + (Prims.of_int (18))) + (Prims.mk_range + "FStar.InteractiveHelpers.PostProcess.fst" + (Prims.of_int (382)) + (Prims.of_int (2)) + (Prims.of_int (397)) + (Prims.of_int (13))) + (Obj.magic + (FStar_Tactics_Builtins.inspect + hd)) + (fun + uu___4 -> + FStar_Tactics_Effect.lift_div_tac + (fun + uu___5 -> + match uu___4 + with + | + FStar_Reflection_Data.Tv_FVar + fv -> + (match params + with + | + (a, + FStar_Reflection_Data.Q_Implicit):: + (x, + FStar_Reflection_Data.Q_Explicit):: + (y, + FStar_Reflection_Data.Q_Explicit)::[] + -> + if + FStar_Reflection_Derived.is_any_fvar + a + ["Prims.op_Equality"; + "Prims.equals"; + "Prims.op_Equals"] + then + FStar_Pervasives_Native.Some + ((Eq_Dec + a), x, y) + else + if + FStar_Reflection_Derived.is_any_fvar + a + ["Prims.eq2"; + "Prims.op_Equals_Equals"] + then + FStar_Pervasives_Native.Some + ((Eq_Undec + a), x, y) + else + FStar_Pervasives_Native.None + | + (a, + FStar_Reflection_Data.Q_Implicit):: + (b, + FStar_Reflection_Data.Q_Implicit):: + (x, + FStar_Reflection_Data.Q_Explicit):: + (y, + FStar_Reflection_Data.Q_Explicit)::[] + -> + if + FStar_Reflection_Derived.is_fvar + a + "Prims.op_Equals_Equals_Equals" + then + FStar_Pervasives_Native.Some + ((Eq_Hetero + (a, b)), + x, y) + else + FStar_Pervasives_Native.None + | + uu___6 -> + FStar_Pervasives_Native.None) + | + uu___6 -> + FStar_Pervasives_Native.None)))) + uu___3))) uu___2))) + uu___1))) uu___))) uu___) +let (mk_eq : + eq_kind -> + FStar_Reflection_Types.term -> + FStar_Reflection_Types.term -> FStar_Reflection_Types.term) + = + fun k -> + fun t1 -> + fun t2 -> + match k with + | Eq_Dec ty -> + FStar_Reflection_Derived.mk_app + (FStar_Reflection_Builtins.pack_ln + (FStar_Reflection_Data.Tv_FVar + (FStar_Reflection_Builtins.pack_fv + ["Prims"; "op_Equality"]))) + [(ty, FStar_Reflection_Data.Q_Implicit); + (t1, FStar_Reflection_Data.Q_Explicit); + (t2, FStar_Reflection_Data.Q_Explicit)] + | Eq_Undec ty -> + FStar_Reflection_Derived.mk_app + (FStar_Reflection_Builtins.pack_ln + (FStar_Reflection_Data.Tv_FVar + (FStar_Reflection_Builtins.pack_fv ["Prims"; "eq2"]))) + [(ty, FStar_Reflection_Data.Q_Implicit); + (t1, FStar_Reflection_Data.Q_Explicit); + (t2, FStar_Reflection_Data.Q_Explicit)] + | Eq_Hetero (ty1, ty2) -> + FStar_Reflection_Derived.mk_app + (FStar_Reflection_Builtins.pack_ln + (FStar_Reflection_Data.Tv_FVar + (FStar_Reflection_Builtins.pack_fv + ["Prims"; "op_Equals_Equals_Equals"]))) + [(ty1, FStar_Reflection_Data.Q_Implicit); + (ty2, FStar_Reflection_Data.Q_Implicit); + (t1, FStar_Reflection_Data.Q_Explicit); + (t2, FStar_Reflection_Data.Q_Explicit)] +let (formula_construct : + FStar_Reflection_Formula.formula -> + (Prims.string, unit) FStar_Tactics_Effect.tac_repr) + = + fun uu___ -> + (fun f -> + Obj.magic + (FStar_Tactics_Effect.lift_div_tac + (fun uu___ -> + match f with + | FStar_Reflection_Formula.True_ -> "True_" + | FStar_Reflection_Formula.False_ -> "False_" + | FStar_Reflection_Formula.Comp (uu___1, uu___2, uu___3) -> + "Comp" + | FStar_Reflection_Formula.And (uu___1, uu___2) -> "And" + | FStar_Reflection_Formula.Or (uu___1, uu___2) -> "Or" + | FStar_Reflection_Formula.Not uu___1 -> "Not" + | FStar_Reflection_Formula.Implies (uu___1, uu___2) -> + "Implies" + | FStar_Reflection_Formula.Iff (uu___1, uu___2) -> "Iff" + | FStar_Reflection_Formula.Forall (uu___1, uu___2) -> "Forall" + | FStar_Reflection_Formula.Exists (uu___1, uu___2) -> "Exists" + | FStar_Reflection_Formula.App (uu___1, uu___2) -> "Apply" + | FStar_Reflection_Formula.Name uu___1 -> "Name" + | FStar_Reflection_Formula.FV uu___1 -> "FV" + | FStar_Reflection_Formula.IntLit uu___1 -> "IntLit" + | FStar_Reflection_Formula.F_Unknown -> "F_Unknown"))) uu___ +let (is_equality_for_term : + Prims.bool -> + FStar_Reflection_Types.term -> + FStar_Reflection_Types.term -> + (FStar_Reflection_Types.term FStar_Pervasives_Native.option, + unit) FStar_Tactics_Effect.tac_repr) + = + fun dbg -> + fun tm -> + fun p -> + FStar_Tactics_Effect.tac_bind + (Prims.mk_range "FStar.InteractiveHelpers.PostProcess.fst" + (Prims.of_int (433)) (Prims.of_int (2)) (Prims.of_int (435)) + (Prims.of_int (49))) + (Prims.mk_range "FStar.InteractiveHelpers.PostProcess.fst" + (Prims.of_int (438)) (Prims.of_int (2)) (Prims.of_int (459)) + (Prims.of_int (8))) + (Obj.magic + (FStar_Tactics_Effect.tac_bind + (Prims.mk_range "FStar.InteractiveHelpers.PostProcess.fst" + (Prims.of_int (433)) (Prims.of_int (16)) + (Prims.of_int (435)) (Prims.of_int (49))) + (Prims.mk_range "FStar.InteractiveHelpers.PostProcess.fst" + (Prims.of_int (433)) (Prims.of_int (2)) + (Prims.of_int (435)) (Prims.of_int (49))) + (Obj.magic + (FStar_Tactics_Effect.tac_bind + (Prims.mk_range + "FStar.InteractiveHelpers.PostProcess.fst" + (Prims.of_int (434)) (Prims.of_int (17)) + (Prims.of_int (435)) (Prims.of_int (48))) + (Prims.mk_range "prims.fst" (Prims.of_int (606)) + (Prims.of_int (19)) (Prims.of_int (606)) + (Prims.of_int (31))) + (Obj.magic + (FStar_Tactics_Effect.tac_bind + (Prims.mk_range + "FStar.InteractiveHelpers.PostProcess.fst" + (Prims.of_int (434)) (Prims.of_int (32)) + (Prims.of_int (435)) (Prims.of_int (48))) + (Prims.mk_range "prims.fst" (Prims.of_int (606)) + (Prims.of_int (19)) (Prims.of_int (606)) + (Prims.of_int (31))) + (Obj.magic + (FStar_Tactics_Effect.tac_bind + (Prims.mk_range + "FStar.InteractiveHelpers.PostProcess.fst" + (Prims.of_int (434)) (Prims.of_int (32)) + (Prims.of_int (434)) (Prims.of_int (49))) + (Prims.mk_range + "FStar.InteractiveHelpers.PostProcess.fst" + (Prims.of_int (434)) (Prims.of_int (32)) + (Prims.of_int (435)) (Prims.of_int (48))) + (Obj.magic + (FStar_Tactics_Builtins.term_to_string + tm)) + (fun uu___ -> + (fun uu___ -> + Obj.magic + (FStar_Tactics_Effect.tac_bind + (Prims.mk_range + "FStar.InteractiveHelpers.PostProcess.fst" + (Prims.of_int (435)) + (Prims.of_int (17)) + (Prims.of_int (435)) + (Prims.of_int (48))) + (Prims.mk_range "prims.fst" + (Prims.of_int (606)) + (Prims.of_int (19)) + (Prims.of_int (606)) + (Prims.of_int (31))) + (Obj.magic + (FStar_Tactics_Effect.tac_bind + (Prims.mk_range + "FStar.InteractiveHelpers.PostProcess.fst" + (Prims.of_int (435)) + (Prims.of_int (32)) + (Prims.of_int (435)) + (Prims.of_int (48))) + (Prims.mk_range + "prims.fst" + (Prims.of_int (606)) + (Prims.of_int (19)) + (Prims.of_int (606)) + (Prims.of_int (31))) + (Obj.magic + (FStar_Tactics_Builtins.term_to_string + p)) + (fun uu___1 -> + FStar_Tactics_Effect.lift_div_tac + (fun uu___2 -> + Prims.strcat + "\n- prop: " + uu___1)))) + (fun uu___1 -> + FStar_Tactics_Effect.lift_div_tac + (fun uu___2 -> + Prims.strcat uu___ + uu___1)))) uu___))) + (fun uu___ -> + FStar_Tactics_Effect.lift_div_tac + (fun uu___1 -> + Prims.strcat "\n- term: " uu___)))) + (fun uu___ -> + FStar_Tactics_Effect.lift_div_tac + (fun uu___1 -> + Prims.strcat "[> is_equality_for_term:" uu___)))) + (fun uu___ -> + (fun uu___ -> + Obj.magic + (FStar_InteractiveHelpers_Base.print_dbg dbg uu___)) + uu___))) + (fun uu___ -> + (fun uu___ -> + Obj.magic + (FStar_Tactics_Effect.tac_bind + (Prims.mk_range + "FStar.InteractiveHelpers.PostProcess.fst" + (Prims.of_int (439)) (Prims.of_int (4)) + (Prims.of_int (442)) (Prims.of_int (38))) + (Prims.mk_range + "FStar.InteractiveHelpers.PostProcess.fst" + (Prims.of_int (444)) (Prims.of_int (2)) + (Prims.of_int (459)) (Prims.of_int (8))) + (Obj.magic + (FStar_Tactics_Effect.tac_bind + (Prims.mk_range + "FStar.InteractiveHelpers.PostProcess.fst" + (Prims.of_int (439)) (Prims.of_int (10)) + (Prims.of_int (439)) (Prims.of_int (20))) + (Prims.mk_range + "FStar.InteractiveHelpers.PostProcess.fst" + (Prims.of_int (439)) (Prims.of_int (4)) + (Prims.of_int (442)) (Prims.of_int (38))) + (Obj.magic (FStar_Tactics_Builtins.inspect tm)) + (fun uu___1 -> + FStar_Tactics_Effect.lift_div_tac + (fun uu___2 -> + match uu___1 with + | FStar_Reflection_Data.Tv_Var bv -> + (fun tm' -> + FStar_Tactics_Effect.tac_bind + (Prims.mk_range + "FStar.InteractiveHelpers.PostProcess.fst" + (Prims.of_int (441)) + (Prims.of_int (24)) + (Prims.of_int (441)) + (Prims.of_int (35))) + (Prims.mk_range + "FStar.InteractiveHelpers.PostProcess.fst" + (Prims.of_int (441)) + (Prims.of_int (18)) + (Prims.of_int (441)) + (Prims.of_int (82))) + (Obj.magic + (FStar_Tactics_Builtins.inspect + tm')) + (fun uu___3 -> + FStar_Tactics_Effect.lift_div_tac + (fun uu___4 -> + match uu___3 with + | FStar_Reflection_Data.Tv_Var + bv' -> + FStar_InteractiveHelpers_Base.bv_eq + bv bv' + | uu___5 -> false))) + | uu___3 -> (fun tm' -> term_eq tm tm'))))) + (fun uu___1 -> + (fun check_eq -> + Obj.magic + (FStar_Tactics_Effect.tac_bind + (Prims.mk_range + "FStar.InteractiveHelpers.PostProcess.fst" + (Prims.of_int (444)) (Prims.of_int (8)) + (Prims.of_int (444)) (Prims.of_int (19))) + (Prims.mk_range + "FStar.InteractiveHelpers.PostProcess.fst" + (Prims.of_int (444)) (Prims.of_int (2)) + (Prims.of_int (459)) (Prims.of_int (8))) + (Obj.magic (is_eq dbg p)) + (fun uu___1 -> + (fun uu___1 -> + match uu___1 with + | FStar_Pervasives_Native.Some + (ekind, l, r) -> + Obj.magic + (FStar_Tactics_Effect.tac_bind + (Prims.mk_range + "FStar.InteractiveHelpers.PostProcess.fst" + (Prims.of_int (448)) + (Prims.of_int (4)) + (Prims.of_int (448)) + (Prims.of_int (80))) + (Prims.mk_range + "FStar.InteractiveHelpers.PostProcess.fst" + (Prims.of_int (449)) + (Prims.of_int (4)) + (Prims.of_int (456)) + (Prims.of_int (13))) + (Obj.magic + (FStar_Tactics_Effect.tac_bind + (Prims.mk_range + "FStar.InteractiveHelpers.PostProcess.fst" + (Prims.of_int (448)) + (Prims.of_int (18)) + (Prims.of_int (448)) + (Prims.of_int (80))) + (Prims.mk_range + "FStar.InteractiveHelpers.PostProcess.fst" + (Prims.of_int (448)) + (Prims.of_int (4)) + (Prims.of_int (448)) + (Prims.of_int (80))) + (Obj.magic + (FStar_Tactics_Effect.tac_bind + (Prims.mk_range + "FStar.InteractiveHelpers.PostProcess.fst" + (Prims.of_int (448)) + (Prims.of_int (36)) + (Prims.of_int (448)) + (Prims.of_int (79))) + (Prims.mk_range + "prims.fst" + (Prims.of_int (606)) + (Prims.of_int (19)) + (Prims.of_int (606)) + (Prims.of_int (31))) + (Obj.magic + (FStar_Tactics_Effect.tac_bind + (Prims.mk_range + "FStar.InteractiveHelpers.PostProcess.fst" + (Prims.of_int (448)) + (Prims.of_int (36)) + (Prims.of_int (448)) + (Prims.of_int (52))) + (Prims.mk_range + "FStar.InteractiveHelpers.PostProcess.fst" + (Prims.of_int (448)) + (Prims.of_int (36)) + (Prims.of_int (448)) + (Prims.of_int (79))) + (Obj.magic + ( + FStar_Tactics_Builtins.term_to_string + l)) + (fun uu___2 + -> + (fun + uu___2 -> + Obj.magic + (FStar_Tactics_Effect.tac_bind + (Prims.mk_range + "FStar.InteractiveHelpers.PostProcess.fst" + (Prims.of_int (448)) + (Prims.of_int (55)) + (Prims.of_int (448)) + (Prims.of_int (79))) + (Prims.mk_range + "prims.fst" + (Prims.of_int (606)) + (Prims.of_int (19)) + (Prims.of_int (606)) + (Prims.of_int (31))) + (Obj.magic + (FStar_Tactics_Effect.tac_bind + (Prims.mk_range + "FStar.InteractiveHelpers.PostProcess.fst" + (Prims.of_int (448)) + (Prims.of_int (63)) + (Prims.of_int (448)) + (Prims.of_int (79))) + (Prims.mk_range + "prims.fst" + (Prims.of_int (606)) + (Prims.of_int (19)) + (Prims.of_int (606)) + (Prims.of_int (31))) + (Obj.magic + (FStar_Tactics_Builtins.term_to_string + r)) + (fun + uu___3 -> + FStar_Tactics_Effect.lift_div_tac + (fun + uu___4 -> + Prims.strcat + " = " + uu___3)))) + (fun + uu___3 -> + FStar_Tactics_Effect.lift_div_tac + (fun + uu___4 -> + Prims.strcat + uu___2 + uu___3)))) + uu___2))) + (fun uu___2 -> + FStar_Tactics_Effect.lift_div_tac + (fun uu___3 + -> + Prims.strcat + "Term is eq: " + uu___2)))) + (fun uu___2 -> + (fun uu___2 -> + Obj.magic + (FStar_InteractiveHelpers_Base.print_dbg + dbg uu___2)) + uu___2))) + (fun uu___2 -> + (fun uu___2 -> + if + uu___is_Eq_Hetero + ekind + then + Obj.magic + (FStar_Tactics_Effect.tac_bind + (Prims.mk_range + "FStar.InteractiveHelpers.PostProcess.fst" + (Prims.of_int (451)) + (Prims.of_int (6)) + (Prims.of_int (451)) + (Prims.of_int (53))) + (Prims.mk_range + "FStar.InteractiveHelpers.PostProcess.fst" + (Prims.of_int (452)) + (Prims.of_int (6)) + (Prims.of_int (452)) + (Prims.of_int (10))) + (Obj.magic + (FStar_InteractiveHelpers_Base.print_dbg + dbg + "Ignoring heterogeneous equality")) + (fun uu___3 -> + FStar_Tactics_Effect.lift_div_tac + (fun uu___4 + -> + FStar_Pervasives_Native.None))) + else + Obj.magic + (FStar_Tactics_Effect.tac_bind + (Prims.mk_range + "FStar.InteractiveHelpers.PostProcess.fst" + (Prims.of_int (454)) + (Prims.of_int (12)) + (Prims.of_int (454)) + (Prims.of_int (22))) + (Prims.mk_range + "FStar.InteractiveHelpers.PostProcess.fst" + (Prims.of_int (454)) + (Prims.of_int (9)) + (Prims.of_int (456)) + (Prims.of_int (13))) + (Obj.magic + (check_eq l)) + (fun uu___4 -> + (fun uu___4 -> + if uu___4 + then + Obj.magic + (Obj.repr + (FStar_Tactics_Effect.lift_div_tac + (fun + uu___5 -> + FStar_Pervasives_Native.Some + r))) + else + Obj.magic + (Obj.repr + (FStar_Tactics_Effect.tac_bind + (Prims.mk_range + "FStar.InteractiveHelpers.PostProcess.fst" + (Prims.of_int (455)) + (Prims.of_int (12)) + (Prims.of_int (455)) + (Prims.of_int (22))) + (Prims.mk_range + "FStar.InteractiveHelpers.PostProcess.fst" + (Prims.of_int (455)) + (Prims.of_int (9)) + (Prims.of_int (456)) + (Prims.of_int (13))) + (Obj.magic + (check_eq + r)) + (fun + uu___6 -> + FStar_Tactics_Effect.lift_div_tac + (fun + uu___7 -> + if uu___6 + then + FStar_Pervasives_Native.Some + l + else + FStar_Pervasives_Native.None))))) + uu___4))) + uu___2)) + | uu___2 -> + Obj.magic + (FStar_Tactics_Effect.tac_bind + (Prims.mk_range + "FStar.InteractiveHelpers.PostProcess.fst" + (Prims.of_int (458)) + (Prims.of_int (4)) + (Prims.of_int (458)) + (Prims.of_int (34))) + (Prims.mk_range + "FStar.InteractiveHelpers.PostProcess.fst" + (Prims.of_int (459)) + (Prims.of_int (4)) + (Prims.of_int (459)) + (Prims.of_int (8))) + (Obj.magic + (FStar_InteractiveHelpers_Base.print_dbg + dbg "Term is not eq")) + (fun uu___3 -> + FStar_Tactics_Effect.lift_div_tac + (fun uu___4 -> + FStar_Pervasives_Native.None)))) + uu___1))) uu___1))) uu___) +let (find_subequality : + Prims.bool -> + FStar_Reflection_Types.term -> + FStar_Reflection_Types.term -> + (FStar_Reflection_Types.term FStar_Pervasives_Native.option, + unit) FStar_Tactics_Effect.tac_repr) + = + fun dbg -> + fun tm -> + fun p -> + FStar_Tactics_Effect.tac_bind + (Prims.mk_range "FStar.InteractiveHelpers.PostProcess.fst" + (Prims.of_int (463)) (Prims.of_int (2)) (Prims.of_int (465)) + (Prims.of_int (50))) + (Prims.mk_range "FStar.InteractiveHelpers.PostProcess.fst" + (Prims.of_int (466)) (Prims.of_int (2)) (Prims.of_int (468)) + (Prims.of_int (49))) + (Obj.magic + (FStar_Tactics_Effect.tac_bind + (Prims.mk_range "FStar.InteractiveHelpers.PostProcess.fst" + (Prims.of_int (463)) (Prims.of_int (16)) + (Prims.of_int (465)) (Prims.of_int (50))) + (Prims.mk_range "FStar.InteractiveHelpers.PostProcess.fst" + (Prims.of_int (463)) (Prims.of_int (2)) + (Prims.of_int (465)) (Prims.of_int (50))) + (Obj.magic + (FStar_Tactics_Effect.tac_bind + (Prims.mk_range + "FStar.InteractiveHelpers.PostProcess.fst" + (Prims.of_int (464)) (Prims.of_int (17)) + (Prims.of_int (465)) (Prims.of_int (49))) + (Prims.mk_range "prims.fst" (Prims.of_int (606)) + (Prims.of_int (19)) (Prims.of_int (606)) + (Prims.of_int (31))) + (Obj.magic + (FStar_Tactics_Effect.tac_bind + (Prims.mk_range + "FStar.InteractiveHelpers.PostProcess.fst" + (Prims.of_int (464)) (Prims.of_int (33)) + (Prims.of_int (465)) (Prims.of_int (49))) + (Prims.mk_range "prims.fst" (Prims.of_int (606)) + (Prims.of_int (19)) (Prims.of_int (606)) + (Prims.of_int (31))) + (Obj.magic + (FStar_Tactics_Effect.tac_bind + (Prims.mk_range + "FStar.InteractiveHelpers.PostProcess.fst" + (Prims.of_int (464)) (Prims.of_int (33)) + (Prims.of_int (464)) (Prims.of_int (50))) + (Prims.mk_range + "FStar.InteractiveHelpers.PostProcess.fst" + (Prims.of_int (464)) (Prims.of_int (33)) + (Prims.of_int (465)) (Prims.of_int (49))) + (Obj.magic + (FStar_Tactics_Builtins.term_to_string + tm)) + (fun uu___ -> + (fun uu___ -> + Obj.magic + (FStar_Tactics_Effect.tac_bind + (Prims.mk_range + "FStar.InteractiveHelpers.PostProcess.fst" + (Prims.of_int (465)) + (Prims.of_int (17)) + (Prims.of_int (465)) + (Prims.of_int (49))) + (Prims.mk_range "prims.fst" + (Prims.of_int (606)) + (Prims.of_int (19)) + (Prims.of_int (606)) + (Prims.of_int (31))) + (Obj.magic + (FStar_Tactics_Effect.tac_bind + (Prims.mk_range + "FStar.InteractiveHelpers.PostProcess.fst" + (Prims.of_int (465)) + (Prims.of_int (33)) + (Prims.of_int (465)) + (Prims.of_int (49))) + (Prims.mk_range + "prims.fst" + (Prims.of_int (606)) + (Prims.of_int (19)) + (Prims.of_int (606)) + (Prims.of_int (31))) + (Obj.magic + (FStar_Tactics_Builtins.term_to_string + p)) + (fun uu___1 -> + FStar_Tactics_Effect.lift_div_tac + (fun uu___2 -> + Prims.strcat + "\n- props: " + uu___1)))) + (fun uu___1 -> + FStar_Tactics_Effect.lift_div_tac + (fun uu___2 -> + Prims.strcat uu___ + uu___1)))) uu___))) + (fun uu___ -> + FStar_Tactics_Effect.lift_div_tac + (fun uu___1 -> + Prims.strcat "\n- ter : " uu___)))) + (fun uu___ -> + FStar_Tactics_Effect.lift_div_tac + (fun uu___1 -> + Prims.strcat "[> find_subequality:" uu___)))) + (fun uu___ -> + (fun uu___ -> + Obj.magic + (FStar_InteractiveHelpers_Base.print_dbg dbg uu___)) + uu___))) + (fun uu___ -> + (fun uu___ -> + Obj.magic + (FStar_Tactics_Effect.tac_bind + (Prims.mk_range + "FStar.InteractiveHelpers.PostProcess.fst" + (Prims.of_int (466)) (Prims.of_int (18)) + (Prims.of_int (466)) (Prims.of_int (38))) + (Prims.mk_range + "FStar.InteractiveHelpers.PostProcess.fst" + (Prims.of_int (467)) (Prims.of_int (2)) + (Prims.of_int (468)) (Prims.of_int (49))) + (Obj.magic (split_conjunctions p)) + (fun uu___1 -> + (fun conjuncts -> + Obj.magic + (FStar_Tactics_Effect.tac_bind + (Prims.mk_range + "FStar.InteractiveHelpers.PostProcess.fst" + (Prims.of_int (467)) (Prims.of_int (2)) + (Prims.of_int (467)) (Prims.of_int (74))) + (Prims.mk_range + "FStar.InteractiveHelpers.PostProcess.fst" + (Prims.of_int (468)) (Prims.of_int (2)) + (Prims.of_int (468)) (Prims.of_int (49))) + (Obj.magic + (FStar_Tactics_Effect.tac_bind + (Prims.mk_range + "FStar.InteractiveHelpers.PostProcess.fst" + (Prims.of_int (467)) + (Prims.of_int (16)) + (Prims.of_int (467)) + (Prims.of_int (74))) + (Prims.mk_range + "FStar.InteractiveHelpers.PostProcess.fst" + (Prims.of_int (467)) + (Prims.of_int (2)) + (Prims.of_int (467)) + (Prims.of_int (74))) + (Obj.magic + (FStar_Tactics_Effect.tac_bind + (Prims.mk_range + "FStar.InteractiveHelpers.PostProcess.fst" + (Prims.of_int (467)) + (Prims.of_int (34)) + (Prims.of_int (467)) + (Prims.of_int (73))) + (Prims.mk_range "prims.fst" + (Prims.of_int (606)) + (Prims.of_int (19)) + (Prims.of_int (606)) + (Prims.of_int (31))) + (Obj.magic + (FStar_InteractiveHelpers_Base.list_to_string + FStar_Tactics_Builtins.term_to_string + conjuncts)) + (fun uu___1 -> + FStar_Tactics_Effect.lift_div_tac + (fun uu___2 -> + Prims.strcat + "Conjuncts:\n" uu___1)))) + (fun uu___1 -> + (fun uu___1 -> + Obj.magic + (FStar_InteractiveHelpers_Base.print_dbg + dbg uu___1)) uu___1))) + (fun uu___1 -> + (fun uu___1 -> + Obj.magic + (FStar_Tactics_Util.tryPick + (is_equality_for_term dbg tm) + conjuncts)) uu___1))) uu___1))) + uu___) +let (find_equality_from_post : + Prims.bool -> + FStar_InteractiveHelpers_Base.genv -> + FStar_Reflection_Types.term -> + FStar_Reflection_Types.bv -> + FStar_Reflection_Types.term -> + FStar_Reflection_Types.typ -> + FStar_InteractiveHelpers_Effectful.effect_info -> + FStar_Reflection_Data.term_view Prims.list -> + FStar_Reflection_Data.term_view Prims.list -> + ((FStar_InteractiveHelpers_Base.genv * + FStar_Reflection_Types.term + FStar_Pervasives_Native.option), + unit) FStar_Tactics_Effect.tac_repr) + = + fun dbg -> + fun ge0 -> + fun tm -> + fun let_bv -> + fun ret_value -> + fun ret_type -> + fun einfo -> + fun parents -> + fun children -> + FStar_Tactics_Effect.tac_bind + (Prims.mk_range + "FStar.InteractiveHelpers.PostProcess.fst" + (Prims.of_int (475)) (Prims.of_int (2)) + (Prims.of_int (475)) (Prims.of_int (44))) + (Prims.mk_range + "FStar.InteractiveHelpers.PostProcess.fst" + (Prims.of_int (476)) (Prims.of_int (2)) + (Prims.of_int (493)) (Prims.of_int (27))) + (Obj.magic + (FStar_InteractiveHelpers_Base.print_dbg dbg + "[> find_equality_from_post")) + (fun uu___ -> + (fun uu___ -> + Obj.magic + (FStar_Tactics_Effect.tac_bind + (Prims.mk_range + "FStar.InteractiveHelpers.PostProcess.fst" + (Prims.of_int (476)) (Prims.of_int (14)) + (Prims.of_int (476)) (Prims.of_int (46))) + (Prims.mk_range + "FStar.InteractiveHelpers.PostProcess.fst" + (Prims.of_int (478)) (Prims.of_int (2)) + (Prims.of_int (493)) (Prims.of_int (27))) + (Obj.magic + (FStar_InteractiveHelpers_ExploreTerm.get_type_info_from_type + ret_type)) + (fun uu___1 -> + (fun tinfo -> + Obj.magic + (FStar_Tactics_Effect.tac_bind + (Prims.mk_range + "FStar.InteractiveHelpers.PostProcess.fst" + (Prims.of_int (479)) + (Prims.of_int (4)) + (Prims.of_int (480)) + (Prims.of_int (78))) + (Prims.mk_range + "FStar.InteractiveHelpers.PostProcess.fst" + (Prims.of_int (478)) + (Prims.of_int (2)) + (Prims.of_int (493)) + (Prims.of_int (27))) + (Obj.magic + (FStar_InteractiveHelpers_Effectful.pre_post_to_propositions + dbg ge0 + einfo.FStar_InteractiveHelpers_Effectful.ei_type + ret_value + (FStar_Pervasives_Native.Some + (FStar_Reflection_Derived.mk_binder + let_bv)) tinfo + einfo.FStar_InteractiveHelpers_Effectful.ei_pre + einfo.FStar_InteractiveHelpers_Effectful.ei_post + parents children)) + (fun uu___1 -> + (fun uu___1 -> + match uu___1 with + | (ge1, uu___2, post_prop) + -> + Obj.magic + (FStar_Tactics_Effect.tac_bind + (Prims.mk_range + "FStar.InteractiveHelpers.PostProcess.fst" + (Prims.of_int (482)) + (Prims.of_int (2)) + (Prims.of_int (482)) + (Prims.of_int (79))) + (Prims.mk_range + "FStar.InteractiveHelpers.PostProcess.fst" + (Prims.of_int (484)) + (Prims.of_int (2)) + (Prims.of_int (493)) + (Prims.of_int (27))) + (Obj.magic + (FStar_Tactics_Effect.tac_bind + (Prims.mk_range + "FStar.InteractiveHelpers.PostProcess.fst" + (Prims.of_int (482)) + (Prims.of_int (16)) + (Prims.of_int (482)) + (Prims.of_int (79))) + (Prims.mk_range + "FStar.InteractiveHelpers.PostProcess.fst" + (Prims.of_int (482)) + (Prims.of_int (2)) + (Prims.of_int (482)) + (Prims.of_int (79))) + (Obj.magic + ( + FStar_Tactics_Effect.tac_bind + (Prims.mk_range + "FStar.InteractiveHelpers.PostProcess.fst" + (Prims.of_int (482)) + (Prims.of_int (37)) + (Prims.of_int (482)) + (Prims.of_int (78))) + (Prims.mk_range + "prims.fst" + (Prims.of_int (606)) + (Prims.of_int (19)) + (Prims.of_int (606)) + (Prims.of_int (31))) + (Obj.magic + (FStar_InteractiveHelpers_Base.option_to_string + FStar_Tactics_Builtins.term_to_string + post_prop)) + (fun + uu___3 -> + FStar_Tactics_Effect.lift_div_tac + (fun + uu___4 -> + Prims.strcat + "Computed post: " + uu___3)))) + (fun uu___3 + -> + (fun + uu___3 -> + Obj.magic + (FStar_InteractiveHelpers_Base.print_dbg + dbg + uu___3)) + uu___3))) + (fun uu___3 -> + (fun uu___3 -> + Obj.magic + (FStar_Tactics_Effect.tac_bind + (Prims.mk_range + "FStar.InteractiveHelpers.PostProcess.fst" + (Prims.of_int (485)) + (Prims.of_int (4)) + (Prims.of_int (487)) + (Prims.of_int (41))) + (Prims.mk_range + "FStar.InteractiveHelpers.PostProcess.fst" + (Prims.of_int (491)) + (Prims.of_int (2)) + (Prims.of_int (493)) + (Prims.of_int (27))) + (match post_prop + with + | + FStar_Pervasives_Native.None + -> + Obj.magic + (Obj.repr + (FStar_Tactics_Effect.lift_div_tac + (fun + uu___4 -> + FStar_Pervasives_Native.None))) + | + FStar_Pervasives_Native.Some + p -> + Obj.magic + (Obj.repr + (find_subequality + dbg tm p))) + (fun res + -> + FStar_Tactics_Effect.lift_div_tac + (fun + uu___4 -> + match res + with + | + FStar_Pervasives_Native.None + -> + (ge0, + FStar_Pervasives_Native.None) + | + FStar_Pervasives_Native.Some + tm1 -> + (ge1, + (FStar_Pervasives_Native.Some + tm1)))))) + uu___3))) + uu___1))) uu___1))) uu___) +let rec (find_context_equality_aux : + Prims.bool -> + FStar_InteractiveHelpers_Base.genv -> + FStar_Reflection_Types.term -> + FStar_Reflection_Types.bv FStar_Pervasives_Native.option -> + FStar_Reflection_Data.term_view Prims.list -> + FStar_Reflection_Data.term_view Prims.list -> + ((FStar_InteractiveHelpers_Base.genv * + FStar_Reflection_Types.term FStar_Pervasives_Native.option), + unit) FStar_Tactics_Effect.tac_repr) + = + fun uu___5 -> + fun uu___4 -> + fun uu___3 -> + fun uu___2 -> + fun uu___1 -> + fun uu___ -> + (fun dbg -> + fun ge0 -> + fun tm -> + fun opt_bv -> + fun parents -> + fun children -> + match parents with + | [] -> + Obj.magic + (Obj.repr + (FStar_Tactics_Effect.lift_div_tac + (fun uu___ -> + (ge0, FStar_Pervasives_Native.None)))) + | tv::parents' -> + Obj.magic + (Obj.repr + (FStar_Tactics_Effect.tac_bind + (Prims.mk_range + "FStar.InteractiveHelpers.PostProcess.fst" + (Prims.of_int (512)) + (Prims.of_int (4)) + (Prims.of_int (514)) + (Prims.of_int (52))) + (Prims.mk_range + "FStar.InteractiveHelpers.PostProcess.fst" + (Prims.of_int (516)) + (Prims.of_int (4)) + (Prims.of_int (540)) + (Prims.of_int (79))) + (Obj.magic + (FStar_Tactics_Effect.tac_bind + (Prims.mk_range + "FStar.InteractiveHelpers.PostProcess.fst" + (Prims.of_int (512)) + (Prims.of_int (18)) + (Prims.of_int (514)) + (Prims.of_int (52))) + (Prims.mk_range + "FStar.InteractiveHelpers.PostProcess.fst" + (Prims.of_int (512)) + (Prims.of_int (4)) + (Prims.of_int (514)) + (Prims.of_int (52))) + (Obj.magic + (FStar_Tactics_Effect.tac_bind + (Prims.mk_range + "FStar.InteractiveHelpers.PostProcess.fst" + (Prims.of_int (513)) + (Prims.of_int (19)) + (Prims.of_int (514)) + (Prims.of_int (51))) + (Prims.mk_range + "prims.fst" + (Prims.of_int (606)) + (Prims.of_int (19)) + (Prims.of_int (606)) + (Prims.of_int (31))) + (Obj.magic + (FStar_Tactics_Effect.tac_bind + (Prims.mk_range + "FStar.InteractiveHelpers.PostProcess.fst" + (Prims.of_int (513)) + (Prims.of_int (34)) + (Prims.of_int (514)) + (Prims.of_int (51))) + (Prims.mk_range + "prims.fst" + (Prims.of_int (606)) + (Prims.of_int (19)) + (Prims.of_int (606)) + (Prims.of_int (31))) + (Obj.magic + (FStar_Tactics_Effect.tac_bind + (Prims.mk_range + "FStar.InteractiveHelpers.PostProcess.fst" + (Prims.of_int (513)) + (Prims.of_int (34)) + (Prims.of_int (513)) + (Prims.of_int (51))) + (Prims.mk_range + "FStar.InteractiveHelpers.PostProcess.fst" + (Prims.of_int (513)) + (Prims.of_int (34)) + (Prims.of_int (514)) + (Prims.of_int (51))) + (Obj.magic + (FStar_Tactics_Builtins.term_to_string + tm)) + (fun uu___ -> + (fun uu___ + -> + Obj.magic + (FStar_Tactics_Effect.tac_bind + (Prims.mk_range + "FStar.InteractiveHelpers.PostProcess.fst" + (Prims.of_int (513)) + (Prims.of_int (54)) + (Prims.of_int (514)) + (Prims.of_int (51))) + (Prims.mk_range + "prims.fst" + (Prims.of_int (606)) + (Prims.of_int (19)) + (Prims.of_int (606)) + (Prims.of_int (31))) + (Obj.magic + (FStar_Tactics_Effect.tac_bind + (Prims.mk_range + "FStar.InteractiveHelpers.PostProcess.fst" + (Prims.of_int (514)) + (Prims.of_int (19)) + (Prims.of_int (514)) + (Prims.of_int (51))) + (Prims.mk_range + "prims.fst" + (Prims.of_int (606)) + (Prims.of_int (19)) + (Prims.of_int (606)) + (Prims.of_int (31))) + (Obj.magic + (FStar_Tactics_Effect.tac_bind + (Prims.mk_range + "FStar.InteractiveHelpers.PostProcess.fst" + (Prims.of_int (514)) + (Prims.of_int (34)) + (Prims.of_int (514)) + (Prims.of_int (51))) + (Prims.mk_range + "prims.fst" + (Prims.of_int (606)) + (Prims.of_int (19)) + (Prims.of_int (606)) + (Prims.of_int (31))) + (Obj.magic + (FStar_Tactics_Effect.tac_bind + (Prims.mk_range + "FStar.InteractiveHelpers.PostProcess.fst" + (Prims.of_int (511)) + (Prims.of_int (4)) + (Prims.of_int (511)) + (Prims.of_int (6))) + (Prims.mk_range + "FStar.InteractiveHelpers.PostProcess.fst" + (Prims.of_int (514)) + (Prims.of_int (34)) + (Prims.of_int (514)) + (Prims.of_int (51))) + (Obj.magic + (FStar_Tactics_Builtins.pack + tv)) + (fun + uu___1 -> + (fun + uu___1 -> + Obj.magic + (FStar_Tactics_Builtins.term_to_string + uu___1)) + uu___1))) + (fun + uu___1 -> + FStar_Tactics_Effect.lift_div_tac + (fun + uu___2 -> + Prims.strcat + "- parent: " + uu___1)))) + (fun + uu___1 -> + FStar_Tactics_Effect.lift_div_tac + (fun + uu___2 -> + Prims.strcat + "\n" + uu___1)))) + (fun + uu___1 -> + FStar_Tactics_Effect.lift_div_tac + (fun + uu___2 -> + Prims.strcat + uu___ + uu___1)))) + uu___))) + (fun uu___ -> + FStar_Tactics_Effect.lift_div_tac + (fun uu___1 -> + Prims.strcat + "- term : " + uu___)))) + (fun uu___ -> + FStar_Tactics_Effect.lift_div_tac + (fun uu___1 -> + Prims.strcat + "[> find_context_equality:\n" + uu___)))) + (fun uu___ -> + (fun uu___ -> + Obj.magic + (FStar_InteractiveHelpers_Base.print_dbg + dbg uu___)) uu___))) + (fun uu___ -> + (fun uu___ -> + match tv with + | FStar_Reflection_Data.Tv_Let + (uu___1, uu___2, bv', def, + uu___3) + -> + Obj.magic + (FStar_Tactics_Effect.tac_bind + (Prims.mk_range + "FStar.InteractiveHelpers.PostProcess.fst" + (Prims.of_int (518)) + (Prims.of_int (6)) + (Prims.of_int (518)) + (Prims.of_int (31))) + (Prims.mk_range + "FStar.InteractiveHelpers.PostProcess.fst" + (Prims.of_int (519)) + (Prims.of_int (6)) + (Prims.of_int (539)) + (Prims.of_int (11))) + (Obj.magic + (FStar_InteractiveHelpers_Base.print_dbg + dbg "Is Tv_Let")) + (fun uu___4 -> + (fun uu___4 -> + Obj.magic + (FStar_Tactics_Effect.tac_bind + (Prims.mk_range + "FStar.InteractiveHelpers.PostProcess.fst" + (Prims.of_int (519)) + (Prims.of_int (20)) + (Prims.of_int (519)) + (Prims.of_int (54))) + (Prims.mk_range + "FStar.InteractiveHelpers.PostProcess.fst" + (Prims.of_int (520)) + (Prims.of_int (6)) + (Prims.of_int (539)) + (Prims.of_int (11))) + (Obj.magic + ( + FStar_InteractiveHelpers_Effectful.compute_eterm_info + dbg + ge0.FStar_InteractiveHelpers_Base.env + def)) + (fun uu___5 + -> + (fun + tm_info + -> + Obj.magic + (FStar_Tactics_Effect.tac_bind + (Prims.mk_range + "FStar.InteractiveHelpers.PostProcess.fst" + (Prims.of_int (520)) + (Prims.of_int (18)) + (Prims.of_int (520)) + (Prims.of_int (31))) + (Prims.mk_range + "FStar.InteractiveHelpers.PostProcess.fst" + (Prims.of_int (526)) + (Prims.of_int (6)) + (Prims.of_int (539)) + (Prims.of_int (11))) + (FStar_Tactics_Effect.lift_div_tac + (fun + uu___5 -> + tm_info.FStar_InteractiveHelpers_Effectful.einfo)) + (fun + uu___5 -> + (fun + einfo -> + Obj.magic + (FStar_Tactics_Effect.tac_bind + (Prims.mk_range + "FStar.InteractiveHelpers.PostProcess.fst" + (Prims.of_int (527)) + (Prims.of_int (8)) + (Prims.of_int (529)) + (Prims.of_int (23))) + (Prims.mk_range + "FStar.InteractiveHelpers.PostProcess.fst" + (Prims.of_int (531)) + (Prims.of_int (6)) + (Prims.of_int (539)) + (Prims.of_int (11))) + (FStar_Tactics_Effect.lift_div_tac + (fun + uu___5 -> + match opt_bv + with + | + FStar_Pervasives_Native.Some + tm_bv -> + FStar_InteractiveHelpers_Base.bv_eq + tm_bv bv' + | + FStar_Pervasives_Native.None + -> false)) + (fun + uu___5 -> + (fun + let_bv_is_tm + -> + if + let_bv_is_tm + && + (FStar_InteractiveHelpers_ExploreTerm.effect_type_is_pure + einfo.FStar_InteractiveHelpers_Effectful.ei_type) + then + Obj.magic + (Obj.repr + (FStar_Tactics_Effect.lift_div_tac + (fun + uu___5 -> + (ge0, + (FStar_Pervasives_Native.Some + def))))) + else + Obj.magic + (Obj.repr + (FStar_Tactics_Effect.tac_bind + (Prims.mk_range + "FStar.InteractiveHelpers.PostProcess.fst" + (Prims.of_int (533)) + (Prims.of_int (24)) + (Prims.of_int (533)) + (Prims.of_int (41))) + (Prims.mk_range + "FStar.InteractiveHelpers.PostProcess.fst" + (Prims.of_int (534)) + (Prims.of_int (8)) + (Prims.of_int (539)) + (Prims.of_int (11))) + (Obj.magic + (FStar_Tactics_Builtins.pack + (FStar_Reflection_Data.Tv_Var + bv'))) + (fun + uu___6 -> + (fun + ret_value + -> + Obj.magic + (FStar_Tactics_Effect.tac_bind + (Prims.mk_range + "FStar.InteractiveHelpers.PostProcess.fst" + (Prims.of_int (534)) + (Prims.of_int (22)) + (Prims.of_int (534)) + (Prims.of_int (36))) + (Prims.mk_range + "FStar.InteractiveHelpers.PostProcess.fst" + (Prims.of_int (535)) + (Prims.of_int (14)) + (Prims.of_int (538)) + (Prims.of_int (90))) + (FStar_Tactics_Effect.lift_div_tac + (fun + uu___6 -> + FStar_Reflection_Derived.type_of_bv + bv')) + (fun + uu___6 -> + (fun + ret_typ + -> + Obj.magic + (FStar_Tactics_Effect.tac_bind + (Prims.mk_range + "FStar.InteractiveHelpers.PostProcess.fst" + (Prims.of_int (535)) + (Prims.of_int (20)) + (Prims.of_int (536)) + (Prims.of_int (66))) + (Prims.mk_range + "FStar.InteractiveHelpers.PostProcess.fst" + (Prims.of_int (535)) + (Prims.of_int (14)) + (Prims.of_int (538)) + (Prims.of_int (90))) + (Obj.magic + (find_equality_from_post + dbg ge0 + tm bv' + ret_value + ret_typ + einfo + parents + children)) + (fun + uu___6 -> + (fun + uu___6 -> + match uu___6 + with + | + (ge1, + FStar_Pervasives_Native.Some + p) -> + Obj.magic + (Obj.repr + (FStar_Tactics_Effect.lift_div_tac + (fun + uu___7 -> + (ge1, + (FStar_Pervasives_Native.Some + p))))) + | + (uu___7, + FStar_Pervasives_Native.None) + -> + Obj.magic + (Obj.repr + (find_context_equality_aux + dbg ge0 + tm opt_bv + parents' + (tv :: + children)))) + uu___6))) + uu___6))) + uu___6)))) + uu___5))) + uu___5))) + uu___5))) + uu___4)) + | uu___1 -> + Obj.magic + (find_context_equality_aux + dbg ge0 tm opt_bv + parents' (tv :: + children))) uu___)))) + uu___5 uu___4 uu___3 uu___2 uu___1 uu___ +let (find_context_equality : + Prims.bool -> + FStar_InteractiveHelpers_Base.genv -> + FStar_Reflection_Types.term -> + FStar_Reflection_Data.term_view Prims.list -> + FStar_Reflection_Data.term_view Prims.list -> + ((FStar_InteractiveHelpers_Base.genv * + FStar_Reflection_Types.term FStar_Pervasives_Native.option), + unit) FStar_Tactics_Effect.tac_repr) + = + fun dbg -> + fun ge0 -> + fun tm -> + fun parents -> + fun children -> + FStar_Tactics_Effect.tac_bind + (Prims.mk_range "FStar.InteractiveHelpers.PostProcess.fst" + (Prims.of_int (544)) (Prims.of_int (4)) (Prims.of_int (546)) + (Prims.of_int (15))) + (Prims.mk_range "FStar.InteractiveHelpers.PostProcess.fst" + (Prims.of_int (548)) (Prims.of_int (2)) (Prims.of_int (548)) + (Prims.of_int (62))) + (Obj.magic + (FStar_Tactics_Effect.tac_bind + (Prims.mk_range + "FStar.InteractiveHelpers.PostProcess.fst" + (Prims.of_int (544)) (Prims.of_int (10)) + (Prims.of_int (544)) (Prims.of_int (20))) + (Prims.mk_range + "FStar.InteractiveHelpers.PostProcess.fst" + (Prims.of_int (544)) (Prims.of_int (4)) + (Prims.of_int (546)) (Prims.of_int (15))) + (Obj.magic (FStar_Tactics_Builtins.inspect tm)) + (fun uu___ -> + FStar_Tactics_Effect.lift_div_tac + (fun uu___1 -> + match uu___ with + | FStar_Reflection_Data.Tv_Var bv -> + FStar_Pervasives_Native.Some bv + | uu___2 -> FStar_Pervasives_Native.None)))) + (fun uu___ -> + (fun opt_bv -> + Obj.magic + (find_context_equality_aux dbg ge0 tm opt_bv parents + children)) uu___) +let rec (replace_term_in : + Prims.bool -> + FStar_Reflection_Types.term -> + FStar_Reflection_Types.term -> + FStar_Reflection_Types.term -> + (FStar_Reflection_Types.term, unit) FStar_Tactics_Effect.tac_repr) + = + fun dbg -> + fun from_term -> + fun to_term -> + fun tm -> + FStar_Tactics_Effect.tac_bind + (Prims.mk_range "FStar.InteractiveHelpers.PostProcess.fst" + (Prims.of_int (553)) (Prims.of_int (5)) (Prims.of_int (553)) + (Prims.of_int (25))) + (Prims.mk_range "FStar.InteractiveHelpers.PostProcess.fst" + (Prims.of_int (553)) (Prims.of_int (2)) (Prims.of_int (594)) + (Prims.of_int (6))) (Obj.magic (term_eq from_term tm)) + (fun uu___ -> + (fun uu___ -> + if uu___ + then + Obj.magic + (Obj.repr + (FStar_Tactics_Effect.lift_div_tac + (fun uu___1 -> to_term))) + else + Obj.magic + (Obj.repr + (FStar_Tactics_Effect.tac_bind + (Prims.mk_range + "FStar.InteractiveHelpers.PostProcess.fst" + (Prims.of_int (554)) (Prims.of_int (8)) + (Prims.of_int (554)) (Prims.of_int (18))) + (Prims.mk_range + "FStar.InteractiveHelpers.PostProcess.fst" + (Prims.of_int (554)) (Prims.of_int (2)) + (Prims.of_int (594)) (Prims.of_int (6))) + (Obj.magic (FStar_Tactics_Builtins.inspect tm)) + (fun uu___2 -> + (fun uu___2 -> + match uu___2 with + | FStar_Reflection_Data.Tv_Var uu___3 -> + Obj.magic + (Obj.repr + (FStar_Tactics_Effect.lift_div_tac + (fun uu___4 -> tm))) + | FStar_Reflection_Data.Tv_BVar uu___3 -> + Obj.magic + (Obj.repr + (FStar_Tactics_Effect.lift_div_tac + (fun uu___4 -> tm))) + | FStar_Reflection_Data.Tv_FVar uu___3 -> + Obj.magic + (Obj.repr + (FStar_Tactics_Effect.lift_div_tac + (fun uu___4 -> tm))) + | FStar_Reflection_Data.Tv_App + (hd, (a, qual)) -> + Obj.magic + (Obj.repr + (FStar_Tactics_Effect.tac_bind + (Prims.mk_range + "FStar.InteractiveHelpers.PostProcess.fst" + (Prims.of_int (557)) + (Prims.of_int (13)) + (Prims.of_int (557)) + (Prims.of_int (52))) + (Prims.mk_range + "FStar.InteractiveHelpers.PostProcess.fst" + (Prims.of_int (558)) + (Prims.of_int (4)) + (Prims.of_int (559)) + (Prims.of_int (32))) + (Obj.magic + (replace_term_in dbg + from_term to_term a)) + (fun uu___3 -> + (fun a' -> + Obj.magic + (FStar_Tactics_Effect.tac_bind + (Prims.mk_range + "FStar.InteractiveHelpers.PostProcess.fst" + (Prims.of_int (558)) + (Prims.of_int (14)) + (Prims.of_int (558)) + (Prims.of_int (54))) + (Prims.mk_range + "FStar.InteractiveHelpers.PostProcess.fst" + (Prims.of_int (559)) + (Prims.of_int (4)) + (Prims.of_int (559)) + (Prims.of_int (32))) + (Obj.magic + (replace_term_in + dbg from_term + to_term hd)) + (fun uu___3 -> + (fun hd' -> + Obj.magic + (FStar_Tactics_Builtins.pack + ( + FStar_Reflection_Data.Tv_App + (hd', + (a', + qual))))) + uu___3))) + uu___3))) + | FStar_Reflection_Data.Tv_Abs (br, body) + -> + Obj.magic + (Obj.repr + (FStar_Tactics_Effect.tac_bind + (Prims.mk_range + "FStar.InteractiveHelpers.PostProcess.fst" + (Prims.of_int (561)) + (Prims.of_int (16)) + (Prims.of_int (561)) + (Prims.of_int (58))) + (Prims.mk_range + "FStar.InteractiveHelpers.PostProcess.fst" + (Prims.of_int (562)) + (Prims.of_int (4)) + (Prims.of_int (562)) + (Prims.of_int (26))) + (Obj.magic + (replace_term_in dbg + from_term to_term body)) + (fun uu___3 -> + (fun body' -> + Obj.magic + (FStar_Tactics_Builtins.pack + (FStar_Reflection_Data.Tv_Abs + (br, body')))) + uu___3))) + | FStar_Reflection_Data.Tv_Arrow (br, c0) + -> + Obj.magic + (Obj.repr + (FStar_Tactics_Effect.lift_div_tac + (fun uu___3 -> tm))) + | FStar_Reflection_Data.Tv_Type uu___3 -> + Obj.magic + (Obj.repr + (FStar_Tactics_Effect.lift_div_tac + (fun uu___4 -> tm))) + | FStar_Reflection_Data.Tv_Refine (bv, ref) + -> + Obj.magic + (Obj.repr + (FStar_Tactics_Effect.tac_bind + (Prims.mk_range + "FStar.InteractiveHelpers.PostProcess.fst" + (Prims.of_int (566)) + (Prims.of_int (15)) + (Prims.of_int (566)) + (Prims.of_int (56))) + (Prims.mk_range + "FStar.InteractiveHelpers.PostProcess.fst" + (Prims.of_int (567)) + (Prims.of_int (4)) + (Prims.of_int (567)) + (Prims.of_int (28))) + (Obj.magic + (replace_term_in dbg + from_term to_term ref)) + (fun uu___3 -> + (fun ref' -> + Obj.magic + (FStar_Tactics_Builtins.pack + (FStar_Reflection_Data.Tv_Refine + (bv, ref')))) + uu___3))) + | FStar_Reflection_Data.Tv_Const uu___3 -> + Obj.magic + (Obj.repr + (FStar_Tactics_Effect.lift_div_tac + (fun uu___4 -> tm))) + | FStar_Reflection_Data.Tv_Uvar + (uu___3, uu___4) -> + Obj.magic + (Obj.repr + (FStar_Tactics_Effect.lift_div_tac + (fun uu___5 -> tm))) + | FStar_Reflection_Data.Tv_Let + (recf, attrs, bv, def, body) -> + Obj.magic + (Obj.repr + (FStar_Tactics_Effect.tac_bind + (Prims.mk_range + "FStar.InteractiveHelpers.PostProcess.fst" + (Prims.of_int (571)) + (Prims.of_int (15)) + (Prims.of_int (571)) + (Prims.of_int (56))) + (Prims.mk_range + "FStar.InteractiveHelpers.PostProcess.fst" + (Prims.of_int (572)) + (Prims.of_int (4)) + (Prims.of_int (573)) + (Prims.of_int (42))) + (Obj.magic + (replace_term_in dbg + from_term to_term def)) + (fun uu___3 -> + (fun def' -> + Obj.magic + (FStar_Tactics_Effect.tac_bind + (Prims.mk_range + "FStar.InteractiveHelpers.PostProcess.fst" + (Prims.of_int (572)) + (Prims.of_int (16)) + (Prims.of_int (572)) + (Prims.of_int (58))) + (Prims.mk_range + "FStar.InteractiveHelpers.PostProcess.fst" + (Prims.of_int (573)) + (Prims.of_int (4)) + (Prims.of_int (573)) + (Prims.of_int (42))) + (Obj.magic + (replace_term_in + dbg from_term + to_term body)) + (fun uu___3 -> + (fun body' -> + Obj.magic + (FStar_Tactics_Builtins.pack + ( + FStar_Reflection_Data.Tv_Let + (recf, + attrs, + bv, def', + body')))) + uu___3))) + uu___3))) + | FStar_Reflection_Data.Tv_Match + (scrutinee, ret_opt, branches) -> + Obj.magic + (Obj.repr + (FStar_Tactics_Effect.tac_bind + (Prims.mk_range + "FStar.InteractiveHelpers.PostProcess.fst" + (Prims.of_int (578)) + (Prims.of_int (6)) + (Prims.of_int (580)) + (Prims.of_int (18))) + (Prims.mk_range + "FStar.InteractiveHelpers.PostProcess.fst" + (Prims.of_int (582)) + (Prims.of_int (4)) + (Prims.of_int (584)) + (Prims.of_int (48))) + (FStar_Tactics_Effect.lift_div_tac + (fun uu___3 -> + fun br -> + FStar_Tactics_Effect.tac_bind + (Prims.mk_range + "FStar.InteractiveHelpers.PostProcess.fst" + (Prims.of_int (578)) + (Prims.of_int (22)) + (Prims.of_int (578)) + (Prims.of_int (24))) + (Prims.mk_range + "FStar.InteractiveHelpers.PostProcess.fst" + (Prims.of_int (578)) + (Prims.of_int (6)) + (Prims.of_int (580)) + (Prims.of_int (18))) + (FStar_Tactics_Effect.lift_div_tac + (fun uu___4 -> br)) + (fun uu___4 -> + (fun uu___4 -> + match uu___4 + with + | (pat, body) + -> + Obj.magic + ( + FStar_Tactics_Effect.tac_bind + (Prims.mk_range + "FStar.InteractiveHelpers.PostProcess.fst" + (Prims.of_int (579)) + (Prims.of_int (18)) + (Prims.of_int (579)) + (Prims.of_int (60))) + (Prims.mk_range + "FStar.InteractiveHelpers.PostProcess.fst" + (Prims.of_int (580)) + (Prims.of_int (6)) + (Prims.of_int (580)) + (Prims.of_int (18))) + (Obj.magic + (replace_term_in + dbg + from_term + to_term + body)) + (fun + body' -> + FStar_Tactics_Effect.lift_div_tac + (fun + uu___5 -> + (pat, + body'))))) + uu___4))) + (fun uu___3 -> + (fun explore_branch -> + Obj.magic + (FStar_Tactics_Effect.tac_bind + (Prims.mk_range + "FStar.InteractiveHelpers.PostProcess.fst" + (Prims.of_int (582)) + (Prims.of_int (21)) + (Prims.of_int (582)) + (Prims.of_int (68))) + (Prims.mk_range + "FStar.InteractiveHelpers.PostProcess.fst" + (Prims.of_int (583)) + (Prims.of_int (4)) + (Prims.of_int (584)) + (Prims.of_int (48))) + (Obj.magic + (replace_term_in + dbg from_term + to_term + scrutinee)) + (fun uu___3 -> + (fun scrutinee' + -> + Obj.magic + (FStar_Tactics_Effect.tac_bind + ( + Prims.mk_range + "FStar.InteractiveHelpers.PostProcess.fst" + (Prims.of_int (583)) + (Prims.of_int (20)) + (Prims.of_int (583)) + (Prims.of_int (47))) + ( + Prims.mk_range + "FStar.InteractiveHelpers.PostProcess.fst" + (Prims.of_int (584)) + (Prims.of_int (4)) + (Prims.of_int (584)) + (Prims.of_int (48))) + ( + Obj.magic + (FStar_Tactics_Util.map + explore_branch + branches)) + ( + fun + uu___3 -> + (fun + branches' + -> + Obj.magic + (FStar_Tactics_Builtins.pack + (FStar_Reflection_Data.Tv_Match + (scrutinee', + ret_opt, + branches')))) + uu___3))) + uu___3))) + uu___3))) + | FStar_Reflection_Data.Tv_AscribedT + (e, ty, tac, use_eq) -> + Obj.magic + (Obj.repr + (FStar_Tactics_Effect.tac_bind + (Prims.mk_range + "FStar.InteractiveHelpers.PostProcess.fst" + (Prims.of_int (586)) + (Prims.of_int (13)) + (Prims.of_int (586)) + (Prims.of_int (52))) + (Prims.mk_range + "FStar.InteractiveHelpers.PostProcess.fst" + (Prims.of_int (587)) + (Prims.of_int (4)) + (Prims.of_int (588)) + (Prims.of_int (41))) + (Obj.magic + (replace_term_in dbg + from_term to_term e)) + (fun uu___3 -> + (fun e' -> + Obj.magic + (FStar_Tactics_Effect.tac_bind + (Prims.mk_range + "FStar.InteractiveHelpers.PostProcess.fst" + (Prims.of_int (587)) + (Prims.of_int (14)) + (Prims.of_int (587)) + (Prims.of_int (54))) + (Prims.mk_range + "FStar.InteractiveHelpers.PostProcess.fst" + (Prims.of_int (588)) + (Prims.of_int (4)) + (Prims.of_int (588)) + (Prims.of_int (41))) + (Obj.magic + (replace_term_in + dbg from_term + to_term ty)) + (fun uu___3 -> + (fun ty' -> + Obj.magic + (FStar_Tactics_Builtins.pack + ( + FStar_Reflection_Data.Tv_AscribedT + (e', ty', + tac, + use_eq)))) + uu___3))) + uu___3))) + | FStar_Reflection_Data.Tv_AscribedC + (e, c, tac, use_eq) -> + Obj.magic + (Obj.repr + (FStar_Tactics_Effect.tac_bind + (Prims.mk_range + "FStar.InteractiveHelpers.PostProcess.fst" + (Prims.of_int (590)) + (Prims.of_int (13)) + (Prims.of_int (590)) + (Prims.of_int (52))) + (Prims.mk_range + "FStar.InteractiveHelpers.PostProcess.fst" + (Prims.of_int (591)) + (Prims.of_int (4)) + (Prims.of_int (591)) + (Prims.of_int (39))) + (Obj.magic + (replace_term_in dbg + from_term to_term e)) + (fun uu___3 -> + (fun e' -> + Obj.magic + (FStar_Tactics_Builtins.pack + (FStar_Reflection_Data.Tv_AscribedC + (e', c, tac, + use_eq)))) + uu___3))) + | uu___3 -> + Obj.magic + (Obj.repr + (FStar_Tactics_Effect.lift_div_tac + (fun uu___4 -> tm)))) uu___2)))) + uu___) +let rec (strip_implicit_parameters : + FStar_Reflection_Types.term -> + (FStar_Reflection_Types.term, unit) FStar_Tactics_Effect.tac_repr) + = + fun tm -> + FStar_Tactics_Effect.tac_bind + (Prims.mk_range "FStar.InteractiveHelpers.PostProcess.fst" + (Prims.of_int (598)) (Prims.of_int (8)) (Prims.of_int (598)) + (Prims.of_int (18))) + (Prims.mk_range "FStar.InteractiveHelpers.PostProcess.fst" + (Prims.of_int (598)) (Prims.of_int (2)) (Prims.of_int (601)) + (Prims.of_int (11))) (Obj.magic (FStar_Tactics_Builtins.inspect tm)) + (fun uu___ -> + (fun uu___ -> + match uu___ with + | FStar_Reflection_Data.Tv_App (hd, (a, qualif)) -> + Obj.magic + (Obj.repr + (if FStar_Reflection_Data.uu___is_Q_Implicit qualif + then Obj.repr (strip_implicit_parameters hd) + else + Obj.repr + (FStar_Tactics_Effect.lift_div_tac + (fun uu___2 -> tm)))) + | uu___1 -> + Obj.magic + (Obj.repr + (FStar_Tactics_Effect.lift_div_tac (fun uu___2 -> tm)))) + uu___) +let (unfold_in_assert_or_assume : + Prims.bool -> + FStar_Reflection_Types.term exploration_result -> + (unit, unit) FStar_Tactics_Effect.tac_repr) + = + fun dbg -> + fun ares -> + FStar_Tactics_Effect.tac_bind + (Prims.mk_range "FStar.InteractiveHelpers.PostProcess.fst" + (Prims.of_int (605)) (Prims.of_int (2)) (Prims.of_int (605)) + (Prims.of_int (78))) + (Prims.mk_range "FStar.InteractiveHelpers.PostProcess.fst" + (Prims.of_int (608)) (Prims.of_int (2)) (Prims.of_int (739)) + (Prims.of_int (30))) + (Obj.magic + (FStar_Tactics_Effect.tac_bind + (Prims.mk_range "FStar.InteractiveHelpers.PostProcess.fst" + (Prims.of_int (605)) (Prims.of_int (16)) + (Prims.of_int (605)) (Prims.of_int (78))) + (Prims.mk_range "FStar.InteractiveHelpers.PostProcess.fst" + (Prims.of_int (605)) (Prims.of_int (2)) (Prims.of_int (605)) + (Prims.of_int (78))) + (Obj.magic + (FStar_Tactics_Effect.tac_bind + (Prims.mk_range + "FStar.InteractiveHelpers.PostProcess.fst" + (Prims.of_int (605)) (Prims.of_int (54)) + (Prims.of_int (605)) (Prims.of_int (77))) + (Prims.mk_range "prims.fst" (Prims.of_int (606)) + (Prims.of_int (19)) (Prims.of_int (606)) + (Prims.of_int (31))) + (Obj.magic + (FStar_Tactics_Builtins.term_to_string ares.res)) + (fun uu___ -> + FStar_Tactics_Effect.lift_div_tac + (fun uu___1 -> + Prims.strcat "[> unfold_in_assert_or_assume:\n" + uu___)))) + (fun uu___ -> + (fun uu___ -> + Obj.magic + (FStar_InteractiveHelpers_Base.print_dbg dbg uu___)) + uu___))) + (fun uu___ -> + (fun uu___ -> + Obj.magic + (FStar_Tactics_Effect.tac_bind + (Prims.mk_range "FStar.InteractiveHelpers.PostProcess.fst" + (Prims.of_int (609)) (Prims.of_int (4)) + (Prims.of_int (609)) (Prims.of_int (68))) + (Prims.mk_range "FStar.InteractiveHelpers.PostProcess.fst" + (Prims.of_int (611)) (Prims.of_int (2)) + (Prims.of_int (739)) (Prims.of_int (30))) + (FStar_Tactics_Effect.lift_div_tac + (fun uu___1 -> + fun t -> + find_focused_term dbg false ares.ge ares.parents + ares.tgt_comp t)) + (fun uu___1 -> + (fun find_focused_in_term -> + Obj.magic + (FStar_Tactics_Effect.tac_bind + (Prims.mk_range + "FStar.InteractiveHelpers.PostProcess.fst" + (Prims.of_int (612)) (Prims.of_int (4)) + (Prims.of_int (615)) (Prims.of_int (93))) + (Prims.mk_range + "FStar.InteractiveHelpers.PostProcess.fst" + (Prims.of_int (625)) (Prims.of_int (2)) + (Prims.of_int (739)) (Prims.of_int (30))) + (FStar_Tactics_Effect.lift_div_tac + (fun uu___1 -> + fun uu___2 -> + FStar_Tactics_Effect.tac_bind + (Prims.mk_range + "FStar.InteractiveHelpers.PostProcess.fst" + (Prims.of_int (612)) + (Prims.of_int (10)) + (Prims.of_int (612)) + (Prims.of_int (39))) + (Prims.mk_range + "FStar.InteractiveHelpers.PostProcess.fst" + (Prims.of_int (612)) + (Prims.of_int (4)) + (Prims.of_int (615)) + (Prims.of_int (93))) + (Obj.magic + (find_focused_in_term ares.res)) + (fun uu___3 -> + (fun uu___3 -> + match uu___3 with + | FStar_Pervasives_Native.Some + res -> + Obj.magic + (Obj.repr + (FStar_Tactics_Effect.lift_div_tac + (fun uu___4 -> + ((ares.res), + res, + (fun uu___5 -> + (fun x -> + Obj.magic + (FStar_Tactics_Effect.lift_div_tac + (fun + uu___5 -> + x))) + uu___5), + true)))) + | FStar_Pervasives_Native.None + -> + Obj.magic + (Obj.repr + (FStar_InteractiveHelpers_Base.mfail + "unfold_in_assert_or_assume: could not find a focused term in the assert"))) + uu___3))) + (fun uu___1 -> + (fun find_in_whole_term -> + Obj.magic + (FStar_Tactics_Effect.tac_bind + (Prims.mk_range + "FStar.InteractiveHelpers.PostProcess.fst" + (Prims.of_int (626)) + (Prims.of_int (4)) + (Prims.of_int (653)) + (Prims.of_int (27))) + (Prims.mk_range + "FStar.InteractiveHelpers.PostProcess.fst" + (Prims.of_int (625)) + (Prims.of_int (2)) + (Prims.of_int (739)) + (Prims.of_int (30))) + (Obj.magic + (FStar_Tactics_Effect.tac_bind + (Prims.mk_range + "FStar.InteractiveHelpers.PostProcess.fst" + (Prims.of_int (626)) + (Prims.of_int (12)) + (Prims.of_int (626)) + (Prims.of_int (67))) + (Prims.mk_range + "FStar.InteractiveHelpers.PostProcess.fst" + (Prims.of_int (627)) + (Prims.of_int (4)) + (Prims.of_int (653)) + (Prims.of_int (27))) + (Obj.magic + (FStar_Tactics_Effect.tac_bind + (Prims.mk_range + "FStar.InteractiveHelpers.PostProcess.fst" + (Prims.of_int (626)) + (Prims.of_int (26)) + (Prims.of_int (626)) + (Prims.of_int (67))) + (Prims.mk_range + "FStar.InteractiveHelpers.PostProcess.fst" + (Prims.of_int (626)) + (Prims.of_int (12)) + (Prims.of_int (626)) + (Prims.of_int (67))) + (Obj.magic + (FStar_Tactics_Effect.tac_bind + (Prims.mk_range + "FStar.InteractiveHelpers.PostProcess.fst" + (Prims.of_int (626)) + (Prims.of_int (43)) + (Prims.of_int (626)) + (Prims.of_int (66))) + (Prims.mk_range + "prims.fst" + (Prims.of_int (606)) + (Prims.of_int (19)) + (Prims.of_int (606)) + (Prims.of_int (31))) + (Obj.magic + (FStar_Tactics_Builtins.term_to_string + ares.res)) + (fun uu___1 -> + FStar_Tactics_Effect.lift_div_tac + (fun uu___2 + -> + Prims.strcat + "Assertion: " + uu___1)))) + (fun uu___1 -> + (fun uu___1 -> + Obj.magic + (FStar_InteractiveHelpers_Base.print_dbg + dbg uu___1)) + uu___1))) + (fun uu___1 -> + (fun uu___1 -> + Obj.magic + (FStar_Tactics_Effect.tac_bind + (Prims.mk_range + "FStar.InteractiveHelpers.PostProcess.fst" + (Prims.of_int (627)) + (Prims.of_int (10)) + (Prims.of_int (627)) + (Prims.of_int (28))) + (Prims.mk_range + "FStar.InteractiveHelpers.PostProcess.fst" + (Prims.of_int (627)) + (Prims.of_int (4)) + (Prims.of_int (653)) + (Prims.of_int (27))) + (Obj.magic + (is_eq dbg + ares.res)) + (fun uu___2 -> + (fun uu___2 -> + match uu___2 + with + | FStar_Pervasives_Native.Some + (kd, l, + r) -> + Obj.magic + (FStar_Tactics_Effect.tac_bind + (Prims.mk_range + "FStar.InteractiveHelpers.PostProcess.fst" + (Prims.of_int (629)) + (Prims.of_int (6)) + (Prims.of_int (629)) + (Prims.of_int (50))) + (Prims.mk_range + "FStar.InteractiveHelpers.PostProcess.fst" + (Prims.of_int (630)) + (Prims.of_int (12)) + (Prims.of_int (649)) + (Prims.of_int (11))) + (Obj.magic + (FStar_InteractiveHelpers_Base.print_dbg + dbg + "The assertion is an equality")) + (fun + uu___3 -> + (fun + uu___3 -> + Obj.magic + (FStar_Tactics_Effect.tac_bind + (Prims.mk_range + "FStar.InteractiveHelpers.PostProcess.fst" + (Prims.of_int (630)) + (Prims.of_int (18)) + (Prims.of_int (630)) + (Prims.of_int (40))) + (Prims.mk_range + "FStar.InteractiveHelpers.PostProcess.fst" + (Prims.of_int (630)) + (Prims.of_int (12)) + (Prims.of_int (649)) + (Prims.of_int (11))) + (Obj.magic + (find_focused_in_term + l)) + (fun + uu___4 -> + (fun + uu___4 -> + match uu___4 + with + | + FStar_Pervasives_Native.Some + res -> + Obj.magic + (FStar_Tactics_Effect.tac_bind + (Prims.mk_range + "FStar.InteractiveHelpers.PostProcess.fst" + (Prims.of_int (632)) + (Prims.of_int (8)) + (Prims.of_int (635)) + (Prims.of_int (64))) + (Prims.mk_range + "FStar.InteractiveHelpers.PostProcess.fst" + (Prims.of_int (637)) + (Prims.of_int (8)) + (Prims.of_int (637)) + (Prims.of_int (29))) + (Obj.magic + (FStar_Tactics_Effect.tac_bind + (Prims.mk_range + "FStar.InteractiveHelpers.PostProcess.fst" + (Prims.of_int (632)) + (Prims.of_int (22)) + (Prims.of_int (635)) + (Prims.of_int (64))) + (Prims.mk_range + "FStar.InteractiveHelpers.PostProcess.fst" + (Prims.of_int (632)) + (Prims.of_int (8)) + (Prims.of_int (635)) + (Prims.of_int (64))) + (Obj.magic + (FStar_Tactics_Effect.tac_bind + (Prims.mk_range + "FStar.InteractiveHelpers.PostProcess.fst" + (Prims.of_int (633)) + (Prims.of_int (23)) + (Prims.of_int (635)) + (Prims.of_int (63))) + (Prims.mk_range + "prims.fst" + (Prims.of_int (606)) + (Prims.of_int (19)) + (Prims.of_int (606)) + (Prims.of_int (31))) + (Obj.magic + (FStar_Tactics_Effect.tac_bind + (Prims.mk_range + "FStar.InteractiveHelpers.PostProcess.fst" + (Prims.of_int (633)) + (Prims.of_int (41)) + (Prims.of_int (635)) + (Prims.of_int (63))) + (Prims.mk_range + "prims.fst" + (Prims.of_int (606)) + (Prims.of_int (19)) + (Prims.of_int (606)) + (Prims.of_int (31))) + (Obj.magic + (FStar_Tactics_Effect.tac_bind + (Prims.mk_range + "FStar.InteractiveHelpers.PostProcess.fst" + (Prims.of_int (633)) + (Prims.of_int (41)) + (Prims.of_int (633)) + (Prims.of_int (57))) + (Prims.mk_range + "FStar.InteractiveHelpers.PostProcess.fst" + (Prims.of_int (633)) + (Prims.of_int (41)) + (Prims.of_int (635)) + (Prims.of_int (63))) + (Obj.magic + (FStar_Tactics_Builtins.term_to_string + l)) + (fun + uu___5 -> + (fun + uu___5 -> + Obj.magic + (FStar_Tactics_Effect.tac_bind + (Prims.mk_range + "FStar.InteractiveHelpers.PostProcess.fst" + (Prims.of_int (634)) + (Prims.of_int (23)) + (Prims.of_int (635)) + (Prims.of_int (63))) + (Prims.mk_range + "prims.fst" + (Prims.of_int (606)) + (Prims.of_int (19)) + (Prims.of_int (606)) + (Prims.of_int (31))) + (Obj.magic + (FStar_Tactics_Effect.tac_bind + (Prims.mk_range + "FStar.InteractiveHelpers.PostProcess.fst" + (Prims.of_int (634)) + (Prims.of_int (41)) + (Prims.of_int (635)) + (Prims.of_int (63))) + (Prims.mk_range + "prims.fst" + (Prims.of_int (606)) + (Prims.of_int (19)) + (Prims.of_int (606)) + (Prims.of_int (31))) + (Obj.magic + (FStar_Tactics_Effect.tac_bind + (Prims.mk_range + "FStar.InteractiveHelpers.PostProcess.fst" + (Prims.of_int (634)) + (Prims.of_int (41)) + (Prims.of_int (634)) + (Prims.of_int (57))) + (Prims.mk_range + "FStar.InteractiveHelpers.PostProcess.fst" + (Prims.of_int (634)) + (Prims.of_int (41)) + (Prims.of_int (635)) + (Prims.of_int (63))) + (Obj.magic + (FStar_Tactics_Builtins.term_to_string + r)) + (fun + uu___6 -> + (fun + uu___6 -> + Obj.magic + (FStar_Tactics_Effect.tac_bind + (Prims.mk_range + "FStar.InteractiveHelpers.PostProcess.fst" + (Prims.of_int (635)) + (Prims.of_int (23)) + (Prims.of_int (635)) + (Prims.of_int (63))) + (Prims.mk_range + "prims.fst" + (Prims.of_int (606)) + (Prims.of_int (19)) + (Prims.of_int (606)) + (Prims.of_int (31))) + (Obj.magic + (FStar_Tactics_Effect.tac_bind + (Prims.mk_range + "FStar.InteractiveHelpers.PostProcess.fst" + (Prims.of_int (635)) + (Prims.of_int (41)) + (Prims.of_int (635)) + (Prims.of_int (63))) + (Prims.mk_range + "prims.fst" + (Prims.of_int (606)) + (Prims.of_int (19)) + (Prims.of_int (606)) + (Prims.of_int (31))) + (Obj.magic + (FStar_Tactics_Builtins.term_to_string + res.res)) + (fun + uu___7 -> + FStar_Tactics_Effect.lift_div_tac + (fun + uu___8 -> + Prims.strcat + "\n- focused: " + uu___7)))) + (fun + uu___7 -> + FStar_Tactics_Effect.lift_div_tac + (fun + uu___8 -> + Prims.strcat + uu___6 + uu___7)))) + uu___6))) + (fun + uu___6 -> + FStar_Tactics_Effect.lift_div_tac + (fun + uu___7 -> + Prims.strcat + "\n- right : " + uu___6)))) + (fun + uu___6 -> + FStar_Tactics_Effect.lift_div_tac + (fun + uu___7 -> + Prims.strcat + uu___5 + uu___6)))) + uu___5))) + (fun + uu___5 -> + FStar_Tactics_Effect.lift_div_tac + (fun + uu___6 -> + Prims.strcat + "\n- left : " + uu___5)))) + (fun + uu___5 -> + FStar_Tactics_Effect.lift_div_tac + (fun + uu___6 -> + Prims.strcat + "Found focused term in left operand:" + uu___5)))) + (fun + uu___5 -> + (fun + uu___5 -> + Obj.magic + (FStar_InteractiveHelpers_Base.print_dbg + dbg + uu___5)) + uu___5))) + (fun + uu___5 -> + FStar_Tactics_Effect.lift_div_tac + (fun + uu___6 -> + (l, res, + (fun + uu___7 -> + (fun t -> + Obj.magic + (FStar_Tactics_Effect.lift_div_tac + (fun + uu___7 -> + mk_eq kd + t r))) + uu___7), + true)))) + | + FStar_Pervasives_Native.None + -> + Obj.magic + (FStar_Tactics_Effect.tac_bind + (Prims.mk_range + "FStar.InteractiveHelpers.PostProcess.fst" + (Prims.of_int (639)) + (Prims.of_int (20)) + (Prims.of_int (639)) + (Prims.of_int (42))) + (Prims.mk_range + "FStar.InteractiveHelpers.PostProcess.fst" + (Prims.of_int (639)) + (Prims.of_int (14)) + (Prims.of_int (648)) + (Prims.of_int (89))) + (Obj.magic + (find_focused_in_term + r)) + (fun + uu___5 -> + (fun + uu___5 -> + match uu___5 + with + | + FStar_Pervasives_Native.Some + res -> + Obj.magic + (FStar_Tactics_Effect.tac_bind + (Prims.mk_range + "FStar.InteractiveHelpers.PostProcess.fst" + (Prims.of_int (641)) + (Prims.of_int (10)) + (Prims.of_int (644)) + (Prims.of_int (58))) + (Prims.mk_range + "FStar.InteractiveHelpers.PostProcess.fst" + (Prims.of_int (646)) + (Prims.of_int (10)) + (Prims.of_int (646)) + (Prims.of_int (32))) + (Obj.magic + (FStar_Tactics_Effect.tac_bind + (Prims.mk_range + "FStar.InteractiveHelpers.PostProcess.fst" + (Prims.of_int (641)) + (Prims.of_int (24)) + (Prims.of_int (644)) + (Prims.of_int (58))) + (Prims.mk_range + "FStar.InteractiveHelpers.PostProcess.fst" + (Prims.of_int (641)) + (Prims.of_int (10)) + (Prims.of_int (644)) + (Prims.of_int (58))) + (Obj.magic + (FStar_Tactics_Effect.tac_bind + (Prims.mk_range + "FStar.InteractiveHelpers.PostProcess.fst" + (Prims.of_int (642)) + (Prims.of_int (17)) + (Prims.of_int (644)) + (Prims.of_int (57))) + (Prims.mk_range + "prims.fst" + (Prims.of_int (606)) + (Prims.of_int (19)) + (Prims.of_int (606)) + (Prims.of_int (31))) + (Obj.magic + (FStar_Tactics_Effect.tac_bind + (Prims.mk_range + "FStar.InteractiveHelpers.PostProcess.fst" + (Prims.of_int (642)) + (Prims.of_int (35)) + (Prims.of_int (644)) + (Prims.of_int (57))) + (Prims.mk_range + "prims.fst" + (Prims.of_int (606)) + (Prims.of_int (19)) + (Prims.of_int (606)) + (Prims.of_int (31))) + (Obj.magic + (FStar_Tactics_Effect.tac_bind + (Prims.mk_range + "FStar.InteractiveHelpers.PostProcess.fst" + (Prims.of_int (642)) + (Prims.of_int (35)) + (Prims.of_int (642)) + (Prims.of_int (51))) + (Prims.mk_range + "FStar.InteractiveHelpers.PostProcess.fst" + (Prims.of_int (642)) + (Prims.of_int (35)) + (Prims.of_int (644)) + (Prims.of_int (57))) + (Obj.magic + (FStar_Tactics_Builtins.term_to_string + l)) + (fun + uu___6 -> + (fun + uu___6 -> + Obj.magic + (FStar_Tactics_Effect.tac_bind + (Prims.mk_range + "FStar.InteractiveHelpers.PostProcess.fst" + (Prims.of_int (643)) + (Prims.of_int (17)) + (Prims.of_int (644)) + (Prims.of_int (57))) + (Prims.mk_range + "prims.fst" + (Prims.of_int (606)) + (Prims.of_int (19)) + (Prims.of_int (606)) + (Prims.of_int (31))) + (Obj.magic + (FStar_Tactics_Effect.tac_bind + (Prims.mk_range + "FStar.InteractiveHelpers.PostProcess.fst" + (Prims.of_int (643)) + (Prims.of_int (35)) + (Prims.of_int (644)) + (Prims.of_int (57))) + (Prims.mk_range + "prims.fst" + (Prims.of_int (606)) + (Prims.of_int (19)) + (Prims.of_int (606)) + (Prims.of_int (31))) + (Obj.magic + (FStar_Tactics_Effect.tac_bind + (Prims.mk_range + "FStar.InteractiveHelpers.PostProcess.fst" + (Prims.of_int (643)) + (Prims.of_int (35)) + (Prims.of_int (643)) + (Prims.of_int (51))) + (Prims.mk_range + "FStar.InteractiveHelpers.PostProcess.fst" + (Prims.of_int (643)) + (Prims.of_int (35)) + (Prims.of_int (644)) + (Prims.of_int (57))) + (Obj.magic + (FStar_Tactics_Builtins.term_to_string + r)) + (fun + uu___7 -> + (fun + uu___7 -> + Obj.magic + (FStar_Tactics_Effect.tac_bind + (Prims.mk_range + "FStar.InteractiveHelpers.PostProcess.fst" + (Prims.of_int (644)) + (Prims.of_int (17)) + (Prims.of_int (644)) + (Prims.of_int (57))) + (Prims.mk_range + "prims.fst" + (Prims.of_int (606)) + (Prims.of_int (19)) + (Prims.of_int (606)) + (Prims.of_int (31))) + (Obj.magic + (FStar_Tactics_Effect.tac_bind + (Prims.mk_range + "FStar.InteractiveHelpers.PostProcess.fst" + (Prims.of_int (644)) + (Prims.of_int (35)) + (Prims.of_int (644)) + (Prims.of_int (57))) + (Prims.mk_range + "prims.fst" + (Prims.of_int (606)) + (Prims.of_int (19)) + (Prims.of_int (606)) + (Prims.of_int (31))) + (Obj.magic + (FStar_Tactics_Builtins.term_to_string + res.res)) + (fun + uu___8 -> + FStar_Tactics_Effect.lift_div_tac + (fun + uu___9 -> + Prims.strcat + "\n- focused: " + uu___8)))) + (fun + uu___8 -> + FStar_Tactics_Effect.lift_div_tac + (fun + uu___9 -> + Prims.strcat + uu___7 + uu___8)))) + uu___7))) + (fun + uu___7 -> + FStar_Tactics_Effect.lift_div_tac + (fun + uu___8 -> + Prims.strcat + "\n- right : " + uu___7)))) + (fun + uu___7 -> + FStar_Tactics_Effect.lift_div_tac + (fun + uu___8 -> + Prims.strcat + uu___6 + uu___7)))) + uu___6))) + (fun + uu___6 -> + FStar_Tactics_Effect.lift_div_tac + (fun + uu___7 -> + Prims.strcat + "\n- left : " + uu___6)))) + (fun + uu___6 -> + FStar_Tactics_Effect.lift_div_tac + (fun + uu___7 -> + Prims.strcat + "Found focused term in right operand:" + uu___6)))) + (fun + uu___6 -> + (fun + uu___6 -> + Obj.magic + (FStar_InteractiveHelpers_Base.print_dbg + dbg + uu___6)) + uu___6))) + (fun + uu___6 -> + FStar_Tactics_Effect.lift_div_tac + (fun + uu___7 -> + (r, res, + (fun + uu___8 -> + (fun t -> + Obj.magic + (FStar_Tactics_Effect.lift_div_tac + (fun + uu___8 -> + mk_eq kd + l t))) + uu___8), + false)))) + | + FStar_Pervasives_Native.None + -> + Obj.magic + (FStar_InteractiveHelpers_Base.mfail + "unfold_in_assert_or_assume: could not find a focused term in the assert")) + uu___5))) + uu___4))) + uu___3)) + | FStar_Pervasives_Native.None + -> + Obj.magic + (FStar_Tactics_Effect.tac_bind + (Prims.mk_range + "FStar.InteractiveHelpers.PostProcess.fst" + (Prims.of_int (652)) + (Prims.of_int (6)) + (Prims.of_int (652)) + (Prims.of_int (54))) + (Prims.mk_range + "FStar.InteractiveHelpers.PostProcess.fst" + (Prims.of_int (653)) + (Prims.of_int (6)) + (Prims.of_int (653)) + (Prims.of_int (27))) + (Obj.magic + (FStar_InteractiveHelpers_Base.print_dbg + dbg + "The assertion is not an equality")) + (fun + uu___3 -> + (fun + uu___3 -> + Obj.magic + (find_in_whole_term + ())) + uu___3))) + uu___2))) + uu___1))) + (fun uu___1 -> + (fun uu___1 -> + match uu___1 with + | (subterm, unf_res, rebuild, + insert_before) -> + Obj.magic + (FStar_Tactics_Effect.tac_bind + (Prims.mk_range + "FStar.InteractiveHelpers.PostProcess.fst" + (Prims.of_int (655)) + (Prims.of_int (2)) + (Prims.of_int (739)) + (Prims.of_int (30))) + (Prims.mk_range + "FStar.InteractiveHelpers.PostProcess.fst" + (Prims.of_int (655)) + (Prims.of_int (2)) + (Prims.of_int (739)) + (Prims.of_int (30))) + (FStar_Tactics_Effect.lift_div_tac + (fun uu___2 -> + rebuild)) + (fun uu___2 -> + (fun rebuild1 -> + Obj.magic + (FStar_Tactics_Effect.tac_bind + (Prims.mk_range + "FStar.InteractiveHelpers.PostProcess.fst" + (Prims.of_int (655)) + (Prims.of_int (2)) + (Prims.of_int (657)) + (Prims.of_int (65))) + (Prims.mk_range + "FStar.InteractiveHelpers.PostProcess.fst" + (Prims.of_int (659)) + (Prims.of_int (2)) + (Prims.of_int (739)) + (Prims.of_int (30))) + (Obj.magic + (FStar_Tactics_Effect.tac_bind + (Prims.mk_range + "FStar.InteractiveHelpers.PostProcess.fst" + (Prims.of_int (655)) + (Prims.of_int (16)) + (Prims.of_int (657)) + (Prims.of_int (65))) + (Prims.mk_range + "FStar.InteractiveHelpers.PostProcess.fst" + (Prims.of_int (655)) + (Prims.of_int (2)) + (Prims.of_int (657)) + (Prims.of_int (65))) + (Obj.magic + (FStar_Tactics_Effect.tac_bind + (Prims.mk_range + "FStar.InteractiveHelpers.PostProcess.fst" + (Prims.of_int (656)) + (Prims.of_int (17)) + (Prims.of_int (657)) + (Prims.of_int (64))) + (Prims.mk_range + "prims.fst" + (Prims.of_int (606)) + (Prims.of_int (19)) + (Prims.of_int (606)) + (Prims.of_int (31))) + (Obj.magic + (FStar_Tactics_Effect.tac_bind + (Prims.mk_range + "FStar.InteractiveHelpers.PostProcess.fst" + (Prims.of_int (656)) + (Prims.of_int (33)) + (Prims.of_int (657)) + (Prims.of_int (64))) + (Prims.mk_range + "prims.fst" + (Prims.of_int (606)) + (Prims.of_int (19)) + (Prims.of_int (606)) + (Prims.of_int (31))) + (Obj.magic + (FStar_Tactics_Effect.tac_bind + (Prims.mk_range + "FStar.InteractiveHelpers.PostProcess.fst" + (Prims.of_int (656)) + (Prims.of_int (33)) + (Prims.of_int (656)) + (Prims.of_int (55))) + (Prims.mk_range + "FStar.InteractiveHelpers.PostProcess.fst" + (Prims.of_int (656)) + (Prims.of_int (33)) + (Prims.of_int (657)) + (Prims.of_int (64))) + (Obj.magic + (FStar_Tactics_Builtins.term_to_string + subterm)) + (fun + uu___2 -> + (fun + uu___2 -> + Obj.magic + (FStar_Tactics_Effect.tac_bind + (Prims.mk_range + "FStar.InteractiveHelpers.PostProcess.fst" + (Prims.of_int (656)) + (Prims.of_int (58)) + (Prims.of_int (657)) + (Prims.of_int (64))) + (Prims.mk_range + "prims.fst" + (Prims.of_int (606)) + (Prims.of_int (19)) + (Prims.of_int (606)) + (Prims.of_int (31))) + (Obj.magic + (FStar_Tactics_Effect.tac_bind + (Prims.mk_range + "FStar.InteractiveHelpers.PostProcess.fst" + (Prims.of_int (657)) + (Prims.of_int (17)) + (Prims.of_int (657)) + (Prims.of_int (64))) + (Prims.mk_range + "prims.fst" + (Prims.of_int (606)) + (Prims.of_int (19)) + (Prims.of_int (606)) + (Prims.of_int (31))) + (Obj.magic + (FStar_Tactics_Effect.tac_bind + (Prims.mk_range + "FStar.InteractiveHelpers.PostProcess.fst" + (Prims.of_int (657)) + (Prims.of_int (38)) + (Prims.of_int (657)) + (Prims.of_int (64))) + (Prims.mk_range + "prims.fst" + (Prims.of_int (606)) + (Prims.of_int (19)) + (Prims.of_int (606)) + (Prims.of_int (31))) + (Obj.magic + (FStar_Tactics_Builtins.term_to_string + unf_res.res)) + (fun + uu___3 -> + FStar_Tactics_Effect.lift_div_tac + (fun + uu___4 -> + Prims.strcat + "- focused term: " + uu___3)))) + (fun + uu___3 -> + FStar_Tactics_Effect.lift_div_tac + (fun + uu___4 -> + Prims.strcat + "\n" + uu___3)))) + (fun + uu___3 -> + FStar_Tactics_Effect.lift_div_tac + (fun + uu___4 -> + Prims.strcat + uu___2 + uu___3)))) + uu___2))) + (fun + uu___2 -> + FStar_Tactics_Effect.lift_div_tac + (fun + uu___3 -> + Prims.strcat + "- subterm: " + uu___2)))) + (fun + uu___2 -> + FStar_Tactics_Effect.lift_div_tac + (fun + uu___3 -> + Prims.strcat + "Found subterm in assertion/assumption:\n" + uu___2)))) + (fun + uu___2 -> + (fun + uu___2 -> + Obj.magic + (FStar_InteractiveHelpers_Base.print_dbg + dbg + uu___2)) + uu___2))) + (fun + uu___2 -> + (fun + uu___2 -> + Obj.magic + (FStar_Tactics_Effect.tac_bind + (Prims.mk_range + "FStar.InteractiveHelpers.PostProcess.fst" + (Prims.of_int (659)) + (Prims.of_int (17)) + (Prims.of_int (659)) + (Prims.of_int (36))) + (Prims.mk_range + "FStar.InteractiveHelpers.PostProcess.fst" + (Prims.of_int (660)) + (Prims.of_int (2)) + (Prims.of_int (739)) + (Prims.of_int (30))) + (Obj.magic + (FStar_Tactics_Builtins.inspect + unf_res.res)) + (fun + uu___3 -> + (fun + res_view + -> + Obj.magic + (FStar_Tactics_Effect.tac_bind + (Prims.mk_range + "FStar.InteractiveHelpers.PostProcess.fst" + (Prims.of_int (661)) + (Prims.of_int (4)) + (Prims.of_int (700)) + (Prims.of_int (19))) + (Prims.mk_range + "FStar.InteractiveHelpers.PostProcess.fst" + (Prims.of_int (660)) + (Prims.of_int (2)) + (Prims.of_int (739)) + (Prims.of_int (30))) + (match res_view + with + | + FStar_Reflection_Data.Tv_FVar + fv -> + Obj.magic + (FStar_Tactics_Effect.tac_bind + (Prims.mk_range + "FStar.InteractiveHelpers.PostProcess.fst" + (Prims.of_int (663)) + (Prims.of_int (6)) + (Prims.of_int (663)) + (Prims.of_int (80))) + (Prims.mk_range + "FStar.InteractiveHelpers.PostProcess.fst" + (Prims.of_int (665)) + (Prims.of_int (6)) + (Prims.of_int (668)) + (Prims.of_int (28))) + (Obj.magic + (FStar_InteractiveHelpers_Base.print_dbg + dbg + (Prims.strcat + "The focused term is a top identifier: " + (FStar_Reflection_Derived.fv_to_string + fv)))) + (fun + uu___3 -> + (fun + uu___3 -> + Obj.magic + (FStar_Tactics_Effect.tac_bind + (Prims.mk_range + "FStar.InteractiveHelpers.PostProcess.fst" + (Prims.of_int (665)) + (Prims.of_int (18)) + (Prims.of_int (665)) + (Prims.of_int (46))) + (Prims.mk_range + "FStar.InteractiveHelpers.PostProcess.fst" + (Prims.of_int (666)) + (Prims.of_int (6)) + (Prims.of_int (668)) + (Prims.of_int (28))) + (FStar_Tactics_Effect.lift_div_tac + (fun + uu___4 -> + FStar_Reflection_Derived.flatten_name + (FStar_Reflection_Builtins.inspect_fv + fv))) + (fun + uu___4 -> + (fun + fname -> + Obj.magic + (FStar_Tactics_Effect.tac_bind + (Prims.mk_range + "FStar.InteractiveHelpers.PostProcess.fst" + (Prims.of_int (666)) + (Prims.of_int (21)) + (Prims.of_int (666)) + (Prims.of_int (81))) + (Prims.mk_range + "FStar.InteractiveHelpers.PostProcess.fst" + (Prims.of_int (667)) + (Prims.of_int (6)) + (Prims.of_int (668)) + (Prims.of_int (28))) + (Obj.magic + (FStar_Tactics_Builtins.norm_term_env + (ares.ge).FStar_InteractiveHelpers_Base.env + [ + FStar_Pervasives.delta_only + [fname]; + FStar_Pervasives.zeta] + subterm)) + (fun + uu___4 -> + (fun + subterm' + -> + Obj.magic + (FStar_Tactics_Effect.tac_bind + (Prims.mk_range + "FStar.InteractiveHelpers.PostProcess.fst" + (Prims.of_int (667)) + (Prims.of_int (6)) + (Prims.of_int (667)) + (Prims.of_int (70))) + (Prims.mk_range + "FStar.InteractiveHelpers.PostProcess.fst" + (Prims.of_int (668)) + (Prims.of_int (6)) + (Prims.of_int (668)) + (Prims.of_int (28))) + (Obj.magic + (FStar_Tactics_Effect.tac_bind + (Prims.mk_range + "FStar.InteractiveHelpers.PostProcess.fst" + (Prims.of_int (667)) + (Prims.of_int (20)) + (Prims.of_int (667)) + (Prims.of_int (70))) + (Prims.mk_range + "FStar.InteractiveHelpers.PostProcess.fst" + (Prims.of_int (667)) + (Prims.of_int (6)) + (Prims.of_int (667)) + (Prims.of_int (70))) + (Obj.magic + (FStar_Tactics_Effect.tac_bind + (Prims.mk_range + "FStar.InteractiveHelpers.PostProcess.fst" + (Prims.of_int (667)) + (Prims.of_int (46)) + (Prims.of_int (667)) + (Prims.of_int (69))) + (Prims.mk_range + "prims.fst" + (Prims.of_int (606)) + (Prims.of_int (19)) + (Prims.of_int (606)) + (Prims.of_int (31))) + (Obj.magic + (FStar_Tactics_Builtins.term_to_string + subterm')) + (fun + uu___4 -> + FStar_Tactics_Effect.lift_div_tac + (fun + uu___5 -> + Prims.strcat + "Normalized subterm: " + uu___4)))) + (fun + uu___4 -> + (fun + uu___4 -> + Obj.magic + (FStar_InteractiveHelpers_Base.print_dbg + dbg + uu___4)) + uu___4))) + (fun + uu___4 -> + FStar_Tactics_Effect.lift_div_tac + (fun + uu___5 -> + ((ares.ge), + (FStar_Pervasives_Native.Some + subterm')))))) + uu___4))) + uu___4))) + uu___3)) + | + uu___3 -> + Obj.magic + (FStar_Tactics_Effect.tac_bind + (Prims.mk_range + "FStar.InteractiveHelpers.PostProcess.fst" + (Prims.of_int (673)) + (Prims.of_int (20)) + (Prims.of_int (673)) + (Prims.of_int (49))) + (Prims.mk_range + "FStar.InteractiveHelpers.PostProcess.fst" + (Prims.of_int (674)) + (Prims.of_int (6)) + (Prims.of_int (700)) + (Prims.of_int (19))) + (FStar_Tactics_Effect.lift_div_tac + (fun + uu___4 -> + FStar_List_Tot_Base.map + FStar_Pervasives_Native.snd + ares.parents)) + (fun + uu___4 -> + (fun + parents + -> + Obj.magic + (FStar_Tactics_Effect.tac_bind + (Prims.mk_range + "FStar.InteractiveHelpers.PostProcess.fst" + (Prims.of_int (675)) + (Prims.of_int (8)) + (Prims.of_int (684)) + (Prims.of_int (14))) + (Prims.mk_range + "FStar.InteractiveHelpers.PostProcess.fst" + (Prims.of_int (686)) + (Prims.of_int (6)) + (Prims.of_int (700)) + (Prims.of_int (19))) + (match res_view + with + | + FStar_Reflection_Data.Tv_Var + bv -> + Obj.magic + (FStar_Tactics_Effect.tac_bind + (Prims.mk_range + "FStar.InteractiveHelpers.PostProcess.fst" + (Prims.of_int (677)) + (Prims.of_int (10)) + (Prims.of_int (677)) + (Prims.of_int (84))) + (Prims.mk_range + "FStar.InteractiveHelpers.PostProcess.fst" + (Prims.of_int (679)) + (Prims.of_int (10)) + (Prims.of_int (681)) + (Prims.of_int (17))) + (Obj.magic + (FStar_Tactics_Effect.tac_bind + (Prims.mk_range + "FStar.InteractiveHelpers.PostProcess.fst" + (Prims.of_int (677)) + (Prims.of_int (24)) + (Prims.of_int (677)) + (Prims.of_int (84))) + (Prims.mk_range + "FStar.InteractiveHelpers.PostProcess.fst" + (Prims.of_int (677)) + (Prims.of_int (10)) + (Prims.of_int (677)) + (Prims.of_int (84))) + (Obj.magic + (FStar_Tactics_Effect.tac_bind + (Prims.mk_range + "FStar.InteractiveHelpers.PostProcess.fst" + (Prims.of_int (677)) + (Prims.of_int (68)) + (Prims.of_int (677)) + (Prims.of_int (83))) + (Prims.mk_range + "prims.fst" + (Prims.of_int (606)) + (Prims.of_int (19)) + (Prims.of_int (606)) + (Prims.of_int (31))) + (Obj.magic + (FStar_Tactics_Print.bv_to_string + bv)) + (fun + uu___4 -> + FStar_Tactics_Effect.lift_div_tac + (fun + uu___5 -> + Prims.strcat + "The focused term is a local variable: " + uu___4)))) + (fun + uu___4 -> + (fun + uu___4 -> + Obj.magic + (FStar_InteractiveHelpers_Base.print_dbg + dbg + uu___4)) + uu___4))) + (fun + uu___4 -> + (fun + uu___4 -> + Obj.magic + (FStar_Tactics_Effect.tac_bind + (Prims.mk_range + "FStar.InteractiveHelpers.PostProcess.fst" + (Prims.of_int (679)) + (Prims.of_int (10)) + (Prims.of_int (680)) + (Prims.of_int (106))) + (Prims.mk_range + "FStar.InteractiveHelpers.PostProcess.fst" + (Prims.of_int (681)) + (Prims.of_int (10)) + (Prims.of_int (681)) + (Prims.of_int (17))) + (if + Prims.op_Negation + (FStar_Pervasives_Native.uu___is_Some + (FStar_InteractiveHelpers_Base.genv_get + ares.ge + bv)) + then + Obj.magic + (Obj.repr + (FStar_InteractiveHelpers_Base.mfail + "unfold_in_assert_or_assume: can't unfold a variable locally introduced in an assertion")) + else + Obj.magic + (Obj.repr + (FStar_Tactics_Effect.lift_div_tac + (fun + uu___6 -> + ())))) + (fun + uu___5 -> + FStar_Tactics_Effect.lift_div_tac + (fun + uu___6 -> + FStar_Pervasives_Native.Some + bv)))) + uu___4)) + | + uu___4 -> + Obj.magic + (FStar_Tactics_Effect.tac_bind + (Prims.mk_range + "FStar.InteractiveHelpers.PostProcess.fst" + (Prims.of_int (683)) + (Prims.of_int (10)) + (Prims.of_int (683)) + (Prims.of_int (96))) + (Prims.mk_range + "FStar.InteractiveHelpers.PostProcess.fst" + (Prims.of_int (684)) + (Prims.of_int (10)) + (Prims.of_int (684)) + (Prims.of_int (14))) + (Obj.magic + (FStar_Tactics_Effect.tac_bind + (Prims.mk_range + "FStar.InteractiveHelpers.PostProcess.fst" + (Prims.of_int (683)) + (Prims.of_int (24)) + (Prims.of_int (683)) + (Prims.of_int (96))) + (Prims.mk_range + "FStar.InteractiveHelpers.PostProcess.fst" + (Prims.of_int (683)) + (Prims.of_int (10)) + (Prims.of_int (683)) + (Prims.of_int (96))) + (Obj.magic + (FStar_Tactics_Effect.tac_bind + (Prims.mk_range + "FStar.InteractiveHelpers.PostProcess.fst" + (Prims.of_int (683)) + (Prims.of_int (69)) + (Prims.of_int (683)) + (Prims.of_int (95))) + (Prims.mk_range + "prims.fst" + (Prims.of_int (606)) + (Prims.of_int (19)) + (Prims.of_int (606)) + (Prims.of_int (31))) + (Obj.magic + (FStar_Tactics_Builtins.term_to_string + unf_res.res)) + (fun + uu___5 -> + FStar_Tactics_Effect.lift_div_tac + (fun + uu___6 -> + Prims.strcat + "The focused term is an arbitrary term: " + uu___5)))) + (fun + uu___5 -> + (fun + uu___5 -> + Obj.magic + (FStar_InteractiveHelpers_Base.print_dbg + dbg + uu___5)) + uu___5))) + (fun + uu___5 -> + FStar_Tactics_Effect.lift_div_tac + (fun + uu___6 -> + FStar_Pervasives_Native.None)))) + (fun + uu___4 -> + (fun + opt_bv -> + Obj.magic + (FStar_Tactics_Effect.tac_bind + (Prims.mk_range + "FStar.InteractiveHelpers.PostProcess.fst" + (Prims.of_int (686)) + (Prims.of_int (23)) + (Prims.of_int (686)) + (Prims.of_int (79))) + (Prims.mk_range + "FStar.InteractiveHelpers.PostProcess.fst" + (Prims.of_int (686)) + (Prims.of_int (6)) + (Prims.of_int (700)) + (Prims.of_int (19))) + (Obj.magic + (find_context_equality + dbg + ares.ge + unf_res.res + parents + [])) + (fun + uu___4 -> + (fun + uu___4 -> + match uu___4 + with + | + (ge1, + eq_tm) -> + Obj.magic + (FStar_Tactics_Effect.tac_bind + (Prims.mk_range + "FStar.InteractiveHelpers.PostProcess.fst" + (Prims.of_int (689)) + (Prims.of_int (8)) + (Prims.of_int (691)) + (Prims.of_int (19))) + (Prims.mk_range + "FStar.InteractiveHelpers.PostProcess.fst" + (Prims.of_int (694)) + (Prims.of_int (6)) + (Prims.of_int (700)) + (Prims.of_int (19))) + (FStar_Tactics_Effect.lift_div_tac + (fun + uu___5 -> + match eq_tm + with + | + FStar_Pervasives_Native.Some + eq_tm1 -> + FStar_Pervasives_Native.Some + eq_tm1 + | + uu___6 -> + FStar_Pervasives_Native.None)) + (fun + uu___5 -> + (fun + opt_eq_tm + -> + Obj.magic + (FStar_Tactics_Effect.tac_bind + (Prims.mk_range + "FStar.InteractiveHelpers.PostProcess.fst" + (Prims.of_int (695)) + (Prims.of_int (8)) + (Prims.of_int (698)) + (Prims.of_int (19))) + (Prims.mk_range + "FStar.InteractiveHelpers.PostProcess.fst" + (Prims.of_int (700)) + (Prims.of_int (6)) + (Prims.of_int (700)) + (Prims.of_int (19))) + (match + (opt_bv, + opt_eq_tm) + with + | + (FStar_Pervasives_Native.Some + bv, + FStar_Pervasives_Native.Some + eq_tm1) + -> + Obj.magic + (Obj.repr + (FStar_Tactics_Effect.tac_bind + (Prims.mk_range + "FStar.InteractiveHelpers.PostProcess.fst" + (Prims.of_int (696)) + (Prims.of_int (38)) + (Prims.of_int (696)) + (Prims.of_int (81))) + (Prims.mk_range + "FStar.InteractiveHelpers.PostProcess.fst" + (Prims.of_int (696)) + (Prims.of_int (33)) + (Prims.of_int (696)) + (Prims.of_int (81))) + (Obj.magic + (FStar_InteractiveHelpers_Base.apply_subst + ge1.FStar_InteractiveHelpers_Base.env + subterm + [ + (bv, + eq_tm1)])) + (fun + uu___5 -> + FStar_Tactics_Effect.lift_div_tac + (fun + uu___6 -> + FStar_Pervasives_Native.Some + uu___5)))) + | + (FStar_Pervasives_Native.None, + FStar_Pervasives_Native.Some + eq_tm1) + -> + Obj.magic + (Obj.repr + (FStar_Tactics_Effect.tac_bind + (Prims.mk_range + "FStar.InteractiveHelpers.PostProcess.fst" + (Prims.of_int (697)) + (Prims.of_int (35)) + (Prims.of_int (697)) + (Prims.of_int (82))) + (Prims.mk_range + "FStar.InteractiveHelpers.PostProcess.fst" + (Prims.of_int (697)) + (Prims.of_int (30)) + (Prims.of_int (697)) + (Prims.of_int (82))) + (Obj.magic + (replace_term_in + dbg + unf_res.res + eq_tm1 + subterm)) + (fun + uu___5 -> + FStar_Tactics_Effect.lift_div_tac + (fun + uu___6 -> + FStar_Pervasives_Native.Some + uu___5)))) + | + uu___5 -> + Obj.magic + (Obj.repr + (FStar_Tactics_Effect.lift_div_tac + (fun + uu___6 -> + FStar_Pervasives_Native.None)))) + (fun + subterm' + -> + FStar_Tactics_Effect.lift_div_tac + (fun + uu___5 -> + (ge1, + subterm'))))) + uu___5))) + uu___4))) + uu___4))) + uu___4))) + (fun + uu___3 -> + (fun + uu___3 -> + match uu___3 + with + | + (ge1, + opt_unf_tm) + -> + Obj.magic + (FStar_Tactics_Effect.tac_bind + (Prims.mk_range + "FStar.InteractiveHelpers.PostProcess.fst" + (Prims.of_int (711)) + (Prims.of_int (4)) + (Prims.of_int (727)) + (Prims.of_int (9))) + (Prims.mk_range + "FStar.InteractiveHelpers.PostProcess.fst" + (Prims.of_int (710)) + (Prims.of_int (2)) + (Prims.of_int (739)) + (Prims.of_int (30))) + (match opt_unf_tm + with + | + FStar_Pervasives_Native.Some + unf_tm -> + Obj.magic + (Obj.repr + (FStar_Tactics_Effect.lift_div_tac + (fun + uu___4 -> + (ge1, + unf_tm)))) + | + FStar_Pervasives_Native.None + -> + Obj.magic + (Obj.repr + (FStar_Tactics_Effect.tac_bind + (Prims.mk_range + "FStar.InteractiveHelpers.PostProcess.fst" + (Prims.of_int (714)) + (Prims.of_int (18)) + (Prims.of_int (714)) + (Prims.of_int (65))) + (Prims.mk_range + "FStar.InteractiveHelpers.PostProcess.fst" + (Prims.of_int (714)) + (Prims.of_int (12)) + (Prims.of_int (726)) + (Prims.of_int (42))) + (Obj.magic + (FStar_Tactics_Effect.tac_bind + (Prims.mk_range + "FStar.InteractiveHelpers.PostProcess.fst" + (Prims.of_int (714)) + (Prims.of_int (26)) + (Prims.of_int (714)) + (Prims.of_int (65))) + (Prims.mk_range + "FStar.InteractiveHelpers.PostProcess.fst" + (Prims.of_int (714)) + (Prims.of_int (18)) + (Prims.of_int (714)) + (Prims.of_int (65))) + (Obj.magic + (strip_implicit_parameters + unf_res.res)) + (fun + uu___4 -> + (fun + uu___4 -> + Obj.magic + (FStar_Tactics_Builtins.inspect + uu___4)) + uu___4))) + (fun + uu___4 -> + (fun + uu___4 -> + match uu___4 + with + | + FStar_Reflection_Data.Tv_FVar + fv -> + Obj.magic + (FStar_Tactics_Effect.tac_bind + (Prims.mk_range + "FStar.InteractiveHelpers.PostProcess.fst" + (Prims.of_int (716)) + (Prims.of_int (8)) + (Prims.of_int (717)) + (Prims.of_int (41))) + (Prims.mk_range + "FStar.InteractiveHelpers.PostProcess.fst" + (Prims.of_int (719)) + (Prims.of_int (8)) + (Prims.of_int (722)) + (Prims.of_int (21))) + (Obj.magic + (FStar_InteractiveHelpers_Base.print_dbg + dbg + (Prims.strcat + "The focused term is a top identifier with implicit parameters: " + (FStar_Reflection_Derived.fv_to_string + fv)))) + (fun + uu___5 -> + (fun + uu___5 -> + Obj.magic + (FStar_Tactics_Effect.tac_bind + (Prims.mk_range + "FStar.InteractiveHelpers.PostProcess.fst" + (Prims.of_int (719)) + (Prims.of_int (20)) + (Prims.of_int (719)) + (Prims.of_int (48))) + (Prims.mk_range + "FStar.InteractiveHelpers.PostProcess.fst" + (Prims.of_int (720)) + (Prims.of_int (8)) + (Prims.of_int (722)) + (Prims.of_int (21))) + (FStar_Tactics_Effect.lift_div_tac + (fun + uu___6 -> + FStar_Reflection_Derived.flatten_name + (FStar_Reflection_Builtins.inspect_fv + fv))) + (fun + uu___6 -> + (fun + fname -> + Obj.magic + (FStar_Tactics_Effect.tac_bind + (Prims.mk_range + "FStar.InteractiveHelpers.PostProcess.fst" + (Prims.of_int (720)) + (Prims.of_int (23)) + (Prims.of_int (720)) + (Prims.of_int (79))) + (Prims.mk_range + "FStar.InteractiveHelpers.PostProcess.fst" + (Prims.of_int (721)) + (Prims.of_int (8)) + (Prims.of_int (722)) + (Prims.of_int (21))) + (Obj.magic + (FStar_Tactics_Builtins.norm_term_env + ge1.FStar_InteractiveHelpers_Base.env + [ + FStar_Pervasives.delta_only + [fname]; + FStar_Pervasives.zeta] + subterm)) + (fun + uu___6 -> + (fun + subterm' + -> + Obj.magic + (FStar_Tactics_Effect.tac_bind + (Prims.mk_range + "FStar.InteractiveHelpers.PostProcess.fst" + (Prims.of_int (721)) + (Prims.of_int (8)) + (Prims.of_int (721)) + (Prims.of_int (72))) + (Prims.mk_range + "FStar.InteractiveHelpers.PostProcess.fst" + (Prims.of_int (722)) + (Prims.of_int (8)) + (Prims.of_int (722)) + (Prims.of_int (21))) + (Obj.magic + (FStar_Tactics_Effect.tac_bind + (Prims.mk_range + "FStar.InteractiveHelpers.PostProcess.fst" + (Prims.of_int (721)) + (Prims.of_int (22)) + (Prims.of_int (721)) + (Prims.of_int (72))) + (Prims.mk_range + "FStar.InteractiveHelpers.PostProcess.fst" + (Prims.of_int (721)) + (Prims.of_int (8)) + (Prims.of_int (721)) + (Prims.of_int (72))) + (Obj.magic + (FStar_Tactics_Effect.tac_bind + (Prims.mk_range + "FStar.InteractiveHelpers.PostProcess.fst" + (Prims.of_int (721)) + (Prims.of_int (48)) + (Prims.of_int (721)) + (Prims.of_int (71))) + (Prims.mk_range + "prims.fst" + (Prims.of_int (606)) + (Prims.of_int (19)) + (Prims.of_int (606)) + (Prims.of_int (31))) + (Obj.magic + (FStar_Tactics_Builtins.term_to_string + subterm')) + (fun + uu___6 -> + FStar_Tactics_Effect.lift_div_tac + (fun + uu___7 -> + Prims.strcat + "Normalized subterm: " + uu___6)))) + (fun + uu___6 -> + (fun + uu___6 -> + Obj.magic + (FStar_InteractiveHelpers_Base.print_dbg + dbg + uu___6)) + uu___6))) + (fun + uu___6 -> + FStar_Tactics_Effect.lift_div_tac + (fun + uu___7 -> + (ge1, + subterm'))))) + uu___6))) + uu___6))) + uu___5)) + | + uu___5 -> + Obj.magic + (FStar_Tactics_Effect.tac_bind + (Prims.mk_range + "FStar.InteractiveHelpers.PostProcess.fst" + (Prims.of_int (724)) + (Prims.of_int (14)) + (Prims.of_int (726)) + (Prims.of_int (42))) + (Prims.mk_range + "FStar.InteractiveHelpers.PostProcess.fst" + (Prims.of_int (724)) + (Prims.of_int (8)) + (Prims.of_int (726)) + (Prims.of_int (42))) + (Obj.magic + (FStar_Tactics_Effect.tac_bind + (Prims.mk_range + "FStar.InteractiveHelpers.PostProcess.fst" + (Prims.of_int (725)) + (Prims.of_int (15)) + (Prims.of_int (726)) + (Prims.of_int (41))) + (Prims.mk_range + "prims.fst" + (Prims.of_int (606)) + (Prims.of_int (19)) + (Prims.of_int (606)) + (Prims.of_int (31))) + (Obj.magic + (FStar_Tactics_Effect.tac_bind + (Prims.mk_range + "FStar.InteractiveHelpers.PostProcess.fst" + (Prims.of_int (726)) + (Prims.of_int (15)) + (Prims.of_int (726)) + (Prims.of_int (41))) + (Prims.mk_range + "prims.fst" + (Prims.of_int (606)) + (Prims.of_int (19)) + (Prims.of_int (606)) + (Prims.of_int (31))) + (Obj.magic + (FStar_Tactics_Builtins.term_to_string + unf_res.res)) + (fun + uu___6 -> + FStar_Tactics_Effect.lift_div_tac + (fun + uu___7 -> + Prims.strcat + "couldn't find equalities with which to rewrite: " + uu___6)))) + (fun + uu___6 -> + FStar_Tactics_Effect.lift_div_tac + (fun + uu___7 -> + Prims.strcat + "unfold_in_assert_or_assume: " + uu___6)))) + (fun + uu___6 -> + (fun + uu___6 -> + Obj.magic + (FStar_InteractiveHelpers_Base.mfail + uu___6)) + uu___6))) + uu___4)))) + (fun + uu___4 -> + (fun + uu___4 -> + match uu___4 + with + | + (ge2, + unf_tm) + -> + Obj.magic + (FStar_Tactics_Effect.tac_bind + (Prims.mk_range + "FStar.InteractiveHelpers.PostProcess.fst" + (Prims.of_int (730)) + (Prims.of_int (21)) + (Prims.of_int (730)) + (Prims.of_int (35))) + (Prims.mk_range + "FStar.InteractiveHelpers.PostProcess.fst" + (Prims.of_int (731)) + (Prims.of_int (2)) + (Prims.of_int (739)) + (Prims.of_int (30))) + (Obj.magic + (rebuild1 + unf_tm)) + (fun + uu___5 -> + (fun + final_assert + -> + Obj.magic + (FStar_Tactics_Effect.tac_bind + (Prims.mk_range + "FStar.InteractiveHelpers.PostProcess.fst" + (Prims.of_int (731)) + (Prims.of_int (21)) + (Prims.of_int (731)) + (Prims.of_int (51))) + (Prims.mk_range + "FStar.InteractiveHelpers.PostProcess.fst" + (Prims.of_int (732)) + (Prims.of_int (2)) + (Prims.of_int (739)) + (Prims.of_int (30))) + (Obj.magic + (FStar_InteractiveHelpers_Base.prettify_term + dbg + final_assert)) + (fun + uu___5 -> + (fun + final_assert1 + -> + Obj.magic + (FStar_Tactics_Effect.tac_bind + (Prims.mk_range + "FStar.InteractiveHelpers.PostProcess.fst" + (Prims.of_int (732)) + (Prims.of_int (2)) + (Prims.of_int (732)) + (Prims.of_int (71))) + (Prims.mk_range + "FStar.InteractiveHelpers.PostProcess.fst" + (Prims.of_int (733)) + (Prims.of_int (2)) + (Prims.of_int (739)) + (Prims.of_int (30))) + (Obj.magic + (FStar_Tactics_Effect.tac_bind + (Prims.mk_range + "FStar.InteractiveHelpers.PostProcess.fst" + (Prims.of_int (732)) + (Prims.of_int (16)) + (Prims.of_int (732)) + (Prims.of_int (71))) + (Prims.mk_range + "FStar.InteractiveHelpers.PostProcess.fst" + (Prims.of_int (732)) + (Prims.of_int (2)) + (Prims.of_int (732)) + (Prims.of_int (71))) + (Obj.magic + (FStar_Tactics_Effect.tac_bind + (Prims.mk_range + "FStar.InteractiveHelpers.PostProcess.fst" + (Prims.of_int (732)) + (Prims.of_int (43)) + (Prims.of_int (732)) + (Prims.of_int (70))) + (Prims.mk_range + "prims.fst" + (Prims.of_int (606)) + (Prims.of_int (19)) + (Prims.of_int (606)) + (Prims.of_int (31))) + (Obj.magic + (FStar_Tactics_Builtins.term_to_string + final_assert1)) + (fun + uu___5 -> + FStar_Tactics_Effect.lift_div_tac + (fun + uu___6 -> + Prims.strcat + "-> Final assertion:\n" + uu___5)))) + (fun + uu___5 -> + (fun + uu___5 -> + Obj.magic + (FStar_InteractiveHelpers_Base.print_dbg + dbg + uu___5)) + uu___5))) + (fun + uu___5 -> + (fun + uu___5 -> + Obj.magic + (FStar_Tactics_Effect.tac_bind + (Prims.mk_range + "FStar.InteractiveHelpers.PostProcess.fst" + (Prims.of_int (734)) + (Prims.of_int (4)) + (Prims.of_int (734)) + (Prims.of_int (94))) + (Prims.mk_range + "FStar.InteractiveHelpers.PostProcess.fst" + (Prims.of_int (737)) + (Prims.of_int (2)) + (Prims.of_int (739)) + (Prims.of_int (30))) + (FStar_Tactics_Effect.lift_div_tac + (fun + uu___6 -> + if + insert_before + then + FStar_InteractiveHelpers_Propositions.mk_assertions + [final_assert1] + [] + else + FStar_InteractiveHelpers_Propositions.mk_assertions + [] + [final_assert1])) + (fun + uu___6 -> + (fun + asserts + -> + Obj.magic + (FStar_Tactics_Effect.tac_bind + (Prims.mk_range + "FStar.InteractiveHelpers.PostProcess.fst" + (Prims.of_int (737)) + (Prims.of_int (21)) + (Prims.of_int (737)) + (Prims.of_int (79))) + (Prims.mk_range + "FStar.InteractiveHelpers.PostProcess.fst" + (Prims.of_int (737)) + (Prims.of_int (2)) + (Prims.of_int (739)) + (Prims.of_int (30))) + (Obj.magic + (FStar_InteractiveHelpers_Output.subst_shadowed_with_abs_in_assertions + dbg ge2 + FStar_Pervasives_Native.None + asserts)) + (fun + uu___6 -> + (fun + uu___6 -> + match uu___6 + with + | + (ge3, + asserts1) + -> + Obj.magic + (FStar_InteractiveHelpers_Output.printout_success + ge3 + asserts1)) + uu___6))) + uu___6))) + uu___5))) + uu___5))) + uu___5))) + uu___4))) + uu___3))) + uu___3))) + uu___2))) + uu___2))) uu___1))) + uu___1))) uu___1))) uu___) +let (pp_unfold_in_assert_or_assume : + Prims.bool -> unit -> (unit, unit) FStar_Tactics_Effect.tac_repr) = + fun dbg -> + fun uu___ -> + FStar_Tactics_Derived.try_with + (fun uu___1 -> + match () with + | () -> + FStar_Tactics_Effect.tac_bind + (Prims.mk_range "FStar.InteractiveHelpers.PostProcess.fst" + (Prims.of_int (745)) (Prims.of_int (14)) + (Prims.of_int (745)) (Prims.of_int (53))) + (Prims.mk_range "FStar.InteractiveHelpers.PostProcess.fst" + (Prims.of_int (746)) (Prims.of_int (4)) + (Prims.of_int (747)) (Prims.of_int (16))) + (Obj.magic (find_focused_assert_in_current_goal dbg)) + (fun uu___2 -> + (fun res -> + Obj.magic + (FStar_Tactics_Effect.tac_bind + (Prims.mk_range + "FStar.InteractiveHelpers.PostProcess.fst" + (Prims.of_int (746)) (Prims.of_int (4)) + (Prims.of_int (746)) (Prims.of_int (38))) + (Prims.mk_range + "FStar.InteractiveHelpers.PostProcess.fst" + (Prims.of_int (747)) (Prims.of_int (4)) + (Prims.of_int (747)) (Prims.of_int (16))) + (Obj.magic (unfold_in_assert_or_assume dbg res)) + (fun uu___2 -> + (fun uu___2 -> Obj.magic (end_proof ())) + uu___2))) uu___2)) + (fun uu___1 -> + match uu___1 with + | FStar_InteractiveHelpers_Base.MetaAnalysis msg -> + FStar_Tactics_Effect.tac_bind + (Prims.mk_range "FStar.InteractiveHelpers.PostProcess.fst" + (Prims.of_int (748)) (Prims.of_int (29)) + (Prims.of_int (748)) (Prims.of_int (49))) + (Prims.mk_range "FStar.InteractiveHelpers.PostProcess.fst" + (Prims.of_int (748)) (Prims.of_int (51)) + (Prims.of_int (748)) (Prims.of_int (63))) + (Obj.magic + (FStar_InteractiveHelpers_Output.printout_failure msg)) + (fun uu___2 -> + (fun uu___2 -> Obj.magic (end_proof ())) uu___2) + | err -> FStar_Tactics_Effect.raise err) +let _ = + FStar_Tactics_Native.register_tactic + "FStar.InteractiveHelpers.PostProcess.pp_unfold_in_assert_or_assume" + (Prims.of_int (3)) + (fun psc -> + fun ncb -> + fun args -> + FStar_Tactics_InterpFuns.mk_tactic_interpretation_2 + (FStar_Tactics_Native.from_tactic_2 + pp_unfold_in_assert_or_assume) FStar_Syntax_Embeddings.e_bool + FStar_Syntax_Embeddings.e_unit FStar_Syntax_Embeddings.e_unit + psc ncb args) \ No newline at end of file diff --git a/ocaml/fstar-lib/generated/FStar_InteractiveHelpers_Propositions.ml b/ocaml/fstar-lib/generated/FStar_InteractiveHelpers_Propositions.ml new file mode 100644 index 00000000000..6b7e46a0313 --- /dev/null +++ b/ocaml/fstar-lib/generated/FStar_InteractiveHelpers_Propositions.ml @@ -0,0 +1,125 @@ +open Prims +let (term_eq : + FStar_Reflection_Types.term -> + FStar_Reflection_Types.term -> + (Prims.bool, unit) FStar_Tactics_Effect.tac_repr) + = FStar_Tactics_Builtins.term_eq_old +type proposition = FStar_Reflection_Types.term +let (proposition_to_string : + proposition -> (Prims.string, unit) FStar_Tactics_Effect.tac_repr) = + fun p -> FStar_Tactics_Builtins.term_to_string p +type assertions = + { + pres: proposition Prims.list ; + posts: proposition Prims.list } +let (__proj__Mkassertions__item__pres : assertions -> proposition Prims.list) + = fun projectee -> match projectee with | { pres; posts;_} -> pres +let (__proj__Mkassertions__item__posts : + assertions -> proposition Prims.list) = + fun projectee -> match projectee with | { pres; posts;_} -> posts +let (mk_assertions : + proposition Prims.list -> proposition Prims.list -> assertions) = + fun pres -> fun posts -> { pres; posts } +let (simpl_norm_steps : FStar_Pervasives.norm_step Prims.list) = + [FStar_Pervasives.primops; + FStar_Pervasives.simplify; + FStar_Pervasives.iota] +let (is_trivial_proposition : + proposition -> (Prims.bool, unit) FStar_Tactics_Effect.tac_repr) = + fun p -> + term_eq + (FStar_Reflection_Builtins.pack_ln + (FStar_Reflection_Data.Tv_FVar + (FStar_Reflection_Builtins.pack_fv ["Prims"; "l_True"]))) p +let (simp_filter_proposition : + FStar_Reflection_Types.env -> + FStar_Pervasives.norm_step Prims.list -> + proposition -> + (proposition Prims.list, unit) FStar_Tactics_Effect.tac_repr) + = + fun e -> + fun steps -> + fun p -> + FStar_Tactics_Effect.tac_bind + (Prims.mk_range "FStar.InteractiveHelpers.Propositions.fst" + (Prims.of_int (52)) (Prims.of_int (14)) (Prims.of_int (52)) + (Prims.of_int (37))) + (Prims.mk_range "FStar.InteractiveHelpers.Propositions.fst" + (Prims.of_int (54)) (Prims.of_int (2)) (Prims.of_int (55)) + (Prims.of_int (14))) + (Obj.magic (FStar_Tactics_Builtins.norm_term_env e steps p)) + (fun uu___ -> + (fun prop1 -> + Obj.magic + (FStar_Tactics_Effect.tac_bind + (Prims.mk_range + "FStar.InteractiveHelpers.Propositions.fst" + (Prims.of_int (54)) (Prims.of_int (5)) + (Prims.of_int (54)) (Prims.of_int (34))) + (Prims.mk_range + "FStar.InteractiveHelpers.Propositions.fst" + (Prims.of_int (54)) (Prims.of_int (2)) + (Prims.of_int (55)) (Prims.of_int (14))) + (Obj.magic + (term_eq + (FStar_Reflection_Builtins.pack_ln + (FStar_Reflection_Data.Tv_FVar + (FStar_Reflection_Builtins.pack_fv + ["Prims"; "l_True"]))) prop1)) + (fun uu___ -> + FStar_Tactics_Effect.lift_div_tac + (fun uu___1 -> if uu___ then [] else [prop1])))) + uu___) +let (simp_filter_propositions : + FStar_Reflection_Types.env -> + FStar_Pervasives.norm_step Prims.list -> + proposition Prims.list -> + (proposition Prims.list, unit) FStar_Tactics_Effect.tac_repr) + = + fun e -> + fun steps -> + fun pl -> + FStar_Tactics_Effect.tac_bind + (Prims.mk_range "FStar.InteractiveHelpers.Propositions.fst" + (Prims.of_int (59)) (Prims.of_int (15)) (Prims.of_int (59)) + (Prims.of_int (57))) + (Prims.mk_range "FStar.InteractiveHelpers.Propositions.fst" + (Prims.of_int (59)) (Prims.of_int (2)) (Prims.of_int (59)) + (Prims.of_int (57))) + (Obj.magic + (FStar_Tactics_Util.map (simp_filter_proposition e steps) pl)) + (fun uu___ -> + FStar_Tactics_Effect.lift_div_tac + (fun uu___1 -> FStar_List_Tot_Base.flatten uu___)) +let (simp_filter_assertions : + FStar_Reflection_Types.env -> + FStar_Pervasives.norm_step Prims.list -> + assertions -> (assertions, unit) FStar_Tactics_Effect.tac_repr) + = + fun e -> + fun steps -> + fun a -> + FStar_Tactics_Effect.tac_bind + (Prims.mk_range "FStar.InteractiveHelpers.Propositions.fst" + (Prims.of_int (63)) (Prims.of_int (13)) (Prims.of_int (63)) + (Prims.of_int (52))) + (Prims.mk_range "FStar.InteractiveHelpers.Propositions.fst" + (Prims.of_int (64)) (Prims.of_int (2)) (Prims.of_int (65)) + (Prims.of_int (26))) + (Obj.magic (simp_filter_propositions e steps a.pres)) + (fun uu___ -> + (fun pres -> + Obj.magic + (FStar_Tactics_Effect.tac_bind + (Prims.mk_range + "FStar.InteractiveHelpers.Propositions.fst" + (Prims.of_int (64)) (Prims.of_int (14)) + (Prims.of_int (64)) (Prims.of_int (54))) + (Prims.mk_range + "FStar.InteractiveHelpers.Propositions.fst" + (Prims.of_int (65)) (Prims.of_int (2)) + (Prims.of_int (65)) (Prims.of_int (26))) + (Obj.magic (simp_filter_propositions e steps a.posts)) + (fun posts -> + FStar_Tactics_Effect.lift_div_tac + (fun uu___ -> mk_assertions pres posts)))) uu___) \ No newline at end of file diff --git a/src/ocaml-output/FStar_Interactive_CompletionTable.ml b/ocaml/fstar-lib/generated/FStar_Interactive_CompletionTable.ml similarity index 100% rename from src/ocaml-output/FStar_Interactive_CompletionTable.ml rename to ocaml/fstar-lib/generated/FStar_Interactive_CompletionTable.ml diff --git a/src/ocaml-output/FStar_Interactive_Ide.ml b/ocaml/fstar-lib/generated/FStar_Interactive_Ide.ml similarity index 100% rename from src/ocaml-output/FStar_Interactive_Ide.ml rename to ocaml/fstar-lib/generated/FStar_Interactive_Ide.ml diff --git a/src/ocaml-output/FStar_Interactive_JsonHelper.ml b/ocaml/fstar-lib/generated/FStar_Interactive_JsonHelper.ml similarity index 100% rename from src/ocaml-output/FStar_Interactive_JsonHelper.ml rename to ocaml/fstar-lib/generated/FStar_Interactive_JsonHelper.ml diff --git a/src/ocaml-output/FStar_Interactive_Legacy.ml b/ocaml/fstar-lib/generated/FStar_Interactive_Legacy.ml similarity index 100% rename from src/ocaml-output/FStar_Interactive_Legacy.ml rename to ocaml/fstar-lib/generated/FStar_Interactive_Legacy.ml diff --git a/src/ocaml-output/FStar_Interactive_Lsp.ml b/ocaml/fstar-lib/generated/FStar_Interactive_Lsp.ml similarity index 100% rename from src/ocaml-output/FStar_Interactive_Lsp.ml rename to ocaml/fstar-lib/generated/FStar_Interactive_Lsp.ml diff --git a/src/ocaml-output/FStar_Interactive_PushHelper.ml b/ocaml/fstar-lib/generated/FStar_Interactive_PushHelper.ml similarity index 100% rename from src/ocaml-output/FStar_Interactive_PushHelper.ml rename to ocaml/fstar-lib/generated/FStar_Interactive_PushHelper.ml diff --git a/src/ocaml-output/FStar_Interactive_QueryHelper.ml b/ocaml/fstar-lib/generated/FStar_Interactive_QueryHelper.ml similarity index 100% rename from src/ocaml-output/FStar_Interactive_QueryHelper.ml rename to ocaml/fstar-lib/generated/FStar_Interactive_QueryHelper.ml diff --git a/ocaml/fstar-lib/generated/FStar_LexicographicOrdering.ml b/ocaml/fstar-lib/generated/FStar_LexicographicOrdering.ml new file mode 100644 index 00000000000..0f2fcadb455 --- /dev/null +++ b/ocaml/fstar-lib/generated/FStar_LexicographicOrdering.ml @@ -0,0 +1,211 @@ +open Prims +type ('a, 'b, 'rua, 'rub, 'dummyV0, 'dummyV1) lex_t = + | Left_lex of 'a * 'a * 'b * 'b * 'rua + | Right_lex of 'a * 'b * 'b * 'rub +let uu___is_Left_lex : + 'a 'b 'rua 'rub . + ('a, 'b) Prims.dtuple2 -> + ('a, 'b) Prims.dtuple2 -> + ('a, 'b, 'rua, 'rub, unit, unit) lex_t -> Prims.bool + = + fun uu___ -> + fun uu___1 -> + fun projectee -> + match projectee with + | Left_lex (x1, x2, y1, y2, _4) -> true + | uu___2 -> false +let __proj__Left_lex__item__x1 : + 'a 'b 'rua 'rub . + ('a, 'b) Prims.dtuple2 -> + ('a, 'b) Prims.dtuple2 -> ('a, 'b, 'rua, 'rub, unit, unit) lex_t -> 'a + = + fun uu___ -> + fun uu___1 -> + fun projectee -> + match projectee with | Left_lex (x1, x2, y1, y2, _4) -> x1 +let __proj__Left_lex__item__x2 : + 'a 'b 'rua 'rub . + ('a, 'b) Prims.dtuple2 -> + ('a, 'b) Prims.dtuple2 -> ('a, 'b, 'rua, 'rub, unit, unit) lex_t -> 'a + = + fun uu___ -> + fun uu___1 -> + fun projectee -> + match projectee with | Left_lex (x1, x2, y1, y2, _4) -> x2 +let __proj__Left_lex__item__y1 : + 'a 'b 'rua 'rub . + ('a, 'b) Prims.dtuple2 -> + ('a, 'b) Prims.dtuple2 -> ('a, 'b, 'rua, 'rub, unit, unit) lex_t -> 'b + = + fun uu___ -> + fun uu___1 -> + fun projectee -> + match projectee with | Left_lex (x1, x2, y1, y2, _4) -> y1 +let __proj__Left_lex__item__y2 : + 'a 'b 'rua 'rub . + ('a, 'b) Prims.dtuple2 -> + ('a, 'b) Prims.dtuple2 -> ('a, 'b, 'rua, 'rub, unit, unit) lex_t -> 'b + = + fun uu___ -> + fun uu___1 -> + fun projectee -> + match projectee with | Left_lex (x1, x2, y1, y2, _4) -> y2 +let __proj__Left_lex__item___4 : + 'a 'b 'rua 'rub . + ('a, 'b) Prims.dtuple2 -> + ('a, 'b) Prims.dtuple2 -> + ('a, 'b, 'rua, 'rub, unit, unit) lex_t -> 'rua + = + fun uu___ -> + fun uu___1 -> + fun projectee -> + match projectee with | Left_lex (x1, x2, y1, y2, _4) -> _4 +let uu___is_Right_lex : + 'a 'b 'rua 'rub . + ('a, 'b) Prims.dtuple2 -> + ('a, 'b) Prims.dtuple2 -> + ('a, 'b, 'rua, 'rub, unit, unit) lex_t -> Prims.bool + = + fun uu___ -> + fun uu___1 -> + fun projectee -> + match projectee with + | Right_lex (x, y1, y2, _3) -> true + | uu___2 -> false +let __proj__Right_lex__item__x : + 'a 'b 'rua 'rub . + ('a, 'b) Prims.dtuple2 -> + ('a, 'b) Prims.dtuple2 -> ('a, 'b, 'rua, 'rub, unit, unit) lex_t -> 'a + = + fun uu___ -> + fun uu___1 -> + fun projectee -> match projectee with | Right_lex (x, y1, y2, _3) -> x +let __proj__Right_lex__item__y1 : + 'a 'b 'rua 'rub . + ('a, 'b) Prims.dtuple2 -> + ('a, 'b) Prims.dtuple2 -> ('a, 'b, 'rua, 'rub, unit, unit) lex_t -> 'b + = + fun uu___ -> + fun uu___1 -> + fun projectee -> match projectee with | Right_lex (x, y1, y2, _3) -> y1 +let __proj__Right_lex__item__y2 : + 'a 'b 'rua 'rub . + ('a, 'b) Prims.dtuple2 -> + ('a, 'b) Prims.dtuple2 -> ('a, 'b, 'rua, 'rub, unit, unit) lex_t -> 'b + = + fun uu___ -> + fun uu___1 -> + fun projectee -> match projectee with | Right_lex (x, y1, y2, _3) -> y2 +let __proj__Right_lex__item___3 : + 'a 'b 'rua 'rub . + ('a, 'b) Prims.dtuple2 -> + ('a, 'b) Prims.dtuple2 -> + ('a, 'b, 'rua, 'rub, unit, unit) lex_t -> 'rub + = + fun uu___ -> + fun uu___1 -> + fun projectee -> match projectee with | Right_lex (x, y1, y2, _3) -> _3 + +type ('a, 'b, 'rua, 'rub, 'uuuuu, 'uuuuu1) lex_aux = Obj.t +type ('a, 'b, 'rua, 'rub, 'wfua, 'wfub, 'uuuuu, 'uuuuu1) lex = Obj.t +let tuple_to_dep_tuple : 'a 'b . ('a * 'b) -> ('a, 'b) Prims.dtuple2 = + fun x -> + Prims.Mkdtuple2 + ((FStar_Pervasives_Native.fst x), (FStar_Pervasives_Native.snd x)) +type ('a, 'b, 'rua, 'rub, 'x, 'y) lex_t_non_dep = + ('a, 'b, 'rua, 'rub, unit, unit) lex_t + +type ('a, 'b, 'rua, 'rub, 'dummyV0, 'dummyV1) sym = + | Left_sym of 'a * 'a * 'b * 'rua + | Right_sym of 'a * 'b * 'b * 'rub +let uu___is_Left_sym : + 'a 'b 'rua 'rub . + ('a * 'b) -> + ('a * 'b) -> ('a, 'b, 'rua, 'rub, unit, unit) sym -> Prims.bool + = + fun uu___ -> + fun uu___1 -> + fun projectee -> + match projectee with + | Left_sym (x1, x2, y, _3) -> true + | uu___2 -> false +let __proj__Left_sym__item__x1 : + 'a 'b 'rua 'rub . + ('a * 'b) -> ('a * 'b) -> ('a, 'b, 'rua, 'rub, unit, unit) sym -> 'a + = + fun uu___ -> + fun uu___1 -> + fun projectee -> match projectee with | Left_sym (x1, x2, y, _3) -> x1 +let __proj__Left_sym__item__x2 : + 'a 'b 'rua 'rub . + ('a * 'b) -> ('a * 'b) -> ('a, 'b, 'rua, 'rub, unit, unit) sym -> 'a + = + fun uu___ -> + fun uu___1 -> + fun projectee -> match projectee with | Left_sym (x1, x2, y, _3) -> x2 +let __proj__Left_sym__item__y : + 'a 'b 'rua 'rub . + ('a * 'b) -> ('a * 'b) -> ('a, 'b, 'rua, 'rub, unit, unit) sym -> 'b + = + fun uu___ -> + fun uu___1 -> + fun projectee -> match projectee with | Left_sym (x1, x2, y, _3) -> y +let __proj__Left_sym__item___3 : + 'a 'b 'rua 'rub . + ('a * 'b) -> ('a * 'b) -> ('a, 'b, 'rua, 'rub, unit, unit) sym -> 'rua + = + fun uu___ -> + fun uu___1 -> + fun projectee -> match projectee with | Left_sym (x1, x2, y, _3) -> _3 +let uu___is_Right_sym : + 'a 'b 'rua 'rub . + ('a * 'b) -> + ('a * 'b) -> ('a, 'b, 'rua, 'rub, unit, unit) sym -> Prims.bool + = + fun uu___ -> + fun uu___1 -> + fun projectee -> + match projectee with + | Right_sym (x, y1, y2, _3) -> true + | uu___2 -> false +let __proj__Right_sym__item__x : + 'a 'b 'rua 'rub . + ('a * 'b) -> ('a * 'b) -> ('a, 'b, 'rua, 'rub, unit, unit) sym -> 'a + = + fun uu___ -> + fun uu___1 -> + fun projectee -> match projectee with | Right_sym (x, y1, y2, _3) -> x +let __proj__Right_sym__item__y1 : + 'a 'b 'rua 'rub . + ('a * 'b) -> ('a * 'b) -> ('a, 'b, 'rua, 'rub, unit, unit) sym -> 'b + = + fun uu___ -> + fun uu___1 -> + fun projectee -> match projectee with | Right_sym (x, y1, y2, _3) -> y1 +let __proj__Right_sym__item__y2 : + 'a 'b 'rua 'rub . + ('a * 'b) -> ('a * 'b) -> ('a, 'b, 'rua, 'rub, unit, unit) sym -> 'b + = + fun uu___ -> + fun uu___1 -> + fun projectee -> match projectee with | Right_sym (x, y1, y2, _3) -> y2 +let __proj__Right_sym__item___3 : + 'a 'b 'rua 'rub . + ('a * 'b) -> ('a * 'b) -> ('a, 'b, 'rua, 'rub, unit, unit) sym -> 'rub + = + fun uu___ -> + fun uu___1 -> + fun projectee -> match projectee with | Right_sym (x, y1, y2, _3) -> _3 +let sym_sub_lex : + 'a 'b 'rua 'rub . + ('a * 'b) -> + ('a * 'b) -> + ('a, 'b, 'rua, 'rub, unit, unit) sym -> + ('a, 'b, 'rua, 'rub, unit, unit) lex_t_non_dep + = + fun t1 -> + fun t2 -> + fun p -> + match p with + | Left_sym (x1, x2, y, p1) -> Left_lex (x1, x2, y, y, p1) + | Right_sym (x, y1, y2, p1) -> Right_lex (x, y1, y2, p1) diff --git a/ocaml/fstar-lib/generated/FStar_List_Tot_Properties.ml b/ocaml/fstar-lib/generated/FStar_List_Tot_Properties.ml new file mode 100644 index 00000000000..8bed928ff00 --- /dev/null +++ b/ocaml/fstar-lib/generated/FStar_List_Tot_Properties.ml @@ -0,0 +1,18 @@ +open Prims +type ('a, 'n) llist = 'a Prims.list +let rec rev' : 'a . 'a Prims.list -> 'a Prims.list = + fun uu___ -> + match uu___ with + | [] -> [] + | hd::tl -> FStar_List_Tot_Base.op_At (rev' tl) [hd] +let rev'T : 'uuuuu . unit -> 'uuuuu Prims.list -> 'uuuuu Prims.list = + fun uu___ -> rev' +let rec sorted : 'a . ('a -> 'a -> Prims.bool) -> 'a Prims.list -> Prims.bool + = + fun f -> + fun uu___ -> + match uu___ with + | [] -> true + | uu___1::[] -> true + | x::y::tl -> (f x y) && (sorted f (y :: tl)) +type ('a, 'f) total_order = unit \ No newline at end of file diff --git a/ocaml/fstar-lib/generated/FStar_MRef.ml b/ocaml/fstar-lib/generated/FStar_MRef.ml new file mode 100644 index 00000000000..d71cd8c5d87 --- /dev/null +++ b/ocaml/fstar-lib/generated/FStar_MRef.ml @@ -0,0 +1,13 @@ +open Prims +type ('uuuuu, 'p, 'rel) stable = unit +type ('a, 'b, 'r, 'p, 'h) p_pred = unit +type ('uuuuu, 'uuuuu1, 'r, 'p) token = unit FStar_ST.witnessed +let witness_token : + 'uuuuu 'uuuuu1 . ('uuuuu, 'uuuuu1) FStar_ST.mref -> unit -> unit = + fun m -> fun p -> () +let recall_token : + 'uuuuu 'uuuuu1 . ('uuuuu, 'uuuuu1) FStar_ST.mref -> unit -> unit = + fun m -> fun p -> () +type ('a, 'rel) spred = unit +let recall : 'p . unit -> unit = fun uu___ -> () +let witness : 'p . unit -> unit = fun uu___ -> () \ No newline at end of file diff --git a/src/ocaml-output/FStar_Main.ml b/ocaml/fstar-lib/generated/FStar_Main.ml similarity index 98% rename from src/ocaml-output/FStar_Main.ml rename to ocaml/fstar-lib/generated/FStar_Main.ml index 70fa5d09dee..ed1fe57ec5b 100644 --- a/src/ocaml-output/FStar_Main.ml +++ b/ocaml/fstar-lib/generated/FStar_Main.ml @@ -125,13 +125,9 @@ let (load_native_tactics : unit -> unit) = FStar_Compiler_Util.print1 "Will try to load cmxs files: %s\n" (FStar_String.concat ", " cmxs_files) else ()); - (let uu___3 = - let uu___4 = FStar_Options.no_load_fstartaclib () in - Prims.op_Negation uu___4 in - if uu___3 then FStar_Tactics_Load.try_load_lib () else ()); FStar_Tactics_Load.load_tactics cmxs_files; - (let uu___5 = FStar_Options.use_native_tactics () in - FStar_Compiler_Util.iter_opt uu___5 FStar_Tactics_Load.load_tactics_dir) + (let uu___4 = FStar_Options.use_native_tactics () in + FStar_Compiler_Util.iter_opt uu___4 FStar_Tactics_Load.load_tactics_dir) let (fstar_files : Prims.string Prims.list FStar_Pervasives_Native.option FStar_Compiler_Effect.ref) diff --git a/ocaml/fstar-lib/generated/FStar_Map.ml b/ocaml/fstar-lib/generated/FStar_Map.ml new file mode 100644 index 00000000000..4d2d4931b02 --- /dev/null +++ b/ocaml/fstar-lib/generated/FStar_Map.ml @@ -0,0 +1,78 @@ +open Prims +type ('key, 'value) t = + { + mappings: ('key, 'value) FStar_FunctionalExtensionality.restricted_t ; + domain: 'key FStar_Set.set } +let __proj__Mkt__item__mappings : + 'key 'value . + ('key, 'value) t -> + ('key, 'value) FStar_FunctionalExtensionality.restricted_t + = fun projectee -> match projectee with | { mappings; domain;_} -> mappings +let __proj__Mkt__item__domain : + 'key 'value . ('key, 'value) t -> 'key FStar_Set.set = + fun projectee -> match projectee with | { mappings; domain;_} -> domain +let sel : 'key 'value . ('key, 'value) t -> 'key -> 'value = + fun m -> fun k -> m.mappings k +let upd : + 'key 'value . ('key, 'value) t -> 'key -> 'value -> ('key, 'value) t = + fun m -> + fun k -> + fun v -> + { + mappings = + (FStar_FunctionalExtensionality.on_domain + (fun x -> if x = k then v else m.mappings x)); + domain = (FStar_Set.union m.domain (FStar_Set.singleton k)) + } +let const : 'key 'value . 'value -> ('key, 'value) t = + fun v -> + { + mappings = (FStar_FunctionalExtensionality.on_domain (fun uu___ -> v)); + domain = (FStar_Set.complement (FStar_Set.empty ())) + } +let domain : 'key 'value . ('key, 'value) t -> 'key FStar_Set.set = + fun m -> m.domain +let contains : 'key 'value . ('key, 'value) t -> 'key -> Prims.bool = + fun m -> fun k -> FStar_Set.mem k m.domain +let concat : + 'key 'value . ('key, 'value) t -> ('key, 'value) t -> ('key, 'value) t = + fun m1 -> + fun m2 -> + { + mappings = + (FStar_FunctionalExtensionality.on_domain + (fun x -> + if FStar_Set.mem x m2.domain + then m2.mappings x + else m1.mappings x)); + domain = (FStar_Set.union m1.domain m2.domain) + } +let map_val : + 'uuuuu 'uuuuu1 . + ('uuuuu -> 'uuuuu1) -> unit -> (Obj.t, 'uuuuu) t -> (Obj.t, 'uuuuu1) t + = + fun f -> + fun key -> + fun m -> + { + mappings = + (FStar_FunctionalExtensionality.on_domain + (fun x -> f (m.mappings x))); + domain = (m.domain) + } +let restrict : + 'key 'value . 'key FStar_Set.set -> ('key, 'value) t -> ('key, 'value) t = + fun s -> + fun m -> + { mappings = (m.mappings); domain = (FStar_Set.intersect s m.domain) } +let const_on : 'key 'value . 'key FStar_Set.set -> 'value -> ('key, 'value) t + = fun dom -> fun v -> restrict dom (const v) +let map_literal : 'k 'v . ('k -> 'v) -> ('k, 'v) t = + fun f -> + { + mappings = (FStar_FunctionalExtensionality.on_domain f); + domain = (FStar_Set.complement (FStar_Set.empty ())) + } +type ('key, 'value, 'm1, 'm2) disjoint_dom = unit +type ('key, 'value, 'm, 'dom) has_dom = unit +type ('key, 'value, 'm1, 'm2) equal = unit \ No newline at end of file diff --git a/ocaml/fstar-lib/generated/FStar_MarkovsPrinciple.ml b/ocaml/fstar-lib/generated/FStar_MarkovsPrinciple.ml new file mode 100644 index 00000000000..e8306abedb2 --- /dev/null +++ b/ocaml/fstar-lib/generated/FStar_MarkovsPrinciple.ml @@ -0,0 +1 @@ +open Prims \ No newline at end of file diff --git a/ocaml/fstar-lib/generated/FStar_Math_Euclid.ml b/ocaml/fstar-lib/generated/FStar_Math_Euclid.ml new file mode 100644 index 00000000000..003ea26500f --- /dev/null +++ b/ocaml/fstar-lib/generated/FStar_Math_Euclid.ml @@ -0,0 +1,54 @@ +open Prims +type ('a, 'b) divides = unit +type ('a, 'b, 'd) is_gcd = unit +let rec (egcd : + Prims.int -> + Prims.int -> + Prims.int -> + Prims.int -> + Prims.int -> + Prims.int -> + Prims.int -> Prims.int -> (Prims.int * Prims.int * Prims.int)) + = + fun a -> + fun b -> + fun u1 -> + fun u2 -> + fun u3 -> + fun v1 -> + fun v2 -> + fun v3 -> + if v3 = Prims.int_zero + then (u1, u2, u3) + else + (let q = u3 / v3 in + let uu___1 = (v1, (u1 - (q * v1))) in + match uu___1 with + | (u11, v11) -> + let uu___2 = (v2, (u2 - (q * v2))) in + (match uu___2 with + | (u21, v21) -> + let uu___3 = (v3, (u3 - (q * v3))) in + (match uu___3 with + | (u31, v31) -> + egcd a b u11 u21 u31 v11 v21 v31))) +let (euclid_gcd : + Prims.int -> Prims.int -> (Prims.int * Prims.int * Prims.int)) = + fun a -> + fun b -> + if b >= Prims.int_zero + then + egcd a b Prims.int_one Prims.int_zero a Prims.int_zero Prims.int_one + b + else + (let res = + egcd a b Prims.int_one Prims.int_zero a Prims.int_zero + (Prims.of_int (-1)) (- b) in + let uu___1 = res in match uu___1 with | (uu___2, uu___3, d) -> res) +type 'p is_prime = unit +let (bezout_prime : Prims.int -> Prims.pos -> (Prims.int * Prims.int)) = + fun p -> + fun a -> + let uu___ = euclid_gcd p a in + match uu___ with + | (r, s, d) -> if d = Prims.int_one then (r, s) else ((- r), (- s)) \ No newline at end of file diff --git a/ocaml/fstar-lib/generated/FStar_Math_Fermat.ml b/ocaml/fstar-lib/generated/FStar_Math_Fermat.ml new file mode 100644 index 00000000000..17543d91c86 --- /dev/null +++ b/ocaml/fstar-lib/generated/FStar_Math_Fermat.ml @@ -0,0 +1,27 @@ +open Prims +let rec (pow : Prims.int -> Prims.nat -> Prims.int) = + fun a -> + fun k -> + if k = Prims.int_zero + then Prims.int_one + else a * (pow a (k - Prims.int_one)) +let rec (binomial : Prims.nat -> Prims.nat -> Prims.nat) = + fun n -> + fun k -> + match (n, k) with + | (uu___, uu___1) when uu___1 = Prims.int_zero -> Prims.int_one + | (uu___, uu___1) when uu___ = Prims.int_zero -> Prims.int_zero + | (uu___, uu___1) -> + (binomial (n - Prims.int_one) k) + + (binomial (n - Prims.int_one) (k - Prims.int_one)) +let rec (factorial : Prims.nat -> Prims.pos) = + fun uu___ -> + match uu___ with + | uu___1 when uu___1 = Prims.int_zero -> Prims.int_one + | n -> n * (factorial (n - Prims.int_one)) +let (op_Bang : Prims.nat -> Prims.pos) = fun n -> factorial n +let rec (sum : + Prims.nat -> Prims.nat -> (Prims.nat -> Prims.int) -> Prims.int) = + fun a -> + fun b -> + fun f -> if a = b then f a else (f a) + (sum (a + Prims.int_one) b f) \ No newline at end of file diff --git a/ocaml/fstar-lib/generated/FStar_Math_Lemmas.ml b/ocaml/fstar-lib/generated/FStar_Math_Lemmas.ml new file mode 100644 index 00000000000..e8306abedb2 --- /dev/null +++ b/ocaml/fstar-lib/generated/FStar_Math_Lemmas.ml @@ -0,0 +1 @@ +open Prims \ No newline at end of file diff --git a/ocaml/fstar-lib/generated/FStar_Math_Lib.ml b/ocaml/fstar-lib/generated/FStar_Math_Lib.ml new file mode 100644 index 00000000000..6fb7b4a32d3 --- /dev/null +++ b/ocaml/fstar-lib/generated/FStar_Math_Lib.ml @@ -0,0 +1,45 @@ +open Prims +let rec (log_2 : Prims.pos -> Prims.nat) = + fun x -> + if x >= (Prims.of_int (2)) + then Prims.int_one + (log_2 (x / (Prims.of_int (2)))) + else Prims.int_zero +let rec (powx : Prims.int -> Prims.nat -> Prims.int) = + fun x -> + fun n -> + match n with + | uu___ when uu___ = Prims.int_zero -> Prims.int_one + | n1 -> x * (powx x (n1 - Prims.int_one)) +let (abs : Prims.int -> Prims.int) = + fun x -> if x >= Prims.int_zero then x else - x +let (max : Prims.int -> Prims.int -> Prims.int) = + fun x -> fun y -> if x >= y then x else y +let (min : Prims.int -> Prims.int -> Prims.int) = + fun x -> fun y -> if x >= y then y else x +let (div : Prims.int -> Prims.pos -> Prims.int) = + fun a -> + fun b -> + if a < Prims.int_zero + then + (if (a mod b) = Prims.int_zero + then - (- (a / b)) + else (- (- (a / b))) - Prims.int_one) + else a / b +let (div_non_eucl : Prims.int -> Prims.pos -> Prims.int) = + fun a -> + fun b -> + if a < Prims.int_zero + then Prims.int_zero - ((Prims.int_zero - a) / b) + else a / b +let (shift_left : Prims.int -> Prims.nat -> Prims.int) = + fun v -> fun i -> v * (Prims.pow2 i) +let (arithmetic_shift_right : Prims.int -> Prims.nat -> Prims.int) = + fun v -> fun i -> div v (Prims.pow2 i) +let (signed_modulo : Prims.int -> Prims.pos -> Prims.int) = + fun v -> + fun p -> + if v >= Prims.int_zero + then v mod p + else Prims.int_zero - ((Prims.int_zero - v) mod p) +let (op_Plus_Percent : Prims.int -> Prims.pos -> Prims.int) = + fun a -> fun p -> signed_modulo a p \ No newline at end of file diff --git a/ocaml/fstar-lib/generated/FStar_Matrix.ml b/ocaml/fstar-lib/generated/FStar_Matrix.ml new file mode 100644 index 00000000000..229e623faae --- /dev/null +++ b/ocaml/fstar-lib/generated/FStar_Matrix.ml @@ -0,0 +1,303 @@ +open Prims +type ('c, 'm, 'n) matrix_generator = + unit FStar_IntegerIntervals.under -> + unit FStar_IntegerIntervals.under -> 'c +type ('c, 'm, 'n) matrix = 'c FStar_Seq_Base.seq +let (get_ij : + Prims.pos -> + Prims.pos -> + unit FStar_IntegerIntervals.under -> + unit FStar_IntegerIntervals.under -> + unit FStar_IntegerIntervals.under) + = fun m -> fun n -> fun i -> fun j -> (i * n) + j +let (get_i : + Prims.pos -> + Prims.pos -> + unit FStar_IntegerIntervals.under -> unit FStar_IntegerIntervals.under) + = fun m -> fun n -> fun ij -> ij / n +let (get_j : + Prims.pos -> + Prims.pos -> + unit FStar_IntegerIntervals.under -> unit FStar_IntegerIntervals.under) + = fun m -> fun n -> fun ij -> ij mod n +let (transpose_ji : + Prims.pos -> + Prims.pos -> + unit FStar_IntegerIntervals.under -> unit FStar_IntegerIntervals.under) + = fun m -> fun n -> fun ij -> ((get_j m n ij) * m) + (get_i m n ij) +let seq_of_matrix : + 'c . + Prims.pos -> + Prims.pos -> ('c, unit, unit) matrix -> 'c FStar_Seq_Base.seq + = fun m -> fun n -> fun mx -> mx +let ijth : + 'c . + Prims.pos -> + Prims.pos -> + ('c, unit, unit) matrix -> + unit FStar_IntegerIntervals.under -> + unit FStar_IntegerIntervals.under -> 'c + = + fun m -> + fun n -> + fun mx -> fun i -> fun j -> FStar_Seq_Base.index mx (get_ij m n i j) +let matrix_of_seq : + 'c . + Prims.pos -> + Prims.pos -> 'c FStar_Seq_Base.seq -> ('c, unit, unit) matrix + = fun m -> fun n -> fun s -> s +type ('c, 'm, 'n, 'gen) matrix_of = ('c, unit, unit) matrix +let foldm : + 'c . + 'c FStar_Algebra_CommMonoid_Equiv.equiv -> + Prims.pos -> + Prims.pos -> + ('c, unit) FStar_Algebra_CommMonoid_Equiv.cm -> + ('c, unit, unit) matrix -> 'c + = + fun eq -> + fun m -> + fun n -> fun cm -> fun mx -> FStar_Seq_Permutation.foldm_snoc eq cm mx +let init : + 'c . + Prims.pos -> + Prims.pos -> + ('c, unit, unit) matrix_generator -> ('c, unit, unit, unit) matrix_of + = + fun m -> + fun n -> + fun generator -> + let mn = m * n in + let generator_ij ij = generator (get_i m n ij) (get_j m n ij) in + let flat_indices = FStar_IntegerIntervals.indices_seq mn in + let result = FStar_Seq_Properties.map_seq generator_ij flat_indices in + result +let matrix_seq : + 'c . + Prims.pos -> + Prims.pos -> ('c, unit, unit) matrix_generator -> 'c FStar_Seq_Base.seq + = fun m -> fun n -> fun gen -> init m n gen +let transposed_matrix_gen : + 'c . + Prims.pos -> + Prims.pos -> + ('c, unit, unit) matrix_generator -> + ('c, unit, unit) matrix_generator + = fun m -> fun n -> fun generator -> fun j -> fun i -> generator i j +type ('c, 'm, 'n, 'eq, 'ma, 'mb) matrix_eq_fun = + ('c, unit, unit, unit) FStar_Seq_Equiv.eq_of_seq +let matrix_equiv : + 'c . + 'c FStar_Algebra_CommMonoid_Equiv.equiv -> + Prims.pos -> + Prims.pos -> + ('c, unit, unit) matrix FStar_Algebra_CommMonoid_Equiv.equiv + = + fun eq -> + fun m -> fun n -> FStar_Algebra_CommMonoid_Equiv.EQ ((), (), (), ()) +let matrix_add_generator : + 'c . + 'c FStar_Algebra_CommMonoid_Equiv.equiv -> + Prims.pos -> + Prims.pos -> + ('c, unit) FStar_Algebra_CommMonoid_Equiv.cm -> + ('c, unit, unit) matrix -> + ('c, unit, unit) matrix -> ('c, unit, unit) matrix_generator + = + fun eq -> + fun m -> + fun n -> + fun add -> + fun ma -> + fun mb -> + fun i -> + fun j -> + FStar_Algebra_CommMonoid_Equiv.__proj__CM__item__mult eq + add (ijth m n ma i j) (ijth m n mb i j) +let matrix_add : + 'c . + 'c FStar_Algebra_CommMonoid_Equiv.equiv -> + Prims.pos -> + Prims.pos -> + ('c, unit) FStar_Algebra_CommMonoid_Equiv.cm -> + ('c, unit, unit) matrix -> + ('c, unit, unit) matrix -> ('c, unit, unit, unit) matrix_of + = + fun eq -> + fun m -> + fun n -> + fun add -> + fun ma -> + fun mb -> init m n (matrix_add_generator eq m n add ma mb) +let matrix_add_zero : + 'c . + 'c FStar_Algebra_CommMonoid_Equiv.equiv -> + ('c, unit) FStar_Algebra_CommMonoid_Equiv.cm -> + Prims.pos -> Prims.pos -> ('c, unit, unit) matrix + = + fun eq -> + fun add -> + fun m -> + fun n -> + matrix_of_seq m n + (FStar_Seq_Base.create (m * n) + (FStar_Algebra_CommMonoid_Equiv.__proj__CM__item__unit eq add)) +let matrix_add_comm_monoid : + 'c . + 'c FStar_Algebra_CommMonoid_Equiv.equiv -> + ('c, unit) FStar_Algebra_CommMonoid_Equiv.cm -> + Prims.pos -> + Prims.pos -> + (('c, unit, unit) matrix, unit) FStar_Algebra_CommMonoid_Equiv.cm + = + fun eq -> + fun add -> + fun m -> + fun n -> + FStar_Algebra_CommMonoid_Equiv.CM + ((matrix_add_zero eq add m n), (matrix_add eq m n add), (), (), + (), ()) +let col : + 'c . + Prims.pos -> + Prims.pos -> + ('c, unit, unit) matrix -> + unit FStar_IntegerIntervals.under -> 'c FStar_Seq_Base.seq + = + fun m -> + fun n -> + fun mx -> fun j -> FStar_Seq_Base.init m (fun i -> ijth m n mx i j) +let row : + 'c . + Prims.pos -> + Prims.pos -> + ('c, unit, unit) matrix -> + unit FStar_IntegerIntervals.under -> 'c FStar_Seq_Base.seq + = + fun m -> + fun n -> + fun mx -> fun i -> FStar_Seq_Base.init n (fun j -> ijth m n mx i j) +let seq_op_const : + 'c . + 'c FStar_Algebra_CommMonoid_Equiv.equiv -> + ('c, unit) FStar_Algebra_CommMonoid_Equiv.cm -> + 'c FStar_Seq_Base.seq -> 'c -> 'c FStar_Seq_Base.seq + = + fun eq -> + fun cm -> + fun s -> + fun const -> + FStar_Seq_Base.init (FStar_Seq_Base.length s) + (fun i -> + FStar_Algebra_CommMonoid_Equiv.__proj__CM__item__mult eq cm + (FStar_Seq_Base.index s i) const) +let const_op_seq : + 'c . + 'c FStar_Algebra_CommMonoid_Equiv.equiv -> + ('c, unit) FStar_Algebra_CommMonoid_Equiv.cm -> + 'c -> 'c FStar_Seq_Base.seq -> 'c FStar_Seq_Base.seq + = + fun eq -> + fun cm -> + fun const -> + fun s -> + FStar_Seq_Base.init (FStar_Seq_Base.length s) + (fun i -> + FStar_Algebra_CommMonoid_Equiv.__proj__CM__item__mult eq cm + const (FStar_Seq_Base.index s i)) +let seq_of_products : + 'c . + 'c FStar_Algebra_CommMonoid_Equiv.equiv -> + ('c, unit) FStar_Algebra_CommMonoid_Equiv.cm -> + 'c FStar_Seq_Base.seq -> + 'c FStar_Seq_Base.seq -> 'c FStar_Seq_Base.seq + = + fun eq -> + fun mul -> + fun s -> + fun t -> + FStar_Seq_Base.init (FStar_Seq_Base.length s) + (fun i -> + FStar_Algebra_CommMonoid_Equiv.__proj__CM__item__mult eq mul + (FStar_Seq_Base.index s i) (FStar_Seq_Base.index t i)) +let dot : + 'c . + 'c FStar_Algebra_CommMonoid_Equiv.equiv -> + ('c, unit) FStar_Algebra_CommMonoid_Equiv.cm -> + ('c, unit) FStar_Algebra_CommMonoid_Equiv.cm -> + 'c FStar_Seq_Base.seq -> 'c FStar_Seq_Base.seq -> 'c + = + fun eq -> + fun add -> + fun mul -> + fun s -> + fun t -> + FStar_Seq_Permutation.foldm_snoc eq add + (seq_of_products eq mul s t) +let matrix_mul_gen : + 'c . + 'c FStar_Algebra_CommMonoid_Equiv.equiv -> + Prims.pos -> + Prims.pos -> + Prims.pos -> + ('c, unit) FStar_Algebra_CommMonoid_Equiv.cm -> + ('c, unit) FStar_Algebra_CommMonoid_Equiv.cm -> + ('c, unit, unit) matrix -> + ('c, unit, unit) matrix -> + unit FStar_IntegerIntervals.under -> + unit FStar_IntegerIntervals.under -> 'c + = + fun eq -> + fun m -> + fun n -> + fun p -> + fun add -> + fun mul -> + fun mx -> + fun my -> + fun i -> + fun k -> dot eq add mul (row m n mx i) (col n p my k) +let matrix_mul : + 'c . + 'c FStar_Algebra_CommMonoid_Equiv.equiv -> + Prims.pos -> + Prims.pos -> + Prims.pos -> + ('c, unit) FStar_Algebra_CommMonoid_Equiv.cm -> + ('c, unit) FStar_Algebra_CommMonoid_Equiv.cm -> + ('c, unit, unit) matrix -> + ('c, unit, unit) matrix -> ('c, unit, unit) matrix + = + fun eq -> + fun m -> + fun n -> + fun p -> + fun add -> + fun mul -> + fun mx -> + fun my -> init m p (matrix_mul_gen eq m n p add mul mx my) +type ('c, 'eq, 'mul, 'add) is_left_distributive = unit +type ('c, 'eq, 'mul, 'add) is_right_distributive = unit +type ('c, 'eq, 'mul, 'add) is_fully_distributive = unit +type ('c, 'eq, 'z, 'op) is_absorber = unit +let matrix_mul_unit : + 'c . + 'c FStar_Algebra_CommMonoid_Equiv.equiv -> + ('c, unit) FStar_Algebra_CommMonoid_Equiv.cm -> + ('c, unit) FStar_Algebra_CommMonoid_Equiv.cm -> + Prims.pos -> ('c, unit, unit) matrix + = + fun eq -> + fun add -> + fun mul -> + fun m -> + init m m + (fun i -> + fun j -> + if i = j + then + FStar_Algebra_CommMonoid_Equiv.__proj__CM__item__unit eq + mul + else + FStar_Algebra_CommMonoid_Equiv.__proj__CM__item__unit eq + add) \ No newline at end of file diff --git a/ocaml/fstar-lib/generated/FStar_Modifies.ml b/ocaml/fstar-lib/generated/FStar_Modifies.ml new file mode 100644 index 00000000000..94e5e418777 --- /dev/null +++ b/ocaml/fstar-lib/generated/FStar_Modifies.ml @@ -0,0 +1,37 @@ +open Prims +type loc_aux = + | LocBuffer of unit * Obj.t FStar_Buffer.buffer +let (uu___is_LocBuffer : loc_aux -> Prims.bool) = fun projectee -> true +let (__proj__LocBuffer__item__b : loc_aux -> unit FStar_Buffer.buffer) = + fun uu___ -> + (fun projectee -> match projectee with | LocBuffer (t, b) -> Obj.magic b) + uu___ +type ('l, 'r, 'n) loc_aux_in_addr = Obj.t +type ('r, 'n) aloc = loc_aux +type ('a, 's, 'b) loc_aux_includes_buffer = Obj.t +type ('s1, 's2) loc_aux_includes = Obj.t +type ('l, 't, 'p) loc_aux_disjoint_buffer = Obj.t +type ('l1, 'l2) loc_aux_disjoint = Obj.t +type ('l, 'h1, 'h2) loc_aux_preserved = Obj.t +let (cls : (unit, unit) aloc FStar_ModifiesGen.cls) = + FStar_ModifiesGen.Cls ((), (), (), (), (), (), (), (), (), ()) +type loc = ((unit, unit) aloc, unit) FStar_ModifiesGen.loc +let (loc_none : loc) = FStar_ModifiesGen.loc_none cls +type ('s1, 's2) loc_includes = + ((unit, unit) aloc, unit, unit, unit) FStar_ModifiesGen.loc_includes +type ('s1, 's2) loc_disjoint = + ((unit, unit) aloc, unit, unit, unit) FStar_ModifiesGen.loc_disjoint +type ('s, 'h1, 'h2) modifies = + ((unit, unit) aloc, unit, unit, unit, unit) FStar_ModifiesGen.modifies +let (address_liveness_insensitive_locs : loc) = + FStar_ModifiesGen.address_liveness_insensitive_locs cls +let (region_liveness_insensitive_locs : loc) = + FStar_ModifiesGen.region_liveness_insensitive_locs cls +type ('h, 'ra) does_not_contain_addr = + (unit, unit) FStar_ModifiesGen.does_not_contain_addr +type ('uuuuu, 'uuuuu1) cloc_aloc = (unit, unit) aloc +let (cloc_cls : (unit, unit) cloc_aloc FStar_ModifiesGen.cls) = cls +let (cloc_of_loc : + loc -> ((unit, unit) cloc_aloc, unit) FStar_ModifiesGen.loc) = fun l -> l +let (loc_of_cloc : + ((unit, unit) cloc_aloc, unit) FStar_ModifiesGen.loc -> loc) = fun l -> l \ No newline at end of file diff --git a/ocaml/fstar-lib/generated/FStar_ModifiesGen.ml b/ocaml/fstar-lib/generated/FStar_ModifiesGen.ml new file mode 100644 index 00000000000..ae26006995d --- /dev/null +++ b/ocaml/fstar-lib/generated/FStar_ModifiesGen.ml @@ -0,0 +1,168 @@ +open Prims +type aloc_t = unit +type 'aloc cls = + | Cls of unit * unit * unit * unit * unit * unit * unit * unit * unit * + unit +let uu___is_Cls : 'aloc . 'aloc cls -> Prims.bool = fun projectee -> true +type ('al, 'c) aloc = + | ALoc of unit * Prims.nat * 'al FStar_Pervasives_Native.option +let uu___is_ALoc : 'al . 'al cls -> ('al, unit) aloc -> Prims.bool = + fun c -> fun projectee -> true + +let __proj__ALoc__item__addr : 'al . 'al cls -> ('al, unit) aloc -> Prims.nat + = + fun c -> + fun projectee -> match projectee with | ALoc (region, addr, loc) -> addr +let __proj__ALoc__item__loc : + 'al . 'al cls -> ('al, unit) aloc -> 'al FStar_Pervasives_Native.option = + fun c -> + fun projectee -> match projectee with | ALoc (region, addr, loc) -> loc +type ('a, 'b) i_restricted_g_t = unit +type 'regions addrs_dom = unit +type ('regions, 'regionulivenessutags, 'r) non_live_addrs_codom = unit +type ('regions, 'regionulivenessutags, 'nonuliveuaddrs, + 'r) live_addrs_codom = unit +type ('al, 'c) loc' = + | Loc of unit * unit * unit * unit * unit +let uu___is_Loc : 'al . 'al cls -> ('al, unit) loc' -> Prims.bool = + fun c -> fun projectee -> true + + +type ('aloc1, 'c) loc = ('aloc1, unit) loc' + + +let loc_none : 'a . 'a cls -> ('a, unit) loc = + fun c -> Loc ((), (), (), (), ()) +type ('t, 'tu, 'p, 'f1, 'f2) fun_set_equal = unit +type ('al, 'c, 's1, 's2) loc_equal = Obj.t +type ('al, 'c, 'b0, 'b) aloc_includes = unit +type ('al, 'c, 's, 'b) loc_aux_includes_buffer = unit +type ('al, 'c, 's1, 's2) loc_aux_includes = unit +type ('al, 'c, 's1, 's2) loc_includes' = unit +type ('al, 'c, 's1, 's2) loc_includes = unit +type ('al, 'c, 'b1, 'b2) aloc_disjoint = Obj.t +type ('al, 'c, 'l1, 'l2) loc_aux_disjoint = unit +type ('al, 'c, 'l1, 'l2) loc_disjoint_region_liveness_tags = unit +type ('al, 'c, 'l1, 'l2) loc_disjoint_addrs = unit +type ('al, 'c, 'l1, 'l2) loc_disjoint_aux = unit +type ('al, 'c, 'l1, 'l2) loc_disjoint' = unit +type ('aloc1, 'c, 's1, 's2) loc_disjoint = unit +let address_liveness_insensitive_locs : 'al . 'al cls -> ('al, unit) loc = + fun c -> Loc ((), (), (), (), ()) +let region_liveness_insensitive_locs : 'al . 'al cls -> ('al, unit) loc = + fun c -> Loc ((), (), (), (), ()) +type ('al, 'c, 's, 'h1, 'h2) modifies_preserves_livenesses = unit +type ('al, 'c, 's, 'h1, 'h2) modifies_preserves_mreferences = unit +type ('al, 'c, 's, 'h1, 'h2) modifies_preserves_alocs = unit +type ('al, 'c, 's, 'h1, 'h2) modifies_preserves_regions = unit +type ('al, 'c, 's, 'h1, 'h2) modifies_preserves_not_unused_in = unit +type ('al, 'c, 's, 'h1, 'h2) modifies' = unit +type ('aloc1, 'c, 's, 'h1, 'h2) modifies = unit +type ('h, 'ra) does_not_contain_addr' = unit +type ('h, 'ra) does_not_contain_addr = unit +type ('al, 'r, 'n) cls_union_aloc = + | ALOC_FALSE of 'al + | ALOC_TRUE of 'al +let uu___is_ALOC_FALSE : + 'al . unit -> Prims.nat -> ('al, unit, unit) cls_union_aloc -> Prims.bool = + fun r -> + fun n -> + fun projectee -> + match projectee with | ALOC_FALSE _0 -> true | uu___ -> false +let __proj__ALOC_FALSE__item___0 : + 'al . unit -> Prims.nat -> ('al, unit, unit) cls_union_aloc -> 'al = + fun r -> + fun n -> fun projectee -> match projectee with | ALOC_FALSE _0 -> _0 +let uu___is_ALOC_TRUE : + 'al . unit -> Prims.nat -> ('al, unit, unit) cls_union_aloc -> Prims.bool = + fun r -> + fun n -> + fun projectee -> + match projectee with | ALOC_TRUE _0 -> true | uu___ -> false +let __proj__ALOC_TRUE__item___0 : + 'al . unit -> Prims.nat -> ('al, unit, unit) cls_union_aloc -> 'al = + fun r -> + fun n -> fun projectee -> match projectee with | ALOC_TRUE _0 -> _0 +let bool_of_cls_union_aloc : + 'al . unit -> Prims.nat -> ('al, unit, unit) cls_union_aloc -> Prims.bool = + fun r -> + fun n -> + fun l -> + match l with | ALOC_FALSE uu___ -> false | ALOC_TRUE uu___ -> true +let aloc_of_cls_union_aloc : + 'al . unit -> Prims.nat -> ('al, unit, unit) cls_union_aloc -> 'al = + fun r -> + fun n -> fun l -> match l with | ALOC_FALSE x -> x | ALOC_TRUE x -> x +let make_cls_union_aloc : + 'al . + Prims.bool -> + unit -> Prims.nat -> 'al -> ('al, unit, unit) cls_union_aloc + = + fun b -> fun r -> fun n -> fun l -> if b then ALOC_TRUE l else ALOC_FALSE l +type ('al, 'c, 'r, 'a, 'larger, 'smaller) cls_union_aloc_includes = unit +type ('al, 'c, 'r, 'a, 'larger, 'smaller) cls_union_aloc_disjoint = unit +type ('al, 'c, 'r, 'a, 'x, 'h, 'hu) cls_union_aloc_preserved = Obj.t +type ('uuuuu, 'uuuuu1, 'uuuuu2) aloc_union = + ('uuuuu, unit, unit) cls_union_aloc +let cls_union : + 'al . (Prims.bool -> 'al cls) -> ('al, unit, unit) aloc_union cls = + fun c -> Cls ((), (), (), (), (), (), (), (), (), ()) + + +type ('al, 'r, 'n) raise_aloc = 'al FStar_Universe.raise_t +let raise_cls : 'al . 'al cls -> ('al, unit, unit) raise_aloc cls = + fun c -> Cls ((), (), (), (), (), (), (), (), (), ()) +let downgrade_aloc : + 'al . + 'al cls -> (('al, unit, unit) raise_aloc, unit) aloc -> ('al, unit) aloc + = + fun c -> + fun a -> + let uu___ = a in + match uu___ with + | ALoc (region, addr, x) -> + ALoc + ((), addr, + (if FStar_Pervasives_Native.uu___is_None x + then FStar_Pervasives_Native.None + else + FStar_Pervasives_Native.Some + (FStar_Universe.downgrade_val + (FStar_Pervasives_Native.__proj__Some__item__v x)))) +let upgrade_aloc : + 'al . + 'al cls -> ('al, unit) aloc -> (('al, unit, unit) raise_aloc, unit) aloc + = + fun c -> + fun a -> + let uu___ = a in + match uu___ with + | ALoc (region, addr, x) -> + ALoc + ((), addr, + (if FStar_Pervasives_Native.uu___is_None x + then FStar_Pervasives_Native.None + else + FStar_Pervasives_Native.Some + (FStar_Universe.raise_val + (FStar_Pervasives_Native.__proj__Some__item__v x)))) +let raise_loc : + 'al . + 'al cls -> ('al, unit) loc -> (('al, unit, unit) raise_aloc, unit) loc + = + fun c -> + fun l -> + let uu___ = l in + match uu___ with + | Loc (regions, region_liveness_tags, non_live_addrs, live_addrs, aux) + -> Loc ((), (), (), (), ()) +let lower_loc : + 'al . + 'al cls -> (('al, unit, unit) raise_aloc, unit) loc -> ('al, unit) loc + = + fun c -> + fun l -> + let uu___ = l in + match uu___ with + | Loc (regions, region_liveness_tags, non_live_addrs, live_addrs, aux) + -> Loc ((), (), (), (), ()) \ No newline at end of file diff --git a/ocaml/fstar-lib/generated/FStar_Monotonic_DependentMap.ml b/ocaml/fstar-lib/generated/FStar_Monotonic_DependentMap.ml new file mode 100644 index 00000000000..fc7cb1ec7ca --- /dev/null +++ b/ocaml/fstar-lib/generated/FStar_Monotonic_DependentMap.ml @@ -0,0 +1,88 @@ +open Prims +type ('a, 'b, 'x) opt = 'b FStar_Pervasives_Native.option +type ('a, 'b) partial_dependent_map = + ('a, ('a, 'b, unit) opt) FStar_DependentMap.t +let empty_partial_dependent_map : + 'a 'b . unit -> ('a, 'b) partial_dependent_map = + fun uu___ -> + FStar_DependentMap.create (fun x -> FStar_Pervasives_Native.None) +type ('a, 'b) map = ('a, 'b) Prims.dtuple2 Prims.list +let empty : 'a 'b . unit -> ('a, 'b) map = fun uu___ -> [] +let rec sel : 'a 'b . ('a, 'b) map -> 'a -> 'b FStar_Pervasives_Native.option + = + fun r -> + fun x -> + match r with + | [] -> FStar_Pervasives_Native.None + | (Prims.Mkdtuple2 (x', y))::tl -> + if x = x' then FStar_Pervasives_Native.Some y else sel tl x +let upd : 'a 'b . ('a, 'b) map -> 'a -> 'b -> ('a, 'b) map = + fun r -> fun x -> fun v -> (Prims.Mkdtuple2 (x, v)) :: r +type ('a, 'b, 'inv) imap = ('a, 'b) map +type ('a, 'b, 'inv, 'm1, 'm2) grows' = unit +type ('a, 'b, 'inv, 'uuuuu, 'uuuuu1) grows = unit +type ('r, 'a, 'b, 'inv) t = + (unit, ('a, 'b, 'inv) imap, unit) FStar_HyperStack_ST.m_rref +type ('a, 'b, 'inv, 'r, 't1, 'x, 'h) defined = unit +type ('a, 'b, 'inv, 'r, 't1, 'x, 'h) fresh = unit +type ('a, 'b, 'inv, 'r, 't1, 'x, 'y, 'h) contains = unit +let alloc : 'a 'b 'inv . unit -> unit -> (unit, 'a, 'b, 'inv) t = + fun r -> fun uu___ -> FStar_HyperStack_ST.ralloc () [] +let extend : 'a 'b 'inv . unit -> (unit, 'a, 'b, 'inv) t -> 'a -> 'b -> unit + = + fun r -> + fun t1 -> + fun x -> + fun y -> + FStar_HyperStack_ST.recall t1; + (let cur = FStar_HyperStack_ST.op_Bang t1 in + FStar_HyperStack_ST.op_Colon_Equals t1 (upd cur x y); + FStar_HyperStack_ST.mr_witness () () () (Obj.magic t1) ()) +let lookup : + 'a 'b 'inv . + unit -> (unit, 'a, 'b, 'inv) t -> 'a -> 'b FStar_Pervasives_Native.option + = + fun r -> + fun t1 -> + fun x -> + let m = FStar_HyperStack_ST.op_Bang t1 in + let y = sel m x in + match y with + | FStar_Pervasives_Native.None -> y + | FStar_Pervasives_Native.Some b1 -> + (FStar_HyperStack_ST.mr_witness () () () (Obj.magic t1) (); y) +type ('a, 'b, 'inv, 'r, 't1, 'h, 'pred) forall_t = unit +let f_opt : + 'a 'b 'c . + ('a -> 'b -> 'c) -> + 'a -> + 'b FStar_Pervasives_Native.option -> + 'c FStar_Pervasives_Native.option + = + fun f -> + fun x -> + fun y -> + match y with + | FStar_Pervasives_Native.None -> FStar_Pervasives_Native.None + | FStar_Pervasives_Native.Some y1 -> + FStar_Pervasives_Native.Some (f x y1) +let rec mmap_f : 'a 'b 'c . ('a, 'b) map -> ('a -> 'b -> 'c) -> ('a, 'c) map + = + fun m -> + fun f -> + match m with + | [] -> [] + | (Prims.Mkdtuple2 (x, y))::tl -> (Prims.Mkdtuple2 (x, (f x y))) :: + (mmap_f tl f) +let map_f : + 'a 'b 'c 'inv 'invu . + unit -> + unit -> + (unit, 'a, 'b, 'inv) t -> ('a -> 'b -> 'c) -> (unit, 'a, 'c, 'invu) t + = + fun r -> + fun r' -> + fun t1 -> + fun f -> + let m = FStar_HyperStack_ST.op_Bang t1 in + FStar_HyperStack_ST.ralloc () (mmap_f m f) \ No newline at end of file diff --git a/ocaml/fstar-lib/generated/FStar_Monotonic_HyperHeap.ml b/ocaml/fstar-lib/generated/FStar_Monotonic_HyperHeap.ml new file mode 100644 index 00000000000..7c10adf3024 --- /dev/null +++ b/ocaml/fstar-lib/generated/FStar_Monotonic_HyperHeap.ml @@ -0,0 +1,16 @@ +open Prims +type rid = unit +type hmap = (unit, FStar_Monotonic_Heap.heap) FStar_Map.t + + + +let (mod_set : unit FStar_Set.set -> unit FStar_Set.set) = + fun uu___ -> Prims.magic () +type ('s, 'm0, 'm1) modifies = unit +type ('s, 'm0, 'm1) modifies_just = unit +type ('r, 'm0, 'm1) modifies_one = unit +type ('s, 'm0, 'm1) equal_on = unit +type ('s1, 's2) disjoint_regions = unit +type ('r, 'n, 'c, 'freeable, 's) extend_post = unit + + diff --git a/ocaml/fstar-lib/generated/FStar_Monotonic_HyperStack.ml b/ocaml/fstar-lib/generated/FStar_Monotonic_HyperStack.ml new file mode 100644 index 00000000000..b6d1e73fff4 --- /dev/null +++ b/ocaml/fstar-lib/generated/FStar_Monotonic_HyperStack.ml @@ -0,0 +1,209 @@ +open Prims +let (is_in : unit -> FStar_Monotonic_HyperHeap.hmap -> Prims.bool) = + fun r -> fun h -> FStar_Map.contains h () +let (is_heap_color : Prims.int -> Prims.bool) = fun c -> c <= Prims.int_zero +type sid = unit +type 'm map_invariant_predicate = unit +type 'h downward_closed_predicate = unit +type ('tip, 'h) tip_top_predicate = unit +type ('h, 'n) rid_ctr_pred_predicate = unit +type 'm map_invariant = unit +type 'h downward_closed = unit +type ('tip, 'h) tip_top = unit +type ('h, 'n) rid_ctr_pred = unit +type ('tip, 'h) is_tip = unit +type ('h, 'ctr, 'tip) is_wf_with_ctr_and_tip = unit +type mem' = + | HS of Prims.int * FStar_Monotonic_HyperHeap.hmap * unit +let (uu___is_HS : mem' -> Prims.bool) = fun projectee -> true +let (__proj__HS__item__rid_ctr : mem' -> Prims.int) = + fun projectee -> match projectee with | HS (rid_ctr, h, tip) -> rid_ctr +let (__proj__HS__item__h : mem' -> FStar_Monotonic_HyperHeap.hmap) = + fun projectee -> match projectee with | HS (rid_ctr, h, tip) -> h + +let (mk_mem : Prims.int -> FStar_Monotonic_HyperHeap.hmap -> unit -> mem') = + fun rid_ctr -> fun h -> fun tip -> HS (rid_ctr, h, ()) +let (get_hmap : mem' -> FStar_Monotonic_HyperHeap.hmap) = + fun m -> __proj__HS__item__h m +let (get_rid_ctr : mem' -> Prims.int) = fun m -> __proj__HS__item__rid_ctr m + +type mem = mem' +let (empty_mem : mem) = + let empty_map = + FStar_Map.restrict (FStar_Set.empty ()) + (FStar_Map.const FStar_Monotonic_Heap.emp) in + let h = FStar_Map.upd empty_map () FStar_Monotonic_Heap.emp in + mk_mem Prims.int_one h () +type 'm poppable = unit +let remove_elt : 'a . 'a FStar_Set.set -> 'a -> 'a FStar_Set.set = + fun s -> + fun x -> + FStar_Set.intersect s (FStar_Set.complement (FStar_Set.singleton x)) +type ('m0, 'm1) popped = unit +let (pop : mem -> mem) = + fun m0 -> + let uu___ = ((get_hmap m0), (), (get_rid_ctr m0)) in + match uu___ with + | (h0, tip0, rid_ctr0) -> + let dom = remove_elt (FStar_Map.domain h0) () in + let h1 = FStar_Map.restrict dom h0 in mk_mem rid_ctr0 h1 () +type ('a, 'rel) mreference' = + | MkRef of unit * ('a, 'rel) FStar_Monotonic_Heap.mref +let uu___is_MkRef : 'a 'rel . ('a, 'rel) mreference' -> Prims.bool = + fun projectee -> true + +let __proj__MkRef__item__ref : + 'a 'rel . ('a, 'rel) mreference' -> ('a, 'rel) FStar_Monotonic_Heap.mref = + fun projectee -> match projectee with | MkRef (frame, ref) -> ref +type ('a, 'rel) mreference = ('a, 'rel) mreference' + +let mk_mreference : + 'a 'rel . + unit -> ('a, 'rel) FStar_Monotonic_Heap.mref -> ('a, 'rel) mreference + = fun id -> fun r -> MkRef ((), r) +let as_ref : + 'uuuuu 'uuuuu1 . + ('uuuuu, 'uuuuu1) mreference -> + ('uuuuu, 'uuuuu1) FStar_Monotonic_Heap.mref + = fun x -> __proj__MkRef__item__ref x +type ('a, 'rel) mstackref = ('a, 'rel) mreference +type ('a, 'rel) mref = ('a, 'rel) mreference +type ('a, 'rel) mmmstackref = ('a, 'rel) mreference +type ('a, 'rel) mmmref = ('a, 'rel) mreference +type ('i, 'a, 'rel) s_mref = ('a, 'rel) mreference +let (live_region : mem -> unit -> Prims.bool) = + fun m -> fun i -> FStar_Map.contains (get_hmap m) () +type ('a, 'rel, 'm, 's) contains = unit +type ('a, 'rel, 'r, 'm) unused_in = unit +type ('a, 'rel, 'm, 'r) contains_ref_in_its_region = + ('a, 'rel, unit, unit) FStar_Monotonic_Heap.contains +type ('a, 'rel, 'r, 'm0, 'm1) fresh_ref = unit +type ('i, 'm0, 'm1) fresh_region = unit +let alloc : + 'a 'rel . unit -> 'a -> Prims.bool -> mem -> (('a, 'rel) mreference * mem) + = + fun id -> + fun init -> + fun mm -> + fun m -> + let uu___ = ((get_hmap m), (get_rid_ctr m), ()) in + match uu___ with + | (h, rid_ctr, tip) -> + let uu___1 = + FStar_Monotonic_Heap.alloc (FStar_Map.sel h ()) init mm in + (match uu___1 with + | (r, id_h) -> + let h1 = FStar_Map.upd h () id_h in + ((mk_mreference () r), (mk_mem rid_ctr h1 ()))) +let free : 'a 'rel . ('a, 'rel) mreference -> mem -> mem = + fun r -> + fun m -> + let uu___ = ((get_hmap m), (get_rid_ctr m), ()) in + match uu___ with + | (h, rid_ctr, tip) -> + let i_h = FStar_Map.sel h () in + let i_h1 = FStar_Monotonic_Heap.free_mm i_h (as_ref r) in + let h1 = FStar_Map.upd h () i_h1 in mk_mem rid_ctr h1 () +let upd_tot : 'a 'rel . mem -> ('a, 'rel) mreference -> 'a -> mem = + fun m -> + fun r -> + fun v -> + let uu___ = ((get_hmap m), (get_rid_ctr m), ()) in + match uu___ with + | (h, rid_ctr, tip) -> + let i_h = FStar_Map.sel h () in + let i_h1 = FStar_Monotonic_Heap.upd_tot i_h (as_ref r) v in + let h1 = FStar_Map.upd h () i_h1 in mk_mem rid_ctr h1 () +let sel_tot : 'a 'rel . mem -> ('a, 'rel) mreference -> 'a = + fun m -> + fun r -> + FStar_Monotonic_Heap.sel_tot (FStar_Map.sel (get_hmap m) ()) (as_ref r) +type ('m0, 'm1) fresh_frame = unit +let (hs_push_frame : mem -> mem) = + fun m -> + let uu___ = ((get_hmap m), (get_rid_ctr m), ()) in + match uu___ with + | (h, rid_ctr, tip) -> + let h1 = FStar_Map.upd h () FStar_Monotonic_Heap.emp in + mk_mem (rid_ctr + Prims.int_one) h1 () +let (new_eternal_region : + mem -> unit -> Prims.int FStar_Pervasives_Native.option -> (unit * mem)) = + fun m -> + fun parent -> + fun c -> + let uu___ = ((get_hmap m), (get_rid_ctr m), ()) in + match uu___ with + | (h, rid_ctr, tip) -> + let h1 = FStar_Map.upd h () FStar_Monotonic_Heap.emp in + ((), (mk_mem (rid_ctr + Prims.int_one) h1 ())) +let (new_freeable_heap_region : mem -> unit -> (unit * mem)) = + fun m -> + fun parent -> + let uu___ = ((get_hmap m), (get_rid_ctr m), ()) in + match uu___ with + | (h, rid_ctr, tip) -> + let h1 = FStar_Map.upd h () FStar_Monotonic_Heap.emp in + ((), (mk_mem (rid_ctr + Prims.int_one) h1 ())) +let (free_heap_region : mem -> unit -> mem) = + fun m0 -> + fun r -> + let uu___ = ((get_hmap m0), (get_rid_ctr m0)) in + match uu___ with + | (h0, rid_ctr0) -> + let dom = remove_elt (FStar_Map.domain h0) () in + let h1 = FStar_Map.restrict dom h0 in mk_mem (get_rid_ctr m0) h1 () +type ('s, 'm0, 'm1) modifies = unit +type ('s, 'm0, 'm1) modifies_transitively = unit +type 'm0 heap_only = unit +let (top_frame : mem -> FStar_Monotonic_Heap.heap) = + fun m -> FStar_Map.sel (get_hmap m) () +type ('id, 'h0, 'h1) modifies_one = unit +type ('id, 's, 'h0, 'h1) modifies_ref = unit +type some_ref = + | Ref of unit * unit * (Obj.t, Obj.t) mreference +let (uu___is_Ref : some_ref -> Prims.bool) = fun projectee -> true +let (__proj__Ref__item___2 : some_ref -> (unit, unit) mreference) = + fun uu___ -> + (fun projectee -> match projectee with | Ref (a, rel, _2) -> Obj.magic _2) + uu___ +type some_refs = some_ref Prims.list +let rec (regions_of_some_refs : some_refs -> unit FStar_Set.set) = + fun rs -> + match rs with + | [] -> FStar_Set.empty () + | (Ref (uu___, uu___1, r))::tl -> + FStar_Set.union (FStar_Set.singleton ()) (regions_of_some_refs tl) +type ('i, 'rs, 'h0, 'h1) modifies_some_refs = Obj.t +let (norm_steps : FStar_Pervasives.norm_step Prims.list) = + [FStar_Pervasives.iota; + FStar_Pervasives.zeta; + FStar_Pervasives.delta; + FStar_Pervasives.delta_only + ["FStar.Monotonic.HyperStack.regions_of_some_refs"; + "FStar.Monotonic.HyperStack.refs_in_region"; + "FStar.Monotonic.HyperStack.modifies_some_refs"]; + FStar_Pervasives.primops] +type ('rs, 'h0, 'h1) mods = unit +type aref = + | ARef of unit * FStar_Monotonic_Heap.aref +let (uu___is_ARef : aref -> Prims.bool) = fun projectee -> true + +let (__proj__ARef__item__aref_aref : aref -> FStar_Monotonic_Heap.aref) = + fun projectee -> + match projectee with | ARef (aref_region, aref_aref) -> aref_aref +let (dummy_aref : aref) = ARef ((), FStar_Monotonic_Heap.dummy_aref) +let aref_of : 'uuuuu 'uuuuu1 . ('uuuuu, 'uuuuu1) mreference -> aref = + fun r -> ARef ((), (FStar_Monotonic_Heap.aref_of (as_ref r))) +type ('a, 'h) aref_unused_in = unit +type ('h, 'a, 'v, 'rel) aref_live_at = unit +let (reference_of : mem -> aref -> unit -> unit -> (Obj.t, Obj.t) mreference) + = + fun h -> + fun a -> + fun v -> + fun rel -> + MkRef + ((), + (FStar_Monotonic_Heap.ref_of + (FStar_Map.sel (__proj__HS__item__h h) ()) + (__proj__ARef__item__aref_aref a) () ())) \ No newline at end of file diff --git a/ocaml/fstar-lib/generated/FStar_Monotonic_Map.ml b/ocaml/fstar-lib/generated/FStar_Monotonic_Map.ml new file mode 100644 index 00000000000..3e920ce17eb --- /dev/null +++ b/ocaml/fstar-lib/generated/FStar_Monotonic_Map.ml @@ -0,0 +1,60 @@ +open Prims +type ('a, 'b) map' = 'a -> 'b FStar_Pervasives_Native.option +type ('a, 'b, 'inv) map = ('a, 'b) map' +let upd : 'a 'b . ('a, 'b) map' -> 'a -> 'b -> ('a, 'b) map' = + fun m -> + fun x -> + fun y -> fun z -> if x = z then FStar_Pervasives_Native.Some y else m z +let sel : 'a 'b . ('a, 'b) map' -> 'a -> 'b FStar_Pervasives_Native.option = + fun m -> fun x -> m x +type ('a, 'b, 'inv, 'm1, 'm2) grows_aux = unit +type ('a, 'b, 'inv, 'uuuuu, 'uuuuu1) grows = unit +type ('r, 'a, 'b, 'inv) t = + (unit, ('a, 'b, 'inv) map, unit) FStar_HyperStack_ST.m_rref +let empty_map : 'a 'b . ('a, 'b) map' = fun x -> FStar_Pervasives_Native.None +type rid = unit +let (alloc : unit -> unit -> unit -> unit -> (unit, Obj.t, Obj.t, Obj.t) t) = + fun r -> + fun a -> fun b -> fun inv -> FStar_HyperStack_ST.ralloc () empty_map +type ('r, 'a, 'b, 'inv, 'm, 'x, 'h) defined = unit +type ('r, 'a, 'b, 'inv, 'm, 'x, 'y, 'h) contains = unit +type ('r, 'a, 'b, 'inv, 'm, 'x, 'h) fresh = unit +let (extend : + unit -> + unit -> + unit -> unit -> (unit, Obj.t, Obj.t, Obj.t) t -> Obj.t -> Obj.t -> unit) + = + fun r -> + fun a -> + fun b -> + fun inv -> + fun m -> + fun x -> + fun y -> + FStar_HyperStack_ST.recall m; + (let cur = FStar_HyperStack_ST.op_Bang m in + FStar_HyperStack_ST.op_Colon_Equals m (upd cur x y); + FStar_HyperStack_ST.mr_witness () () () (Obj.magic m) (); + FStar_HyperStack_ST.mr_witness () () () (Obj.magic m) ()) +let (lookup : + unit -> + unit -> + unit -> + unit -> + (unit, Obj.t, Obj.t, Obj.t) t -> + Obj.t -> Obj.t FStar_Pervasives_Native.option) + = + fun r -> + fun a -> + fun b -> + fun inv -> + fun m -> + fun x -> + let y = + let uu___ = FStar_HyperStack_ST.op_Bang m in sel uu___ x in + match y with + | FStar_Pervasives_Native.None -> y + | FStar_Pervasives_Native.Some b1 -> + (FStar_HyperStack_ST.mr_witness () () () (Obj.magic m) (); + FStar_HyperStack_ST.mr_witness () () () (Obj.magic m) (); + y) \ No newline at end of file diff --git a/ocaml/fstar-lib/generated/FStar_Monotonic_Pure.ml b/ocaml/fstar-lib/generated/FStar_Monotonic_Pure.ml new file mode 100644 index 00000000000..b8178572663 --- /dev/null +++ b/ocaml/fstar-lib/generated/FStar_Monotonic_Pure.ml @@ -0,0 +1,4 @@ +open Prims +type ('a, 'wp) is_monotonic = unit +type ('a, 'wp) as_pure_wp = 'wp +let elim_pure : 'a 'wp . (unit -> 'a) -> unit -> 'a = fun f -> fun p -> f () \ No newline at end of file diff --git a/ocaml/fstar-lib/generated/FStar_Monotonic_Seq.ml b/ocaml/fstar-lib/generated/FStar_Monotonic_Seq.ml new file mode 100644 index 00000000000..1f8425ded08 --- /dev/null +++ b/ocaml/fstar-lib/generated/FStar_Monotonic_Seq.ml @@ -0,0 +1,161 @@ +open Prims +type ('a, 's1, 's2) grows_aux = unit +type ('a, 'uuuuu, 'uuuuu1) grows = unit +type rid = unit +let snoc : 'a . 'a FStar_Seq_Base.seq -> 'a -> 'a FStar_Seq_Base.seq = + fun s -> + fun x -> FStar_Seq_Base.append s (FStar_Seq_Base.create Prims.int_one x) +let alloc_mref_seq : + 'a . + unit -> + 'a FStar_Seq_Base.seq -> + (unit, 'a FStar_Seq_Base.seq, ('a, unit, unit) grows) + FStar_HyperStack_ST.m_rref + = fun r -> fun init -> FStar_HyperStack_ST.ralloc () init +type ('a, 'i, 'n, 'x, 'r, 'h) at_least = unit +let write_at_end : + 'a . + unit -> + (unit, 'a FStar_Seq_Base.seq, ('a, unit, unit) grows) + FStar_HyperStack_ST.m_rref -> 'a -> unit + = + fun i -> + fun r -> + fun x -> + FStar_HyperStack_ST.recall r; + (let s0 = FStar_HyperStack_ST.op_Bang r in + let n = FStar_Seq_Base.length s0 in + FStar_HyperStack_ST.op_Colon_Equals r + (FStar_Seq_Properties.snoc s0 x); + FStar_HyperStack_ST.mr_witness () () () (Obj.magic r) ()) +type ('a, 'p, 's1, 's2) grows_p = unit +type ('r, 'a, 'p) i_seq = + (unit, 'a FStar_Seq_Base.seq, unit) FStar_HyperStack_ST.m_rref +let alloc_mref_iseq : + 'a 'p . unit -> 'a FStar_Seq_Base.seq -> (unit, 'a, 'p) i_seq = + fun r -> fun init -> FStar_HyperStack_ST.ralloc () init +type ('r, 'a, 'p, 'n, 'x, 'm, 'h) i_at_least = unit +type ('r, 'a, 'p, 'x, 'is, 'h) int_at_most = unit +let i_read : 'a 'p . unit -> (unit, 'a, 'p) i_seq -> 'a FStar_Seq_Base.seq = + fun r -> fun m -> FStar_HyperStack_ST.op_Bang m +type ('r, 'a, 'p, 'm, 'h) i_contains = unit +let i_write_at_end : 'a 'p . unit -> (unit, 'a, 'p) i_seq -> 'a -> unit = + fun rgn -> + fun r -> + fun x -> + FStar_HyperStack_ST.recall r; + (let s0 = FStar_HyperStack_ST.op_Bang r in + let n = FStar_Seq_Base.length s0 in + FStar_HyperStack_ST.op_Colon_Equals r + (FStar_Seq_Properties.snoc s0 x); + FStar_HyperStack_ST.mr_witness () () () (Obj.magic r) ()) +type 's invariant = unit +let (test0 : + unit -> + (unit, Prims.nat FStar_Seq_Base.seq, (Prims.nat, unit, unit) grows) + FStar_HyperStack_ST.m_rref -> Prims.nat -> unit) + = + fun r -> + fun a -> + fun k -> + let h0 = FStar_HyperStack_ST.get () in + FStar_HyperStack_ST.mr_witness () () () (Obj.magic a) () +let (itest : + unit -> (unit, Prims.nat, unit invariant) i_seq -> Prims.nat -> unit) = + fun r -> + fun a -> + fun k -> + let h0 = FStar_HyperStack_ST.get () in + FStar_HyperStack_ST.mr_witness () () () (Obj.magic a) () +let un_snoc : 'a . 'a FStar_Seq_Base.seq -> ('a FStar_Seq_Base.seq * 'a) = + fun s -> + let last = (FStar_Seq_Base.length s) - Prims.int_one in + ((FStar_Seq_Base.slice s Prims.int_zero last), + (FStar_Seq_Base.index s last)) +let rec map : + 'a 'b . ('a -> 'b) -> 'a FStar_Seq_Base.seq -> 'b FStar_Seq_Base.seq = + fun f -> + fun s -> + if (FStar_Seq_Base.length s) = Prims.int_zero + then FStar_Seq_Base.empty () + else + (let uu___1 = un_snoc s in + match uu___1 with + | (prefix, last) -> + FStar_Seq_Properties.snoc (map f prefix) (f last)) +let op_At : + 'uuuuu . + 'uuuuu FStar_Seq_Base.seq -> + 'uuuuu FStar_Seq_Base.seq -> 'uuuuu FStar_Seq_Base.seq + = fun s1 -> fun s2 -> FStar_Seq_Base.append s1 s2 +type ('a, 'b, 'i, 'r, 'f, 'bs, 'h) map_prefix = unit +type ('a, 'b, 'i, 'r, 'f, 'n, 'v, 'h) map_has_at_index = unit +let rec collect : + 'a 'b . + ('a -> 'b FStar_Seq_Base.seq) -> + 'a FStar_Seq_Base.seq -> 'b FStar_Seq_Base.seq + = + fun f -> + fun s -> + if (FStar_Seq_Base.length s) = Prims.int_zero + then FStar_Seq_Base.empty () + else + (let uu___1 = un_snoc s in + match uu___1 with + | (prefix, last) -> + FStar_Seq_Base.append (collect f prefix) (f last)) +type ('a, 'b, 'i, 'r, 'f, 'bs, 'h) collect_prefix = unit +type ('a, 'b, 'i, 'r, 'f, 'n, 'v, 'h) collect_has_at_index = unit +type ('i, 'a) log_t = + (unit, 'a FStar_Seq_Base.seq, unit) FStar_HyperStack_ST.m_rref +type ('x, 'y) increases = unit +type ('l, 'a, 'x, 'log, 'h) at_most_log_len = unit +type ('l, 'a, 'i, 'log, 'max) seqn_val = Prims.nat +type ('l, 'a, 'i, 'log, 'max) seqn = + (unit, (unit, 'a, unit, unit, unit) seqn_val, unit) + FStar_HyperStack_ST.m_rref +let new_seqn : + 'a . + unit -> + Prims.nat -> + unit -> + Prims.nat -> (unit, 'a) log_t -> (unit, 'a, unit, unit, unit) seqn + = + fun l -> + fun max -> + fun i -> + fun init -> + fun log -> + FStar_HyperStack_ST.recall log; + FStar_HyperStack_ST.recall_region (); + FStar_HyperStack_ST.mr_witness () () () (Obj.magic log) (); + FStar_HyperStack_ST.ralloc () init +let increment_seqn : + 'a . + unit -> + Prims.nat -> + unit -> (unit, 'a) log_t -> (unit, 'a, unit, unit, unit) seqn -> unit + = + fun l -> + fun max -> + fun i -> + fun log -> + fun c -> + FStar_HyperStack_ST.recall c; + FStar_HyperStack_ST.recall log; + (let n = + let uu___2 = FStar_HyperStack_ST.op_Bang c in + uu___2 + Prims.int_one in + FStar_HyperStack_ST.mr_witness () () () (Obj.magic log) (); + FStar_HyperStack_ST.op_Colon_Equals c n) +let testify_seqn : + 'a . + unit -> + unit -> + (unit, 'a) log_t -> + Prims.nat -> (unit, 'a, unit, unit, unit) seqn -> unit + = + fun i -> + fun l -> + fun log -> + fun max -> fun ctr -> let n = FStar_HyperStack_ST.op_Bang ctr in () \ No newline at end of file diff --git a/ocaml/fstar-lib/generated/FStar_Monotonic_Witnessed.ml b/ocaml/fstar-lib/generated/FStar_Monotonic_Witnessed.ml new file mode 100644 index 00000000000..41f6268bbcd --- /dev/null +++ b/ocaml/fstar-lib/generated/FStar_Monotonic_Witnessed.ml @@ -0,0 +1,5 @@ +open Prims +type ('world, 'uuuuu) get = unit +type ('world, 'uuuuu, 'uuuuu1) set = unit +type ('state, 'rel, 'p) witnessed = ('state, unit) get +type ('state, 'rel, 'p) witnessed_past = ('state, unit) get \ No newline at end of file diff --git a/src/ocaml-output/FStar_Options.ml b/ocaml/fstar-lib/generated/FStar_Options.ml similarity index 99% rename from src/ocaml-output/FStar_Options.ml rename to ocaml/fstar-lib/generated/FStar_Options.ml index bf37a6da9d7..48bea103106 100644 --- a/src/ocaml-output/FStar_Options.ml +++ b/ocaml/fstar-lib/generated/FStar_Options.ml @@ -318,7 +318,6 @@ let (defaults : (Prims.string * option_val) Prims.list) = ("MLish", (Bool false)); ("no_default_includes", (Bool false)); ("no_extract", (List [])); - ("no_load_fstartaclib", (Bool false)); ("no_location_info", (Bool false)); ("no_smt", (Bool false)); ("no_plugins", (Bool false)); @@ -549,8 +548,6 @@ let (get_no_default_includes : unit -> Prims.bool) = fun uu___ -> lookup_opt "no_default_includes" as_bool let (get_no_extract : unit -> Prims.string Prims.list) = fun uu___ -> lookup_opt "no_extract" (as_list as_string) -let (get_no_load_fstartaclib : unit -> Prims.bool) = - fun uu___ -> lookup_opt "no_load_fstartaclib" as_bool let (get_no_location_info : unit -> Prims.bool) = fun uu___ -> lookup_opt "no_location_info" as_bool let (get_no_plugins : unit -> Prims.bool) = @@ -962,7 +959,7 @@ let (interp_quake_arg : Prims.string -> (Prims.int * Prims.int * Prims.bool)) let uu___ = ios f1 in let uu___1 = ios f2 in (uu___, uu___1, true) else failwith "unexpected value for --quake" | uu___ -> failwith "unexpected value for --quake" -let (uu___449 : (((Prims.string -> unit) -> unit) * (Prims.string -> unit))) +let (uu___448 : (((Prims.string -> unit) -> unit) * (Prims.string -> unit))) = let cb = FStar_Compiler_Util.mk_ref FStar_Pervasives_Native.None in let set1 f = @@ -974,11 +971,11 @@ let (uu___449 : (((Prims.string -> unit) -> unit) * (Prims.string -> unit))) | FStar_Pervasives_Native.Some f -> f msg in (set1, call) let (set_option_warning_callback_aux : (Prims.string -> unit) -> unit) = - match uu___449 with + match uu___448 with | (set_option_warning_callback_aux1, option_warning_callback) -> set_option_warning_callback_aux1 let (option_warning_callback : Prims.string -> unit) = - match uu___449 with + match uu___448 with | (set_option_warning_callback_aux1, option_warning_callback1) -> option_warning_callback1 let (set_option_warning_callback : (Prims.string -> unit) -> unit) = @@ -1176,8 +1173,6 @@ let rec (specs_with_types : (FStar_Getopt.noshort, "no_extract", (Accumulated (PathStr "module name")), "Deprecated: use --extract instead; Do not extract code from this module"); - (FStar_Getopt.noshort, "no_load_fstartaclib", (Const (Bool true)), - "Do not attempt to load fstartaclib by default"); (FStar_Getopt.noshort, "no_location_info", (Const (Bool true)), "Suppress location information in the generated OCaml output (only relevant with --codegen OCaml)"); (FStar_Getopt.noshort, "no_smt", (Const (Bool true)), @@ -1484,7 +1479,7 @@ let (settable_specs : (FStar_Compiler_List.filter (fun uu___ -> match uu___ with | (uu___1, x, uu___2, uu___3) -> settable x)) -let (uu___641 : +let (uu___640 : (((unit -> FStar_Getopt.parse_cmdline_res) -> unit) * (unit -> FStar_Getopt.parse_cmdline_res))) = @@ -1501,11 +1496,11 @@ let (uu___641 : (set1, call) let (set_error_flags_callback_aux : (unit -> FStar_Getopt.parse_cmdline_res) -> unit) = - match uu___641 with + match uu___640 with | (set_error_flags_callback_aux1, set_error_flags) -> set_error_flags_callback_aux1 let (set_error_flags : unit -> FStar_Getopt.parse_cmdline_res) = - match uu___641 with + match uu___640 with | (set_error_flags_callback_aux1, set_error_flags1) -> set_error_flags1 let (set_error_flags_callback : (unit -> FStar_Getopt.parse_cmdline_res) -> unit) = @@ -1963,8 +1958,6 @@ let (no_extract : Prims.string -> Prims.bool) = (FStar_Compiler_List.existsb (module_name_eq s)) let (normalize_pure_terms_for_extraction : unit -> Prims.bool) = fun uu___ -> get_normalize_pure_terms_for_extraction () -let (no_load_fstartaclib : unit -> Prims.bool) = - fun uu___ -> get_no_load_fstartaclib () let (no_location_info : unit -> Prims.bool) = fun uu___ -> get_no_location_info () let (no_plugins : unit -> Prims.bool) = fun uu___ -> get_no_plugins () diff --git a/ocaml/fstar-lib/generated/FStar_OrdSet.ml b/ocaml/fstar-lib/generated/FStar_OrdSet.ml new file mode 100644 index 00000000000..ecfa4bf5294 --- /dev/null +++ b/ocaml/fstar-lib/generated/FStar_OrdSet.ml @@ -0,0 +1,301 @@ +open Prims +type ('a, 'f) total_order = unit +type 'a cmp = 'a -> 'a -> Prims.bool +let rec sorted : 'a . 'a cmp -> 'a Prims.list -> Prims.bool = + fun f -> + fun l -> + match l with + | [] -> true + | x::[] -> true + | x::y::tl -> ((f x y) && (x <> y)) && (sorted f (y :: tl)) +type ('a, 'f) ordset = 'a Prims.list +let empty : 'uuuuu . 'uuuuu cmp -> ('uuuuu, unit) ordset = fun uu___ -> [] +let tail : 'a . 'a cmp -> ('a, unit) ordset -> ('a, unit) ordset = + fun f -> fun s -> Prims.__proj__Cons__item__tl s +let head : 'uuuuu . 'uuuuu cmp -> ('uuuuu, unit) ordset -> 'uuuuu = + fun uu___ -> fun s -> Prims.__proj__Cons__item__hd s +let mem : + 'uuuuu . 'uuuuu cmp -> 'uuuuu -> ('uuuuu, unit) ordset -> Prims.bool = + fun uu___ -> fun x -> fun s -> FStar_List_Tot_Base.mem x s +let mem_of : 'a . 'a cmp -> ('a, unit) ordset -> 'a -> Prims.bool = + fun f -> fun s -> fun x -> mem f x s +let rec last_direct : 'a . 'a cmp -> ('a, unit) ordset -> 'a = + fun f -> + fun s -> match s with | x::[] -> x | h::g::t -> last_direct f (tail f s) +let last_lib : 'a . 'a cmp -> ('a, unit) ordset -> 'a = + fun f -> + fun s -> FStar_Pervasives_Native.snd (FStar_List_Tot_Base.unsnoc s) +let last : 'a . 'a cmp -> ('a, unit) ordset -> 'a = + fun f -> fun s -> last_lib f s +let rec liat_direct : 'a . 'a cmp -> ('a, unit) ordset -> ('a, unit) ordset = + fun f -> + fun s -> + match s with | x::[] -> [] | h::g::t -> h :: (liat_direct f (g :: t)) +let liat_lib : 'a . 'a cmp -> ('a, unit) ordset -> 'a Prims.list = + fun f -> + fun s -> FStar_Pervasives_Native.fst (FStar_List_Tot_Base.unsnoc s) +let liat : 'a . 'a cmp -> ('a, unit) ordset -> ('a, unit) ordset = + fun f -> fun s -> liat_lib f s +let unsnoc : 'a . 'a cmp -> ('a, unit) ordset -> (('a, unit) ordset * 'a) = + fun f -> + fun s -> + let l = FStar_List_Tot_Base.unsnoc s in + ((FStar_Pervasives_Native.fst l), (FStar_Pervasives_Native.snd l)) +let as_list : 'a . 'a cmp -> ('a, unit) ordset -> 'a Prims.list = + fun f -> fun s -> s +let rec insert' : + 'uuuuu . + 'uuuuu cmp -> 'uuuuu -> ('uuuuu, unit) ordset -> ('uuuuu, unit) ordset + = + fun f -> + fun x -> + fun s -> + match s with + | [] -> [x] + | hd::tl -> + if x = hd + then hd :: tl + else if f x hd then x :: hd :: tl else hd :: (insert' f x tl) +let rec distinct' : 'a . 'a cmp -> 'a Prims.list -> ('a, unit) ordset = + fun f -> + fun l -> match l with | [] -> [] | x::t -> insert' f x (distinct' f t) +let distinct : 'a . 'a cmp -> 'a Prims.list -> ('a, unit) ordset = + fun f -> fun l -> distinct' f l +let rec union : + 'uuuuu . + 'uuuuu cmp -> + ('uuuuu, unit) ordset -> ('uuuuu, unit) ordset -> ('uuuuu, unit) ordset + = + fun uu___ -> + fun s1 -> + fun s2 -> + match s1 with + | [] -> s2 + | hd::tl -> union uu___ tl (insert' uu___ hd s2) +let rec remove' : 'a . 'a cmp -> 'a -> ('a, unit) ordset -> ('a, unit) ordset + = + fun f -> + fun x -> + fun s -> + match s with + | [] -> [] + | hd::tl -> + let tl1 = tl in if x = hd then tl1 else hd :: (remove' f x tl1) +let size' : 'a . 'a cmp -> ('a, unit) ordset -> Prims.nat = + fun f -> fun s -> FStar_List_Tot_Base.length s +let rec subset' : + 'a . 'a cmp -> ('a, unit) ordset -> ('a, unit) ordset -> Prims.bool = + fun f -> + fun s1 -> + fun s2 -> + match (s1, s2) with + | ([], uu___) -> true + | (hd::tl, hd'::tl') -> + if (f hd hd') && (hd = hd') + then subset' f tl tl' + else + if (f hd hd') && (Prims.op_Negation (hd = hd')) + then false + else subset' f s1 tl' + | (uu___, uu___1) -> false +let rec remove_until_greater_than : + 'a . 'a cmp -> 'a -> ('a, unit) ordset -> (('a, unit) ordset * Prims.bool) + = + fun f -> + fun x -> + fun s -> + match s with + | [] -> ([], false) + | h::t -> + let t1 = t in + if h = x + then (t1, true) + else + if f x h then (s, false) else remove_until_greater_than f x t1 +let rec smart_intersect : + 'a . 'a cmp -> ('a, unit) ordset -> ('a, unit) ordset -> ('a, unit) ordset + = + fun f -> + fun s1 -> + fun s2 -> + match s1 with + | [] -> [] + | h1::t1 -> + let t11 = t1 in + (match s2 with + | [] -> [] + | h2::t2 -> + let t21 = t2 in + if h1 = h2 + then h1 :: (smart_intersect f t11 t21) + else + if f h1 h2 + then + (let uu___1 = remove_until_greater_than f h2 t11 in + match uu___1 with + | (skip1, found) -> + let subresult = smart_intersect f skip1 t21 in + if found then h2 :: subresult else subresult) + else + (let uu___2 = remove_until_greater_than f h1 t21 in + match uu___2 with + | (skip2, found) -> + let subresult = smart_intersect f t11 skip2 in + if found then h1 :: subresult else subresult)) +let intersect : + 'a . 'a cmp -> ('a, unit) ordset -> ('a, unit) ordset -> ('a, unit) ordset + = fun f -> fun s1 -> fun s2 -> smart_intersect f s1 s2 +let choose : + 'a . 'a cmp -> ('a, unit) ordset -> 'a FStar_Pervasives_Native.option = + fun f -> + fun s -> + match s with + | [] -> FStar_Pervasives_Native.None + | x::uu___ -> FStar_Pervasives_Native.Some x +let remove : 'a . 'a cmp -> 'a -> ('a, unit) ordset -> ('a, unit) ordset = + fun f -> fun x -> fun s -> remove' f x s +let size : 'a . 'a cmp -> ('a, unit) ordset -> Prims.nat = + fun f -> fun s -> size' f s +let subset : + 'a . 'a cmp -> ('a, unit) ordset -> ('a, unit) ordset -> Prims.bool = + fun f -> fun s1 -> fun s2 -> subset' f s1 s2 +let superset : + 'a . 'a cmp -> ('a, unit) ordset -> ('a, unit) ordset -> Prims.bool = + fun f -> fun s1 -> fun s2 -> subset f s2 s1 +let singleton : 'a . 'a cmp -> 'a -> ('a, unit) ordset = + fun f -> fun x -> [x] +let rec smart_minus : + 'a . 'a cmp -> ('a, unit) ordset -> ('a, unit) ordset -> ('a, unit) ordset + = + fun f -> + fun p -> + fun q -> + match p with + | [] -> [] + | ph::pt -> + let pt1 = pt in + (match q with + | [] -> p + | qh::qt -> + let qt1 = qt in + let uu___ = remove_until_greater_than f ph q in + (match uu___ with + | (q_after_ph, found) -> + if found + then + let result = smart_minus f pt1 q_after_ph in result + else ph :: (smart_minus f pt1 q_after_ph))) +let (ncmp : Prims.nat -> Prims.nat -> Prims.bool) = fun x -> fun y -> x <= y +let minus : + 'a . 'a cmp -> ('a, unit) ordset -> ('a, unit) ordset -> ('a, unit) ordset + = fun f -> fun s1 -> fun s2 -> smart_minus f s1 s2 +let strict_subset : + 'a . 'a cmp -> ('a, unit) ordset -> ('a, unit) ordset -> Prims.bool = + fun f -> fun s1 -> fun s2 -> (s1 <> s2) && (subset f s1 s2) +let strict_superset : + 'a . 'a cmp -> ('a, unit) ordset -> ('a, unit) ordset -> Prims.bool = + fun f -> fun s1 -> fun s2 -> strict_subset f s2 s1 +let disjoint : + 'a . 'a cmp -> ('a, unit) ordset -> ('a, unit) ordset -> Prims.bool = + fun f -> fun s1 -> fun s2 -> (intersect f s1 s2) = (empty f) +type ('a, 'f, 's1, 's2) equal = unit +let fold : + 'a 'acc . + 'a cmp -> ('acc -> 'a -> 'acc) -> 'acc -> ('a, unit) ordset -> 'acc + = + fun f -> + fun g -> fun init -> fun s -> FStar_List_Tot_Base.fold_left g init s +let rec map_internal : + 'a 'b . + 'a cmp -> 'b cmp -> ('a -> 'b) -> ('a, unit) ordset -> ('b, unit) ordset + = + fun fa -> + fun fb -> + fun g -> + fun sa -> + match sa with + | [] -> [] + | x::xs -> + let y = g x in + let ys = map_internal fa fb g xs in + if + (Prims.op_Negation (Prims.uu___is_Cons ys)) || + ((Prims.__proj__Cons__item__hd ys) <> y) + then y :: ys + else ys +let map : + 'a 'b . + 'a cmp -> 'b cmp -> ('a -> 'b) -> ('a, unit) ordset -> ('b, unit) ordset + = fun fa -> fun fb -> fun g -> fun sa -> map_internal fa fb g sa +type 'a condition = 'a -> Prims.bool +let inv : 'a . 'a condition -> 'a condition = + fun c -> fun x -> Prims.op_Negation (c x) +let rec count : 'a . 'a cmp -> ('a, unit) ordset -> 'a condition -> Prims.nat + = + fun f -> + fun s -> + fun c -> + match s with + | [] -> Prims.int_zero + | h::t -> if c h then Prims.int_one + (count f t c) else count f t c +let rec all : 'a . 'a cmp -> ('a, unit) ordset -> 'a condition -> Prims.bool + = + fun f -> + fun s -> + fun c -> match s with | [] -> true | h::t -> (c h) && (all f t c) +let rec any : 'a . 'a cmp -> ('a, unit) ordset -> 'a condition -> Prims.bool + = + fun f -> + fun s -> + fun c -> match s with | [] -> false | h::t -> (c h) || (any f t c) +let rec find_first : + 'a . + 'a cmp -> + ('a, unit) ordset -> 'a condition -> 'a FStar_Pervasives_Native.option + = + fun f -> + fun s -> + fun c -> + match s with + | [] -> FStar_Pervasives_Native.None + | h::t -> + let t1 = t in + if c h then FStar_Pervasives_Native.Some h else find_first f t1 c +let rec find_last' : + 'a . + 'a cmp -> + ('a, unit) ordset -> 'a condition -> 'a FStar_Pervasives_Native.option + = + fun f -> + fun s -> + fun c -> + if s = (empty f) + then FStar_Pervasives_Native.None + else + (let uu___1 = unsnoc f s in + match uu___1 with + | (liat1, last1) -> + if c last1 + then FStar_Pervasives_Native.Some last1 + else find_last' f liat1 c) +let find_last : + 'a . + 'a cmp -> + ('a, unit) ordset -> 'a condition -> 'a FStar_Pervasives_Native.option + = fun f -> fun s -> fun c -> find_last' f s c +let rec where : + 'a . 'a cmp -> ('a, unit) ordset -> 'a condition -> ('a, unit) ordset = + fun f -> + fun s -> + fun c -> + match s with + | [] -> [] + | h::[] -> if c h then [h] else [] + | h::t -> + let t1 = t in if c h then h :: (where f t1 c) else where f t1 c +let rec as_set : 'a . 'a cmp -> ('a, unit) ordset -> 'a FStar_Set.set = + fun f -> + fun s -> + match s with + | [] -> FStar_Set.empty () + | hd::tl -> FStar_Set.union (FStar_Set.singleton hd) (as_set f tl) \ No newline at end of file diff --git a/ocaml/fstar-lib/generated/FStar_OrdSetProps.ml b/ocaml/fstar-lib/generated/FStar_OrdSetProps.ml new file mode 100644 index 00000000000..f1e4f79f279 --- /dev/null +++ b/ocaml/fstar-lib/generated/FStar_OrdSetProps.ml @@ -0,0 +1,32 @@ +open Prims +let rec fold : + 'a 'b . + 'a FStar_OrdSet.cmp -> + ('a -> 'b -> 'b) -> ('a, unit) FStar_OrdSet.ordset -> 'b -> 'b + = + fun f -> + fun g -> + fun s -> + fun x -> + if s = (FStar_OrdSet.empty f) + then x + else + (let uu___1 = FStar_OrdSet.choose f s in + match uu___1 with + | FStar_Pervasives_Native.Some e -> + let a_rest = fold f g (FStar_OrdSet.remove f e s) x in + g e a_rest) +let insert : + 'a . + 'a FStar_OrdSet.cmp -> + 'a -> ('a, unit) FStar_OrdSet.ordset -> ('a, unit) FStar_OrdSet.ordset + = + fun f -> + fun x -> fun s -> FStar_OrdSet.union f (FStar_OrdSet.singleton f x) s +let union' : + 'a . + 'a FStar_OrdSet.cmp -> + ('a, unit) FStar_OrdSet.ordset -> + ('a, unit) FStar_OrdSet.ordset -> ('a, unit) FStar_OrdSet.ordset + = + fun f -> fun s1 -> fun s2 -> fold f (fun e -> fun s -> insert f e s) s1 s2 \ No newline at end of file diff --git a/src/ocaml-output/FStar_Order.ml b/ocaml/fstar-lib/generated/FStar_Order.ml similarity index 100% rename from src/ocaml-output/FStar_Order.ml rename to ocaml/fstar-lib/generated/FStar_Order.ml diff --git a/ocaml/fstar-lib/generated/FStar_PCM.ml b/ocaml/fstar-lib/generated/FStar_PCM.ml new file mode 100644 index 00000000000..737e6694a0c --- /dev/null +++ b/ocaml/fstar-lib/generated/FStar_PCM.ml @@ -0,0 +1,65 @@ +open Prims +type 'a symrel = unit +type 'a pcm' = { + composable: unit ; + op: 'a -> 'a -> 'a ; + one: 'a } +let __proj__Mkpcm'__item__op : 'a . 'a pcm' -> 'a -> 'a -> 'a = + fun projectee -> match projectee with | { composable; op; one;_} -> op +let __proj__Mkpcm'__item__one : 'a . 'a pcm' -> 'a = + fun projectee -> match projectee with | { composable; op; one;_} -> one +type ('a, 'p) lem_commutative = unit +type ('a, 'p) lem_assoc_l = unit +type ('a, 'p) lem_assoc_r = unit +type ('a, 'p) lem_is_unit = unit +type 'a pcm = + { + p: 'a pcm' ; + comm: unit ; + assoc: unit ; + assoc_r: unit ; + is_unit: unit ; + refine: unit } +let __proj__Mkpcm__item__p : 'a . 'a pcm -> 'a pcm' = + fun projectee -> + match projectee with | { p; comm; assoc; assoc_r; is_unit; refine;_} -> p + + + + +type ('a, 'p, 'x, 'y) composable = Obj.t +let op : 'a . 'a pcm -> 'a -> 'a -> 'a = + fun p -> fun x -> fun y -> (p.p).op x y +type ('a, 'pcm1, 'x, 'y) compatible = unit +type ('a, 'p, 'x, 'y) joinable = unit +type ('a, 'p, 'x, 'v, 'y) frame_compatible = unit +type ('a, 'p, 'x, 'y) frame_preserving_upd = 'a -> 'a +type ('a, 'pcm1, 'x, 'y) frame_preserving = unit +let frame_preserving_val_to_fp_upd : + 'a . 'a pcm -> unit -> 'a -> ('a, unit, unit, unit) frame_preserving_upd = + fun p -> fun x -> fun v -> fun uu___ -> v +type ('a, 'p, 'x) exclusive = unit +let no_op_is_frame_preserving : + 'a . 'a pcm -> 'a -> ('a, unit, unit, unit) frame_preserving_upd = + fun p -> fun x -> fun v -> v +let compose_frame_preserving_updates : + 'a . + 'a pcm -> + 'a -> + 'a -> + 'a -> + ('a, unit, unit, unit) frame_preserving_upd -> + ('a, unit, unit, unit) frame_preserving_upd -> + ('a, unit, unit, unit) frame_preserving_upd + = fun p -> fun x -> fun y -> fun z -> fun f -> fun g -> fun v -> g (f v) +let frame_preserving_subframe : + 'a . + 'a pcm -> + 'a -> + 'a -> + 'a -> + ('a, unit, unit, unit) frame_preserving_upd -> + ('a, unit, unit, unit) frame_preserving_upd + = + fun p -> + fun x -> fun y -> fun subframe -> fun f -> fun v -> let w = f v in w \ No newline at end of file diff --git a/src/ocaml-output/FStar_Parser_AST.ml b/ocaml/fstar-lib/generated/FStar_Parser_AST.ml similarity index 100% rename from src/ocaml-output/FStar_Parser_AST.ml rename to ocaml/fstar-lib/generated/FStar_Parser_AST.ml diff --git a/src/ocaml-output/FStar_Parser_Const.ml b/ocaml/fstar-lib/generated/FStar_Parser_Const.ml similarity index 100% rename from src/ocaml-output/FStar_Parser_Const.ml rename to ocaml/fstar-lib/generated/FStar_Parser_Const.ml diff --git a/src/ocaml-output/FStar_Parser_Dep.ml b/ocaml/fstar-lib/generated/FStar_Parser_Dep.ml similarity index 100% rename from src/ocaml-output/FStar_Parser_Dep.ml rename to ocaml/fstar-lib/generated/FStar_Parser_Dep.ml diff --git a/src/ocaml-output/FStar_Parser_Driver.ml b/ocaml/fstar-lib/generated/FStar_Parser_Driver.ml similarity index 100% rename from src/ocaml-output/FStar_Parser_Driver.ml rename to ocaml/fstar-lib/generated/FStar_Parser_Driver.ml diff --git a/ocaml/fstar-lib/generated/FStar_Parser_Parse.ml b/ocaml/fstar-lib/generated/FStar_Parser_Parse.ml new file mode 100644 index 00000000000..f5cf1fc3ddc --- /dev/null +++ b/ocaml/fstar-lib/generated/FStar_Parser_Parse.ml @@ -0,0 +1,12661 @@ +open Prims +open FStar_Errors +open FStar_Compiler_List +open FStar_Compiler_Util +open FStar_Compiler_Range +open FStar_Options +open FStar_Syntax_Syntax +open FStar_Parser_Const +open FStar_Syntax_Util +open FStar_Parser_AST +open FStar_Parser_Util +open FStar_Const +open FStar_Ident +open FStar_String +type token = + | AMP + | AND + | AND_OP of (string) + | AS + | ASSERT + | ASSUME + | ATTRIBUTES + | BACKTICK + | BACKTICK_AT + | BACKTICK_HASH + | BACKTICK_PERC + | BANG_LBRACE + | BAR + | BAR_RBRACE + | BAR_RBRACK + | BEGIN + | BY + | CALC + | CHAR of (char) + | CLASS + | COLON + | COLON_COLON + | COLON_EQUALS + | COMMA + | CONJUNCTION + | DECREASES + | DEFAULT + | DISJUNCTION + | DOLLAR + | DOT + | DOT_LBRACK + | DOT_LBRACK_BAR + | DOT_LENS_PAREN_LEFT + | DOT_LPAREN + | EFFECT + | ELIM + | ELSE + | END + | ENSURES + | EOF + | EQUALS + | EQUALTYPE + | EXCEPTION + | EXISTS + | FALSE + | FORALL + | FRIEND + | FUN + | FUNCTION + | HASH + | IDENT of (string) + | IF + | IFF + | IF_OP of (string) + | IMPLIES + | IN + | INCLUDE + | INLINE + | INLINE_FOR_EXTRACTION + | INSTANCE + | INT of (string * bool) + | INT16 of (string * bool) + | INT32 of (string * bool) + | INT64 of (string * bool) + | INT8 of (string * bool) + | INTRO + | IRREDUCIBLE + | LARROW + | LAYERED_EFFECT + | LBRACE + | LBRACE_BAR + | LBRACE_COLON_PATTERN + | LBRACE_COLON_WELL_FOUNDED + | LBRACK + | LBRACK_AT + | LBRACK_AT_AT + | LBRACK_AT_AT_AT + | LBRACK_BAR + | LENS_PAREN_LEFT + | LENS_PAREN_RIGHT + | LET of (bool) + | LET_OP of (string) + | LOGIC + | LONG_LEFT_ARROW + | LPAREN + | LPAREN_RPAREN + | MATCH + | MATCH_OP of (string) + | MINUS + | MODULE + | NAME of (string) + | NEW + | NEW_EFFECT + | NOEQUALITY + | NOEXTRACT + | OF + | OPAQUE + | OPEN + | OPINFIX0a of (string) + | OPINFIX0b of (string) + | OPINFIX0c of (string) + | OPINFIX0d of (string) + | OPINFIX1 of (string) + | OPINFIX2 of (string) + | OPINFIX3 of (string) + | OPINFIX4 of (string) + | OPPREFIX of (string) + | OP_MIXFIX_ACCESS of (string) + | OP_MIXFIX_ASSIGNMENT of (string) + | PERCENT_LBRACK + | PIPE_RIGHT + | POLYMONADIC_BIND + | POLYMONADIC_SUBCOMP + | PRAGMA_POP_OPTIONS + | PRAGMA_PRINT_EFFECTS_GRAPH + | PRAGMA_PUSH_OPTIONS + | PRAGMA_RESET_OPTIONS + | PRAGMA_RESTART_SOLVER + | PRAGMA_SET_OPTIONS + | PRIVATE + | QMARK + | QMARK_DOT + | QUOTE + | RANGE of (string) + | RANGE_OF + | RARROW + | RBRACE + | RBRACK + | REAL of (string) + | REC + | REFLECTABLE + | REIFIABLE + | REIFY + | REQUIRES + | RETURNS + | RETURNS_EQ + | RPAREN + | SEMICOLON + | SEMICOLON_OP of (string option) + | SET_RANGE_OF + | SIZET of (string) + | SPLICE + | SQUIGGLY_RARROW + | STRING of (string) + | SUBKIND + | SUBTYPE + | SUB_EFFECT + | SYNTH + | THEN + | TILDE of (string) + | TOTAL + | TRUE + | TRY + | TVAR of (string) + | TYPE + | TYP_APP_GREATER + | TYP_APP_LESS + | UINT16 of (string) + | UINT32 of (string) + | UINT64 of (string) + | UINT8 of (string) + | UNDERSCORE + | UNFOLD + | UNFOLDABLE + | UNIV_HASH + | UNOPTEQUALITY + | VAL + | WHEN + | WITH + +open Parsing;; +let _ = parse_error;; +# 2 "parse.mly" +(* + We are expected to have only 6 shift-reduce conflicts in ML and 8 in F#. + A lot (176) of end-of-stream conflicts are also reported and + should be investigated... +*) +(* (c) Microsoft Corporation. All rights reserved *) +open Prims +open FStar_Pervasives +open FStar_Errors +open FStar_Compiler_List +open FStar_Compiler_Util +open FStar_Compiler_Range +open FStar_Options +(* TODO : these files should be deprecated and removed *) +open FStar_Syntax_Syntax +open FStar_Parser_Const +open FStar_Syntax_Util +open FStar_Parser_AST +open FStar_Parser_Util +open FStar_Const +open FStar_Ident +open FStar_String + +let logic_qualifier_deprecation_warning = + "logic qualifier is deprecated, please remove it from the source program. In case your program verifies with the qualifier annotated but not without it, please try to minimize the example and file a github issue" + +let mk_meta_tac m = Meta m + +let old_attribute_syntax_warning = + "The `[@ ...]` syntax of attributes is deprecated. \ + Use `[@@ a1; a2; ...; an]`, a semi-colon separated list of attributes, instead" + +let do_notation_deprecation_warning = + "The lightweight do notation [x <-- y; z] or [x ;; z] is deprecated, use let operators (i.e. [let* x = y in z] or [y ;* z], [*] being any sequence of operator characters) instead." + +let none_to_empty_list x = + match x with + | None -> [] + | Some l -> l + +# 216 "parse.ml" +let yytransl_const = [| + 257 (* AMP *); + 258 (* AND *); + 260 (* AS *); + 261 (* ASSERT *); + 262 (* ASSUME *); + 263 (* ATTRIBUTES *); + 264 (* BACKTICK *); + 265 (* BACKTICK_AT *); + 266 (* BACKTICK_HASH *); + 267 (* BACKTICK_PERC *); + 268 (* BANG_LBRACE *); + 269 (* BAR *); + 270 (* BAR_RBRACE *); + 271 (* BAR_RBRACK *); + 272 (* BEGIN *); + 273 (* BY *); + 274 (* CALC *); + 276 (* CLASS *); + 277 (* COLON *); + 278 (* COLON_COLON *); + 279 (* COLON_EQUALS *); + 280 (* COMMA *); + 281 (* CONJUNCTION *); + 282 (* DECREASES *); + 283 (* DEFAULT *); + 284 (* DISJUNCTION *); + 285 (* DOLLAR *); + 286 (* DOT *); + 287 (* DOT_LBRACK *); + 288 (* DOT_LBRACK_BAR *); + 289 (* DOT_LENS_PAREN_LEFT *); + 290 (* DOT_LPAREN *); + 291 (* EFFECT *); + 292 (* ELIM *); + 293 (* ELSE *); + 294 (* END *); + 295 (* ENSURES *); + 0 (* EOF *); + 296 (* EQUALS *); + 297 (* EQUALTYPE *); + 298 (* EXCEPTION *); + 299 (* EXISTS *); + 300 (* FALSE *); + 301 (* FORALL *); + 302 (* FRIEND *); + 303 (* FUN *); + 304 (* FUNCTION *); + 305 (* HASH *); + 307 (* IF *); + 308 (* IFF *); + 310 (* IMPLIES *); + 311 (* IN *); + 312 (* INCLUDE *); + 313 (* INLINE *); + 314 (* INLINE_FOR_EXTRACTION *); + 315 (* INSTANCE *); + 321 (* INTRO *); + 322 (* IRREDUCIBLE *); + 323 (* LARROW *); + 324 (* LAYERED_EFFECT *); + 325 (* LBRACE *); + 326 (* LBRACE_BAR *); + 327 (* LBRACE_COLON_PATTERN *); + 328 (* LBRACE_COLON_WELL_FOUNDED *); + 329 (* LBRACK *); + 330 (* LBRACK_AT *); + 331 (* LBRACK_AT_AT *); + 332 (* LBRACK_AT_AT_AT *); + 333 (* LBRACK_BAR *); + 334 (* LENS_PAREN_LEFT *); + 335 (* LENS_PAREN_RIGHT *); + 338 (* LOGIC *); + 339 (* LONG_LEFT_ARROW *); + 340 (* LPAREN *); + 341 (* LPAREN_RPAREN *); + 342 (* MATCH *); + 344 (* MINUS *); + 345 (* MODULE *); + 347 (* NEW *); + 348 (* NEW_EFFECT *); + 349 (* NOEQUALITY *); + 350 (* NOEXTRACT *); + 351 (* OF *); + 352 (* OPAQUE *); + 353 (* OPEN *); + 365 (* PERCENT_LBRACK *); + 366 (* PIPE_RIGHT *); + 367 (* POLYMONADIC_BIND *); + 368 (* POLYMONADIC_SUBCOMP *); + 369 (* PRAGMA_POP_OPTIONS *); + 370 (* PRAGMA_PRINT_EFFECTS_GRAPH *); + 371 (* PRAGMA_PUSH_OPTIONS *); + 372 (* PRAGMA_RESET_OPTIONS *); + 373 (* PRAGMA_RESTART_SOLVER *); + 374 (* PRAGMA_SET_OPTIONS *); + 375 (* PRIVATE *); + 376 (* QMARK *); + 377 (* QMARK_DOT *); + 378 (* QUOTE *); + 380 (* RANGE_OF *); + 381 (* RARROW *); + 382 (* RBRACE *); + 383 (* RBRACK *); + 385 (* REC *); + 386 (* REFLECTABLE *); + 387 (* REIFIABLE *); + 388 (* REIFY *); + 389 (* REQUIRES *); + 390 (* RETURNS *); + 391 (* RETURNS_EQ *); + 392 (* RPAREN *); + 393 (* SEMICOLON *); + 395 (* SET_RANGE_OF *); + 397 (* SPLICE *); + 398 (* SQUIGGLY_RARROW *); + 400 (* SUBKIND *); + 401 (* SUBTYPE *); + 402 (* SUB_EFFECT *); + 403 (* SYNTH *); + 404 (* THEN *); + 406 (* TOTAL *); + 407 (* TRUE *); + 408 (* TRY *); + 410 (* TYPE *); + 411 (* TYP_APP_GREATER *); + 412 (* TYP_APP_LESS *); + 417 (* UNDERSCORE *); + 418 (* UNFOLD *); + 419 (* UNFOLDABLE *); + 420 (* UNIV_HASH *); + 421 (* UNOPTEQUALITY *); + 422 (* VAL *); + 423 (* WHEN *); + 424 (* WITH *); + 0|] + +let yytransl_block = [| + 259 (* AND_OP *); + 275 (* CHAR *); + 306 (* IDENT *); + 309 (* IF_OP *); + 316 (* INT *); + 317 (* INT16 *); + 318 (* INT32 *); + 319 (* INT64 *); + 320 (* INT8 *); + 336 (* LET *); + 337 (* LET_OP *); + 343 (* MATCH_OP *); + 346 (* NAME *); + 354 (* OPINFIX0a *); + 355 (* OPINFIX0b *); + 356 (* OPINFIX0c *); + 357 (* OPINFIX0d *); + 358 (* OPINFIX1 *); + 359 (* OPINFIX2 *); + 360 (* OPINFIX3 *); + 361 (* OPINFIX4 *); + 362 (* OPPREFIX *); + 363 (* OP_MIXFIX_ACCESS *); + 364 (* OP_MIXFIX_ASSIGNMENT *); + 379 (* RANGE *); + 384 (* REAL *); + 394 (* SEMICOLON_OP *); + 396 (* SIZET *); + 399 (* STRING *); + 405 (* TILDE *); + 409 (* TVAR *); + 413 (* UINT16 *); + 414 (* UINT32 *); + 415 (* UINT64 *); + 416 (* UINT8 *); + 0|] + +let yylhs = "\255\255\ +\005\000\005\000\007\000\007\000\008\000\008\000\010\000\010\000\ +\012\000\012\000\013\000\013\000\015\000\015\000\016\000\016\000\ +\017\000\017\000\019\000\019\000\020\000\020\000\022\000\022\000\ +\024\000\024\000\026\000\026\000\028\000\028\000\030\000\030\000\ +\033\000\033\000\035\000\035\000\036\000\036\000\037\000\037\000\ +\039\000\039\000\041\000\041\000\043\000\043\000\045\000\045\000\ +\045\000\045\000\048\000\048\000\050\000\050\000\050\000\053\000\ +\053\000\054\000\054\000\056\000\056\000\058\000\058\000\060\000\ +\060\000\062\000\062\000\064\000\064\000\066\000\066\000\067\000\ +\067\000\069\000\069\000\071\000\071\000\073\000\073\000\074\000\ +\074\000\076\000\076\000\076\000\076\000\076\000\076\000\076\000\ +\076\000\077\000\077\000\079\000\079\000\081\000\081\000\083\000\ +\083\000\038\000\038\000\086\000\086\000\087\000\087\000\089\000\ +\089\000\091\000\091\000\093\000\093\000\095\000\095\000\096\000\ +\096\000\040\000\040\000\042\000\042\000\001\000\099\000\099\000\ +\099\000\099\000\099\000\099\000\100\000\100\000\065\000\065\000\ +\063\000\063\000\063\000\105\000\105\000\104\000\104\000\104\000\ +\104\000\104\000\104\000\104\000\104\000\104\000\104\000\104\000\ +\104\000\104\000\104\000\104\000\104\000\104\000\104\000\104\000\ +\104\000\104\000\104\000\104\000\104\000\104\000\082\000\108\000\ +\108\000\118\000\117\000\117\000\117\000\117\000\117\000\122\000\ +\025\000\025\000\025\000\061\000\061\000\057\000\057\000\044\000\ +\080\000\080\000\080\000\080\000\080\000\080\000\080\000\080\000\ +\111\000\111\000\125\000\112\000\113\000\097\000\114\000\114\000\ +\114\000\115\000\116\000\102\000\102\000\102\000\102\000\102\000\ +\102\000\102\000\102\000\102\000\102\000\102\000\102\000\102\000\ +\102\000\102\000\102\000\102\000\124\000\106\000\106\000\128\000\ +\128\000\128\000\121\000\130\000\084\000\088\000\088\000\088\000\ +\072\000\072\000\072\000\072\000\072\000\072\000\072\000\072\000\ +\072\000\072\000\072\000\072\000\072\000\072\000\072\000\072\000\ +\072\000\134\000\134\000\078\000\078\000\078\000\078\000\051\000\ +\051\000\052\000\052\000\052\000\119\000\068\000\068\000\068\000\ +\068\000\123\000\123\000\123\000\123\000\123\000\123\000\123\000\ +\123\000\123\000\123\000\123\000\123\000\123\000\123\000\123\000\ +\123\000\123\000\123\000\123\000\123\000\123\000\123\000\123\000\ +\123\000\070\000\070\000\070\000\070\000\049\000\107\000\136\000\ +\136\000\137\000\137\000\098\000\098\000\138\000\138\000\138\000\ +\138\000\138\000\138\000\139\000\139\000\140\000\140\000\135\000\ +\135\000\004\000\103\000\092\000\014\000\129\000\018\000\009\000\ +\023\000\021\000\141\000\002\000\002\000\002\000\002\000\029\000\ +\029\000\011\000\011\000\011\000\011\000\011\000\011\000\011\000\ +\011\000\011\000\011\000\011\000\011\000\011\000\011\000\011\000\ +\011\000\011\000\011\000\011\000\011\000\011\000\011\000\011\000\ +\011\000\011\000\011\000\011\000\011\000\011\000\011\000\011\000\ +\011\000\011\000\011\000\011\000\011\000\147\000\150\000\150\000\ +\150\000\059\000\006\000\006\000\006\000\151\000\151\000\152\000\ +\094\000\032\000\032\000\153\000\153\000\154\000\154\000\142\000\ +\142\000\155\000\155\000\156\000\156\000\156\000\156\000\156\000\ +\156\000\156\000\156\000\126\000\126\000\126\000\126\000\126\000\ +\126\000\126\000\126\000\131\000\131\000\157\000\157\000\157\000\ +\157\000\157\000\146\000\146\000\148\000\148\000\149\000\159\000\ +\159\000\159\000\159\000\159\000\159\000\159\000\159\000\159\000\ +\159\000\159\000\159\000\159\000\159\000\159\000\159\000\161\000\ +\161\000\161\000\161\000\161\000\161\000\161\000\161\000\161\000\ +\161\000\161\000\161\000\161\000\161\000\161\000\161\000\160\000\ +\160\000\160\000\160\000\160\000\160\000\160\000\160\000\160\000\ +\162\000\162\000\162\000\162\000\162\000\162\000\162\000\162\000\ +\162\000\110\000\110\000\110\000\110\000\110\000\110\000\110\000\ +\110\000\110\000\110\000\110\000\110\000\110\000\110\000\110\000\ +\110\000\110\000\110\000\158\000\090\000\127\000\164\000\164\000\ +\132\000\047\000\047\000\166\000\166\000\085\000\163\000\046\000\ +\046\000\046\000\167\000\167\000\055\000\055\000\055\000\169\000\ +\169\000\143\000\143\000\143\000\143\000\143\000\143\000\143\000\ +\143\000\143\000\143\000\143\000\143\000\171\000\170\000\172\000\ +\172\000\172\000\172\000\172\000\172\000\172\000\172\000\172\000\ +\027\000\173\000\174\000\031\000\109\000\109\000\109\000\109\000\ +\109\000\109\000\109\000\109\000\109\000\109\000\109\000\109\000\ +\109\000\109\000\109\000\109\000\109\000\109\000\109\000\168\000\ +\176\000\176\000\176\000\075\000\075\000\075\000\075\000\003\000\ +\177\000\177\000\178\000\178\000\178\000\179\000\179\000\034\000\ +\175\000\180\000\180\000\180\000\101\000\101\000\101\000\181\000\ +\181\000\181\000\182\000\182\000\182\000\133\000\133\000\120\000\ +\120\000\165\000\165\000\145\000\145\000\145\000\144\000\144\000\ +\144\000\000\000\000\000\000\000" + +let yylen = "\002\000\ +\000\000\002\000\000\000\002\000\000\000\002\000\000\000\003\000\ +\000\000\002\000\000\000\002\000\000\000\002\000\000\000\002\000\ +\000\000\002\000\000\000\002\000\000\000\001\000\000\000\001\000\ +\000\000\001\000\000\000\001\000\000\000\001\000\000\000\002\000\ +\000\000\001\000\000\000\001\000\000\000\001\000\000\000\001\000\ +\000\000\001\000\000\000\001\000\000\000\003\000\000\000\002\000\ +\004\000\005\000\000\000\003\000\000\000\002\000\002\000\000\000\ +\002\000\000\000\002\000\000\000\002\000\000\000\002\000\000\000\ +\002\000\000\000\002\000\000\000\002\000\000\000\002\000\001\000\ +\002\000\001\000\002\000\001\000\002\000\001\000\002\000\001\000\ +\002\000\003\000\003\000\003\000\003\000\004\000\004\000\004\000\ +\004\000\001\000\002\000\001\000\003\000\001\000\003\000\001\000\ +\003\000\001\000\003\000\001\000\003\000\001\000\003\000\001\000\ +\003\000\001\000\003\000\001\000\003\000\001\000\003\000\001\000\ +\003\000\001\000\003\000\001\000\003\000\002\000\002\000\002\000\ +\002\000\001\000\001\000\001\000\003\000\003\000\001\000\001\000\ +\004\000\002\000\002\000\002\000\003\000\001\000\002\000\002\000\ +\002\000\004\000\002\000\002\000\002\000\005\000\003\000\002\000\ +\005\000\007\000\007\000\007\000\007\000\007\000\005\000\003\000\ +\002\000\002\000\002\000\002\000\002\000\002\000\004\000\001\000\ +\001\000\003\000\000\000\002\000\004\000\005\000\002\000\003\000\ +\002\000\002\000\004\000\003\000\004\000\002\000\003\000\003\000\ +\006\000\008\000\008\000\008\000\008\000\008\000\005\000\004\000\ +\001\000\001\000\003\000\008\000\006\000\004\000\005\000\008\000\ +\012\000\009\000\005\000\001\000\001\000\001\000\001\000\001\000\ +\001\000\001\000\001\000\001\000\001\000\001\000\001\000\001\000\ +\001\000\001\000\001\000\001\000\001\000\001\000\000\000\004\000\ +\001\000\001\000\003\000\001\000\001\000\003\000\002\000\001\000\ +\006\000\003\000\003\000\005\000\003\000\001\000\003\000\003\000\ +\003\000\003\000\003\000\001\000\002\000\001\000\002\000\001\000\ +\001\000\003\000\001\000\005\000\003\000\001\000\007\000\001\000\ +\001\000\005\000\003\000\006\000\001\000\003\000\002\000\002\000\ +\001\000\003\000\005\000\005\000\005\000\005\000\005\000\002\000\ +\004\000\004\000\004\000\004\000\004\000\002\000\004\000\004\000\ +\004\000\004\000\004\000\001\000\003\000\003\000\003\000\003\000\ +\003\000\003\000\002\000\002\000\001\000\001\000\001\000\001\000\ +\003\000\001\000\003\000\001\000\001\000\001\000\003\000\003\000\ +\003\000\003\000\003\000\001\000\001\000\001\000\001\000\001\000\ +\001\000\001\000\001\000\001\000\001\000\001\000\001\000\001\000\ +\003\000\002\000\001\000\001\000\003\000\003\000\005\000\003\000\ +\003\000\001\000\004\000\004\000\006\000\006\000\006\000\006\000\ +\002\000\002\000\002\000\004\000\002\000\007\000\005\000\004\000\ +\005\000\005\000\006\000\007\000\005\000\002\000\002\000\003\000\ +\003\000\002\000\007\000\007\000\009\000\008\000\007\000\008\000\ +\007\000\011\000\006\000\014\000\010\000\001\000\001\000\003\000\ +\001\000\006\000\001\000\005\000\005\000\000\000\003\000\001\000\ +\001\000\001\000\004\000\001\000\001\000\003\000\005\000\003\000\ +\001\000\003\000\001\000\005\000\006\000\007\000\003\000\004\000\ +\004\000\005\000\001\000\005\000\006\000\007\000\003\000\004\000\ +\004\000\005\000\001\000\003\000\001\000\003\000\001\000\002\000\ +\002\000\003\000\003\000\001\000\003\000\001\000\001\000\003\000\ +\003\000\003\000\003\000\003\000\003\000\003\000\003\000\003\000\ +\003\000\002\000\002\000\002\000\002\000\002\000\001\000\003\000\ +\003\000\003\000\003\000\003\000\003\000\003\000\003\000\003\000\ +\003\000\002\000\002\000\002\000\002\000\002\000\001\000\003\000\ +\003\000\003\000\005\000\003\000\003\000\002\000\002\000\001\000\ +\003\000\003\000\003\000\005\000\003\000\003\000\002\000\002\000\ +\001\000\001\000\001\000\001\000\001\000\001\000\001\000\001\000\ +\001\000\001\000\001\000\001\000\001\000\001\000\001\000\001\000\ +\001\000\001\000\001\000\001\000\001\000\001\000\004\000\001\000\ +\001\000\001\000\003\000\003\000\001\000\002\000\002\000\001\000\ +\002\000\001\000\002\000\001\000\001\000\001\000\001\000\001\000\ +\004\000\001\000\001\000\001\000\001\000\003\000\003\000\003\000\ +\003\000\003\000\005\000\002\000\003\000\002\000\002\000\001\000\ +\001\000\004\000\003\000\003\000\003\000\003\000\003\000\002\000\ +\003\000\002\000\002\000\001\000\001\000\001\000\001\000\001\000\ +\001\000\001\000\001\000\001\000\001\000\001\000\001\000\001\000\ +\001\000\001\000\001\000\001\000\001\000\001\000\001\000\002\000\ +\001\000\003\000\002\000\001\000\001\000\001\000\003\000\002\000\ +\002\000\003\000\001\000\001\000\001\000\001\000\001\000\001\000\ +\001\000\000\000\001\000\003\000\000\000\001\000\003\000\000\000\ +\001\000\003\000\000\000\001\000\003\000\001\000\003\000\001\000\ +\003\000\001\000\003\000\000\000\001\000\003\000\001\000\002\000\ +\003\000\002\000\002\000\002\000" + +let yydefred = "\000\000\ +\000\000\000\000\000\000\000\000\000\000\203\000\197\000\199\000\ +\201\000\000\000\000\000\209\000\208\000\206\000\202\000\210\000\ +\205\000\212\000\211\000\204\000\200\000\198\000\207\000\074\002\ +\000\000\000\000\000\000\000\000\127\000\128\000\000\000\000\000\ +\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\ +\015\002\000\000\218\000\000\000\000\000\000\000\018\002\000\000\ +\000\000\000\000\000\000\000\000\046\001\047\001\014\002\023\002\ +\025\002\027\002\021\002\000\000\000\000\000\000\000\000\000\000\ +\000\000\000\000\000\000\000\000\000\000\013\002\044\001\045\001\ +\000\000\051\001\000\000\000\000\000\000\030\002\019\002\029\002\ +\000\000\031\002\028\002\016\002\000\000\000\000\017\002\000\000\ +\052\001\022\002\024\002\026\002\020\002\000\000\075\002\032\001\ +\066\001\000\000\107\001\000\000\236\001\224\001\151\001\000\000\ +\243\001\000\000\000\000\000\000\244\001\000\000\000\000\000\000\ +\030\001\031\001\000\000\000\000\000\000\000\000\000\000\000\000\ +\150\001\000\000\000\000\000\000\000\000\201\001\000\000\238\001\ +\239\001\245\001\000\000\000\002\001\002\045\002\043\002\044\002\ +\076\002\000\000\000\000\000\000\050\001\000\000\242\001\000\000\ +\000\000\237\001\000\000\000\000\000\000\118\000\067\000\000\000\ +\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\ +\000\000\000\000\000\000\000\000\122\000\124\000\000\000\000\000\ +\123\000\000\000\000\000\000\000\000\000\000\000\134\000\130\000\ +\131\000\196\000\069\000\000\000\087\001\000\000\077\001\000\000\ +\000\000\180\001\181\001\182\001\199\001\000\000\040\000\000\000\ +\000\000\000\000\000\000\075\001\114\001\000\000\000\000\000\000\ +\000\000\074\001\048\001\000\000\000\000\049\001\253\000\000\000\ +\000\000\248\000\249\000\000\000\000\000\000\000\029\001\000\000\ +\000\000\000\000\000\000\000\000\000\000\000\000\000\000\236\000\ +\001\001\240\000\246\000\000\000\000\000\230\000\000\000\241\000\ +\238\000\000\000\000\000\000\000\000\000\224\000\220\000\000\000\ +\221\000\000\000\000\000\000\000\000\000\071\002\000\000\000\000\ +\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\ +\226\001\000\000\000\000\000\000\000\000\000\000\000\000\000\000\ +\214\000\000\000\000\000\000\000\000\000\217\001\216\001\212\001\ +\213\001\205\001\214\001\211\001\000\000\202\001\203\001\204\001\ +\206\001\207\001\208\001\209\001\210\001\000\000\219\001\218\001\ +\215\001\000\000\000\000\000\000\000\000\178\001\000\000\254\001\ +\255\001\000\000\179\001\073\001\090\001\200\001\000\000\000\000\ +\000\000\000\000\000\000\010\002\028\000\000\000\000\000\000\000\ +\000\000\008\002\000\000\049\002\011\002\000\000\000\000\000\000\ +\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\ +\000\000\000\000\235\001\000\000\000\000\000\000\000\000\000\000\ +\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\ +\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\ +\000\000\000\000\230\001\000\000\232\001\234\001\000\000\252\001\ +\040\002\046\002\047\002\000\000\000\000\125\000\059\000\000\000\ +\126\000\036\001\132\000\000\000\037\001\000\000\000\000\155\000\ +\000\000\136\000\137\000\000\000\000\000\154\000\000\000\139\000\ +\000\000\140\000\000\000\153\000\186\000\185\000\135\000\000\000\ +\157\000\000\000\158\000\048\002\121\000\034\000\120\000\119\000\ +\000\000\000\000\156\000\141\000\000\000\000\000\000\000\144\000\ +\000\000\088\001\079\000\000\000\000\000\000\000\000\000\006\002\ +\000\000\253\001\000\000\000\000\000\000\000\000\000\000\000\000\ +\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\ +\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\ +\000\000\000\000\192\001\000\000\000\000\000\000\054\000\055\000\ +\000\000\028\001\000\000\027\001\000\000\239\000\237\000\000\000\ +\000\000\000\000\000\000\000\000\000\000\000\000\044\000\000\000\ +\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\ +\000\000\091\000\000\000\000\001\255\000\000\000\072\002\000\000\ +\000\000\000\000\223\000\000\000\116\001\117\001\000\000\000\000\ +\000\000\054\001\000\000\000\000\000\000\000\000\000\000\000\000\ +\000\000\000\000\000\000\000\000\000\000\000\000\198\001\000\000\ +\000\000\000\000\000\000\004\002\219\000\003\002\000\000\000\000\ +\038\000\213\000\000\000\000\000\000\000\000\000\000\000\000\000\ +\024\000\249\001\250\001\246\001\248\001\012\002\000\000\000\000\ +\247\001\000\000\000\000\000\000\005\002\000\000\089\001\053\001\ +\061\001\062\001\000\000\000\000\105\000\000\000\033\001\035\001\ +\000\000\007\002\000\000\000\000\000\000\000\000\000\000\000\000\ +\000\000\000\000\000\000\030\000\000\000\000\000\000\000\000\000\ +\000\000\000\000\000\000\000\000\127\001\149\001\120\001\122\001\ +\000\000\000\000\177\001\000\000\000\000\000\000\000\000\000\000\ +\176\001\000\000\000\000\000\000\000\000\000\000\000\000\000\000\ +\233\001\000\000\037\002\000\000\036\002\038\002\032\002\048\000\ +\000\000\042\002\129\000\055\002\000\000\000\000\160\000\161\000\ +\000\000\000\000\000\000\152\000\133\000\000\000\143\000\000\000\ +\000\000\000\000\000\000\000\000\000\000\042\000\000\000\000\000\ +\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\ +\056\001\006\000\000\000\000\000\000\000\000\000\099\000\000\000\ +\076\001\000\000\000\000\000\000\000\000\000\000\164\001\165\001\ +\166\001\190\001\000\000\000\000\162\001\163\001\191\001\144\001\ +\000\000\145\001\251\000\000\000\000\000\000\000\000\000\000\000\ +\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\ +\000\000\000\000\000\000\000\000\000\000\000\000\231\001\000\000\ +\075\000\000\000\000\000\026\001\000\000\000\000\000\000\227\000\ +\000\000\245\000\000\000\226\000\000\000\000\000\234\000\235\000\ +\231\000\233\000\000\000\000\000\000\000\229\000\232\000\115\001\ +\254\000\097\000\000\000\103\000\077\000\000\000\118\001\073\002\ +\216\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\ +\000\000\000\000\000\000\000\000\038\001\227\001\228\001\000\000\ +\067\002\000\000\000\000\000\000\000\000\000\000\000\000\000\000\ +\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\ +\000\000\000\000\000\000\000\000\176\000\002\002\032\000\000\000\ +\000\000\000\000\000\000\009\002\000\000\241\001\128\001\000\000\ +\129\001\000\000\225\001\223\001\000\000\000\000\000\000\000\000\ +\000\000\000\000\000\000\068\001\000\000\067\001\000\000\000\000\ +\000\000\000\000\000\000\000\000\000\000\000\000\033\002\000\000\ +\000\000\052\000\000\000\000\000\000\000\000\000\022\000\000\000\ +\000\000\002\000\000\000\000\000\138\000\187\000\000\000\000\000\ +\000\000\000\000\000\000\095\000\000\000\000\000\000\000\000\000\ +\000\000\071\000\000\000\000\000\000\000\000\000\000\000\000\000\ +\000\000\000\000\000\000\000\000\000\000\189\001\142\001\146\001\ +\000\000\140\001\000\000\000\000\161\001\000\000\000\000\000\000\ +\000\000\000\000\160\001\000\000\000\000\000\000\000\000\000\000\ +\000\000\057\000\000\000\000\000\112\001\000\000\113\001\000\000\ +\109\001\108\001\242\000\000\000\063\002\000\000\117\000\000\000\ +\000\000\073\000\000\000\000\000\000\000\000\000\000\000\000\000\ +\000\000\000\000\000\000\000\000\000\000\000\000\000\000\124\001\ +\251\001\082\001\174\000\000\000\061\000\000\000\000\000\000\000\ +\000\000\000\000\000\000\000\000\000\000\000\000\046\000\085\001\ +\000\000\000\000\000\000\000\000\057\001\000\000\000\000\000\000\ +\010\000\000\000\000\000\101\000\000\000\130\001\000\000\063\001\ +\064\001\065\001\000\000\069\002\000\000\055\001\020\000\018\000\ +\000\000\087\000\000\000\088\000\000\000\089\000\000\000\086\000\ +\000\000\000\000\049\000\035\002\000\000\000\000\039\002\162\000\ +\000\000\059\001\058\001\000\000\159\000\000\000\142\000\000\000\ +\093\000\000\000\000\000\151\000\115\000\000\000\000\000\000\000\ +\000\000\000\000\000\000\000\000\145\000\000\000\105\001\000\000\ +\000\000\103\001\000\000\000\000\000\000\000\000\099\001\000\000\ +\250\000\000\000\000\000\000\000\000\000\111\001\000\000\244\000\ +\228\000\000\000\000\000\119\001\000\000\000\000\000\000\102\001\ +\000\000\000\000\042\001\043\001\039\001\041\001\040\001\061\002\ +\083\001\175\000\000\000\000\000\000\000\000\000\000\000\000\000\ +\184\000\000\000\000\000\000\000\000\000\000\000\000\000\012\000\ +\135\001\000\000\000\000\000\000\125\001\000\000\008\000\000\000\ +\000\000\070\001\071\001\072\001\069\001\050\000\081\000\034\002\ +\107\000\000\000\000\000\164\000\167\000\000\000\000\000\000\000\ +\000\000\000\000\195\000\191\000\000\000\000\000\000\000\000\000\ +\000\000\000\000\000\000\091\001\063\000\000\000\000\000\097\001\ +\000\000\000\000\000\000\252\000\111\000\109\000\052\002\000\000\ +\225\000\000\000\092\001\095\001\000\000\000\000\000\000\000\000\ +\000\000\000\000\000\000\000\000\183\000\000\000\000\000\000\000\ +\136\001\000\000\137\001\126\001\084\001\070\002\078\001\000\000\ +\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\ +\065\000\000\000\189\000\000\000\000\000\000\000\149\000\150\000\ +\146\000\148\000\147\000\104\001\036\000\000\000\000\000\000\000\ +\000\000\247\000\000\000\094\001\096\001\000\000\000\000\000\000\ +\000\000\000\000\177\000\132\001\000\000\000\000\138\001\000\000\ +\000\000\000\000\172\000\026\000\000\000\000\000\000\000\000\000\ +\000\000\000\000\165\000\000\000\014\001\000\000\000\000\000\000\ +\008\001\000\000\000\000\000\000\000\000\000\000\000\000\000\000\ +\000\000\000\000\000\000\000\000\093\001\000\000\000\000\000\000\ +\000\000\000\000\000\000\133\001\169\000\000\000\020\001\000\000\ +\170\000\173\000\000\000\000\000\000\000\000\000\000\000\000\000\ +\000\000\000\000\000\000\000\000\000\000\065\002\168\000\000\000\ +\000\000\000\000\000\000\000\000\000\000\002\001\166\000\000\000\ +\188\000\000\000\000\000\192\000\000\000\000\000\000\000\000\000\ +\101\001\181\000\182\000\178\000\180\000\179\000\134\001\000\000\ +\000\000\000\000\000\000\000\000\000\000\018\001\019\001\015\001\ +\017\001\016\001\000\000\012\001\013\001\009\001\011\001\010\001\ +\000\000\000\000\000\000\000\000\000\000\000\000\113\000\194\000\ +\000\000\106\001\098\001\000\000\024\001\025\001\021\001\023\001\ +\022\001\000\000\171\000\058\002\006\001\007\001\003\001\005\001\ +\004\001\190\000\000\000\000\000\004\000\000\000\000\000\193\000\ +\100\001" + +let yydgoto = "\004\000\ +\024\000\035\001\137\000\096\000\092\002\097\000\195\004\154\001\ +\114\002\243\002\098\000\229\002\117\003\023\002\041\002\042\002\ +\254\002\135\003\252\002\014\003\015\003\008\002\009\002\083\004\ +\084\004\052\001\053\001\043\002\044\002\015\002\016\002\099\000\ +\141\001\142\001\062\004\002\002\190\000\191\000\101\002\102\002\ +\206\001\207\001\006\002\011\001\099\001\100\001\253\000\104\001\ +\100\000\207\000\208\000\209\000\159\002\144\000\101\000\214\002\ +\215\002\176\003\177\003\245\003\246\003\025\000\026\000\027\000\ +\028\000\112\002\179\002\226\000\189\001\210\000\227\001\238\000\ +\183\000\148\003\007\003\075\001\228\000\229\000\095\002\096\002\ +\148\001\149\001\239\000\240\000\102\000\028\002\241\000\242\000\ +\103\000\104\000\011\003\105\000\069\003\070\003\071\003\101\004\ +\102\004\116\001\175\000\106\000\148\000\030\000\107\000\176\000\ +\177\000\010\001\108\000\086\002\109\000\036\001\132\001\126\001\ +\120\001\147\001\137\001\139\001\157\003\087\002\200\003\044\004\ +\110\000\046\004\047\004\004\002\134\001\225\002\226\002\111\000\ +\235\001\244\000\181\001\244\002\202\001\076\003\149\000\113\000\ +\114\000\000\001\115\000\116\000\155\003\117\000\185\000\245\000\ +\131\003\119\000\201\003\120\000\121\000\179\003\163\002\072\003\ +\232\001\246\000\122\000\123\000\183\001\184\001\185\001\186\001\ +\124\000\125\000\187\001\126\000\001\001\002\001\127\000\102\001\ +\128\000\129\000\130\000\131\000\132\000\133\000\061\001\009\003\ +\138\000\139\000\108\001\077\003\134\004\209\002" + +let yysindex = "\207\001\ +\235\004\197\056\172\000\000\000\135\255\000\000\000\000\000\000\ +\000\000\079\081\197\056\000\000\000\000\000\000\000\000\000\000\ +\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\ +\040\001\235\004\119\005\058\006\000\000\000\000\079\081\079\081\ +\079\081\077\070\079\081\079\081\079\081\079\081\197\056\079\081\ +\000\000\097\065\000\000\181\068\091\066\112\255\000\000\112\255\ +\101\074\207\074\008\000\000\000\000\000\000\000\000\000\000\000\ +\000\000\000\000\000\000\027\069\181\081\077\070\197\056\197\056\ +\197\056\077\070\049\255\225\076\204\053\000\000\000\000\000\000\ +\077\070\000\000\027\082\197\056\077\070\000\000\000\000\000\000\ +\091\066\000\000\000\000\000\000\079\081\079\081\000\000\197\056\ +\000\000\000\000\000\000\000\000\000\000\072\000\000\000\000\000\ +\000\000\028\000\000\000\217\255\000\000\000\000\000\000\157\000\ +\000\000\141\000\196\000\048\255\000\000\077\070\129\069\249\255\ +\000\000\000\000\197\056\197\056\154\255\170\002\078\255\219\000\ +\000\000\204\000\217\000\037\003\198\000\000\000\245\071\000\000\ +\000\000\000\000\234\000\000\000\000\000\000\000\000\000\000\000\ +\000\000\016\002\060\255\002\001\000\000\204\053\000\000\178\000\ +\079\081\000\000\214\000\201\000\083\001\000\000\000\000\057\255\ +\222\255\135\255\135\255\135\255\254\000\059\001\254\000\057\255\ +\026\000\135\255\045\001\135\255\000\000\000\000\252\000\252\000\ +\000\000\252\000\074\001\135\255\057\255\223\010\000\000\000\000\ +\000\000\000\000\000\000\132\001\000\000\079\081\000\000\000\000\ +\238\002\000\000\000\000\000\000\000\000\025\001\000\000\134\001\ +\118\001\091\001\197\056\000\000\000\000\112\255\112\255\235\255\ +\141\001\000\000\000\000\085\067\062\255\000\000\000\000\112\255\ +\112\255\000\000\000\000\152\001\094\255\218\255\000\000\156\001\ +\079\081\029\255\057\255\085\067\225\076\225\076\153\055\000\000\ +\000\000\000\000\000\000\042\001\101\074\000\000\165\001\000\000\ +\000\000\121\001\086\000\225\076\153\055\000\000\000\000\171\001\ +\000\000\006\001\225\076\239\254\174\001\000\000\149\073\112\255\ +\112\255\132\000\173\001\107\054\070\001\217\255\043\001\180\001\ +\000\000\085\001\123\255\098\001\100\001\217\001\210\001\197\056\ +\000\000\095\001\235\001\218\001\109\001\000\000\000\000\000\000\ +\000\000\000\000\000\000\000\000\057\075\000\000\000\000\000\000\ +\000\000\000\000\000\000\000\000\000\000\133\078\000\000\000\000\ +\000\000\235\078\111\001\124\001\129\069\000\000\027\082\000\000\ +\000\000\148\001\000\000\000\000\000\000\000\000\093\001\079\081\ +\197\056\197\056\079\081\000\000\000\000\077\070\254\000\057\255\ +\197\056\000\000\121\001\000\000\000\000\105\255\077\070\117\255\ +\079\081\197\056\009\002\009\002\210\067\210\067\197\056\197\056\ +\197\056\197\056\000\000\077\070\210\067\077\070\210\067\210\067\ +\077\070\077\070\077\070\077\070\077\070\077\070\077\070\077\070\ +\077\070\077\070\149\073\149\073\149\073\149\073\149\073\081\079\ +\181\081\110\255\000\000\245\071\000\000\000\000\057\255\000\000\ +\000\000\000\000\000\000\172\000\197\056\000\000\000\000\197\056\ +\000\000\000\000\000\000\103\255\000\000\135\255\103\255\000\000\ +\183\001\000\000\000\000\095\001\135\255\000\000\095\001\000\000\ +\021\001\000\000\240\001\000\000\000\000\000\000\000\000\135\255\ +\000\000\146\001\000\000\000\000\000\000\000\000\000\000\000\000\ +\057\255\151\001\000\000\000\000\037\002\091\082\075\000\000\000\ +\091\066\000\000\000\000\197\056\197\056\197\056\197\056\000\000\ +\079\081\000\000\197\056\170\001\029\002\030\002\077\070\077\070\ +\077\070\179\070\079\081\079\081\079\081\181\081\179\070\179\070\ +\179\070\079\081\179\070\231\069\049\002\047\002\201\001\000\000\ +\236\004\137\001\000\000\095\072\051\002\062\255\000\000\000\000\ +\002\002\000\000\094\255\000\000\002\002\000\000\000\000\039\002\ +\053\002\216\001\212\001\074\002\082\002\234\001\000\000\225\001\ +\041\001\230\001\231\001\236\001\239\001\187\000\064\255\241\001\ +\197\056\000\000\135\255\000\000\000\000\121\001\000\000\225\076\ +\225\076\225\076\000\000\225\076\000\000\000\000\077\070\197\056\ +\225\076\000\000\244\001\198\000\092\002\098\002\077\070\077\070\ +\077\070\253\001\163\075\183\079\029\080\000\002\000\000\084\000\ +\197\056\084\000\013\002\000\000\000\000\000\000\077\070\085\002\ +\000\000\000\000\073\000\075\077\225\076\095\002\201\072\089\002\ +\000\000\000\000\000\000\000\000\000\000\000\000\020\002\216\066\ +\000\000\077\070\182\255\236\254\000\000\207\074\000\000\000\000\ +\000\000\000\000\128\002\017\002\000\000\095\001\000\000\000\000\ +\028\002\000\000\210\067\161\255\210\067\104\002\040\002\121\001\ +\042\002\056\002\014\002\000\000\045\002\188\002\191\002\086\002\ +\194\002\135\002\087\002\219\000\000\000\000\000\000\000\000\000\ +\044\002\052\001\000\000\014\001\204\001\052\001\242\000\034\001\ +\000\000\034\001\107\000\142\001\198\000\122\255\117\002\181\081\ +\000\000\099\002\000\000\037\255\000\000\000\000\000\000\000\000\ +\234\000\000\000\000\000\000\000\076\002\206\002\000\000\000\000\ +\112\255\199\002\091\066\000\000\000\000\112\255\000\000\246\002\ +\135\255\216\066\226\002\135\255\125\002\000\000\119\002\135\255\ +\057\255\118\002\126\002\130\002\131\002\137\002\075\000\240\002\ +\000\000\000\000\147\002\249\002\202\002\150\002\000\000\146\002\ +\000\000\197\056\197\056\080\255\041\255\164\002\000\000\000\000\ +\000\000\000\000\161\002\029\003\000\000\000\000\000\000\000\000\ +\179\070\000\000\000\000\079\068\079\068\179\070\179\070\179\070\ +\179\070\179\070\179\070\179\070\179\070\179\070\179\070\251\073\ +\251\073\251\073\251\073\251\073\079\081\095\072\000\000\079\068\ +\000\000\079\081\197\056\000\000\197\056\225\076\057\255\000\000\ +\057\255\000\000\079\068\000\000\225\076\225\076\000\000\000\000\ +\000\000\000\000\023\003\187\000\079\068\000\000\000\000\000\000\ +\000\000\000\000\024\003\000\000\000\000\076\255\000\000\000\000\ +\000\000\197\056\197\056\056\255\051\255\133\002\000\000\000\000\ +\000\000\000\000\000\000\125\082\000\000\000\000\000\000\166\002\ +\000\000\210\067\231\002\197\056\095\001\000\003\073\000\054\003\ +\040\056\101\074\229\000\235\001\197\056\149\073\204\053\149\073\ +\042\003\192\002\047\073\197\056\000\000\000\000\000\000\001\000\ +\197\002\174\001\079\081\000\000\073\000\000\000\000\000\210\067\ +\000\000\197\056\000\000\000\000\197\056\000\000\210\067\210\067\ +\225\076\197\056\091\066\000\000\091\066\000\000\008\001\066\001\ +\233\001\153\002\149\073\193\002\245\071\000\000\000\000\110\255\ +\006\255\000\000\168\002\045\003\201\072\030\003\000\000\159\002\ +\091\066\000\000\057\003\095\001\000\000\000\000\135\255\040\003\ +\079\081\057\255\010\000\000\000\075\000\075\000\075\000\075\000\ +\075\000\000\000\091\066\238\002\238\002\238\002\238\002\228\064\ +\204\002\172\002\197\056\197\056\197\056\000\000\000\000\000\000\ +\071\003\000\000\056\004\113\001\000\000\145\004\024\002\113\001\ +\147\001\249\001\000\000\249\001\124\000\172\001\137\001\037\000\ +\239\002\000\000\104\002\209\002\000\000\063\003\000\000\222\002\ +\000\000\000\000\000\000\213\002\000\000\081\003\000\000\018\003\ +\079\068\000\000\104\002\197\056\184\002\189\002\010\003\112\255\ +\197\056\224\002\233\002\234\002\235\002\236\002\084\000\000\000\ +\000\000\000\000\000\000\197\056\000\000\095\001\241\002\242\002\ +\243\002\244\002\247\002\218\001\197\056\062\003\000\000\000\000\ +\104\003\129\069\004\003\079\081\000\000\201\072\149\073\006\003\ +\000\000\008\003\210\067\000\000\079\003\000\000\016\003\000\000\ +\000\000\000\000\130\003\000\000\107\003\000\000\000\000\000\000\ +\197\056\000\000\197\056\000\000\197\056\000\000\197\056\000\000\ +\117\002\245\071\000\000\000\000\110\255\037\255\000\000\000\000\ +\076\002\000\000\000\000\222\065\000\000\149\073\000\000\201\072\ +\000\000\012\003\216\066\000\000\000\000\216\066\100\003\132\003\ +\134\003\138\003\139\003\143\003\000\000\057\255\000\000\044\003\ +\228\064\000\000\097\003\197\056\079\081\009\003\000\000\011\003\ +\000\000\251\073\032\003\079\081\079\081\000\000\057\255\000\000\ +\000\000\104\002\036\003\000\000\079\081\197\056\197\056\000\000\ +\150\003\179\003\000\000\000\000\000\000\000\000\000\000\000\000\ +\000\000\000\000\101\074\101\074\101\074\101\074\101\074\144\003\ +\000\000\197\056\060\003\077\070\050\003\198\000\201\072\000\000\ +\000\000\066\003\201\072\210\067\000\000\197\056\000\000\225\076\ +\197\056\000\000\000\000\000\000\000\000\000\000\000\000\000\000\ +\000\000\111\000\031\078\000\000\000\000\174\003\025\071\068\003\ +\027\003\082\003\000\000\000\000\157\003\091\066\091\066\091\066\ +\091\066\091\066\190\003\000\000\000\000\197\056\031\003\000\000\ +\112\255\112\255\239\002\000\000\000\000\000\000\000\000\067\003\ +\000\000\204\003\000\000\000\000\197\056\197\056\218\001\218\001\ +\218\001\218\001\218\001\197\056\000\000\201\072\072\003\084\003\ +\000\000\201\072\000\000\000\000\000\000\000\000\000\000\023\000\ +\135\255\010\055\000\000\092\003\043\000\070\003\189\003\007\000\ +\000\000\031\078\000\000\121\001\135\255\216\066\000\000\000\000\ +\000\000\000\000\000\000\000\000\000\000\094\003\112\255\194\003\ +\199\003\000\000\197\056\000\000\000\000\191\003\193\003\195\003\ +\196\003\200\003\000\000\000\000\109\003\201\072\000\000\091\066\ +\169\000\091\066\000\000\000\000\023\000\103\003\013\076\131\080\ +\233\080\105\003\000\000\214\082\000\000\169\000\091\066\242\082\ +\000\000\140\000\116\003\112\255\117\003\108\003\208\003\207\255\ +\197\056\221\003\197\056\197\056\000\000\197\056\197\056\197\056\ +\197\056\197\056\201\072\000\000\000\000\075\083\000\000\126\003\ +\000\000\000\000\000\000\000\000\000\000\000\000\000\000\118\003\ +\121\003\122\003\123\003\124\003\125\003\000\000\000\000\127\003\ +\128\003\129\003\131\003\142\003\103\083\000\000\000\000\226\003\ +\000\000\121\001\216\066\000\000\211\003\145\003\197\056\021\004\ +\000\000\000\000\000\000\000\000\000\000\000\000\000\000\147\003\ +\148\003\149\003\151\003\155\003\003\004\000\000\000\000\000\000\ +\000\000\000\000\169\000\000\000\000\000\000\000\000\000\000\000\ +\156\003\159\003\160\003\162\003\164\003\216\066\000\000\000\000\ +\246\003\000\000\000\000\112\255\000\000\000\000\000\000\000\000\ +\000\000\091\066\000\000\000\000\000\000\000\000\000\000\000\000\ +\000\000\000\000\216\066\008\004\000\000\175\003\197\056\000\000\ +\000\000" + +let yyrindex = "\000\000\ +\158\003\000\000\000\000\000\000\040\053\000\000\000\000\000\000\ +\000\000\176\003\181\003\000\000\000\000\000\000\000\000\000\000\ +\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\ +\000\000\158\003\000\000\231\007\000\000\000\000\000\000\000\000\ +\000\000\000\000\000\000\000\000\000\000\180\003\000\000\000\000\ +\000\000\000\000\000\000\000\000\000\000\023\004\000\000\023\004\ +\000\000\000\000\127\071\211\014\000\000\000\000\000\000\000\000\ +\000\000\000\000\000\000\000\000\000\000\000\000\181\003\181\003\ +\039\004\000\000\119\076\000\000\000\000\000\000\000\000\000\000\ +\000\000\000\000\000\000\181\003\000\000\000\000\000\000\000\000\ +\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\ +\000\000\000\000\000\000\000\000\000\000\205\016\000\000\000\000\ +\000\000\178\045\000\000\218\012\000\000\000\000\000\000\227\035\ +\000\000\000\000\130\013\124\015\000\000\000\000\000\000\000\000\ +\000\000\000\000\000\000\000\000\030\039\192\020\243\011\140\036\ +\000\000\119\038\221\037\146\034\166\028\000\000\179\024\000\000\ +\000\000\000\000\043\014\000\000\000\000\000\000\000\000\000\000\ +\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\ +\184\039\000\000\075\255\000\000\000\000\000\000\000\000\000\000\ +\000\000\000\000\000\000\000\000\119\076\000\000\119\076\000\000\ +\000\000\000\000\000\000\000\000\000\000\000\000\047\051\047\051\ +\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\ +\000\000\000\000\000\000\082\040\000\000\236\040\000\000\036\016\ +\117\017\000\000\000\000\000\000\000\000\000\000\000\000\185\003\ +\000\000\000\000\000\000\000\000\000\000\023\004\023\004\000\000\ +\186\000\000\000\000\000\000\000\000\000\000\000\000\000\097\047\ +\097\047\000\000\000\000\000\000\000\000\000\000\000\000\000\000\ +\000\000\175\000\000\000\000\000\186\003\000\000\000\000\000\000\ +\000\000\000\000\000\000\000\000\165\255\000\000\255\047\000\000\ +\000\000\000\000\000\000\000\000\000\000\000\000\000\000\253\254\ +\000\000\086\003\063\001\000\000\079\043\000\000\000\000\023\004\ +\023\004\000\000\186\000\000\000\000\000\142\058\000\000\167\000\ +\000\000\188\003\000\000\000\000\000\000\000\000\000\000\000\000\ +\000\000\181\077\006\004\137\000\000\000\000\000\000\000\000\000\ +\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\ +\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\ +\000\000\000\000\202\003\000\000\000\000\000\000\000\000\000\000\ +\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\ +\000\000\000\000\000\000\000\000\000\000\000\000\119\076\000\000\ +\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\ +\000\000\000\000\017\000\120\000\000\000\000\000\000\000\000\000\ +\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\ +\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\ +\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\ +\000\000\000\000\000\000\179\024\000\000\000\000\000\000\000\000\ +\000\000\000\000\000\000\070\005\000\000\000\000\000\000\081\255\ +\000\000\000\000\000\000\149\048\000\000\000\000\033\004\000\000\ +\148\051\000\000\000\000\181\077\000\000\000\000\181\077\000\000\ +\249\051\000\000\000\000\000\000\000\000\000\000\000\000\000\000\ +\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\ +\203\003\000\000\000\000\000\000\094\052\000\000\054\004\000\000\ +\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\ +\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\ +\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\ +\000\000\000\000\000\000\000\000\000\000\000\000\000\000\115\255\ +\253\255\242\004\000\000\010\024\000\000\062\004\000\000\000\000\ +\098\057\000\000\000\000\000\000\098\057\000\000\000\000\210\000\ +\000\000\000\000\206\003\000\000\000\000\000\000\000\000\213\003\ +\000\000\000\000\000\000\000\000\000\000\102\255\000\000\000\000\ +\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\ +\000\000\000\000\000\000\038\004\000\000\000\000\000\000\000\000\ +\000\000\000\000\000\000\072\046\000\000\000\000\000\000\000\000\ +\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\ +\000\000\217\003\000\000\000\000\000\000\000\000\000\000\000\000\ +\000\000\000\000\034\004\000\000\000\000\000\000\000\000\064\000\ +\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\ +\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\ +\000\000\000\000\192\003\000\000\000\000\181\077\000\000\000\000\ +\000\000\000\000\000\000\000\000\000\000\091\025\000\000\000\000\ +\000\000\000\000\000\000\000\000\000\000\134\041\032\042\000\000\ +\000\000\000\000\000\000\052\037\000\000\000\000\000\000\000\000\ +\059\035\240\031\000\000\234\033\065\033\153\032\072\031\247\029\ +\000\000\159\030\253\027\000\000\078\029\085\027\004\026\000\000\ +\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\ +\043\014\000\000\000\000\000\000\000\000\011\049\000\000\000\000\ +\178\003\000\000\000\000\000\000\000\000\073\004\000\000\195\052\ +\000\000\000\000\000\000\000\000\000\000\000\000\227\003\000\000\ +\000\000\000\000\000\000\000\000\000\000\000\000\054\004\000\000\ +\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\ +\000\000\000\000\000\000\213\000\000\000\224\000\000\000\000\000\ +\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\ +\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\ +\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\ +\000\000\000\000\000\000\000\000\000\000\010\024\000\000\000\000\ +\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\ +\231\003\000\000\000\000\000\000\000\000\000\000\000\000\000\000\ +\000\000\000\000\000\000\081\004\000\000\000\000\000\000\000\000\ +\000\000\000\000\082\004\000\000\000\000\000\000\000\000\000\000\ +\000\000\000\000\000\000\213\000\000\000\224\000\018\062\168\062\ +\062\063\212\063\106\064\000\000\000\000\000\000\000\000\235\003\ +\000\000\000\000\000\000\000\000\181\077\000\000\034\004\000\000\ +\000\000\157\001\000\000\006\004\000\000\000\000\000\000\000\000\ +\191\000\204\046\000\000\000\000\000\000\000\000\000\000\000\000\ +\000\000\233\043\000\000\000\000\034\004\000\000\000\000\000\000\ +\000\000\000\000\000\000\000\000\000\000\166\000\000\000\000\000\ +\186\042\000\000\000\000\000\000\000\000\000\000\104\021\017\022\ +\185\022\098\023\000\000\000\000\179\024\036\000\000\000\000\000\ +\000\000\000\000\000\000\215\003\000\000\101\050\000\000\000\000\ +\000\000\000\000\000\000\181\077\000\000\000\000\000\000\000\000\ +\000\000\000\000\000\000\000\000\054\004\054\004\054\004\054\004\ +\054\004\000\000\000\000\030\018\198\018\111\019\023\020\248\003\ +\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\ +\000\000\000\000\005\000\013\000\000\000\151\255\183\255\090\002\ +\225\000\143\002\000\000\248\006\101\004\000\000\200\005\035\008\ +\228\006\000\000\236\003\143\255\000\000\250\003\000\000\000\000\ +\000\000\000\000\000\000\251\003\000\000\000\000\000\000\000\000\ +\000\000\000\000\236\003\000\000\000\000\000\000\000\000\023\004\ +\000\000\000\000\000\000\000\000\000\000\000\000\217\003\000\000\ +\000\000\000\000\000\000\000\000\000\000\181\077\000\000\000\000\ +\000\000\000\000\000\000\085\004\000\000\000\000\000\000\000\000\ +\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\ +\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\ +\000\000\000\000\126\044\000\000\024\045\000\000\000\000\000\000\ +\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\ +\172\026\179\024\000\000\000\000\045\255\000\000\000\000\000\000\ +\000\000\000\000\000\000\202\050\000\000\000\000\000\000\000\000\ +\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\ +\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\ +\248\003\000\000\000\000\000\000\184\039\000\000\000\000\000\000\ +\000\000\000\000\000\000\000\000\000\000\000\000\231\003\000\000\ +\000\000\236\003\000\000\000\000\124\004\000\000\000\000\000\000\ +\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\ +\000\000\000\000\068\002\078\002\211\002\225\002\017\003\000\000\ +\000\000\000\000\000\000\000\000\000\000\009\004\000\000\000\000\ +\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\ +\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\ +\000\000\000\000\000\000\000\000\000\000\202\050\000\000\000\000\ +\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\ +\000\000\000\000\000\000\000\000\000\000\001\004\000\000\000\000\ +\023\004\023\004\079\011\000\000\000\000\000\000\000\000\000\000\ +\000\000\000\000\000\000\000\000\000\000\000\000\085\004\085\004\ +\085\004\085\004\085\004\000\000\000\000\000\000\000\000\000\000\ +\000\000\000\000\000\000\000\000\000\000\000\000\000\000\133\049\ +\000\000\000\000\248\057\000\000\000\000\002\004\000\000\000\000\ +\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\ +\000\000\000\000\000\000\000\000\000\000\000\000\023\004\000\000\ +\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\ +\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\ +\000\000\000\000\000\000\000\000\133\049\000\000\000\000\000\000\ +\000\000\000\000\000\000\000\000\000\000\004\004\000\000\000\000\ +\000\000\000\000\000\000\033\004\000\000\005\004\000\000\000\000\ +\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\ +\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\ +\000\000\000\000\036\059\186\059\080\060\230\060\124\061\000\000\ +\000\000\000\000\000\000\000\000\010\004\000\000\000\000\000\000\ +\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\ +\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\ +\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\ +\000\000\000\000\000\000\000\000\255\049\000\000\000\000\000\000\ +\000\000\000\000\004\004\000\000\000\000\000\000\000\000\000\000\ +\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\ +\000\000\000\000\000\000\023\004\000\000\000\000\000\000\000\000\ +\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\ +\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\ +\000\000" + +let yygindex = "\000\000\ +\000\000\209\000\000\000\243\007\000\000\050\000\000\000\000\000\ +\000\000\000\000\012\000\000\000\000\000\110\253\000\000\000\000\ +\000\000\132\002\000\000\000\000\000\000\220\252\169\002\050\001\ +\000\000\000\000\169\255\070\004\000\000\000\000\000\000\001\254\ +\227\004\226\004\000\000\000\000\000\000\237\003\000\000\127\002\ +\000\000\251\002\187\002\166\003\168\254\116\254\200\254\088\003\ +\213\255\154\001\000\000\003\255\250\002\121\255\046\002\099\254\ +\000\000\251\001\000\000\186\001\000\000\134\005\000\000\145\005\ +\000\000\204\253\002\003\052\255\249\003\090\255\212\003\212\255\ +\005\005\041\002\171\254\064\003\059\255\000\000\171\002\247\254\ +\083\003\040\005\225\003\191\255\096\000\215\002\087\254\070\255\ +\002\255\129\005\057\002\109\006\008\002\000\000\010\002\060\001\ +\000\000\137\254\000\000\014\000\238\255\000\000\251\008\000\000\ +\000\000\177\255\136\009\093\004\203\009\196\255\000\000\054\005\ +\000\000\000\000\000\000\000\000\000\000\000\000\224\255\248\252\ +\209\003\004\252\000\000\000\000\000\000\031\253\011\255\031\005\ +\000\000\000\000\042\255\027\253\000\000\254\004\004\002\224\254\ +\010\255\000\000\000\000\000\000\000\000\074\000\254\255\198\003\ +\000\000\216\255\040\252\239\255\246\254\000\000\024\004\000\000\ +\035\003\027\255\148\004\204\254\000\000\141\254\139\000\155\253\ +\016\000\055\004\167\004\000\000\013\004\034\254\158\008\000\000\ +\192\255\000\000\000\000\000\000\000\000\000\000\000\000\088\002\ +\134\004\000\000\000\000\059\002\086\001\163\002" + +let yytablesize = 21756 +let yytable = "\118\000\ +\003\002\234\001\012\001\200\000\227\000\204\001\223\001\146\000\ +\118\000\111\001\041\001\080\002\079\002\212\000\029\000\216\000\ +\231\002\254\000\214\001\250\000\060\001\003\001\147\000\031\002\ +\053\002\103\002\201\000\208\002\146\000\146\000\146\000\218\001\ +\146\000\146\000\146\000\209\001\118\000\146\000\190\001\029\000\ +\074\002\029\000\251\000\154\003\004\001\005\001\006\001\158\002\ +\064\004\186\000\061\003\062\003\063\003\064\003\065\003\029\002\ +\188\002\042\001\034\003\132\002\118\000\118\000\118\000\136\002\ +\138\002\032\002\118\000\054\002\076\001\062\001\064\001\216\003\ +\040\001\118\000\147\000\147\000\147\000\124\001\076\001\127\001\ +\078\001\057\001\146\000\146\000\181\002\118\000\141\000\147\000\ +\038\001\054\002\043\000\196\000\043\001\187\003\202\000\053\002\ +\075\002\133\004\022\003\058\001\059\001\247\000\106\004\076\001\ +\078\001\076\001\141\000\229\001\150\003\195\003\051\000\203\000\ +\118\000\118\000\093\002\197\000\128\001\131\002\197\000\106\001\ +\076\002\096\000\240\000\240\000\230\001\240\000\074\000\068\001\ +\141\001\092\001\044\001\043\000\076\001\192\000\164\003\051\001\ +\251\001\064\000\096\000\118\000\043\000\151\003\146\000\203\000\ +\076\001\008\001\074\000\080\000\225\003\231\001\076\001\051\000\ +\203\000\111\002\197\000\208\001\255\000\215\001\126\002\141\000\ +\051\000\203\000\216\001\096\000\155\001\165\001\166\001\058\001\ +\059\001\075\002\110\000\215\001\204\000\155\001\133\004\200\001\ +\216\001\009\001\064\000\146\000\080\000\204\000\107\001\141\001\ +\227\000\090\000\205\000\064\000\076\001\199\001\249\003\246\001\ +\118\000\076\002\069\001\205\000\156\001\077\002\228\001\182\002\ +\229\001\054\002\077\001\051\001\090\000\156\001\164\001\053\002\ +\044\003\076\001\095\000\012\001\008\003\043\003\146\000\237\001\ +\238\001\230\001\088\003\155\001\016\004\041\001\206\000\087\003\ +\074\000\224\003\095\001\204\004\032\002\035\002\198\002\030\002\ +\168\003\169\003\170\003\171\003\172\003\240\000\239\002\143\001\ +\241\002\037\002\070\004\071\004\072\004\073\004\074\004\193\000\ +\155\001\118\000\141\001\156\001\019\002\033\004\206\000\089\000\ +\211\002\035\004\085\002\192\002\080\003\118\000\167\001\206\000\ +\089\000\180\002\220\001\203\000\110\000\065\001\077\002\004\003\ +\206\000\158\002\153\001\155\001\237\002\048\003\036\002\190\001\ +\156\001\156\001\152\001\040\001\076\001\240\002\155\001\146\000\ +\168\001\090\000\118\001\152\001\040\001\064\000\187\002\150\000\ +\047\001\099\004\070\001\080\004\153\002\146\000\118\000\118\000\ +\146\000\166\003\037\002\156\001\152\001\254\000\118\000\074\000\ +\141\000\101\003\052\002\081\002\076\004\233\002\156\001\118\000\ +\079\004\220\001\009\000\067\001\118\000\118\000\118\000\118\000\ +\120\004\153\001\213\002\066\001\148\004\039\002\167\003\125\003\ +\247\000\152\001\064\000\088\002\011\004\036\001\088\002\149\004\ +\048\001\110\002\096\004\081\004\141\000\084\002\125\001\036\001\ +\057\002\058\002\059\002\060\002\061\002\062\002\063\002\064\002\ +\065\002\066\002\118\000\091\001\116\004\118\000\152\001\152\001\ +\152\001\111\002\092\001\074\000\051\001\082\004\009\000\036\001\ +\083\002\220\001\206\000\147\000\152\002\240\002\092\004\125\002\ +\208\002\153\001\254\000\153\002\220\001\141\000\031\002\141\000\ +\122\003\152\001\038\002\023\000\153\001\156\002\046\002\047\002\ +\204\000\159\004\010\000\011\000\152\001\124\002\013\000\015\000\ +\055\002\118\000\118\000\118\000\118\000\096\003\205\000\239\001\ +\118\000\064\000\103\002\251\003\049\001\050\001\252\003\204\002\ +\146\000\146\000\146\000\038\002\147\003\074\000\120\002\146\000\ +\023\000\012\001\149\003\041\001\054\001\049\003\050\003\228\001\ +\029\000\240\001\064\000\126\003\060\001\141\000\190\002\023\000\ +\255\000\011\000\219\002\012\001\036\001\043\000\091\001\197\002\ +\074\000\067\003\113\002\099\003\205\002\092\001\205\002\001\000\ +\002\000\003\000\094\001\095\001\078\003\148\001\118\000\043\000\ +\000\002\051\000\141\000\093\001\055\001\196\002\083\003\141\004\ +\217\000\056\001\197\000\155\002\156\002\118\000\011\000\180\002\ +\113\003\232\002\115\003\051\000\141\000\120\003\158\001\148\001\ +\147\001\040\001\146\000\078\001\064\000\011\000\118\000\158\001\ +\149\001\007\002\217\000\149\001\118\004\013\000\015\000\079\001\ +\192\000\025\002\026\002\134\000\207\002\112\000\064\000\103\001\ +\158\001\033\002\147\001\029\000\109\003\255\000\080\001\105\001\ +\216\002\135\000\136\000\132\003\108\003\149\001\109\001\048\002\ +\049\002\050\002\051\002\225\001\254\000\226\001\008\003\111\002\ +\111\002\111\002\111\002\111\002\229\001\158\001\156\001\157\001\ +\158\001\159\001\112\000\014\000\016\000\094\001\095\001\229\001\ +\110\001\215\000\056\001\215\000\127\002\082\001\104\004\145\000\ +\016\003\238\003\133\002\134\002\097\002\019\003\225\001\149\003\ +\174\002\241\000\158\001\158\001\158\001\158\001\229\003\113\001\ +\112\000\083\001\137\003\241\000\180\000\181\000\182\000\243\000\ +\187\000\188\000\189\000\241\000\241\000\194\000\241\000\088\001\ +\089\001\197\000\243\000\112\000\210\003\158\001\112\001\090\001\ +\156\001\157\001\158\001\159\001\075\003\083\001\241\000\065\001\ +\158\001\191\001\192\001\208\001\115\002\116\002\117\002\118\002\ +\085\001\086\001\087\001\088\001\089\001\241\000\112\000\118\000\ +\118\000\083\001\194\003\090\001\221\003\200\001\009\001\125\001\ +\136\001\226\003\045\001\046\001\139\003\041\003\042\003\088\001\ +\089\001\152\002\140\001\083\001\018\003\241\000\091\001\094\003\ +\153\002\112\000\145\001\184\004\153\001\003\003\160\001\215\001\ +\087\001\088\001\089\001\162\001\107\003\161\001\154\002\163\001\ +\118\000\090\001\118\000\093\001\197\000\169\001\217\001\255\000\ +\248\003\184\002\141\000\197\000\152\002\227\000\073\003\036\004\ +\074\003\001\001\001\001\186\003\001\001\193\001\202\004\224\001\ +\191\002\197\001\233\001\241\000\241\000\241\000\145\000\118\000\ +\118\000\154\002\219\001\247\001\001\001\241\001\241\000\241\000\ +\144\002\215\000\215\000\206\004\241\000\085\003\086\003\182\001\ +\215\000\118\000\248\001\215\000\215\000\148\002\149\002\150\002\ +\194\001\196\001\118\000\249\001\118\000\250\001\151\002\205\001\ +\252\001\118\000\253\001\182\000\216\002\241\000\031\004\254\001\ +\146\000\255\001\144\002\178\003\001\002\005\002\007\002\118\000\ +\155\002\156\002\118\000\082\001\010\002\094\001\095\001\118\000\ +\149\002\150\002\216\002\215\000\215\000\127\003\014\002\112\000\ +\151\002\068\003\038\004\017\002\022\002\133\003\198\001\156\001\ +\157\001\158\001\159\001\112\000\040\002\023\004\024\004\025\004\ +\026\004\027\004\021\002\155\002\156\002\091\002\146\000\098\002\ +\051\003\052\003\053\003\054\003\055\003\056\003\057\003\058\003\ +\059\003\060\003\100\002\083\001\104\002\146\000\105\002\121\002\ +\118\000\118\000\118\000\141\003\134\003\008\004\134\003\086\001\ +\087\001\088\001\089\001\205\002\112\000\112\000\182\003\183\003\ +\184\003\090\001\122\002\123\002\112\000\018\004\139\002\143\002\ +\129\003\130\003\159\003\140\002\197\000\141\002\197\000\160\002\ +\162\002\064\001\112\000\112\000\112\000\112\000\166\002\046\001\ +\144\002\118\000\167\002\082\001\173\003\168\002\118\000\170\002\ +\234\000\234\000\197\000\234\000\169\002\024\002\149\002\150\002\ +\027\002\118\000\235\000\235\000\202\003\235\000\171\002\157\001\ +\172\002\173\002\118\000\234\000\197\000\175\002\176\002\144\002\ +\157\001\146\000\193\002\177\002\178\003\235\000\178\002\215\000\ +\183\002\194\002\215\000\147\002\148\002\149\002\150\002\195\002\ +\228\002\157\001\003\004\083\001\199\002\151\002\118\000\203\002\ +\118\000\210\002\118\000\212\002\118\000\084\001\085\001\086\001\ +\087\001\088\001\089\001\200\001\234\003\221\002\235\003\235\002\ +\236\003\090\001\237\003\230\002\159\001\066\000\157\001\112\000\ +\112\000\112\000\112\000\238\002\098\003\159\001\227\000\227\000\ +\227\000\227\000\227\000\236\002\242\002\112\003\146\000\247\002\ +\245\002\118\000\146\000\036\002\121\003\249\002\159\001\156\001\ +\157\001\158\001\159\001\157\001\157\001\157\001\248\002\007\004\ +\250\002\215\000\146\000\118\000\118\000\128\003\164\002\254\000\ +\071\001\072\001\073\001\074\001\251\002\244\003\062\001\253\002\ +\000\003\019\004\020\004\159\001\255\002\001\003\157\001\118\000\ +\128\002\129\002\130\002\143\003\112\000\095\001\002\003\135\002\ +\005\003\157\001\013\003\118\000\089\000\197\000\118\000\231\000\ +\231\000\065\004\231\000\112\000\197\000\090\004\017\003\197\000\ +\159\001\159\001\159\001\159\001\039\004\233\000\233\000\020\003\ +\233\000\023\003\231\000\025\003\159\001\029\003\213\000\026\003\ +\213\000\234\000\234\000\118\000\035\003\030\003\254\000\037\003\ +\233\000\031\003\032\003\159\001\156\001\157\001\158\001\159\001\ +\033\003\036\003\118\000\118\000\234\000\012\001\159\001\041\001\ +\038\003\118\000\040\003\068\003\068\003\039\003\046\003\132\004\ +\068\004\069\004\046\001\140\004\196\003\232\000\232\000\118\000\ +\232\000\045\003\047\003\081\003\089\003\225\001\095\003\055\004\ +\056\004\057\004\058\004\059\004\209\003\097\003\100\003\102\003\ +\232\000\164\004\116\003\081\001\118\003\217\003\146\003\063\001\ +\118\000\123\003\152\003\144\004\153\003\156\003\158\003\197\000\ +\197\000\197\000\197\000\197\000\082\001\160\003\109\004\163\003\ +\181\004\180\003\255\000\181\003\185\003\040\001\146\000\156\002\ +\102\000\188\003\189\003\190\003\215\000\191\003\192\003\197\003\ +\193\003\215\000\102\000\199\003\198\003\218\003\118\000\203\003\ +\118\000\118\000\102\000\118\000\118\000\118\000\118\000\118\000\ +\204\003\205\003\206\003\207\003\150\004\219\003\152\004\153\004\ +\211\003\212\003\213\003\214\003\083\001\102\000\215\003\197\000\ +\223\003\117\004\227\003\121\004\228\003\230\003\084\001\085\001\ +\086\001\087\001\088\001\089\001\102\000\231\003\232\003\233\003\ +\135\004\255\000\090\001\250\003\118\000\253\003\213\000\213\000\ +\254\003\197\000\255\003\197\000\179\001\213\000\000\004\001\004\ +\213\000\213\000\187\004\002\004\102\000\006\004\195\001\012\004\ +\197\000\004\004\029\004\017\004\179\001\234\000\234\000\234\000\ +\009\004\068\000\010\004\021\004\022\004\234\000\037\004\028\004\ +\030\004\032\004\242\003\222\001\234\000\234\000\034\004\053\004\ +\068\000\051\004\052\004\234\000\054\004\060\004\063\004\068\000\ +\213\000\213\000\066\004\068\000\118\000\067\004\094\004\077\004\ +\078\004\095\004\102\000\102\000\102\000\068\000\061\004\112\000\ +\068\000\091\004\209\004\105\004\197\000\102\000\102\000\107\004\ +\112\000\068\000\112\000\102\000\108\004\234\000\110\004\112\000\ +\111\004\115\004\112\004\113\004\075\004\068\000\123\004\114\004\ +\127\004\143\004\145\004\205\004\146\004\018\002\068\000\147\004\ +\112\000\068\000\151\004\165\004\102\000\166\004\068\000\197\000\ +\167\004\168\004\169\004\170\004\185\004\171\004\172\004\173\004\ +\174\004\182\004\175\004\197\000\068\000\068\000\068\000\068\000\ +\068\000\068\000\068\000\068\000\197\000\176\004\188\004\194\004\ +\027\002\186\004\189\004\190\004\191\004\203\004\192\004\183\001\ +\183\001\183\001\193\004\197\004\183\001\207\004\198\004\199\004\ +\076\000\200\004\068\000\201\004\208\004\236\001\058\000\068\000\ +\183\001\039\000\076\000\053\002\053\000\053\002\098\000\068\000\ +\043\000\066\002\076\000\076\000\045\000\076\000\154\004\155\004\ +\156\004\157\004\158\004\068\000\213\000\041\002\024\002\213\000\ +\053\000\041\000\070\000\062\002\214\000\076\000\214\000\235\000\ +\235\000\031\000\074\000\116\000\222\000\175\003\059\002\112\000\ +\060\000\053\000\100\000\215\000\076\000\053\000\222\000\143\002\ +\183\001\114\000\235\000\037\001\050\002\072\000\222\000\112\000\ +\060\002\222\000\183\001\183\001\183\001\183\001\183\001\183\001\ +\112\000\106\000\185\001\007\000\076\000\062\000\183\001\108\000\ +\051\002\222\000\185\001\185\001\023\000\058\000\035\000\064\002\ +\136\003\056\002\112\000\110\003\137\002\183\001\122\004\057\002\ +\222\000\045\002\143\001\144\001\185\001\119\002\213\000\144\002\ +\222\001\067\002\068\002\069\002\070\002\071\002\111\003\066\003\ +\165\003\145\002\146\002\147\002\148\002\149\002\150\002\151\000\ +\222\000\024\002\076\000\076\000\076\000\151\002\234\000\079\003\ +\010\003\185\001\220\002\005\004\179\000\076\000\076\000\049\004\ +\234\000\234\000\234\000\076\000\234\000\082\003\161\002\189\002\ +\143\002\234\000\155\001\028\003\185\001\239\003\161\003\115\001\ +\186\002\124\003\007\001\234\000\014\004\013\004\185\001\185\001\ +\185\001\185\001\185\001\185\001\076\000\183\004\222\000\222\000\ +\222\000\241\003\185\001\090\002\234\000\234\000\133\001\224\002\ +\203\001\222\000\222\000\234\002\165\002\112\000\175\003\222\000\ +\084\003\185\001\145\000\056\002\214\000\214\000\234\000\038\002\ +\144\002\112\000\180\001\214\000\185\001\240\003\214\000\214\000\ +\005\000\082\002\145\000\146\002\147\002\148\002\149\002\150\002\ +\222\000\015\004\180\001\235\000\235\000\235\000\151\002\167\001\ +\196\004\208\003\142\002\235\000\206\002\006\000\000\000\000\000\ +\167\001\112\000\235\000\235\000\215\000\215\000\000\000\000\000\ +\000\000\235\000\000\000\143\002\000\000\000\000\214\000\214\000\ +\000\000\167\001\000\000\000\000\000\000\000\000\000\000\112\000\ +\000\000\000\000\000\000\007\000\008\000\000\000\000\000\000\000\ +\000\000\213\000\000\000\000\000\009\000\112\000\213\000\000\000\ +\000\000\000\000\000\000\235\000\010\000\011\000\167\001\000\000\ +\000\000\000\000\000\000\000\000\012\000\236\001\138\003\140\003\ +\142\003\144\003\215\000\144\002\000\000\013\000\000\000\014\000\ +\015\000\167\001\016\000\000\000\000\000\145\002\146\002\147\002\ +\148\002\149\002\150\002\167\001\167\001\167\001\167\001\167\001\ +\167\001\151\002\000\000\000\000\179\001\179\001\000\000\167\001\ +\000\000\017\000\000\000\138\003\140\003\142\003\144\003\215\000\ +\000\000\000\000\000\000\000\000\018\000\019\000\167\001\000\000\ +\179\001\112\000\112\000\112\000\112\000\112\000\234\000\000\000\ +\000\000\167\001\000\000\179\001\000\000\234\000\234\000\000\000\ +\020\000\000\000\000\000\000\000\234\000\179\001\046\001\000\000\ +\000\000\000\000\152\000\000\000\021\000\022\000\000\000\023\000\ +\000\000\000\000\214\000\000\000\000\000\214\000\000\000\000\000\ +\000\000\153\000\211\000\000\000\211\000\230\000\230\000\000\000\ +\154\000\000\000\000\000\000\000\155\000\000\000\000\000\000\000\ +\000\000\234\000\234\000\000\000\000\000\000\000\156\000\000\000\ +\230\000\157\000\000\000\119\003\000\000\000\000\000\000\000\000\ +\000\000\000\000\158\000\000\000\000\000\000\000\000\000\215\000\ +\000\000\000\000\000\000\000\000\000\000\000\000\159\000\000\000\ +\000\000\234\000\000\000\000\000\000\000\000\000\000\000\160\000\ +\000\000\000\000\161\000\000\000\000\000\184\001\000\000\162\000\ +\000\000\000\000\000\000\000\000\214\000\224\002\184\001\000\000\ +\000\000\000\000\000\000\000\000\000\000\163\000\164\000\165\000\ +\166\000\167\000\168\000\169\000\170\000\000\000\000\000\184\001\ +\000\000\000\000\000\000\000\000\235\000\000\000\000\000\000\000\ +\000\000\000\000\000\000\000\000\000\000\000\000\235\000\235\000\ +\235\000\000\000\235\000\171\000\000\000\000\000\000\000\235\000\ +\172\000\000\000\000\000\000\000\184\001\000\000\000\000\000\000\ +\173\000\235\000\000\000\000\000\236\001\000\000\236\001\000\000\ +\000\000\236\001\000\000\000\000\174\000\000\000\000\000\184\001\ +\000\000\179\001\235\000\235\000\000\000\227\002\000\000\000\000\ +\213\000\184\001\184\001\184\001\184\001\184\001\184\001\000\000\ +\000\000\000\000\211\000\211\000\235\000\184\001\000\000\000\000\ +\000\000\145\003\000\000\000\000\211\000\211\000\000\000\178\000\ +\000\000\000\000\220\003\236\001\184\001\000\000\224\002\000\000\ +\000\000\230\000\230\000\230\000\000\000\000\000\000\000\184\001\ +\000\000\230\000\000\000\000\000\006\000\000\000\000\000\000\000\ +\230\000\230\000\000\000\000\000\000\000\000\000\000\000\230\000\ +\000\000\000\000\000\000\000\000\211\000\211\000\000\000\000\000\ +\000\000\000\000\000\000\000\000\247\003\000\000\000\000\000\000\ +\224\002\000\000\007\000\008\000\000\000\000\000\000\000\214\000\ +\000\000\000\000\000\000\009\000\214\000\000\000\000\000\000\000\ +\000\000\230\000\000\000\010\000\011\000\000\000\000\000\000\000\ +\000\000\000\000\000\000\012\000\000\000\000\000\000\000\000\000\ +\000\000\000\000\000\000\000\000\013\000\000\000\014\000\015\000\ +\000\000\016\000\000\000\000\000\000\000\000\000\000\000\000\000\ +\000\000\000\000\000\000\234\000\234\000\234\000\234\000\234\000\ +\222\003\000\000\180\001\180\001\236\001\236\001\000\000\224\002\ +\017\000\000\000\000\000\224\002\000\000\000\000\000\000\000\000\ +\234\000\000\000\000\000\018\000\019\000\000\000\180\001\000\000\ +\000\000\000\000\041\004\045\004\235\000\000\000\000\000\000\000\ +\000\000\180\001\000\000\235\000\235\000\000\000\000\000\020\000\ +\000\000\000\000\235\000\180\001\236\001\000\000\236\001\000\000\ +\000\000\213\000\213\000\021\000\022\000\000\000\023\000\000\000\ +\211\000\000\000\000\000\211\000\188\001\000\000\000\000\000\000\ +\000\000\000\000\000\000\188\001\000\000\000\000\224\002\000\000\ +\000\000\188\001\224\002\000\000\000\000\000\000\000\000\235\000\ +\235\000\188\001\188\001\000\000\000\000\114\003\000\000\000\000\ +\098\004\000\000\045\004\000\000\000\000\154\001\000\000\000\000\ +\000\000\000\000\000\000\188\001\000\000\000\000\154\001\213\000\ +\000\000\000\000\222\003\000\000\000\000\236\001\000\000\235\000\ +\000\000\236\001\000\000\000\000\000\000\000\000\224\002\154\001\ +\000\000\045\004\000\000\225\000\225\000\000\000\000\000\234\000\ +\188\001\000\000\000\000\227\002\000\000\000\000\045\004\000\000\ +\000\000\000\000\000\000\000\000\213\000\000\000\225\000\000\000\ +\000\000\000\000\000\000\188\001\154\001\000\000\000\000\000\000\ +\000\000\000\000\000\000\224\002\000\000\188\001\188\001\188\001\ +\188\001\188\001\188\001\188\001\230\000\230\000\230\000\000\000\ +\230\000\188\001\000\000\000\000\236\001\230\000\000\000\000\000\ +\236\001\154\001\154\001\154\001\154\001\000\000\000\000\230\000\ +\188\001\000\000\000\000\000\000\000\000\154\001\000\000\000\000\ +\000\000\000\000\000\000\188\001\000\000\000\000\000\000\180\001\ +\230\000\230\000\000\000\000\000\154\001\000\000\214\000\000\000\ +\000\000\000\000\000\000\045\004\000\000\000\000\000\000\154\001\ +\000\000\000\000\230\000\000\000\236\001\000\000\000\000\000\000\ +\000\000\000\000\114\001\000\000\213\000\000\000\000\000\000\000\ +\000\000\000\000\000\000\000\000\227\002\000\000\000\000\000\000\ +\000\000\000\000\000\000\000\000\000\000\000\000\000\000\114\001\ +\151\001\000\000\000\000\000\000\000\000\000\000\000\000\000\000\ +\000\000\236\001\000\000\000\000\000\000\000\000\000\000\000\000\ +\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\ +\000\000\000\000\000\000\000\000\000\000\000\000\227\002\000\000\ +\000\000\012\003\000\000\000\000\000\000\211\000\000\000\000\000\ +\000\000\000\000\211\000\000\000\000\000\000\000\000\000\225\000\ +\225\000\225\000\000\000\000\000\000\000\000\000\000\000\225\000\ +\000\000\000\000\000\000\000\000\220\001\221\001\225\000\225\000\ +\000\000\000\000\000\000\000\000\000\000\225\000\000\000\000\000\ +\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\ +\000\000\235\000\235\000\235\000\235\000\235\000\000\000\000\000\ +\000\000\000\000\068\000\000\000\000\000\227\002\000\000\140\000\ +\000\000\227\002\000\000\000\000\000\000\000\000\235\000\225\000\ +\000\000\068\000\000\000\000\000\000\000\000\000\000\000\000\000\ +\068\000\048\004\230\000\000\000\068\000\000\000\000\000\000\000\ +\000\000\230\000\230\000\000\000\101\001\000\000\068\000\000\000\ +\000\000\068\000\000\000\186\001\000\000\000\000\000\000\214\000\ +\214\000\000\000\068\000\231\000\231\000\034\002\000\000\000\000\ +\186\001\000\000\000\000\000\000\000\000\000\000\068\000\000\000\ +\186\001\186\001\000\000\000\000\227\002\000\000\231\000\068\000\ +\227\002\000\000\068\000\000\000\000\000\230\000\230\000\068\000\ +\000\000\000\000\186\001\000\000\000\000\000\000\000\000\000\000\ +\048\004\000\000\000\000\000\000\078\002\068\000\068\000\068\000\ +\068\000\068\000\068\000\068\000\068\000\214\000\000\000\000\000\ +\000\000\000\000\000\000\000\000\000\000\230\000\000\000\186\001\ +\000\000\188\001\000\000\000\000\227\002\000\000\000\000\048\004\ +\000\000\000\000\000\000\068\000\000\000\235\000\000\000\000\000\ +\068\000\188\001\186\001\000\000\048\004\000\000\000\000\000\000\ +\068\000\000\000\214\000\114\001\186\001\186\001\186\001\186\001\ +\186\001\186\001\186\001\000\000\068\000\000\000\000\000\000\000\ +\186\001\227\002\117\001\119\001\121\001\231\000\231\000\000\000\ +\000\000\000\000\129\001\131\001\231\000\000\000\231\000\186\001\ +\000\000\000\000\000\000\000\000\000\000\000\000\231\000\117\001\ +\000\000\000\000\186\001\000\000\000\000\000\000\000\000\000\000\ +\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\ +\232\000\243\000\000\000\000\000\000\000\000\000\000\000\000\000\ +\000\000\000\000\000\000\000\000\211\000\000\000\000\000\000\000\ +\225\000\048\004\000\000\243\000\000\000\000\000\000\000\000\000\ +\185\002\000\000\225\000\225\000\225\000\201\001\225\000\231\000\ +\231\000\231\000\214\000\225\000\000\000\000\000\188\001\231\000\ +\000\000\000\000\000\000\000\000\000\000\225\000\231\000\231\000\ +\000\000\000\000\000\000\000\000\000\000\231\000\000\000\000\000\ +\000\000\000\000\000\000\000\000\000\000\000\000\218\002\225\000\ +\000\000\000\000\000\000\233\000\233\000\073\002\000\000\000\000\ +\000\000\101\001\000\000\000\000\000\000\012\003\000\000\000\000\ +\225\000\000\000\000\000\000\000\000\000\000\000\233\000\231\000\ +\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\ +\000\000\000\000\246\002\000\000\000\000\000\000\000\000\000\000\ +\000\000\000\000\122\001\123\001\000\000\000\000\000\000\130\001\ +\000\000\135\001\000\000\138\001\000\000\000\000\000\000\000\000\ +\000\000\000\000\000\000\146\001\000\000\000\000\000\000\000\000\ +\000\000\000\000\000\000\000\000\000\000\000\000\006\003\230\000\ +\230\000\230\000\230\000\230\000\000\000\000\000\000\000\188\001\ +\000\000\000\000\000\000\000\000\188\001\188\001\188\001\000\000\ +\188\001\188\001\000\000\000\000\230\000\000\000\000\000\000\000\ +\000\000\101\001\000\000\114\001\000\000\000\000\000\000\000\000\ +\000\000\201\001\000\000\000\000\243\000\243\000\243\000\000\000\ +\000\000\000\000\000\000\000\000\232\000\000\000\000\000\000\000\ +\089\002\000\000\000\000\243\000\243\000\211\000\211\000\094\002\ +\152\001\000\000\232\000\000\000\000\000\000\000\000\000\000\000\ +\000\000\000\000\231\000\000\000\000\000\000\000\000\000\000\000\ +\000\000\000\000\000\000\117\001\000\000\000\000\000\000\000\000\ +\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\ +\225\000\000\000\000\000\000\000\243\000\000\000\000\000\225\000\ +\225\000\000\000\000\000\000\000\000\000\000\000\225\000\233\000\ +\233\000\233\000\000\000\211\000\000\000\000\000\020\002\233\000\ +\000\000\000\000\000\000\000\000\000\000\000\000\233\000\233\000\ +\000\000\000\000\000\000\000\000\000\000\233\000\000\000\000\000\ +\000\000\000\000\000\000\230\000\000\000\000\000\000\000\000\000\ +\000\000\000\000\000\000\225\000\225\000\000\000\000\000\000\000\ +\211\000\000\000\000\000\000\000\000\000\231\000\000\000\000\000\ +\000\000\000\000\231\000\231\000\231\000\000\000\231\000\233\000\ +\000\000\000\000\000\000\231\000\000\000\000\000\000\000\000\000\ +\000\000\000\000\000\000\225\000\000\000\231\000\000\000\000\000\ +\000\000\000\000\201\001\000\000\201\001\000\000\000\000\000\000\ +\000\000\000\000\078\002\000\000\000\000\000\000\231\000\231\000\ +\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\ +\000\000\000\000\000\000\000\000\114\001\000\000\000\000\099\002\ +\231\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\ +\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\ +\000\000\000\000\000\000\000\000\000\000\000\000\188\001\000\000\ +\211\000\188\001\188\001\188\001\188\001\188\001\188\001\188\001\ +\188\001\188\001\188\001\188\001\188\001\188\001\188\001\188\001\ +\188\001\188\001\073\002\101\001\000\000\188\001\000\000\000\000\ +\000\000\000\000\000\000\000\000\000\000\000\000\117\001\000\000\ +\188\001\000\000\000\000\000\000\000\000\000\000\000\000\000\000\ +\000\000\000\000\188\001\000\000\000\000\000\000\000\000\000\000\ +\000\000\000\000\000\000\231\000\000\000\000\000\231\000\000\000\ +\000\000\000\000\231\000\117\001\000\000\000\000\000\000\243\000\ +\243\000\243\000\000\000\232\000\000\000\000\000\000\000\000\000\ +\243\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\ +\000\000\000\000\243\000\000\000\000\000\000\000\000\000\000\000\ +\000\000\000\000\000\000\000\000\000\000\000\000\000\000\078\002\ +\006\003\000\000\000\000\243\000\243\000\000\000\000\000\000\000\ +\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\ +\000\000\000\000\000\000\000\000\000\000\243\000\000\000\000\000\ +\231\000\201\001\101\001\201\001\000\000\000\000\000\000\231\000\ +\231\000\000\000\233\000\233\000\233\000\000\000\233\000\000\000\ +\000\000\000\000\000\000\233\000\000\000\000\000\000\000\000\000\ +\000\000\000\000\000\000\000\000\000\000\233\000\000\000\000\000\ +\000\000\000\000\000\000\000\000\000\000\225\000\225\000\225\000\ +\225\000\225\000\000\000\000\000\000\000\000\000\233\000\233\000\ +\000\000\000\000\000\000\231\000\231\000\000\000\000\000\000\000\ +\000\000\000\000\225\000\000\000\000\000\000\000\000\000\000\000\ +\233\000\000\000\000\000\000\000\000\000\043\004\000\000\000\000\ +\021\003\000\000\000\000\024\003\000\000\000\000\188\001\027\003\ +\000\000\041\000\131\001\231\000\000\000\000\000\000\000\000\000\ +\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\ +\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\ +\000\000\000\000\047\000\000\000\000\000\000\000\000\000\000\000\ +\141\000\231\000\000\000\000\000\117\001\000\000\000\000\000\000\ +\000\000\000\000\055\000\056\000\057\000\058\000\059\000\093\004\ +\000\000\000\000\097\004\000\000\043\004\000\000\100\004\000\000\ +\000\000\000\000\000\000\000\000\000\000\243\000\000\000\101\001\ +\000\000\000\000\150\001\070\000\243\000\243\000\000\000\000\000\ +\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\ +\000\000\000\000\000\000\119\004\000\000\000\000\000\000\000\000\ +\000\000\225\000\000\000\000\000\000\000\000\000\000\000\187\001\ +\119\004\000\000\000\000\000\000\142\004\000\000\187\001\188\001\ +\000\000\201\001\078\000\000\000\187\001\000\000\079\000\000\000\ +\243\000\232\000\080\000\000\000\187\001\187\001\000\000\000\000\ +\000\000\082\000\083\000\000\000\000\000\084\000\000\000\000\000\ +\233\000\000\000\000\000\000\000\000\000\087\000\187\001\233\000\ +\233\000\000\000\000\000\090\000\091\000\092\000\093\000\000\000\ +\243\000\000\000\000\000\000\000\100\004\000\000\000\000\000\000\ +\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\ +\117\001\000\000\000\000\187\001\000\000\000\000\000\000\000\000\ +\000\000\000\000\000\000\000\000\000\000\119\004\162\003\000\000\ +\000\000\000\000\000\000\233\000\233\000\000\000\187\001\000\000\ +\201\001\000\000\000\000\000\000\000\000\000\000\000\000\000\000\ +\187\001\187\001\187\001\187\001\187\001\187\001\187\001\000\000\ +\000\000\201\001\000\000\000\000\187\001\000\000\000\000\000\000\ +\000\000\000\000\000\000\233\000\000\000\000\000\000\000\000\000\ +\000\000\000\000\000\000\187\001\000\000\231\000\231\000\231\000\ +\231\000\231\000\000\000\000\000\000\000\000\000\187\001\000\000\ +\000\000\027\000\000\000\000\000\000\000\000\000\000\000\000\000\ +\000\000\000\000\231\000\000\000\000\000\000\000\000\000\000\000\ +\000\000\000\000\000\000\000\000\040\004\000\000\000\000\000\000\ +\000\000\000\000\000\000\000\000\131\001\131\001\131\001\000\000\ +\131\001\000\000\000\000\000\000\000\000\000\000\000\000\131\001\ +\000\000\131\001\000\000\131\001\000\000\000\000\131\001\000\000\ +\000\000\000\000\000\000\000\000\000\000\131\001\000\000\000\000\ +\000\000\000\000\000\000\000\000\000\000\131\001\000\000\131\001\ +\131\001\000\000\000\000\131\001\131\001\000\000\000\000\000\000\ +\131\001\000\000\000\000\085\004\000\000\000\000\131\001\000\000\ +\131\001\131\001\131\001\131\001\131\001\131\001\000\000\231\000\ +\000\000\000\000\000\000\000\000\131\001\000\000\131\001\000\000\ +\000\000\000\000\000\000\000\000\131\001\131\001\000\000\000\000\ +\000\000\131\001\131\001\000\000\131\001\000\000\000\000\000\000\ +\000\000\000\000\000\000\131\001\000\000\131\001\131\001\131\001\ +\131\001\231\000\131\001\131\001\000\000\000\000\000\000\000\000\ +\000\000\000\000\232\000\232\000\232\000\232\000\232\000\000\000\ +\000\000\131\001\131\001\131\001\131\001\131\001\131\001\131\001\ +\131\001\131\001\000\000\000\000\000\000\000\000\000\000\243\000\ +\131\001\131\001\000\000\000\000\131\001\131\001\000\000\000\000\ +\131\001\131\001\131\001\131\001\131\001\000\000\000\000\131\001\ +\000\000\034\001\131\001\131\001\131\001\000\000\131\001\000\000\ +\131\001\000\000\000\000\000\000\131\001\000\000\000\000\000\000\ +\000\000\000\000\000\000\000\000\131\001\131\001\000\000\131\001\ +\131\001\000\000\131\001\000\000\000\000\233\000\233\000\233\000\ +\233\000\233\000\000\000\000\000\000\000\000\000\000\000\000\000\ +\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\ +\000\000\000\000\233\000\000\000\000\000\000\000\000\000\000\000\ +\000\000\000\000\000\000\000\000\103\004\000\000\000\000\000\000\ +\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\ +\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\ +\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\ +\000\000\000\000\027\000\027\000\027\000\027\000\243\000\027\000\ +\000\000\027\000\000\000\000\000\027\000\027\000\027\000\027\000\ +\027\000\027\000\027\000\000\000\027\000\027\000\027\000\027\000\ +\027\000\027\000\027\000\000\000\027\000\027\000\027\000\027\000\ +\027\000\027\000\027\000\027\000\027\000\000\000\027\000\027\000\ +\000\000\027\000\027\000\027\000\000\000\027\000\000\000\027\000\ +\000\000\000\000\027\000\027\000\000\000\027\000\000\000\027\000\ +\027\000\027\000\027\000\027\000\027\000\027\000\027\000\027\000\ +\027\000\027\000\000\000\027\000\000\000\027\000\027\000\027\000\ +\000\000\233\000\027\000\027\000\027\000\027\000\027\000\027\000\ +\027\000\027\000\051\000\027\000\000\000\027\000\027\000\000\000\ +\000\000\027\000\027\000\027\000\027\000\027\000\027\000\027\000\ +\000\000\027\000\027\000\027\000\027\000\027\000\027\000\027\000\ +\027\000\027\000\027\000\027\000\000\000\000\000\027\000\027\000\ +\027\000\027\000\027\000\027\000\027\000\027\000\027\000\027\000\ +\027\000\000\000\000\000\000\000\000\000\027\000\027\000\027\000\ +\027\000\027\000\000\000\027\000\027\000\027\000\000\000\027\000\ +\027\000\027\000\027\000\027\000\027\000\027\000\027\000\027\000\ +\027\000\027\000\027\000\027\000\000\000\027\000\000\000\027\000\ +\027\000\000\000\027\000\027\000\027\000\000\000\027\000\027\000\ +\027\000\027\000\027\000\027\000\027\000\027\000\027\000\027\000\ +\027\000\027\000\034\001\034\001\034\001\034\001\000\000\034\001\ +\000\000\034\001\000\000\000\000\034\001\034\001\034\001\034\001\ +\034\001\034\001\034\001\000\000\034\001\034\001\034\001\034\001\ +\034\001\034\001\034\001\000\000\034\001\034\001\034\001\000\000\ +\000\000\000\000\000\000\034\001\034\001\000\000\034\001\034\001\ +\000\000\034\001\034\001\034\001\000\000\034\001\000\000\034\001\ +\000\000\000\000\034\001\034\001\000\000\034\001\000\000\034\001\ +\034\001\034\001\034\001\034\001\034\001\034\001\034\001\034\001\ +\034\001\034\001\000\000\034\001\000\000\034\001\034\001\034\001\ +\000\000\000\000\034\001\034\001\034\001\034\001\034\001\034\001\ +\034\001\034\001\050\001\034\001\000\000\034\001\034\001\000\000\ +\000\000\034\001\034\001\034\001\034\001\034\001\034\001\034\001\ +\000\000\034\001\034\001\034\001\034\001\034\001\034\001\034\001\ +\034\001\034\001\034\001\034\001\000\000\000\000\034\001\034\001\ +\034\001\034\001\034\001\034\001\034\001\034\001\034\001\034\001\ +\034\001\034\001\034\001\000\000\000\000\034\001\034\001\034\001\ +\034\001\034\001\000\000\034\001\034\001\034\001\000\000\034\001\ +\034\001\034\001\034\001\034\001\034\001\034\001\034\001\034\001\ +\034\001\034\001\034\001\034\001\000\000\034\001\000\000\034\001\ +\034\001\000\000\034\001\034\001\034\001\034\001\034\001\034\001\ +\034\001\034\001\034\001\034\001\034\001\034\001\034\001\034\001\ +\034\001\034\001\000\000\051\000\051\000\051\000\051\000\000\000\ +\051\000\000\000\051\000\000\000\000\000\051\000\051\000\051\000\ +\051\000\051\000\051\000\051\000\000\000\051\000\051\000\051\000\ +\051\000\051\000\051\000\051\000\000\000\051\000\051\000\051\000\ +\000\000\051\000\051\000\051\000\051\000\051\000\000\000\051\000\ +\051\000\000\000\051\000\051\000\051\000\000\000\051\000\000\000\ +\051\000\000\000\000\000\051\000\051\000\000\000\051\000\000\000\ +\051\000\051\000\051\000\051\000\051\000\051\000\051\000\051\000\ +\051\000\051\000\051\000\000\000\051\000\000\000\051\000\051\000\ +\051\000\000\000\000\000\051\000\051\000\051\000\051\000\051\000\ +\051\000\051\000\051\000\240\001\051\000\000\000\051\000\051\000\ +\000\000\000\000\051\000\051\000\051\000\051\000\051\000\051\000\ +\051\000\000\000\051\000\051\000\051\000\051\000\051\000\051\000\ +\051\000\051\000\051\000\051\000\051\000\000\000\000\000\051\000\ +\051\000\051\000\051\000\051\000\051\000\051\000\051\000\051\000\ +\051\000\051\000\000\000\000\000\000\000\000\000\051\000\051\000\ +\051\000\051\000\051\000\000\000\051\000\051\000\051\000\000\000\ +\051\000\051\000\051\000\051\000\051\000\051\000\051\000\051\000\ +\051\000\051\000\051\000\051\000\051\000\000\000\051\000\000\000\ +\051\000\051\000\000\000\051\000\051\000\051\000\000\000\051\000\ +\051\000\051\000\051\000\051\000\051\000\051\000\051\000\051\000\ +\051\000\051\000\051\000\050\001\050\001\050\001\050\001\000\000\ +\050\001\000\000\050\001\000\000\000\000\000\000\050\001\050\001\ +\050\001\050\001\050\001\050\001\000\000\050\001\050\001\048\001\ +\050\001\050\001\050\001\050\001\000\000\050\001\050\001\000\000\ +\050\001\050\001\050\001\050\001\050\001\050\001\000\000\050\001\ +\050\001\000\000\050\001\050\001\050\001\000\000\050\001\000\000\ +\050\001\000\000\000\000\050\001\050\001\000\000\050\001\000\000\ +\050\001\050\001\050\001\050\001\050\001\050\001\050\001\050\001\ +\050\001\050\001\050\001\000\000\050\001\000\000\050\001\050\001\ +\000\000\000\000\000\000\050\001\050\001\050\001\000\000\050\001\ +\050\001\050\001\050\001\242\001\050\001\048\001\050\001\050\001\ +\000\000\000\000\050\001\050\001\050\001\050\001\050\001\050\001\ +\050\001\000\000\050\001\050\001\050\001\050\001\050\001\050\001\ +\050\001\050\001\050\001\050\001\050\001\000\000\000\000\050\001\ +\050\001\050\001\050\001\050\001\050\001\050\001\050\001\050\001\ +\050\001\050\001\000\000\000\000\000\000\000\000\050\001\050\001\ +\050\001\050\001\050\001\000\000\050\001\050\001\050\001\000\000\ +\050\001\050\001\050\001\050\001\050\001\050\001\050\001\050\001\ +\050\001\050\001\050\001\050\001\050\001\000\000\050\001\000\000\ +\050\001\050\001\000\000\050\001\050\001\000\000\050\001\050\001\ +\050\001\050\001\050\001\050\001\050\001\050\001\050\001\050\001\ +\050\001\000\000\050\001\000\000\240\001\240\001\240\001\240\001\ +\000\000\240\001\000\000\240\001\000\000\000\000\240\001\240\001\ +\240\001\240\001\240\001\240\001\240\001\000\000\240\001\240\001\ +\240\001\240\001\240\001\240\001\240\001\000\000\240\001\240\001\ +\240\001\000\000\000\000\000\000\000\000\000\000\240\001\000\000\ +\240\001\240\001\000\000\240\001\240\001\240\001\000\000\240\001\ +\000\000\240\001\000\000\000\000\240\001\240\001\000\000\240\001\ +\000\000\240\001\240\001\240\001\240\001\240\001\240\001\240\001\ +\240\001\240\001\240\001\240\001\000\000\240\001\000\000\240\001\ +\240\001\240\001\000\000\000\000\240\001\240\001\240\001\240\001\ +\240\001\240\001\240\001\240\001\242\001\240\001\000\000\240\001\ +\240\001\000\000\000\000\240\001\240\001\240\001\240\001\240\001\ +\240\001\240\001\000\000\240\001\240\001\240\001\240\001\240\001\ +\240\001\240\001\240\001\240\001\240\001\240\001\000\000\000\000\ +\240\001\240\001\240\001\240\001\240\001\240\001\240\001\240\001\ +\240\001\240\001\240\001\000\000\000\000\000\000\000\000\240\001\ +\240\001\240\001\240\001\240\001\000\000\240\001\240\001\240\001\ +\000\000\240\001\240\001\240\001\240\001\240\001\240\001\240\001\ +\240\001\240\001\240\001\240\001\240\001\240\001\000\000\240\001\ +\000\000\240\001\240\001\000\000\240\001\240\001\240\001\000\000\ +\240\001\240\001\240\001\240\001\240\001\240\001\240\001\240\001\ +\240\001\240\001\240\001\240\001\242\001\242\001\242\001\242\001\ +\000\000\242\001\000\000\242\001\000\000\000\000\000\000\242\001\ +\242\001\242\001\242\001\242\001\242\001\000\000\242\001\242\001\ +\049\001\242\001\242\001\242\001\242\001\000\000\242\001\242\001\ +\000\000\000\000\242\001\242\001\242\001\242\001\242\001\000\000\ +\242\001\242\001\000\000\242\001\242\001\242\001\000\000\242\001\ +\000\000\242\001\000\000\000\000\242\001\242\001\000\000\242\001\ +\000\000\242\001\242\001\242\001\242\001\242\001\242\001\242\001\ +\242\001\242\001\242\001\242\001\000\000\242\001\000\000\242\001\ +\242\001\000\000\000\000\000\000\242\001\242\001\242\001\000\000\ +\242\001\242\001\242\001\242\001\237\001\242\001\000\000\242\001\ +\242\001\000\000\000\000\242\001\242\001\242\001\242\001\242\001\ +\242\001\242\001\000\000\242\001\242\001\242\001\242\001\242\001\ +\242\001\242\001\242\001\242\001\242\001\242\001\000\000\000\000\ +\242\001\242\001\242\001\242\001\242\001\242\001\242\001\242\001\ +\242\001\242\001\242\001\000\000\000\000\000\000\000\000\242\001\ +\242\001\242\001\242\001\242\001\000\000\242\001\242\001\242\001\ +\000\000\242\001\242\001\242\001\242\001\242\001\242\001\242\001\ +\242\001\242\001\242\001\242\001\242\001\242\001\000\000\242\001\ +\000\000\242\001\242\001\000\000\242\001\242\001\000\000\000\000\ +\242\001\242\001\242\001\242\001\242\001\242\001\242\001\242\001\ +\242\001\242\001\000\000\242\001\000\000\242\001\242\001\242\001\ +\242\001\000\000\242\001\000\000\242\001\000\000\000\000\000\000\ +\242\001\242\001\000\000\242\001\242\001\000\000\000\000\242\001\ +\242\001\049\001\242\001\242\001\242\001\242\001\000\000\242\001\ +\242\001\000\000\000\000\242\001\242\001\242\001\242\001\242\001\ +\000\000\242\001\242\001\000\000\242\001\242\001\242\001\000\000\ +\242\001\000\000\242\001\000\000\000\000\242\001\242\001\000\000\ +\242\001\000\000\242\001\242\001\242\001\242\001\242\001\242\001\ +\242\001\242\001\242\001\242\001\242\001\000\000\242\001\000\000\ +\242\001\242\001\000\000\000\000\000\000\242\001\242\001\242\001\ +\000\000\242\001\242\001\242\001\242\001\083\000\242\001\049\001\ +\242\001\242\001\000\000\000\000\242\001\242\001\242\001\242\001\ +\242\001\242\001\242\001\000\000\242\001\242\001\242\001\242\001\ +\242\001\242\001\242\001\242\001\242\001\242\001\242\001\000\000\ +\000\000\242\001\242\001\242\001\242\001\242\001\242\001\242\001\ +\242\001\242\001\242\001\242\001\000\000\000\000\000\000\000\000\ +\242\001\242\001\242\001\242\001\242\001\000\000\242\001\242\001\ +\242\001\000\000\242\001\242\001\242\001\242\001\242\001\242\001\ +\242\001\242\001\000\000\242\001\242\001\242\001\242\001\000\000\ +\242\001\000\000\242\001\242\001\000\000\242\001\242\001\000\000\ +\000\000\242\001\242\001\242\001\242\001\242\001\242\001\242\001\ +\242\001\242\001\242\001\000\000\242\001\237\001\237\001\237\001\ +\237\001\000\000\237\001\000\000\237\001\000\000\000\000\000\000\ +\237\001\237\001\237\001\237\001\237\001\237\001\000\000\237\001\ +\237\001\000\000\237\001\237\001\237\001\237\001\000\000\237\001\ +\237\001\000\000\000\000\000\000\000\000\000\000\000\000\237\001\ +\000\000\237\001\237\001\000\000\237\001\237\001\237\001\000\000\ +\237\001\000\000\237\001\000\000\000\000\237\001\237\001\000\000\ +\237\001\000\000\237\001\237\001\237\001\237\001\237\001\237\001\ +\237\001\237\001\237\001\237\001\237\001\000\000\237\001\000\000\ +\237\001\237\001\000\000\000\000\000\000\237\001\237\001\237\001\ +\000\000\237\001\237\001\237\001\237\001\084\000\237\001\000\000\ +\237\001\237\001\000\000\000\000\237\001\237\001\237\001\237\001\ +\237\001\237\001\237\001\000\000\237\001\237\001\237\001\237\001\ +\237\001\237\001\237\001\237\001\237\001\237\001\237\001\000\000\ +\000\000\237\001\237\001\237\001\237\001\237\001\237\001\237\001\ +\237\001\237\001\237\001\237\001\000\000\000\000\000\000\000\000\ +\237\001\237\001\237\001\237\001\237\001\000\000\237\001\237\001\ +\237\001\000\000\237\001\237\001\237\001\237\001\237\001\237\001\ +\237\001\237\001\237\001\237\001\237\001\237\001\237\001\000\000\ +\237\001\000\000\237\001\237\001\000\000\237\001\237\001\000\000\ +\000\000\237\001\237\001\237\001\237\001\237\001\237\001\237\001\ +\237\001\237\001\237\001\000\000\237\001\000\000\083\000\083\000\ +\083\000\083\000\000\000\083\000\000\000\083\000\000\000\000\000\ +\000\000\083\000\083\000\083\000\083\000\083\000\083\000\000\000\ +\083\000\083\000\000\000\083\000\083\000\083\000\083\000\000\000\ +\083\000\083\000\000\000\000\000\000\000\000\000\000\000\000\000\ +\083\000\000\000\083\000\083\000\000\000\083\000\083\000\083\000\ +\000\000\083\000\000\000\083\000\000\000\000\000\083\000\083\000\ +\000\000\083\000\000\000\083\000\083\000\083\000\083\000\083\000\ +\083\000\083\000\083\000\083\000\083\000\083\000\000\000\083\000\ +\000\000\083\000\083\000\000\000\000\000\000\000\083\000\083\000\ +\083\000\000\000\083\000\083\000\083\000\083\000\085\000\083\000\ +\000\000\083\000\083\000\000\000\000\000\083\000\083\000\083\000\ +\083\000\083\000\083\000\083\000\000\000\083\000\083\000\083\000\ +\083\000\083\000\083\000\083\000\083\000\083\000\083\000\083\000\ +\000\000\000\000\083\000\083\000\083\000\083\000\083\000\083\000\ +\083\000\083\000\083\000\083\000\083\000\000\000\000\000\000\000\ +\000\000\083\000\083\000\083\000\083\000\083\000\000\000\083\000\ +\083\000\083\000\000\000\083\000\083\000\083\000\083\000\083\000\ +\083\000\083\000\083\000\083\000\083\000\083\000\083\000\083\000\ +\000\000\083\000\000\000\083\000\083\000\000\000\083\000\083\000\ +\000\000\000\000\083\000\083\000\083\000\083\000\083\000\083\000\ +\083\000\083\000\083\000\083\000\000\000\083\000\084\000\084\000\ +\084\000\084\000\000\000\084\000\000\000\084\000\000\000\000\000\ +\000\000\084\000\084\000\084\000\084\000\084\000\084\000\000\000\ +\084\000\084\000\000\000\084\000\084\000\084\000\084\000\000\000\ +\084\000\084\000\000\000\000\000\000\000\000\000\000\000\000\000\ +\084\000\000\000\084\000\084\000\000\000\084\000\084\000\084\000\ +\000\000\084\000\000\000\084\000\000\000\000\000\084\000\084\000\ +\000\000\084\000\000\000\084\000\084\000\084\000\084\000\084\000\ +\084\000\084\000\084\000\084\000\084\000\084\000\000\000\084\000\ +\000\000\084\000\084\000\000\000\000\000\000\000\084\000\084\000\ +\084\000\000\000\084\000\084\000\084\000\084\000\082\000\084\000\ +\000\000\084\000\084\000\000\000\000\000\084\000\084\000\084\000\ +\084\000\084\000\084\000\084\000\000\000\084\000\084\000\084\000\ +\084\000\084\000\084\000\084\000\084\000\084\000\084\000\084\000\ +\000\000\000\000\084\000\084\000\084\000\084\000\084\000\084\000\ +\084\000\084\000\084\000\084\000\084\000\000\000\000\000\000\000\ +\000\000\084\000\084\000\084\000\084\000\084\000\000\000\084\000\ +\084\000\084\000\000\000\084\000\084\000\084\000\084\000\084\000\ +\084\000\084\000\084\000\084\000\084\000\084\000\084\000\084\000\ +\000\000\084\000\000\000\084\000\084\000\000\000\084\000\084\000\ +\000\000\000\000\084\000\084\000\084\000\084\000\084\000\084\000\ +\084\000\084\000\084\000\084\000\000\000\084\000\000\000\085\000\ +\085\000\085\000\085\000\000\000\085\000\000\000\085\000\000\000\ +\000\000\000\000\085\000\085\000\085\000\085\000\085\000\085\000\ +\000\000\085\000\085\000\000\000\085\000\085\000\085\000\085\000\ +\000\000\085\000\085\000\000\000\000\000\000\000\000\000\000\000\ +\000\000\085\000\000\000\085\000\085\000\000\000\085\000\085\000\ +\085\000\000\000\085\000\000\000\085\000\000\000\000\000\085\000\ +\085\000\000\000\085\000\000\000\085\000\085\000\085\000\085\000\ +\085\000\085\000\085\000\085\000\085\000\085\000\085\000\000\000\ +\085\000\000\000\085\000\085\000\000\000\000\000\000\000\085\000\ +\085\000\085\000\000\000\085\000\085\000\085\000\085\000\237\001\ +\085\000\000\000\085\000\085\000\000\000\000\000\085\000\085\000\ +\085\000\085\000\085\000\085\000\085\000\000\000\085\000\085\000\ +\085\000\085\000\085\000\085\000\085\000\085\000\085\000\085\000\ +\085\000\000\000\000\000\085\000\085\000\085\000\085\000\085\000\ +\085\000\085\000\085\000\085\000\085\000\085\000\000\000\000\000\ +\000\000\000\000\085\000\085\000\085\000\085\000\085\000\000\000\ +\085\000\085\000\085\000\000\000\085\000\085\000\085\000\085\000\ +\085\000\085\000\085\000\085\000\085\000\085\000\085\000\085\000\ +\085\000\000\000\085\000\000\000\085\000\085\000\000\000\085\000\ +\085\000\000\000\000\000\085\000\085\000\085\000\085\000\085\000\ +\085\000\085\000\085\000\085\000\085\000\000\000\085\000\082\000\ +\082\000\082\000\082\000\000\000\082\000\000\000\082\000\000\000\ +\000\000\000\000\082\000\082\000\082\000\082\000\082\000\082\000\ +\000\000\082\000\082\000\000\000\082\000\082\000\082\000\082\000\ +\000\000\082\000\082\000\000\000\000\000\000\000\000\000\000\000\ +\000\000\082\000\000\000\082\000\082\000\000\000\082\000\082\000\ +\082\000\000\000\082\000\000\000\082\000\000\000\000\000\082\000\ +\082\000\000\000\082\000\000\000\082\000\082\000\082\000\082\000\ +\082\000\082\000\082\000\082\000\082\000\082\000\082\000\000\000\ +\082\000\000\000\082\000\082\000\000\000\000\000\000\000\082\000\ +\082\000\082\000\000\000\082\000\082\000\082\000\082\000\083\000\ +\082\000\000\000\082\000\082\000\000\000\000\000\082\000\082\000\ +\082\000\082\000\082\000\082\000\082\000\000\000\082\000\082\000\ +\082\000\082\000\082\000\082\000\082\000\082\000\082\000\082\000\ +\082\000\000\000\000\000\082\000\082\000\082\000\082\000\082\000\ +\082\000\082\000\082\000\082\000\082\000\082\000\000\000\000\000\ +\000\000\000\000\082\000\082\000\082\000\082\000\082\000\000\000\ +\082\000\082\000\082\000\000\000\082\000\082\000\082\000\082\000\ +\082\000\082\000\082\000\082\000\082\000\082\000\082\000\082\000\ +\082\000\000\000\082\000\000\000\082\000\082\000\000\000\082\000\ +\082\000\000\000\000\000\082\000\082\000\082\000\082\000\082\000\ +\082\000\082\000\082\000\082\000\082\000\000\000\082\000\000\000\ +\237\001\237\001\237\001\237\001\000\000\237\001\000\000\237\001\ +\000\000\000\000\000\000\237\001\237\001\000\000\237\001\237\001\ +\000\000\000\000\237\001\237\001\000\000\237\001\237\001\237\001\ +\237\001\000\000\237\001\237\001\000\000\000\000\000\000\000\000\ +\000\000\000\000\237\001\000\000\237\001\237\001\000\000\237\001\ +\237\001\237\001\000\000\237\001\000\000\237\001\000\000\000\000\ +\237\001\237\001\000\000\237\001\000\000\237\001\237\001\237\001\ +\237\001\237\001\237\001\237\001\237\001\237\001\237\001\237\001\ +\000\000\237\001\000\000\237\001\237\001\000\000\000\000\000\000\ +\237\001\237\001\237\001\000\000\237\001\237\001\237\001\237\001\ +\084\000\237\001\000\000\237\001\237\001\000\000\000\000\237\001\ +\237\001\237\001\237\001\237\001\237\001\237\001\000\000\237\001\ +\237\001\237\001\237\001\237\001\237\001\237\001\237\001\237\001\ +\237\001\237\001\000\000\000\000\237\001\237\001\237\001\237\001\ +\237\001\237\001\237\001\237\001\237\001\237\001\237\001\000\000\ +\000\000\000\000\000\000\237\001\237\001\237\001\237\001\237\001\ +\000\000\237\001\237\001\237\001\000\000\237\001\237\001\237\001\ +\237\001\237\001\237\001\237\001\237\001\000\000\237\001\237\001\ +\237\001\237\001\000\000\237\001\000\000\237\001\237\001\000\000\ +\237\001\237\001\000\000\000\000\237\001\237\001\237\001\237\001\ +\237\001\237\001\237\001\237\001\237\001\237\001\000\000\237\001\ +\083\000\083\000\083\000\083\000\000\000\083\000\000\000\083\000\ +\000\000\000\000\000\000\083\000\083\000\000\000\083\000\083\000\ +\000\000\000\000\083\000\083\000\000\000\083\000\083\000\083\000\ +\083\000\000\000\083\000\083\000\000\000\000\000\000\000\000\000\ +\000\000\000\000\083\000\000\000\083\000\083\000\000\000\083\000\ +\083\000\083\000\000\000\083\000\000\000\083\000\000\000\000\000\ +\083\000\083\000\000\000\083\000\000\000\083\000\083\000\083\000\ +\083\000\083\000\083\000\083\000\083\000\083\000\083\000\083\000\ +\000\000\083\000\000\000\083\000\083\000\000\000\000\000\000\000\ +\083\000\083\000\083\000\000\000\083\000\083\000\083\000\083\000\ +\085\000\083\000\000\000\083\000\083\000\000\000\000\000\083\000\ +\083\000\083\000\083\000\083\000\083\000\083\000\000\000\083\000\ +\083\000\083\000\083\000\083\000\083\000\083\000\083\000\083\000\ +\083\000\083\000\000\000\000\000\083\000\083\000\083\000\083\000\ +\083\000\083\000\083\000\083\000\083\000\083\000\083\000\000\000\ +\000\000\000\000\000\000\083\000\083\000\083\000\083\000\083\000\ +\000\000\083\000\083\000\083\000\000\000\083\000\083\000\083\000\ +\083\000\083\000\083\000\083\000\083\000\000\000\083\000\083\000\ +\083\000\083\000\000\000\083\000\000\000\083\000\083\000\000\000\ +\083\000\083\000\000\000\000\000\083\000\083\000\083\000\083\000\ +\083\000\083\000\083\000\083\000\083\000\083\000\000\000\083\000\ +\000\000\084\000\084\000\084\000\084\000\000\000\084\000\000\000\ +\084\000\000\000\000\000\000\000\084\000\084\000\000\000\084\000\ +\084\000\000\000\000\000\084\000\084\000\000\000\084\000\084\000\ +\084\000\084\000\000\000\084\000\084\000\000\000\000\000\000\000\ +\000\000\000\000\000\000\084\000\000\000\084\000\084\000\000\000\ +\084\000\084\000\084\000\000\000\084\000\000\000\084\000\000\000\ +\000\000\084\000\084\000\000\000\084\000\000\000\084\000\084\000\ +\084\000\084\000\084\000\084\000\084\000\084\000\084\000\084\000\ +\084\000\000\000\084\000\000\000\084\000\084\000\000\000\000\000\ +\000\000\084\000\084\000\084\000\000\000\084\000\084\000\084\000\ +\084\000\082\000\084\000\000\000\084\000\084\000\000\000\000\000\ +\084\000\084\000\084\000\084\000\084\000\084\000\084\000\000\000\ +\084\000\084\000\084\000\084\000\084\000\084\000\084\000\084\000\ +\084\000\084\000\084\000\000\000\000\000\084\000\084\000\084\000\ +\084\000\084\000\084\000\084\000\084\000\084\000\084\000\084\000\ +\000\000\000\000\000\000\000\000\084\000\084\000\084\000\084\000\ +\084\000\000\000\084\000\084\000\084\000\000\000\084\000\084\000\ +\084\000\084\000\084\000\084\000\084\000\084\000\000\000\084\000\ +\084\000\084\000\084\000\000\000\084\000\000\000\084\000\084\000\ +\000\000\084\000\084\000\000\000\000\000\084\000\084\000\084\000\ +\084\000\084\000\084\000\084\000\084\000\084\000\084\000\000\000\ +\084\000\085\000\085\000\085\000\085\000\000\000\085\000\000\000\ +\085\000\000\000\000\000\000\000\085\000\085\000\000\000\085\000\ +\085\000\000\000\000\000\085\000\085\000\000\000\085\000\085\000\ +\085\000\085\000\000\000\085\000\085\000\000\000\000\000\000\000\ +\000\000\000\000\000\000\085\000\000\000\085\000\085\000\000\000\ +\085\000\085\000\085\000\000\000\085\000\000\000\085\000\000\000\ +\000\000\085\000\085\000\000\000\085\000\000\000\085\000\085\000\ +\085\000\085\000\085\000\085\000\085\000\085\000\085\000\085\000\ +\085\000\000\000\085\000\000\000\085\000\085\000\000\000\000\000\ +\000\000\085\000\085\000\085\000\000\000\085\000\085\000\085\000\ +\085\000\056\000\085\000\000\000\085\000\085\000\000\000\000\000\ +\085\000\085\000\085\000\085\000\085\000\085\000\085\000\000\000\ +\085\000\085\000\085\000\085\000\085\000\085\000\085\000\085\000\ +\085\000\085\000\085\000\000\000\000\000\085\000\085\000\085\000\ +\085\000\085\000\085\000\085\000\085\000\085\000\085\000\085\000\ +\000\000\000\000\000\000\000\000\085\000\085\000\085\000\085\000\ +\085\000\000\000\085\000\085\000\085\000\000\000\085\000\085\000\ +\085\000\085\000\085\000\085\000\085\000\085\000\000\000\085\000\ +\085\000\085\000\085\000\000\000\085\000\000\000\085\000\085\000\ +\000\000\085\000\085\000\000\000\000\000\085\000\085\000\085\000\ +\085\000\085\000\085\000\085\000\085\000\085\000\085\000\000\000\ +\085\000\000\000\082\000\082\000\082\000\082\000\000\000\082\000\ +\000\000\082\000\000\000\000\000\000\000\082\000\082\000\000\000\ +\082\000\082\000\000\000\000\000\082\000\082\000\000\000\082\000\ +\082\000\082\000\082\000\000\000\082\000\082\000\000\000\000\000\ +\000\000\000\000\000\000\000\000\082\000\000\000\082\000\082\000\ +\000\000\082\000\082\000\082\000\000\000\082\000\000\000\082\000\ +\000\000\000\000\082\000\082\000\000\000\082\000\000\000\082\000\ +\082\000\082\000\082\000\082\000\082\000\082\000\082\000\082\000\ +\082\000\082\000\000\000\082\000\000\000\082\000\082\000\000\000\ +\000\000\000\000\082\000\082\000\082\000\000\000\082\000\082\000\ +\082\000\082\000\047\000\082\000\000\000\082\000\082\000\000\000\ +\000\000\082\000\082\000\082\000\082\000\082\000\082\000\082\000\ +\000\000\082\000\082\000\082\000\082\000\082\000\082\000\082\000\ +\082\000\082\000\082\000\082\000\000\000\000\000\082\000\082\000\ +\082\000\082\000\082\000\082\000\082\000\082\000\082\000\082\000\ +\082\000\000\000\000\000\000\000\000\000\082\000\082\000\082\000\ +\082\000\082\000\000\000\082\000\082\000\082\000\000\000\082\000\ +\082\000\082\000\082\000\082\000\082\000\082\000\082\000\000\000\ +\082\000\082\000\082\000\082\000\000\000\082\000\000\000\082\000\ +\082\000\000\000\082\000\082\000\000\000\000\000\082\000\082\000\ +\082\000\082\000\082\000\082\000\082\000\082\000\082\000\082\000\ +\000\000\082\000\056\000\056\000\056\000\056\000\000\000\056\000\ +\000\000\056\000\000\000\000\000\000\000\000\000\056\000\056\000\ +\056\000\000\000\056\000\000\000\000\000\056\000\000\000\056\000\ +\056\000\056\000\056\000\000\000\056\000\056\000\000\000\000\000\ +\000\000\000\000\000\000\000\000\056\000\000\000\056\000\056\000\ +\000\000\056\000\056\000\056\000\000\000\000\000\000\000\056\000\ +\000\000\000\000\000\000\000\000\000\000\056\000\000\000\056\000\ +\056\000\056\000\056\000\056\000\056\000\000\000\000\000\000\000\ +\000\000\000\000\000\000\056\000\000\000\056\000\056\000\000\000\ +\000\000\000\000\000\000\056\000\056\000\000\000\000\000\000\000\ +\056\000\056\000\007\000\056\000\000\000\000\000\000\000\000\000\ +\000\000\056\000\056\000\000\000\056\000\056\000\056\000\056\000\ +\000\000\056\000\056\000\056\000\056\000\056\000\056\000\056\000\ +\056\000\056\000\056\000\000\000\000\000\000\000\000\000\056\000\ +\056\000\056\000\056\000\056\000\056\000\056\000\056\000\056\000\ +\056\000\000\000\000\000\000\000\000\000\000\000\056\000\056\000\ +\056\000\000\000\000\000\056\000\056\000\000\000\000\000\056\000\ +\056\000\056\000\056\000\056\000\000\000\000\000\056\000\056\000\ +\000\000\056\000\056\000\056\000\000\000\056\000\000\000\056\000\ +\000\000\000\000\000\000\056\000\000\000\000\000\000\000\000\000\ +\000\000\000\000\000\000\056\000\056\000\000\000\056\000\056\000\ +\000\000\056\000\000\000\047\000\047\000\047\000\047\000\000\000\ +\047\000\000\000\047\000\000\000\000\000\000\000\000\000\047\000\ +\047\000\047\000\000\000\047\000\000\000\000\000\047\000\000\000\ +\047\000\047\000\047\000\047\000\000\000\047\000\047\000\000\000\ +\000\000\000\000\000\000\000\000\000\000\047\000\000\000\047\000\ +\047\000\000\000\047\000\047\000\047\000\000\000\000\000\000\000\ +\047\000\000\000\000\000\000\000\000\000\000\000\047\000\000\000\ +\047\000\047\000\047\000\047\000\047\000\047\000\000\000\000\000\ +\000\000\000\000\000\000\000\000\047\000\000\000\047\000\000\000\ +\000\000\000\000\000\000\000\000\047\000\047\000\000\000\000\000\ +\000\000\047\000\047\000\197\001\047\000\000\000\000\000\000\000\ +\000\000\000\000\047\000\047\000\000\000\047\000\047\000\047\000\ +\047\000\000\000\047\000\047\000\047\000\047\000\047\000\047\000\ +\047\000\047\000\047\000\047\000\000\000\000\000\000\000\000\000\ +\047\000\047\000\047\000\047\000\047\000\047\000\047\000\047\000\ +\047\000\047\000\000\000\000\000\000\000\000\000\000\000\047\000\ +\047\000\047\000\000\000\000\000\047\000\047\000\000\000\000\000\ +\047\000\047\000\047\000\047\000\047\000\000\000\000\000\047\000\ +\047\000\000\000\047\000\047\000\047\000\000\000\047\000\000\000\ +\047\000\000\000\000\000\000\000\047\000\000\000\000\000\000\000\ +\000\000\000\000\000\000\000\000\047\000\047\000\000\000\047\000\ +\047\000\000\000\047\000\007\000\007\000\007\000\007\000\000\000\ +\007\000\000\000\007\000\000\000\000\000\000\000\000\000\007\000\ +\007\000\007\000\000\000\007\000\000\000\000\000\007\000\000\000\ +\007\000\007\000\007\000\007\000\000\000\007\000\007\000\000\000\ +\000\000\000\000\000\000\000\000\000\000\007\000\000\000\007\000\ +\007\000\000\000\007\000\007\000\007\000\000\000\000\000\000\000\ +\007\000\000\000\000\000\000\000\000\000\000\000\007\000\000\000\ +\007\000\007\000\007\000\007\000\007\000\007\000\000\000\000\000\ +\000\000\000\000\000\000\000\000\007\000\000\000\007\000\000\000\ +\000\000\000\000\000\000\000\000\007\000\007\000\000\000\000\000\ +\000\000\007\000\007\000\196\001\007\000\000\000\000\000\000\000\ +\000\000\000\000\007\000\007\000\000\000\007\000\007\000\007\000\ +\007\000\000\000\007\000\007\000\007\000\007\000\007\000\007\000\ +\007\000\007\000\007\000\007\000\000\000\000\000\000\000\000\000\ +\007\000\007\000\007\000\007\000\007\000\007\000\007\000\007\000\ +\007\000\007\000\000\000\000\000\000\000\000\000\000\000\007\000\ +\007\000\007\000\000\000\000\000\007\000\007\000\000\000\000\000\ +\007\000\007\000\007\000\007\000\007\000\000\000\000\000\007\000\ +\007\000\000\000\007\000\007\000\007\000\000\000\007\000\000\000\ +\007\000\000\000\000\000\000\000\007\000\000\000\000\000\000\000\ +\000\000\000\000\000\000\000\000\007\000\007\000\000\000\007\000\ +\007\000\000\000\007\000\000\000\197\001\197\001\197\001\197\001\ +\000\000\197\001\000\000\197\001\000\000\000\000\000\000\000\000\ +\197\001\197\001\197\001\000\000\197\001\000\000\000\000\197\001\ +\000\000\197\001\197\001\197\001\197\001\000\000\197\001\197\001\ +\000\000\000\000\000\000\000\000\000\000\000\000\197\001\000\000\ +\197\001\197\001\000\000\197\001\197\001\197\001\000\000\000\000\ +\000\000\197\001\000\000\000\000\000\000\000\000\000\000\197\001\ +\000\000\197\001\197\001\197\001\197\001\197\001\197\001\000\000\ +\000\000\000\000\000\000\000\000\000\000\197\001\000\000\197\001\ +\000\000\000\000\000\000\000\000\000\000\197\001\197\001\000\000\ +\000\000\000\000\197\001\197\001\195\001\197\001\000\000\000\000\ +\000\000\000\000\000\000\197\001\197\001\000\000\197\001\197\001\ +\197\001\197\001\000\000\197\001\197\001\197\001\197\001\197\001\ +\197\001\197\001\197\001\197\001\000\000\000\000\000\000\000\000\ +\000\000\197\001\197\001\197\001\197\001\197\001\197\001\197\001\ +\197\001\197\001\197\001\000\000\000\000\000\000\000\000\000\000\ +\197\001\197\001\197\001\000\000\000\000\197\001\197\001\000\000\ +\000\000\197\001\197\001\197\001\197\001\197\001\000\000\000\000\ +\197\001\197\001\000\000\197\001\197\001\197\001\000\000\197\001\ +\000\000\197\001\000\000\000\000\000\000\197\001\000\000\000\000\ +\000\000\000\000\000\000\000\000\000\000\197\001\197\001\000\000\ +\197\001\197\001\000\000\197\001\196\001\196\001\196\001\196\001\ +\000\000\196\001\000\000\196\001\000\000\000\000\000\000\000\000\ +\196\001\196\001\196\001\000\000\196\001\000\000\000\000\196\001\ +\000\000\196\001\196\001\196\001\196\001\000\000\196\001\196\001\ +\000\000\000\000\000\000\000\000\000\000\000\000\196\001\000\000\ +\196\001\196\001\000\000\196\001\196\001\196\001\000\000\000\000\ +\000\000\196\001\000\000\000\000\000\000\000\000\000\000\196\001\ +\000\000\196\001\196\001\196\001\196\001\196\001\196\001\000\000\ +\000\000\000\000\000\000\000\000\000\000\196\001\000\000\196\001\ +\000\000\000\000\000\000\000\000\000\000\196\001\196\001\000\000\ +\000\000\000\000\196\001\196\001\194\001\196\001\000\000\000\000\ +\000\000\000\000\000\000\196\001\196\001\000\000\196\001\196\001\ +\196\001\196\001\000\000\196\001\196\001\196\001\196\001\196\001\ +\196\001\196\001\196\001\196\001\000\000\000\000\000\000\000\000\ +\000\000\196\001\196\001\196\001\196\001\196\001\196\001\196\001\ +\196\001\196\001\196\001\000\000\000\000\000\000\000\000\000\000\ +\196\001\196\001\196\001\000\000\000\000\196\001\196\001\000\000\ +\000\000\196\001\196\001\196\001\196\001\196\001\000\000\000\000\ +\196\001\196\001\000\000\196\001\196\001\196\001\000\000\196\001\ +\000\000\196\001\000\000\000\000\000\000\196\001\000\000\000\000\ +\000\000\000\000\000\000\000\000\000\000\196\001\196\001\000\000\ +\196\001\196\001\000\000\196\001\000\000\195\001\195\001\195\001\ +\195\001\000\000\195\001\000\000\000\000\000\000\000\000\000\000\ +\000\000\195\001\195\001\195\001\000\000\195\001\000\000\000\000\ +\195\001\000\000\195\001\195\001\195\001\195\001\000\000\195\001\ +\195\001\000\000\000\000\000\000\000\000\000\000\000\000\195\001\ +\000\000\195\001\195\001\000\000\195\001\195\001\195\001\000\000\ +\000\000\000\000\195\001\000\000\000\000\000\000\000\000\000\000\ +\195\001\000\000\195\001\195\001\195\001\195\001\195\001\195\001\ +\000\000\000\000\000\000\000\000\000\000\000\000\195\001\000\000\ +\195\001\000\000\000\000\000\000\000\000\000\000\195\001\195\001\ +\000\000\000\000\000\000\195\001\195\001\183\001\195\001\000\000\ +\000\000\000\000\000\000\000\000\195\001\195\001\000\000\195\001\ +\195\001\195\001\195\001\000\000\195\001\195\001\195\001\195\001\ +\195\001\195\001\195\001\195\001\195\001\000\000\000\000\000\000\ +\000\000\000\000\195\001\195\001\195\001\195\001\195\001\195\001\ +\195\001\195\001\195\001\195\001\000\000\000\000\000\000\000\000\ +\000\000\195\001\195\001\195\001\000\000\000\000\195\001\195\001\ +\000\000\000\000\195\001\195\001\195\001\195\001\195\001\000\000\ +\000\000\195\001\195\001\000\000\195\001\195\001\195\001\000\000\ +\195\001\000\000\195\001\000\000\000\000\000\000\195\001\000\000\ +\000\000\000\000\000\000\000\000\000\000\000\000\195\001\195\001\ +\000\000\195\001\195\001\000\000\195\001\000\000\194\001\194\001\ +\194\001\000\000\194\001\000\000\000\000\000\000\000\000\000\000\ +\000\000\194\001\194\001\194\001\000\000\194\001\000\000\000\000\ +\194\001\000\000\194\001\194\001\194\001\194\001\000\000\194\001\ +\194\001\000\000\000\000\000\000\000\000\000\000\000\000\194\001\ +\000\000\194\001\194\001\000\000\194\001\194\001\194\001\000\000\ +\000\000\000\000\194\001\000\000\000\000\000\000\000\000\000\000\ +\194\001\000\000\194\001\194\001\194\001\194\001\194\001\194\001\ +\000\000\000\000\000\000\000\000\000\000\000\000\194\001\000\000\ +\194\001\000\000\000\000\000\000\000\000\000\000\194\001\194\001\ +\000\000\000\000\000\000\194\001\194\001\193\001\194\001\000\000\ +\000\000\000\000\000\000\000\000\194\001\194\001\000\000\194\001\ +\194\001\194\001\194\001\000\000\194\001\194\001\194\001\194\001\ +\194\001\194\001\194\001\194\001\000\000\000\000\000\000\000\000\ +\000\000\000\000\194\001\194\001\194\001\194\001\194\001\194\001\ +\194\001\194\001\194\001\194\001\000\000\000\000\000\000\000\000\ +\000\000\194\001\194\001\194\001\000\000\000\000\194\001\194\001\ +\000\000\000\000\194\001\194\001\194\001\194\001\194\001\000\000\ +\000\000\194\001\194\001\000\000\194\001\194\001\194\001\000\000\ +\194\001\000\000\194\001\000\000\000\000\000\000\194\001\000\000\ +\000\000\000\000\000\000\000\000\000\000\000\000\194\001\194\001\ +\000\000\194\001\194\001\000\000\194\001\000\000\000\000\183\001\ +\183\001\183\001\000\000\183\001\000\000\000\000\000\000\000\000\ +\000\000\000\000\183\001\183\001\183\001\000\000\183\001\000\000\ +\000\000\183\001\000\000\000\000\183\001\183\001\183\001\000\000\ +\183\001\183\001\000\000\000\000\000\000\000\000\000\000\000\000\ +\183\001\000\000\183\001\183\001\000\000\183\001\183\001\183\001\ +\000\000\000\000\000\000\183\001\000\000\000\000\000\000\000\000\ +\000\000\183\001\000\000\183\001\183\001\183\001\183\001\183\001\ +\183\001\000\000\000\000\000\000\000\000\000\000\000\000\183\001\ +\000\000\183\001\000\000\000\000\000\000\000\000\000\000\183\001\ +\183\001\000\000\000\000\000\000\183\001\183\001\175\001\183\001\ +\000\000\000\000\000\000\000\000\000\000\183\001\183\001\000\000\ +\183\001\183\001\183\001\183\001\000\000\183\001\183\001\183\001\ +\183\001\183\001\183\001\183\001\183\001\000\000\000\000\000\000\ +\000\000\000\000\000\000\183\001\183\001\183\001\183\001\183\001\ +\183\001\183\001\183\001\183\001\183\001\000\000\000\000\000\000\ +\000\000\000\000\183\001\183\001\183\001\000\000\000\000\183\001\ +\183\001\000\000\000\000\183\001\183\001\183\001\183\001\183\001\ +\000\000\000\000\183\001\183\001\000\000\183\001\183\001\183\001\ +\000\000\183\001\000\000\183\001\000\000\000\000\000\000\183\001\ +\000\000\000\000\000\000\000\000\000\000\000\000\000\000\183\001\ +\183\001\000\000\183\001\183\001\000\000\183\001\000\000\193\001\ +\193\001\193\001\000\000\193\001\000\000\000\000\000\000\000\000\ +\000\000\000\000\193\001\193\001\193\001\000\000\193\001\000\000\ +\000\000\193\001\000\000\000\000\193\001\193\001\193\001\000\000\ +\193\001\193\001\000\000\000\000\000\000\000\000\000\000\000\000\ +\193\001\000\000\193\001\193\001\000\000\193\001\193\001\193\001\ +\000\000\000\000\000\000\193\001\000\000\000\000\000\000\000\000\ +\000\000\193\001\000\000\193\001\193\001\193\001\193\001\193\001\ +\193\001\000\000\000\000\000\000\000\000\000\000\000\000\193\001\ +\000\000\193\001\000\000\000\000\000\000\000\000\000\000\193\001\ +\193\001\000\000\000\000\000\000\193\001\193\001\170\001\193\001\ +\000\000\000\000\000\000\000\000\000\000\193\001\193\001\000\000\ +\193\001\193\001\193\001\193\001\000\000\193\001\193\001\193\001\ +\193\001\193\001\193\001\193\001\193\001\000\000\000\000\000\000\ +\000\000\000\000\000\000\193\001\193\001\193\001\193\001\193\001\ +\193\001\193\001\193\001\193\001\193\001\000\000\000\000\000\000\ +\000\000\000\000\193\001\193\001\193\001\000\000\000\000\193\001\ +\193\001\000\000\000\000\193\001\193\001\193\001\193\001\193\001\ +\000\000\000\000\193\001\193\001\000\000\193\001\193\001\193\001\ +\000\000\193\001\000\000\193\001\000\000\000\000\000\000\193\001\ +\000\000\000\000\000\000\000\000\000\000\000\000\000\000\193\001\ +\193\001\000\000\193\001\193\001\000\000\193\001\000\000\000\000\ +\175\001\175\001\175\001\000\000\175\001\000\000\000\000\000\000\ +\000\000\000\000\000\000\175\001\175\001\175\001\000\000\175\001\ +\000\000\000\000\175\001\000\000\000\000\175\001\175\001\175\001\ +\000\000\175\001\175\001\000\000\000\000\000\000\000\000\000\000\ +\000\000\175\001\000\000\175\001\175\001\000\000\175\001\175\001\ +\175\001\000\000\000\000\000\000\175\001\000\000\000\000\000\000\ +\000\000\000\000\175\001\000\000\175\001\175\001\175\001\175\001\ +\175\001\175\001\000\000\000\000\000\000\000\000\000\000\000\000\ +\175\001\000\000\175\001\000\000\000\000\000\000\000\000\000\000\ +\175\001\175\001\000\000\000\000\000\000\175\001\175\001\174\001\ +\175\001\000\000\000\000\000\000\000\000\000\000\000\000\175\001\ +\000\000\175\001\175\001\175\001\175\001\000\000\175\001\175\001\ +\175\001\175\001\175\001\175\001\000\000\000\000\000\000\000\000\ +\000\000\000\000\000\000\000\000\175\001\175\001\175\001\175\001\ +\175\001\175\001\175\001\175\001\175\001\175\001\000\000\000\000\ +\000\000\000\000\000\000\175\001\175\001\175\001\000\000\000\000\ +\175\001\175\001\000\000\000\000\175\001\175\001\175\001\175\001\ +\175\001\000\000\000\000\175\001\175\001\000\000\175\001\175\001\ +\175\001\000\000\175\001\000\000\175\001\000\000\000\000\000\000\ +\175\001\000\000\000\000\000\000\000\000\000\000\000\000\000\000\ +\175\001\175\001\000\000\175\001\175\001\000\000\175\001\000\000\ +\170\001\170\001\170\001\000\000\170\001\000\000\000\000\000\000\ +\000\000\000\000\000\000\170\001\170\001\170\001\000\000\170\001\ +\000\000\000\000\170\001\000\000\000\000\170\001\170\001\170\001\ +\000\000\170\001\170\001\000\000\000\000\000\000\000\000\000\000\ +\000\000\170\001\000\000\170\001\170\001\000\000\170\001\170\001\ +\170\001\000\000\000\000\000\000\170\001\000\000\000\000\000\000\ +\000\000\000\000\170\001\000\000\170\001\170\001\170\001\170\001\ +\170\001\170\001\000\000\000\000\000\000\000\000\000\000\000\000\ +\170\001\000\000\170\001\000\000\000\000\000\000\000\000\000\000\ +\170\001\170\001\000\000\000\000\000\000\170\001\170\001\168\001\ +\170\001\000\000\000\000\000\000\000\000\000\000\000\000\170\001\ +\000\000\170\001\170\001\170\001\170\001\000\000\170\001\170\001\ +\170\001\170\001\170\001\170\001\000\000\000\000\000\000\000\000\ +\000\000\000\000\000\000\000\000\170\001\170\001\170\001\170\001\ +\170\001\170\001\170\001\170\001\170\001\170\001\000\000\000\000\ +\000\000\000\000\000\000\170\001\170\001\170\001\000\000\000\000\ +\170\001\170\001\000\000\000\000\170\001\170\001\170\001\170\001\ +\170\001\000\000\000\000\170\001\170\001\000\000\170\001\170\001\ +\170\001\000\000\170\001\000\000\170\001\000\000\000\000\000\000\ +\170\001\000\000\000\000\000\000\000\000\000\000\000\000\000\000\ +\170\001\170\001\000\000\170\001\170\001\000\000\170\001\000\000\ +\000\000\174\001\174\001\174\001\000\000\174\001\000\000\000\000\ +\000\000\000\000\000\000\000\000\174\001\174\001\174\001\000\000\ +\174\001\000\000\000\000\174\001\000\000\000\000\174\001\174\001\ +\174\001\000\000\174\001\174\001\000\000\000\000\000\000\000\000\ +\000\000\000\000\174\001\000\000\174\001\174\001\000\000\174\001\ +\174\001\174\001\000\000\000\000\000\000\174\001\000\000\000\000\ +\000\000\000\000\000\000\174\001\000\000\174\001\174\001\174\001\ +\174\001\174\001\174\001\000\000\000\000\000\000\000\000\000\000\ +\000\000\174\001\000\000\174\001\000\000\000\000\000\000\000\000\ +\000\000\174\001\174\001\000\000\000\000\000\000\174\001\174\001\ +\173\001\174\001\000\000\000\000\000\000\000\000\000\000\000\000\ +\174\001\000\000\174\001\174\001\174\001\174\001\000\000\174\001\ +\174\001\174\001\174\001\174\001\174\001\000\000\000\000\000\000\ +\000\000\000\000\000\000\000\000\000\000\000\000\174\001\174\001\ +\174\001\174\001\174\001\174\001\174\001\174\001\174\001\000\000\ +\000\000\000\000\000\000\000\000\174\001\174\001\174\001\000\000\ +\000\000\174\001\174\001\000\000\000\000\174\001\174\001\174\001\ +\174\001\174\001\000\000\000\000\174\001\174\001\000\000\174\001\ +\174\001\174\001\000\000\174\001\000\000\174\001\000\000\000\000\ +\000\000\174\001\000\000\000\000\000\000\000\000\000\000\000\000\ +\000\000\174\001\174\001\000\000\174\001\174\001\000\000\174\001\ +\000\000\168\001\168\001\168\001\000\000\168\001\000\000\000\000\ +\000\000\000\000\000\000\000\000\168\001\168\001\168\001\000\000\ +\168\001\000\000\000\000\168\001\000\000\000\000\168\001\168\001\ +\168\001\000\000\168\001\168\001\000\000\000\000\000\000\000\000\ +\000\000\000\000\168\001\000\000\168\001\168\001\000\000\168\001\ +\168\001\168\001\000\000\000\000\000\000\168\001\000\000\000\000\ +\000\000\000\000\000\000\168\001\000\000\168\001\168\001\168\001\ +\168\001\168\001\168\001\000\000\000\000\000\000\000\000\000\000\ +\000\000\168\001\000\000\168\001\000\000\000\000\000\000\000\000\ +\000\000\168\001\168\001\000\000\000\000\000\000\168\001\168\001\ +\172\001\168\001\000\000\000\000\000\000\000\000\000\000\000\000\ +\168\001\000\000\168\001\168\001\168\001\168\001\000\000\168\001\ +\168\001\168\001\168\001\168\001\000\000\000\000\000\000\000\000\ +\000\000\000\000\000\000\000\000\000\000\000\000\168\001\168\001\ +\168\001\168\001\168\001\168\001\168\001\168\001\168\001\000\000\ +\000\000\000\000\000\000\000\000\168\001\168\001\168\001\000\000\ +\000\000\168\001\168\001\000\000\000\000\168\001\168\001\168\001\ +\168\001\168\001\000\000\000\000\168\001\168\001\000\000\168\001\ +\168\001\168\001\000\000\168\001\000\000\168\001\000\000\000\000\ +\000\000\168\001\000\000\000\000\000\000\000\000\000\000\000\000\ +\000\000\168\001\168\001\000\000\168\001\168\001\000\000\168\001\ +\000\000\000\000\173\001\173\001\173\001\000\000\173\001\000\000\ +\000\000\000\000\000\000\000\000\000\000\173\001\173\001\173\001\ +\000\000\173\001\000\000\000\000\173\001\000\000\000\000\173\001\ +\173\001\173\001\000\000\173\001\173\001\000\000\000\000\000\000\ +\000\000\000\000\000\000\173\001\000\000\173\001\173\001\000\000\ +\173\001\173\001\173\001\000\000\000\000\000\000\173\001\000\000\ +\000\000\000\000\000\000\000\000\173\001\000\000\173\001\173\001\ +\173\001\173\001\173\001\173\001\000\000\000\000\000\000\000\000\ +\000\000\000\000\173\001\000\000\173\001\000\000\000\000\000\000\ +\000\000\000\000\173\001\173\001\000\000\000\000\000\000\173\001\ +\173\001\171\001\173\001\000\000\000\000\000\000\000\000\000\000\ +\000\000\173\001\000\000\173\001\173\001\173\001\173\001\000\000\ +\173\001\173\001\173\001\173\001\173\001\000\000\000\000\000\000\ +\000\000\000\000\000\000\000\000\000\000\000\000\000\000\173\001\ +\173\001\173\001\173\001\173\001\173\001\173\001\173\001\173\001\ +\000\000\000\000\000\000\000\000\000\000\173\001\173\001\173\001\ +\000\000\000\000\173\001\173\001\000\000\000\000\173\001\173\001\ +\173\001\173\001\173\001\000\000\000\000\173\001\173\001\000\000\ +\173\001\173\001\173\001\000\000\173\001\000\000\173\001\000\000\ +\000\000\000\000\173\001\000\000\000\000\000\000\000\000\000\000\ +\000\000\000\000\173\001\173\001\000\000\173\001\173\001\000\000\ +\173\001\000\000\172\001\172\001\172\001\000\000\172\001\000\000\ +\000\000\000\000\000\000\000\000\000\000\172\001\172\001\172\001\ +\000\000\172\001\000\000\000\000\172\001\000\000\000\000\172\001\ +\172\001\172\001\000\000\172\001\172\001\000\000\000\000\000\000\ +\000\000\000\000\000\000\172\001\000\000\172\001\172\001\000\000\ +\000\000\172\001\172\001\000\000\000\000\000\000\172\001\000\000\ +\000\000\000\000\000\000\000\000\172\001\000\000\172\001\172\001\ +\172\001\172\001\172\001\172\001\000\000\000\000\000\000\000\000\ +\000\000\000\000\172\001\000\000\172\001\000\000\000\000\000\000\ +\000\000\000\000\172\001\172\001\000\000\000\000\000\000\172\001\ +\172\001\221\001\172\001\000\000\000\000\000\000\000\000\000\000\ +\000\000\172\001\000\000\172\001\172\001\172\001\172\001\000\000\ +\172\001\172\001\172\001\172\001\000\000\000\000\000\000\000\000\ +\000\000\000\000\000\000\000\000\000\000\000\000\000\000\172\001\ +\172\001\172\001\172\001\172\001\172\001\172\001\172\001\172\001\ +\000\000\000\000\000\000\000\000\000\000\172\001\172\001\172\001\ +\000\000\000\000\172\001\172\001\000\000\000\000\172\001\172\001\ +\172\001\172\001\172\001\000\000\000\000\172\001\172\001\000\000\ +\172\001\172\001\172\001\000\000\172\001\000\000\172\001\000\000\ +\000\000\000\000\172\001\000\000\000\000\000\000\000\000\000\000\ +\000\000\000\000\172\001\172\001\000\000\172\001\172\001\000\000\ +\172\001\000\000\000\000\171\001\171\001\171\001\000\000\171\001\ +\000\000\000\000\000\000\000\000\000\000\000\000\171\001\171\001\ +\171\001\000\000\171\001\000\000\000\000\171\001\000\000\000\000\ +\171\001\171\001\171\001\000\000\171\001\171\001\000\000\000\000\ +\000\000\000\000\000\000\000\000\171\001\000\000\171\001\171\001\ +\000\000\000\000\171\001\171\001\000\000\000\000\000\000\171\001\ +\000\000\000\000\000\000\000\000\000\000\171\001\000\000\171\001\ +\171\001\171\001\171\001\171\001\171\001\000\000\000\000\000\000\ +\000\000\000\000\000\000\171\001\000\000\171\001\000\000\000\000\ +\000\000\000\000\000\000\171\001\171\001\000\000\000\000\000\000\ +\171\001\171\001\169\001\171\001\000\000\000\000\000\000\000\000\ +\000\000\000\000\171\001\000\000\171\001\171\001\171\001\171\001\ +\000\000\171\001\171\001\171\001\000\000\000\000\000\000\000\000\ +\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\ +\171\001\171\001\171\001\171\001\171\001\171\001\171\001\171\001\ +\171\001\000\000\000\000\000\000\000\000\000\000\171\001\171\001\ +\171\001\000\000\000\000\171\001\171\001\000\000\000\000\171\001\ +\171\001\171\001\171\001\171\001\000\000\000\000\171\001\171\001\ +\000\000\171\001\171\001\171\001\000\000\171\001\000\000\171\001\ +\000\000\000\000\000\000\171\001\000\000\000\000\000\000\000\000\ +\000\000\000\000\000\000\171\001\171\001\000\000\171\001\171\001\ +\000\000\171\001\000\000\221\001\221\001\221\001\000\000\221\001\ +\000\000\000\000\000\000\000\000\000\000\000\000\221\001\221\001\ +\221\001\000\000\221\001\000\000\000\000\221\001\000\000\000\000\ +\000\000\221\001\221\001\000\000\221\001\221\001\000\000\000\000\ +\000\000\000\000\000\000\000\000\221\001\000\000\221\001\221\001\ +\000\000\000\000\221\001\221\001\000\000\000\000\000\000\221\001\ +\000\000\000\000\000\000\000\000\000\000\221\001\000\000\221\001\ +\221\001\221\001\221\001\221\001\221\001\000\000\000\000\000\000\ +\000\000\000\000\000\000\221\001\000\000\221\001\000\000\000\000\ +\000\000\000\000\000\000\221\001\221\001\000\000\000\000\000\000\ +\221\001\221\001\104\000\221\001\000\000\000\000\000\000\000\000\ +\000\000\000\000\221\001\000\000\221\001\221\001\221\001\221\001\ +\000\000\221\001\221\001\000\000\000\000\000\000\000\000\000\000\ +\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\ +\221\001\221\001\221\001\221\001\221\001\221\001\221\001\221\001\ +\221\001\000\000\000\000\000\000\000\000\000\000\221\001\221\001\ +\221\001\000\000\000\000\221\001\221\001\000\000\000\000\221\001\ +\221\001\221\001\221\001\221\001\000\000\000\000\221\001\221\001\ +\000\000\221\001\221\001\221\001\000\000\221\001\000\000\221\001\ +\000\000\000\000\000\000\221\001\000\000\000\000\000\000\000\000\ +\000\000\000\000\000\000\221\001\221\001\000\000\221\001\221\001\ +\000\000\221\001\000\000\000\000\169\001\169\001\169\001\000\000\ +\169\001\000\000\000\000\000\000\000\000\000\000\000\000\169\001\ +\169\001\169\001\000\000\169\001\000\000\000\000\169\001\000\000\ +\000\000\000\000\169\001\169\001\000\000\169\001\169\001\000\000\ +\000\000\000\000\000\000\000\000\000\000\169\001\000\000\169\001\ +\169\001\000\000\000\000\169\001\169\001\000\000\000\000\000\000\ +\169\001\000\000\000\000\000\000\000\000\000\000\169\001\000\000\ +\169\001\169\001\169\001\169\001\169\001\169\001\000\000\000\000\ +\000\000\000\000\000\000\000\000\169\001\000\000\169\001\000\000\ +\000\000\000\000\000\000\000\000\169\001\169\001\000\000\000\000\ +\000\000\169\001\169\001\148\001\169\001\000\000\000\000\000\000\ +\000\000\000\000\000\000\169\001\000\000\169\001\169\001\169\001\ +\169\001\000\000\169\001\169\001\000\000\000\000\000\000\000\000\ +\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\ +\000\000\169\001\169\001\169\001\169\001\169\001\169\001\169\001\ +\169\001\169\001\000\000\000\000\000\000\000\000\000\000\169\001\ +\169\001\169\001\000\000\000\000\169\001\169\001\000\000\000\000\ +\169\001\169\001\169\001\169\001\169\001\000\000\000\000\169\001\ +\169\001\000\000\169\001\169\001\169\001\000\000\169\001\000\000\ +\169\001\000\000\000\000\000\000\169\001\000\000\000\000\000\000\ +\000\000\000\000\000\000\000\000\169\001\169\001\000\000\169\001\ +\169\001\000\000\169\001\000\000\104\000\104\000\104\000\000\000\ +\104\000\000\000\000\000\000\000\000\000\000\000\000\000\104\000\ +\104\000\104\000\000\000\104\000\000\000\000\000\104\000\000\000\ +\000\000\000\000\000\000\104\000\000\000\104\000\104\000\000\000\ +\000\000\000\000\000\000\000\000\000\000\104\000\000\000\104\000\ +\104\000\000\000\000\000\104\000\104\000\000\000\000\000\000\000\ +\104\000\000\000\000\000\000\000\000\000\000\000\104\000\000\000\ +\104\000\104\000\104\000\104\000\104\000\104\000\000\000\000\000\ +\000\000\000\000\000\000\000\000\104\000\000\000\104\000\000\000\ +\000\000\000\000\000\000\000\000\104\000\104\000\000\000\000\000\ +\000\000\104\000\104\000\147\001\104\000\000\000\000\000\000\000\ +\000\000\000\000\000\000\104\000\000\000\104\000\104\000\104\000\ +\104\000\000\000\104\000\104\000\000\000\000\000\000\000\000\000\ +\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\ +\000\000\104\000\104\000\104\000\104\000\104\000\104\000\104\000\ +\104\000\104\000\000\000\000\000\000\000\000\000\000\000\104\000\ +\104\000\104\000\000\000\000\000\104\000\104\000\000\000\000\000\ +\104\000\104\000\104\000\104\000\104\000\000\000\000\000\104\000\ +\104\000\000\000\104\000\104\000\104\000\000\000\104\000\000\000\ +\104\000\000\000\000\000\000\000\104\000\000\000\000\000\000\000\ +\000\000\000\000\000\000\000\000\104\000\104\000\000\000\104\000\ +\104\000\000\000\104\000\000\000\000\000\148\001\148\001\148\001\ +\000\000\148\001\000\000\000\000\000\000\000\000\000\000\000\000\ +\148\001\148\001\148\001\000\000\148\001\000\000\000\000\148\001\ +\000\000\000\000\000\000\000\000\000\000\000\000\148\001\148\001\ +\000\000\000\000\000\000\000\000\000\000\000\000\148\001\000\000\ +\148\001\148\001\000\000\000\000\148\001\148\001\000\000\000\000\ +\000\000\148\001\000\000\000\000\000\000\000\000\000\000\148\001\ +\000\000\148\001\148\001\148\001\148\001\148\001\148\001\000\000\ +\000\000\000\000\000\000\000\000\000\000\148\001\000\000\148\001\ +\000\000\000\000\000\000\000\000\000\000\148\001\148\001\000\000\ +\000\000\000\000\148\001\148\001\123\001\148\001\000\000\000\000\ +\000\000\000\000\000\000\000\000\148\001\000\000\148\001\148\001\ +\148\001\148\001\000\000\148\001\148\001\000\000\000\000\000\000\ +\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\ +\000\000\000\000\148\001\148\001\148\001\148\001\148\001\148\001\ +\148\001\148\001\148\001\000\000\000\000\000\000\000\000\000\000\ +\148\001\148\001\148\001\000\000\000\000\148\001\148\001\000\000\ +\000\000\148\001\148\001\148\001\148\001\148\001\000\000\000\000\ +\148\001\148\001\000\000\148\001\148\001\148\001\000\000\148\001\ +\000\000\148\001\000\000\000\000\000\000\148\001\000\000\000\000\ +\000\000\000\000\000\000\000\000\000\000\148\001\148\001\000\000\ +\148\001\148\001\000\000\148\001\000\000\147\001\147\001\147\001\ +\000\000\147\001\000\000\000\000\000\000\000\000\000\000\000\000\ +\147\001\147\001\147\001\000\000\147\001\000\000\000\000\147\001\ +\000\000\000\000\000\000\000\000\000\000\000\000\147\001\147\001\ +\000\000\000\000\000\000\000\000\000\000\000\000\147\001\000\000\ +\147\001\147\001\000\000\000\000\147\001\147\001\000\000\000\000\ +\000\000\147\001\000\000\000\000\000\000\000\000\000\000\147\001\ +\000\000\147\001\147\001\147\001\147\001\147\001\147\001\000\000\ +\000\000\000\000\000\000\000\000\000\000\147\001\121\001\147\001\ +\000\000\000\000\000\000\000\000\000\000\147\001\147\001\000\000\ +\000\000\000\000\147\001\147\001\000\000\147\001\000\000\000\000\ +\000\000\000\000\000\000\000\000\147\001\000\000\147\001\147\001\ +\147\001\147\001\000\000\147\001\147\001\000\000\000\000\000\000\ +\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\ +\000\000\000\000\147\001\147\001\147\001\147\001\147\001\147\001\ +\147\001\147\001\147\001\000\000\000\000\000\000\000\000\000\000\ +\147\001\147\001\147\001\000\000\000\000\147\001\147\001\000\000\ +\000\000\147\001\147\001\147\001\147\001\147\001\000\000\000\000\ +\147\001\147\001\000\000\147\001\147\001\147\001\000\000\147\001\ +\000\000\147\001\000\000\000\000\000\000\147\001\000\000\000\000\ +\000\000\000\000\000\000\000\000\000\000\147\001\147\001\000\000\ +\147\001\147\001\000\000\147\001\000\000\000\000\123\001\123\001\ +\123\001\000\000\123\001\000\000\000\000\000\000\000\000\000\000\ +\000\000\123\001\000\000\123\001\000\000\123\001\000\000\000\000\ +\123\001\000\000\000\000\000\000\000\000\000\000\000\000\123\001\ +\000\000\000\000\000\000\000\000\000\000\000\000\000\000\123\001\ +\000\000\123\001\123\001\000\000\000\000\123\001\123\001\000\000\ +\000\000\000\000\123\001\000\000\000\000\000\000\000\000\000\000\ +\123\001\000\000\000\000\123\001\123\001\123\001\123\001\123\001\ +\000\000\000\000\000\000\000\000\000\000\114\001\123\001\000\000\ +\123\001\000\000\000\000\000\000\000\000\000\000\123\001\123\001\ +\000\000\000\000\000\000\123\001\123\001\000\000\123\001\000\000\ +\000\000\000\000\000\000\000\000\000\000\123\001\000\000\123\001\ +\123\001\123\001\123\001\000\000\123\001\123\001\000\000\000\000\ +\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\ +\000\000\000\000\000\000\123\001\123\001\123\001\123\001\123\001\ +\123\001\123\001\123\001\123\001\000\000\000\000\000\000\000\000\ +\000\000\000\000\123\001\123\001\000\000\000\000\123\001\123\001\ +\000\000\000\000\123\001\123\001\123\001\123\001\123\001\000\000\ +\000\000\123\001\000\000\000\000\123\001\123\001\123\001\000\000\ +\123\001\000\000\123\001\000\000\000\000\000\000\123\001\000\000\ +\121\001\121\001\121\001\000\000\121\001\000\000\123\001\123\001\ +\000\000\123\001\123\001\121\001\123\001\121\001\000\000\121\001\ +\000\000\000\000\121\001\000\000\000\000\000\000\000\000\000\000\ +\000\000\121\001\000\000\000\000\000\000\000\000\000\000\000\000\ +\000\000\121\001\000\000\121\001\121\001\000\000\000\000\121\001\ +\121\001\000\000\000\000\000\000\121\001\000\000\000\000\000\000\ +\000\000\000\000\000\000\000\000\000\000\121\001\121\001\121\001\ +\121\001\121\001\000\000\000\000\000\000\000\000\000\000\058\000\ +\121\001\000\000\121\001\000\000\000\000\000\000\000\000\000\000\ +\121\001\121\001\000\000\000\000\000\000\121\001\121\001\000\000\ +\121\001\000\000\000\000\000\000\000\000\000\000\000\000\121\001\ +\000\000\121\001\121\001\121\001\121\001\000\000\121\001\121\001\ +\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\ +\000\000\000\000\000\000\000\000\000\000\121\001\121\001\121\001\ +\121\001\121\001\121\001\121\001\121\001\121\001\000\000\000\000\ +\000\000\000\000\000\000\000\000\121\001\121\001\000\000\000\000\ +\121\001\121\001\000\000\000\000\121\001\121\001\121\001\121\001\ +\121\001\000\000\000\000\121\001\000\000\000\000\121\001\121\001\ +\121\001\000\000\121\001\000\000\121\001\000\000\000\000\000\000\ +\121\001\000\000\000\000\000\000\000\000\000\000\000\000\000\000\ +\121\001\121\001\000\000\121\001\121\001\000\000\121\001\114\001\ +\114\001\114\001\000\000\114\001\000\000\000\000\000\000\000\000\ +\000\000\000\000\114\001\000\000\114\001\000\000\000\000\000\000\ +\000\000\114\001\000\000\000\000\000\000\000\000\000\000\000\000\ +\114\001\000\000\000\000\000\000\000\000\000\000\000\000\000\000\ +\114\001\000\000\114\001\114\001\000\000\000\000\000\000\114\001\ +\000\000\000\000\000\000\114\001\000\000\000\000\000\000\000\000\ +\000\000\005\000\000\000\000\000\114\001\114\001\114\001\114\001\ +\114\001\000\000\000\000\000\000\000\000\000\000\000\000\114\001\ +\000\000\114\001\000\000\000\000\000\000\000\000\000\000\114\001\ +\114\001\000\000\000\000\000\000\114\001\114\001\000\000\114\001\ +\000\000\000\000\000\000\000\000\000\000\000\000\114\001\000\000\ +\114\001\114\001\114\001\114\001\000\000\114\001\114\001\000\000\ +\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\ +\000\000\000\000\000\000\000\000\114\001\114\001\114\001\114\001\ +\114\001\114\001\114\001\114\001\114\001\000\000\000\000\000\000\ +\000\000\000\000\000\000\114\001\114\001\000\000\000\000\114\001\ +\114\001\000\000\000\000\114\001\114\001\114\001\114\001\114\001\ +\000\000\000\000\114\001\000\000\000\000\114\001\000\000\114\001\ +\000\000\114\001\000\000\114\001\000\000\000\000\000\000\114\001\ +\000\000\058\000\058\000\058\000\000\000\058\000\000\000\114\001\ +\114\001\000\000\114\001\114\001\058\000\114\001\058\000\000\000\ +\000\000\000\000\000\000\058\000\000\000\000\000\000\000\000\000\ +\000\000\000\000\058\000\000\000\000\000\000\000\000\000\000\000\ +\000\000\000\000\058\000\000\000\058\000\058\000\000\000\000\000\ +\000\000\058\000\000\000\000\000\000\000\058\000\000\000\000\000\ +\000\000\000\000\000\000\078\000\000\000\000\000\058\000\058\000\ +\058\000\058\000\058\000\000\000\000\000\000\000\000\000\000\000\ +\000\000\058\000\000\000\058\000\000\000\000\000\000\000\000\000\ +\000\000\058\000\058\000\000\000\000\000\000\000\058\000\058\000\ +\000\000\058\000\000\000\000\000\000\000\000\000\000\000\000\000\ +\058\000\000\000\058\000\058\000\058\000\058\000\000\000\058\000\ +\058\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\ +\000\000\000\000\000\000\000\000\000\000\000\000\058\000\058\000\ +\058\000\058\000\058\000\058\000\058\000\058\000\058\000\000\000\ +\000\000\000\000\000\000\000\000\000\000\058\000\058\000\000\000\ +\000\000\058\000\058\000\000\000\000\000\058\000\058\000\058\000\ +\058\000\058\000\000\000\000\000\058\000\000\000\000\000\058\000\ +\000\000\058\000\000\000\058\000\000\000\058\000\000\000\000\000\ +\000\000\058\000\000\000\005\000\005\000\005\000\000\000\005\000\ +\000\000\058\000\058\000\000\000\058\000\058\000\005\000\058\000\ +\005\000\000\000\000\000\000\000\000\000\005\000\000\000\000\000\ +\000\000\000\000\000\000\000\000\005\000\000\000\000\000\000\000\ +\000\000\000\000\000\000\000\000\005\000\000\000\005\000\005\000\ +\000\000\000\000\000\000\005\000\000\000\000\000\000\000\005\000\ +\000\000\000\000\000\000\000\000\000\000\019\000\000\000\000\000\ +\005\000\005\000\005\000\005\000\005\000\000\000\000\000\000\000\ +\000\000\000\000\000\000\005\000\000\000\005\000\000\000\000\000\ +\000\000\000\000\000\000\005\000\005\000\000\000\000\000\000\000\ +\005\000\005\000\000\000\005\000\000\000\000\000\000\000\000\000\ +\000\000\000\000\005\000\000\000\005\000\005\000\005\000\005\000\ +\000\000\005\000\005\000\000\000\000\000\000\000\000\000\000\000\ +\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\ +\005\000\005\000\005\000\005\000\005\000\005\000\005\000\005\000\ +\005\000\000\000\000\000\000\000\000\000\000\000\000\000\005\000\ +\005\000\000\000\000\000\005\000\005\000\000\000\000\000\005\000\ +\005\000\005\000\005\000\005\000\000\000\000\000\005\000\000\000\ +\000\000\005\000\000\000\005\000\000\000\005\000\000\000\005\000\ +\000\000\000\000\000\000\005\000\000\000\078\000\078\000\078\000\ +\000\000\078\000\000\000\005\000\005\000\000\000\005\000\005\000\ +\078\000\005\000\078\000\000\000\000\000\000\000\000\000\078\000\ +\000\000\000\000\000\000\000\000\000\000\000\000\078\000\000\000\ +\000\000\000\000\000\000\000\000\000\000\000\000\078\000\000\000\ +\078\000\078\000\000\000\000\000\000\000\078\000\000\000\000\000\ +\000\000\078\000\000\000\000\000\000\000\000\000\000\000\017\000\ +\000\000\000\000\078\000\078\000\078\000\078\000\078\000\000\000\ +\000\000\000\000\000\000\000\000\000\000\078\000\000\000\078\000\ +\000\000\000\000\000\000\000\000\000\000\078\000\078\000\000\000\ +\000\000\000\000\078\000\078\000\000\000\078\000\000\000\000\000\ +\000\000\000\000\000\000\000\000\078\000\000\000\078\000\078\000\ +\078\000\078\000\000\000\078\000\078\000\000\000\000\000\000\000\ +\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\ +\000\000\000\000\078\000\078\000\078\000\078\000\078\000\078\000\ +\078\000\078\000\078\000\000\000\000\000\000\000\000\000\000\000\ +\000\000\078\000\078\000\000\000\000\000\078\000\078\000\000\000\ +\000\000\078\000\078\000\078\000\078\000\078\000\000\000\000\000\ +\078\000\000\000\000\000\078\000\000\000\078\000\000\000\078\000\ +\000\000\078\000\000\000\000\000\000\000\078\000\000\000\019\000\ +\019\000\019\000\000\000\019\000\000\000\078\000\078\000\000\000\ +\078\000\078\000\019\000\078\000\019\000\000\000\000\000\000\000\ +\000\000\019\000\000\000\000\000\000\000\000\000\000\000\000\000\ +\019\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\ +\019\000\000\000\019\000\019\000\000\000\000\000\000\000\019\000\ +\000\000\000\000\000\000\019\000\000\000\000\000\000\000\000\000\ +\000\000\068\002\000\000\000\000\019\000\019\000\019\000\019\000\ +\019\000\000\000\000\000\000\000\000\000\000\000\000\000\019\000\ +\000\000\019\000\000\000\000\000\000\000\000\000\000\000\019\000\ +\019\000\000\000\000\000\000\000\019\000\019\000\000\000\019\000\ +\000\000\000\000\000\000\000\000\000\000\000\000\019\000\000\000\ +\019\000\019\000\019\000\019\000\000\000\019\000\019\000\000\000\ +\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\ +\000\000\000\000\000\000\000\000\019\000\019\000\019\000\019\000\ +\019\000\019\000\019\000\019\000\019\000\000\000\000\000\000\000\ +\000\000\000\000\000\000\019\000\019\000\000\000\000\000\019\000\ +\019\000\000\000\000\000\019\000\019\000\019\000\019\000\019\000\ +\000\000\000\000\019\000\000\000\000\000\019\000\000\000\019\000\ +\000\000\019\000\000\000\019\000\000\000\000\000\000\000\019\000\ +\000\000\017\000\017\000\017\000\000\000\017\000\000\000\019\000\ +\019\000\000\000\019\000\019\000\017\000\019\000\017\000\000\000\ +\000\000\000\000\000\000\017\000\000\000\000\000\000\000\000\000\ +\000\000\000\000\017\000\000\000\000\000\000\000\000\000\000\000\ +\000\000\000\000\017\000\000\000\017\000\017\000\000\000\000\000\ +\000\000\017\000\000\000\000\000\000\000\017\000\086\001\000\000\ +\000\000\000\000\000\000\000\000\000\000\000\000\017\000\017\000\ +\017\000\017\000\017\000\000\000\000\000\000\000\000\000\000\000\ +\000\000\017\000\000\000\017\000\000\000\000\000\000\000\000\000\ +\000\000\017\000\017\000\000\000\000\000\000\000\017\000\017\000\ +\000\000\017\000\000\000\000\000\000\000\000\000\000\000\000\000\ +\017\000\000\000\017\000\017\000\017\000\017\000\000\000\017\000\ +\017\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\ +\000\000\000\000\000\000\000\000\000\000\000\000\017\000\017\000\ +\017\000\017\000\017\000\017\000\017\000\017\000\017\000\000\000\ +\000\000\000\000\000\000\000\000\000\000\017\000\017\000\000\000\ +\000\000\017\000\017\000\000\000\000\000\017\000\017\000\017\000\ +\017\000\017\000\000\000\000\000\017\000\000\000\000\000\017\000\ +\000\000\017\000\000\000\017\000\000\000\017\000\000\000\000\000\ +\000\000\017\000\000\000\068\002\068\002\068\002\000\000\068\002\ +\000\000\017\000\017\000\000\000\017\000\017\000\068\002\017\000\ +\068\002\000\000\000\000\000\000\000\000\068\002\000\000\000\000\ +\000\000\000\000\000\000\000\000\068\002\000\000\000\000\000\000\ +\000\000\000\000\000\000\000\000\068\002\000\000\068\002\068\002\ +\000\000\000\000\000\000\068\002\000\000\000\000\000\000\068\002\ +\080\001\000\000\000\000\000\000\000\000\000\000\000\000\000\000\ +\068\002\068\002\068\002\068\002\068\002\000\000\000\000\000\000\ +\000\000\000\000\000\000\068\002\000\000\068\002\000\000\000\000\ +\000\000\000\000\000\000\068\002\068\002\000\000\000\000\000\000\ +\068\002\068\002\000\000\068\002\000\000\000\000\000\000\000\000\ +\000\000\000\000\068\002\000\000\068\002\068\002\068\002\068\002\ +\000\000\068\002\068\002\000\000\000\000\000\000\000\000\000\000\ +\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\ +\068\002\068\002\068\002\068\002\068\002\068\002\068\002\068\002\ +\068\002\000\000\000\000\000\000\000\000\000\000\000\000\068\002\ +\068\002\000\000\000\000\068\002\068\002\000\000\000\000\068\002\ +\068\002\068\002\068\002\068\002\000\000\000\000\068\002\000\000\ +\000\000\068\002\000\000\068\002\000\000\068\002\000\000\068\002\ +\086\001\086\001\086\001\068\002\086\001\000\000\000\000\000\000\ +\000\000\000\000\000\000\068\002\068\002\086\001\068\002\068\002\ +\000\000\068\002\086\001\000\000\000\000\000\000\000\000\000\000\ +\000\000\086\001\000\000\000\000\000\000\000\000\000\000\000\000\ +\000\000\086\001\000\000\086\001\086\001\000\000\000\000\000\000\ +\086\001\000\000\000\000\000\000\086\001\081\001\000\000\000\000\ +\000\000\000\000\000\000\000\000\000\000\086\001\086\001\086\001\ +\086\001\086\001\000\000\000\000\000\000\000\000\000\000\000\000\ +\086\001\000\000\086\001\000\000\000\000\000\000\000\000\000\000\ +\086\001\086\001\000\000\000\000\000\000\086\001\086\001\000\000\ +\086\001\000\000\000\000\000\000\000\000\000\000\000\000\086\001\ +\000\000\086\001\086\001\086\001\086\001\000\000\086\001\086\001\ +\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\ +\000\000\000\000\000\000\000\000\000\000\086\001\086\001\086\001\ +\086\001\086\001\086\001\086\001\086\001\086\001\000\000\000\000\ +\000\000\000\000\000\000\000\000\086\001\086\001\000\000\000\000\ +\086\001\086\001\000\000\000\000\086\001\086\001\086\001\086\001\ +\086\001\000\000\000\000\086\001\000\000\000\000\086\001\000\000\ +\086\001\000\000\086\001\000\000\086\001\000\000\000\000\000\000\ +\086\001\000\000\080\001\080\001\080\001\000\000\080\001\000\000\ +\086\001\086\001\000\000\086\001\086\001\000\000\086\001\080\001\ +\000\000\000\000\000\000\000\000\080\001\000\000\000\000\000\000\ +\000\000\000\000\000\000\080\001\000\000\000\000\000\000\000\000\ +\000\000\000\000\000\000\080\001\000\000\080\001\080\001\000\000\ +\000\000\000\000\080\001\000\000\000\000\000\000\080\001\079\001\ +\000\000\000\000\000\000\000\000\000\000\000\000\000\000\080\001\ +\080\001\080\001\080\001\080\001\000\000\000\000\000\000\000\000\ +\000\000\000\000\080\001\000\000\080\001\000\000\000\000\000\000\ +\000\000\000\000\080\001\080\001\000\000\000\000\000\000\080\001\ +\080\001\000\000\080\001\000\000\000\000\000\000\000\000\000\000\ +\000\000\080\001\000\000\080\001\080\001\080\001\080\001\000\000\ +\080\001\080\001\000\000\000\000\000\000\000\000\000\000\000\000\ +\000\000\000\000\000\000\000\000\000\000\000\000\000\000\080\001\ +\080\001\080\001\080\001\080\001\080\001\080\001\080\001\080\001\ +\000\000\000\000\000\000\000\000\000\000\000\000\080\001\080\001\ +\000\000\000\000\080\001\080\001\000\000\000\000\080\001\080\001\ +\080\001\080\001\080\001\000\000\000\000\080\001\000\000\000\000\ +\080\001\000\000\080\001\000\000\080\001\000\000\080\001\081\001\ +\081\001\081\001\080\001\081\001\000\000\000\000\000\000\000\000\ +\000\000\000\000\080\001\080\001\081\001\080\001\080\001\000\000\ +\080\001\081\001\000\000\000\000\000\000\000\000\000\000\000\000\ +\081\001\000\000\000\000\000\000\000\000\000\000\000\000\000\000\ +\081\001\000\000\081\001\081\001\000\000\000\000\000\000\081\001\ +\000\000\000\000\000\000\081\001\000\000\000\000\000\000\000\000\ +\000\000\060\001\000\000\000\000\081\001\081\001\081\001\081\001\ +\081\001\000\000\000\000\000\000\000\000\000\000\000\000\081\001\ +\000\000\081\001\000\000\000\000\000\000\000\000\000\000\081\001\ +\081\001\000\000\000\000\000\000\081\001\081\001\000\000\081\001\ +\000\000\000\000\000\000\000\000\000\000\000\000\081\001\000\000\ +\081\001\081\001\081\001\081\001\000\000\081\001\081\001\000\000\ +\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\ +\000\000\000\000\000\000\000\000\081\001\081\001\081\001\081\001\ +\081\001\081\001\081\001\081\001\081\001\000\000\000\000\000\000\ +\000\000\000\000\000\000\081\001\081\001\000\000\000\000\081\001\ +\081\001\000\000\000\000\081\001\081\001\081\001\081\001\081\001\ +\000\000\000\000\081\001\000\000\000\000\081\001\000\000\081\001\ +\000\000\081\001\000\000\081\001\000\000\000\000\000\000\081\001\ +\000\000\079\001\079\001\079\001\000\000\079\001\000\000\081\001\ +\081\001\000\000\081\001\081\001\079\001\081\001\079\001\000\000\ +\000\000\000\000\000\000\079\001\000\000\000\000\000\000\000\000\ +\000\000\000\000\079\001\000\000\000\000\000\000\000\000\000\000\ +\000\000\000\000\079\001\000\000\000\000\079\001\000\000\000\000\ +\000\000\079\001\000\000\000\000\000\000\079\001\000\000\222\001\ +\000\000\000\000\000\000\000\000\000\000\000\000\079\001\079\001\ +\079\001\079\001\079\001\000\000\000\000\000\000\000\000\000\000\ +\000\000\079\001\000\000\079\001\000\000\000\000\000\000\000\000\ +\000\000\079\001\079\001\000\000\000\000\000\000\079\001\079\001\ +\000\000\079\001\000\000\000\000\000\000\000\000\000\000\000\000\ +\079\001\000\000\079\001\079\001\079\001\079\001\000\000\079\001\ +\079\001\000\000\000\000\000\000\000\000\000\000\000\000\000\000\ +\000\000\000\000\000\000\000\000\000\000\000\000\079\001\079\001\ +\079\001\079\001\079\001\079\001\079\001\079\001\079\001\000\000\ +\000\000\000\000\000\000\000\000\000\000\079\001\079\001\000\000\ +\000\000\079\001\079\001\000\000\000\000\079\001\079\001\079\001\ +\079\001\079\001\000\000\000\000\079\001\000\000\000\000\079\001\ +\000\000\079\001\000\000\079\001\000\000\079\001\000\000\000\000\ +\000\000\079\001\000\000\060\001\060\001\060\001\000\000\060\001\ +\000\000\079\001\079\001\000\000\079\001\079\001\060\001\079\001\ +\060\001\000\000\000\000\000\000\000\000\060\001\000\000\000\000\ +\000\000\000\000\000\000\139\001\060\001\000\000\000\000\000\000\ +\000\000\000\000\000\000\000\000\060\001\000\000\060\001\060\001\ +\000\000\000\000\000\000\060\001\000\000\000\000\000\000\060\001\ +\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\ +\060\001\060\001\060\001\060\001\060\001\000\000\000\000\000\000\ +\000\000\000\000\000\000\060\001\000\000\060\001\000\000\000\000\ +\000\000\000\000\000\000\060\001\060\001\000\000\000\000\000\000\ +\060\001\060\001\000\000\060\001\000\000\000\000\000\000\000\000\ +\000\000\000\000\060\001\000\000\060\001\060\001\060\001\060\001\ +\000\000\060\001\060\001\000\000\000\000\000\000\000\000\000\000\ +\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\ +\060\001\060\001\060\001\060\001\060\001\060\001\060\001\060\001\ +\060\001\000\000\000\000\000\000\000\000\000\000\000\000\060\001\ +\060\001\000\000\000\000\060\001\060\001\000\000\000\000\060\001\ +\060\001\060\001\000\000\000\000\000\000\000\000\060\001\000\000\ +\000\000\060\001\000\000\060\001\000\000\060\001\000\000\060\001\ +\000\000\222\001\222\001\060\001\000\000\222\001\000\000\000\000\ +\000\000\000\000\000\000\060\001\060\001\222\001\060\001\060\001\ +\222\001\060\001\000\000\222\001\000\000\000\000\000\000\000\000\ +\053\000\000\000\222\001\000\000\000\000\000\000\000\000\000\000\ +\000\000\000\000\222\001\000\000\000\000\000\000\000\000\222\001\ +\000\000\222\001\000\000\000\000\000\000\222\001\000\000\000\000\ +\000\000\000\000\000\000\000\000\000\000\000\000\222\001\222\001\ +\222\001\222\001\222\001\000\000\000\000\000\000\000\000\000\000\ +\000\000\222\001\000\000\222\001\000\000\000\000\000\000\000\000\ +\000\000\222\001\222\001\000\000\000\000\000\000\000\000\222\001\ +\000\000\222\001\000\000\000\000\000\000\000\000\000\000\000\000\ +\222\001\000\000\222\001\222\001\222\001\222\001\000\000\222\001\ +\222\001\000\000\000\000\000\000\000\000\000\000\000\000\000\000\ +\000\000\000\000\000\000\000\000\000\000\000\000\222\001\222\001\ +\222\001\222\001\222\001\222\001\222\001\222\001\222\001\000\000\ +\000\000\000\000\000\000\000\000\222\001\222\001\222\001\000\000\ +\000\000\222\001\222\001\000\000\000\000\139\001\139\001\000\000\ +\000\000\139\001\000\000\000\000\222\001\000\000\000\000\000\000\ +\000\000\222\001\000\000\000\000\139\001\222\001\000\000\139\001\ +\000\000\222\001\000\000\000\000\000\000\000\000\139\001\000\000\ +\000\000\222\001\222\001\000\000\222\001\222\001\139\001\222\001\ +\000\000\000\000\000\000\139\001\000\000\139\001\000\000\000\000\ +\000\000\139\001\000\000\000\000\000\000\000\000\034\001\000\000\ +\000\000\000\000\139\001\139\001\139\001\139\001\139\001\000\000\ +\000\000\000\000\000\000\000\000\000\000\139\001\000\000\139\001\ +\000\000\000\000\000\000\000\000\000\000\139\001\139\001\000\000\ +\000\000\000\000\000\000\139\001\000\000\139\001\000\000\000\000\ +\000\000\000\000\000\000\000\000\139\001\000\000\139\001\139\001\ +\139\001\139\001\000\000\139\001\139\001\000\000\000\000\000\000\ +\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\ +\000\000\000\000\139\001\139\001\139\001\139\001\139\001\139\001\ +\139\001\139\001\139\001\000\000\000\000\000\000\000\000\000\000\ +\000\000\000\000\000\000\000\000\000\000\139\001\139\001\000\000\ +\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\ +\139\001\000\000\000\000\000\000\000\000\139\001\000\000\000\000\ +\000\000\139\001\053\000\000\000\000\000\139\001\053\000\000\000\ +\000\000\000\000\000\000\000\000\000\000\139\001\139\001\000\000\ +\139\001\139\001\000\000\139\001\053\000\053\000\000\000\000\000\ +\000\000\000\000\000\000\053\000\000\000\000\000\053\000\000\000\ +\000\000\000\000\000\000\053\000\000\000\000\000\000\000\000\000\ +\053\000\000\000\053\000\000\000\000\000\000\000\053\000\000\000\ +\000\000\000\000\000\000\000\000\053\000\000\000\000\000\000\000\ +\053\000\053\000\053\000\053\000\000\000\000\000\000\000\000\000\ +\000\000\000\000\053\000\000\000\053\000\000\000\000\000\000\000\ +\000\000\000\000\053\000\053\000\000\000\000\000\000\000\000\000\ +\053\000\000\000\053\000\000\000\000\000\000\000\000\000\000\000\ +\000\000\053\000\000\000\053\000\053\000\053\000\053\000\000\000\ +\053\000\053\000\000\000\000\000\000\000\000\000\000\000\000\000\ +\000\000\000\000\000\000\000\000\000\000\000\000\000\000\053\000\ +\053\000\053\000\053\000\053\000\053\000\053\000\053\000\053\000\ +\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\ +\000\000\000\000\053\000\053\000\000\000\000\000\000\000\000\000\ +\000\000\000\000\000\000\000\000\000\000\053\000\000\000\000\000\ +\000\000\000\000\053\000\000\000\000\000\000\000\053\000\000\000\ +\000\000\000\000\053\000\000\000\000\000\000\000\000\000\000\000\ +\000\000\034\001\053\000\053\000\034\001\053\000\053\000\000\000\ +\053\000\034\001\021\000\034\001\000\000\000\000\000\000\000\000\ +\000\000\034\001\034\001\034\001\034\001\000\000\034\001\000\000\ +\000\000\034\001\000\000\034\001\000\000\000\000\000\000\000\000\ +\000\000\034\001\000\000\000\000\000\000\000\000\034\001\000\000\ +\034\001\000\000\034\001\000\000\034\001\000\000\000\000\034\001\ +\034\001\000\000\000\000\000\000\000\000\034\001\034\001\034\001\ +\034\001\034\001\034\001\034\001\034\001\034\001\034\001\000\000\ +\034\001\000\000\034\001\034\001\034\001\000\000\000\000\034\001\ +\034\001\034\001\034\001\000\000\034\001\034\001\034\001\000\000\ +\034\001\000\000\034\001\034\001\000\000\000\000\000\000\034\001\ +\034\001\034\001\034\001\034\001\034\001\000\000\034\001\034\001\ +\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\ +\000\000\000\000\000\000\000\000\000\000\034\001\034\001\034\001\ +\034\001\034\001\034\001\034\001\034\001\034\001\000\000\000\000\ +\000\000\000\000\034\001\034\001\034\001\034\001\034\001\000\000\ +\034\001\034\001\034\001\000\000\025\000\000\000\034\001\034\001\ +\000\000\034\001\034\001\034\001\034\001\034\001\000\000\034\001\ +\034\001\000\000\000\000\000\000\034\001\034\001\053\000\034\001\ +\034\001\000\000\053\000\034\001\034\001\034\001\034\001\034\001\ +\034\001\034\001\000\000\034\001\034\001\034\001\000\000\000\000\ +\053\000\053\000\000\000\000\000\000\000\000\000\000\000\053\000\ +\000\000\000\000\000\000\000\000\000\000\000\000\000\000\053\000\ +\000\000\000\000\000\000\000\000\053\000\000\000\053\000\000\000\ +\000\000\000\000\053\000\000\000\000\000\000\000\000\000\000\000\ +\000\000\000\000\000\000\000\000\053\000\053\000\053\000\053\000\ +\000\000\000\000\000\000\000\000\000\000\000\000\053\000\000\000\ +\053\000\000\000\000\000\000\000\000\000\000\000\053\000\053\000\ +\000\000\000\000\000\000\000\000\053\000\000\000\053\000\000\000\ +\000\000\000\000\000\000\000\000\000\000\053\000\000\000\053\000\ +\053\000\053\000\053\000\000\000\053\000\053\000\000\000\000\000\ +\000\000\000\000\000\000\000\000\000\000\000\000\003\000\000\000\ +\000\000\000\000\000\000\053\000\053\000\053\000\053\000\053\000\ +\053\000\053\000\053\000\053\000\021\000\000\000\000\000\000\000\ +\021\000\000\000\000\000\000\000\000\000\000\000\053\000\053\000\ +\000\000\000\000\000\000\000\000\000\000\000\000\021\000\000\000\ +\000\000\053\000\000\000\000\000\000\000\021\000\053\000\000\000\ +\000\000\000\000\053\000\000\000\000\000\021\000\053\000\000\000\ +\000\000\000\000\021\000\000\000\021\000\000\000\053\000\053\000\ +\021\000\053\000\053\000\000\000\000\000\000\000\000\000\000\000\ +\000\000\000\000\021\000\021\000\021\000\021\000\000\000\000\000\ +\000\000\000\000\000\000\000\000\021\000\000\000\021\000\000\000\ +\000\000\000\000\000\000\000\000\021\000\021\000\000\000\000\000\ +\000\000\000\000\021\000\000\000\021\000\000\000\000\000\000\000\ +\000\000\000\000\000\000\021\000\163\000\021\000\021\000\021\000\ +\021\000\000\000\021\000\021\000\000\000\000\000\000\000\000\000\ +\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\ +\000\000\021\000\021\000\021\000\021\000\021\000\021\000\021\000\ +\021\000\021\000\000\000\000\000\000\000\000\000\025\000\000\000\ +\000\000\000\000\025\000\000\000\021\000\021\000\000\000\000\000\ +\000\000\025\000\000\000\000\000\000\000\000\000\000\000\021\000\ +\025\000\000\000\000\000\000\000\021\000\000\000\000\000\025\000\ +\021\000\000\000\000\000\000\000\021\000\000\000\000\000\025\000\ +\000\000\000\000\000\000\000\000\021\000\021\000\025\000\021\000\ +\021\000\000\000\025\000\000\000\000\000\000\000\000\000\000\000\ +\000\000\000\000\000\000\000\000\025\000\025\000\025\000\025\000\ +\000\000\000\000\000\000\000\000\000\000\000\000\025\000\000\000\ +\025\000\064\000\000\000\000\000\000\000\000\000\025\000\025\000\ +\000\000\000\000\000\000\000\000\025\000\000\000\025\000\000\000\ +\000\000\000\000\000\000\000\000\000\000\025\000\000\000\025\000\ +\025\000\025\000\025\000\000\000\025\000\025\000\000\000\000\000\ +\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\ +\000\000\000\000\000\000\025\000\025\000\025\000\025\000\025\000\ +\025\000\025\000\025\000\025\000\000\000\000\000\000\000\000\000\ +\003\000\000\000\000\000\000\000\003\000\000\000\025\000\025\000\ +\000\000\000\000\000\000\003\000\000\000\000\000\000\000\000\000\ +\000\000\025\000\003\000\000\000\000\000\000\000\025\000\000\000\ +\000\000\003\000\025\000\000\000\000\000\000\000\025\000\000\000\ +\000\000\003\000\000\000\000\000\000\000\000\000\025\000\025\000\ +\003\000\025\000\025\000\000\000\003\000\000\000\033\000\000\000\ +\000\000\000\000\000\000\000\000\000\000\000\000\003\000\003\000\ +\003\000\003\000\000\000\000\000\000\000\000\000\000\000\000\000\ +\003\000\000\000\003\000\000\000\000\000\000\000\000\000\000\000\ +\003\000\003\000\000\000\000\000\000\000\000\000\003\000\000\000\ +\003\000\000\000\000\000\000\000\000\000\000\000\000\000\003\000\ +\000\000\003\000\003\000\003\000\003\000\000\000\003\000\003\000\ +\000\000\000\000\000\000\000\000\000\000\000\000\163\000\000\000\ +\000\000\000\000\163\000\000\000\000\000\003\000\003\000\003\000\ +\003\000\003\000\003\000\003\000\003\000\003\000\000\000\000\000\ +\163\000\000\000\000\000\000\000\000\000\000\000\000\000\163\000\ +\003\000\003\000\000\000\000\000\000\000\000\000\000\000\163\000\ +\000\000\000\000\000\000\003\000\000\000\000\000\163\000\000\000\ +\003\000\000\000\163\000\001\000\003\000\000\000\000\000\000\000\ +\003\000\000\000\000\000\000\000\163\000\163\000\163\000\163\000\ +\003\000\003\000\000\000\003\000\003\000\000\000\163\000\000\000\ +\163\000\000\000\000\000\000\000\000\000\000\000\163\000\163\000\ +\000\000\000\000\000\000\000\000\163\000\000\000\163\000\000\000\ +\000\000\000\000\000\000\000\000\000\000\163\000\000\000\163\000\ +\163\000\163\000\163\000\000\000\163\000\163\000\000\000\000\000\ +\000\000\000\000\000\000\064\000\000\000\000\000\000\000\064\000\ +\000\000\000\000\000\000\163\000\163\000\163\000\163\000\163\000\ +\163\000\163\000\163\000\163\000\000\000\064\000\000\000\000\000\ +\000\000\000\000\000\000\000\000\064\000\000\000\163\000\163\000\ +\000\000\000\000\000\000\000\000\064\000\000\000\000\000\000\000\ +\000\000\163\000\000\000\064\000\000\000\000\000\163\000\064\000\ +\034\001\000\000\163\000\000\000\000\000\000\000\163\000\000\000\ +\000\000\064\000\064\000\064\000\064\000\000\000\163\000\163\000\ +\000\000\163\000\163\000\064\000\000\000\064\000\000\000\000\000\ +\000\000\000\000\000\000\064\000\064\000\000\000\000\000\000\000\ +\000\000\064\000\000\000\064\000\000\000\000\000\000\000\000\000\ +\000\000\000\000\064\000\000\000\064\000\064\000\064\000\064\000\ +\000\000\064\000\064\000\000\000\000\000\000\000\000\000\000\000\ +\000\000\000\000\000\000\000\000\033\000\000\000\000\000\000\000\ +\064\000\064\000\064\000\064\000\064\000\064\000\064\000\064\000\ +\064\000\000\000\033\000\000\000\000\000\000\000\000\000\000\000\ +\000\000\033\000\000\000\064\000\064\000\000\000\000\000\000\000\ +\000\000\033\000\000\000\000\000\000\000\000\000\064\000\000\000\ +\033\000\000\000\000\000\064\000\033\000\094\000\000\000\064\000\ +\000\000\000\000\000\000\064\000\000\000\000\000\033\000\033\000\ +\033\000\033\000\000\000\064\000\064\000\000\000\064\000\064\000\ +\033\000\000\000\033\000\000\000\000\000\000\000\000\000\000\000\ +\033\000\033\000\000\000\000\000\000\000\000\000\033\000\000\000\ +\033\000\000\000\000\000\000\000\000\000\000\000\000\000\033\000\ +\000\000\033\000\033\000\033\000\033\000\000\000\033\000\033\000\ +\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\ +\000\000\001\000\000\000\000\000\000\000\033\000\033\000\033\000\ +\033\000\033\000\033\000\033\000\033\000\033\000\000\000\001\000\ +\000\000\000\000\000\000\000\000\000\000\000\000\001\000\000\000\ +\033\000\033\000\000\000\000\000\000\000\000\000\001\000\000\000\ +\000\000\000\000\000\000\033\000\000\000\001\000\000\000\000\000\ +\033\000\001\000\092\000\000\000\033\000\000\000\000\000\000\000\ +\033\000\000\000\000\000\001\000\001\000\001\000\001\000\000\000\ +\033\000\033\000\000\000\033\000\033\000\001\000\000\000\001\000\ +\000\000\000\000\000\000\000\000\000\000\001\000\001\000\000\000\ +\000\000\000\000\000\000\001\000\000\000\001\000\000\000\000\000\ +\000\000\000\000\000\000\000\000\001\000\000\000\001\000\001\000\ +\001\000\001\000\000\000\001\000\001\000\000\000\000\000\000\000\ +\000\000\000\000\000\000\000\000\000\000\000\000\034\001\000\000\ +\000\000\000\000\001\000\001\000\001\000\001\000\001\000\001\000\ +\001\000\001\000\001\000\000\000\034\001\000\000\000\000\000\000\ +\000\000\000\000\000\000\034\001\000\000\001\000\001\000\000\000\ +\000\000\000\000\000\000\034\001\000\000\000\000\000\000\000\000\ +\001\000\000\000\034\001\000\000\000\000\001\000\034\001\000\000\ +\000\000\001\000\000\000\000\000\000\000\001\000\000\000\000\000\ +\034\001\034\001\034\001\034\001\000\000\001\000\001\000\000\000\ +\001\000\001\000\034\001\000\000\034\001\000\000\000\000\000\000\ +\000\000\000\000\034\001\034\001\000\000\000\000\000\000\000\000\ +\034\001\000\000\034\001\000\000\000\000\000\000\000\000\000\000\ +\000\000\034\001\000\000\034\001\034\001\034\001\034\001\000\000\ +\034\001\034\001\000\000\000\000\000\000\000\000\000\000\000\000\ +\000\000\000\000\000\000\094\000\000\000\000\000\000\000\034\001\ +\034\001\034\001\034\001\034\001\034\001\034\001\034\001\034\001\ +\000\000\094\000\000\000\000\000\000\000\000\000\000\000\000\000\ +\094\000\000\000\034\001\034\001\000\000\000\000\000\000\000\000\ +\094\000\000\000\000\000\000\000\000\000\034\001\000\000\094\000\ +\000\000\000\000\034\001\094\000\000\000\000\000\034\001\000\000\ +\000\000\000\000\034\001\000\000\000\000\094\000\094\000\094\000\ +\094\000\000\000\034\001\034\001\000\000\034\001\034\001\094\000\ +\000\000\094\000\000\000\000\000\000\000\000\000\000\000\094\000\ +\094\000\000\000\000\000\000\000\000\000\094\000\000\000\094\000\ +\000\000\000\000\000\000\000\000\000\000\000\000\094\000\000\000\ +\094\000\094\000\094\000\094\000\000\000\094\000\094\000\000\000\ +\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\ +\092\000\000\000\000\000\000\000\094\000\094\000\094\000\094\000\ +\094\000\094\000\094\000\094\000\094\000\000\000\092\000\000\000\ +\000\000\000\000\000\000\000\000\000\000\092\000\000\000\094\000\ +\094\000\000\000\000\000\000\000\000\000\092\000\000\000\000\000\ +\000\000\000\000\094\000\000\000\092\000\000\000\000\000\094\000\ +\092\000\000\000\000\000\094\000\000\000\000\000\000\000\094\000\ +\000\000\000\000\092\000\092\000\092\000\092\000\000\000\094\000\ +\094\000\000\000\094\000\094\000\092\000\000\000\092\000\000\000\ +\000\000\000\000\000\000\000\000\092\000\092\000\000\000\000\000\ +\000\000\000\000\092\000\000\000\092\000\000\000\000\000\000\000\ +\000\000\000\000\000\000\092\000\000\000\092\000\092\000\092\000\ +\092\000\000\000\092\000\092\000\000\000\000\000\000\000\000\000\ +\000\000\000\000\000\000\000\000\000\000\196\000\000\000\000\000\ +\000\000\092\000\092\000\092\000\092\000\092\000\092\000\092\000\ +\092\000\092\000\000\000\196\000\000\000\000\000\000\000\000\000\ +\000\000\000\000\196\000\000\000\092\000\092\000\000\000\000\000\ +\000\000\000\000\196\000\000\000\000\000\000\000\000\000\092\000\ +\000\000\196\000\000\000\000\000\092\000\196\000\000\000\000\000\ +\092\000\000\000\000\000\000\000\092\000\000\000\000\000\196\000\ +\196\000\196\000\196\000\000\000\092\000\092\000\000\000\092\000\ +\092\000\196\000\000\000\196\000\000\000\000\000\000\000\000\000\ +\000\000\196\000\196\000\000\000\000\000\000\000\000\000\196\000\ +\000\000\196\000\000\000\000\000\000\000\000\000\000\000\000\000\ +\196\000\000\000\196\000\196\000\196\000\196\000\000\000\196\000\ +\196\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\ +\000\000\000\000\000\000\000\000\000\000\000\000\196\000\196\000\ +\196\000\196\000\196\000\196\000\196\000\196\000\196\000\000\000\ +\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\ +\000\000\196\000\196\000\000\000\000\000\000\000\000\000\000\000\ +\000\000\000\000\000\000\000\000\196\000\000\000\000\000\000\000\ +\000\000\196\000\000\000\000\000\000\000\196\000\000\000\000\000\ +\000\000\196\000\000\000\000\000\000\000\000\000\000\000\000\000\ +\000\000\196\000\196\000\000\000\196\000\196\000\013\001\000\000\ +\031\000\032\000\033\000\034\000\035\000\036\000\037\000\038\000\ +\000\000\000\000\000\000\039\000\000\000\040\000\041\000\000\000\ +\000\000\014\001\015\001\000\000\016\001\042\000\000\000\017\001\ +\043\000\000\000\000\000\000\000\000\000\000\000\000\000\044\000\ +\000\000\000\000\045\000\018\001\000\000\000\000\046\000\047\000\ +\048\000\000\000\049\000\050\000\051\000\052\000\053\000\019\001\ +\054\000\020\001\000\000\000\000\000\000\000\000\000\000\055\000\ +\056\000\057\000\058\000\059\000\060\000\000\000\000\000\000\000\ +\061\000\062\000\000\000\000\000\063\000\010\000\011\000\064\000\ +\065\000\066\000\000\000\067\000\021\001\000\000\000\000\069\000\ +\070\000\071\000\072\000\073\000\000\000\074\000\000\000\000\000\ +\000\000\000\000\000\000\000\000\000\000\022\001\023\001\024\001\ +\025\001\026\001\027\001\028\001\029\001\030\001\031\001\032\001\ +\076\000\033\001\000\000\000\000\000\000\000\000\000\000\000\000\ +\000\000\000\000\000\000\000\000\000\000\077\000\000\000\078\000\ +\000\000\000\000\000\000\079\000\000\000\000\000\000\000\080\000\ +\081\000\000\000\000\000\000\000\000\000\000\000\082\000\083\000\ +\000\000\000\000\084\000\000\000\000\000\000\000\085\000\000\000\ +\034\001\000\000\087\000\088\000\089\000\000\000\000\000\000\000\ +\090\000\091\000\092\000\093\000\094\000\242\001\000\000\031\000\ +\032\000\033\000\034\000\035\000\036\000\037\000\038\000\000\000\ +\000\000\000\000\039\000\000\000\040\000\041\000\000\000\000\000\ +\014\001\015\001\000\000\016\001\042\000\000\000\017\001\043\000\ +\000\000\000\000\000\000\000\000\000\000\000\000\044\000\000\000\ +\000\000\045\000\018\001\000\000\000\000\046\000\047\000\048\000\ +\000\000\049\000\050\000\051\000\052\000\053\000\019\001\054\000\ +\020\001\000\000\000\000\000\000\000\000\000\000\055\000\056\000\ +\057\000\058\000\059\000\060\000\000\000\000\000\000\000\061\000\ +\062\000\000\000\000\000\063\000\010\000\011\000\064\000\065\000\ +\066\000\000\000\067\000\243\001\000\000\000\000\069\000\070\000\ +\071\000\072\000\073\000\000\000\074\000\000\000\000\000\000\000\ +\000\000\000\000\000\000\000\000\022\001\023\001\024\001\025\001\ +\026\001\027\001\028\001\029\001\244\001\031\001\032\001\076\000\ +\033\001\000\000\000\000\000\000\000\000\000\000\000\000\000\000\ +\000\000\000\000\000\000\000\000\077\000\000\000\078\000\000\000\ +\000\000\000\000\079\000\000\000\000\000\000\000\080\000\081\000\ +\000\000\000\000\000\000\000\000\000\000\082\000\083\000\000\000\ +\000\000\084\000\000\000\000\000\000\000\085\000\000\000\245\001\ +\000\000\087\000\088\000\089\000\000\000\000\000\000\000\090\000\ +\091\000\092\000\093\000\094\000\086\004\000\000\031\000\032\000\ +\033\000\034\000\035\000\036\000\037\000\038\000\000\000\000\000\ +\000\000\039\000\000\000\040\000\041\000\000\000\000\000\014\001\ +\015\001\000\000\016\001\042\000\000\000\017\001\043\000\000\000\ +\000\000\000\000\000\000\000\000\000\000\044\000\000\000\000\000\ +\045\000\018\001\000\000\000\000\046\000\047\000\048\000\000\000\ +\049\000\050\000\051\000\052\000\053\000\019\001\054\000\020\001\ +\000\000\000\000\000\000\000\000\000\000\055\000\056\000\057\000\ +\058\000\059\000\060\000\000\000\000\000\000\000\061\000\062\000\ +\000\000\000\000\063\000\010\000\011\000\064\000\065\000\066\000\ +\000\000\067\000\087\004\000\000\000\000\069\000\070\000\071\000\ +\072\000\073\000\000\000\074\000\000\000\000\000\000\000\000\000\ +\000\000\000\000\000\000\022\001\023\001\024\001\025\001\026\001\ +\027\001\028\001\029\001\088\004\031\001\032\001\076\000\033\001\ +\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\ +\000\000\000\000\000\000\077\000\000\000\078\000\000\000\000\000\ +\000\000\079\000\000\000\000\000\000\000\080\000\081\000\000\000\ +\000\000\000\000\000\000\000\000\082\000\083\000\000\000\000\000\ +\084\000\000\000\000\000\210\001\085\000\000\000\089\004\000\000\ +\087\000\088\000\089\000\217\000\000\000\000\000\090\000\091\000\ +\092\000\093\000\094\000\041\000\000\000\000\000\014\001\015\001\ +\000\000\016\001\000\000\000\000\017\001\043\000\000\000\000\000\ +\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\ +\018\001\000\000\000\000\000\000\047\000\000\000\000\000\000\000\ +\000\000\218\000\141\000\000\000\019\001\000\000\020\001\000\000\ +\000\000\000\000\000\000\000\000\055\000\056\000\057\000\058\000\ +\059\000\000\000\000\000\000\000\000\000\219\000\000\000\000\000\ +\000\000\221\000\000\000\000\000\064\000\000\000\222\000\000\000\ +\000\000\211\001\000\000\000\000\237\000\070\000\000\000\000\000\ +\000\000\000\000\074\000\000\000\000\000\000\000\000\000\000\000\ +\000\000\000\000\022\001\023\001\024\001\025\001\026\001\027\001\ +\028\001\029\001\212\001\031\001\032\001\000\000\033\001\000\000\ +\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\ +\000\000\000\000\000\000\000\000\078\000\000\000\000\000\000\000\ +\079\000\000\000\000\000\000\000\080\000\000\000\000\000\000\000\ +\000\000\000\000\000\000\082\000\083\000\000\000\000\000\084\000\ +\000\000\000\000\103\003\000\000\000\000\213\001\000\000\087\000\ +\000\000\089\000\217\000\000\000\000\000\090\000\091\000\092\000\ +\093\000\224\000\041\000\000\000\000\000\014\001\015\001\000\000\ +\016\001\000\000\000\000\017\001\043\000\000\000\000\000\000\000\ +\000\000\000\000\000\000\000\000\000\000\000\000\000\000\018\001\ +\000\000\000\000\000\000\047\000\000\000\000\000\000\000\000\000\ +\218\000\141\000\000\000\019\001\000\000\020\001\000\000\000\000\ +\000\000\000\000\000\000\055\000\056\000\057\000\058\000\059\000\ +\000\000\000\000\000\000\000\000\219\000\000\000\000\000\000\000\ +\221\000\000\000\000\000\064\000\000\000\222\000\000\000\000\000\ +\104\003\000\000\000\000\237\000\070\000\000\000\000\000\000\000\ +\000\000\074\000\000\000\000\000\000\000\000\000\000\000\000\000\ +\000\000\022\001\023\001\024\001\025\001\026\001\027\001\028\001\ +\029\001\105\003\031\001\032\001\000\000\033\001\000\000\000\000\ +\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\ +\000\000\000\000\000\000\078\000\000\000\000\000\000\000\079\000\ +\000\000\000\000\000\000\080\000\000\000\000\000\000\000\000\000\ +\000\000\000\000\082\000\083\000\000\000\000\000\084\000\000\000\ +\000\000\000\000\000\000\000\000\106\003\000\000\087\000\000\000\ +\089\000\000\000\000\000\000\000\090\000\091\000\092\000\093\000\ +\224\000\031\000\032\000\033\000\034\000\035\000\036\000\037\000\ +\038\000\000\000\000\000\000\000\039\000\000\000\040\000\041\000\ +\000\000\000\000\000\000\000\000\000\000\000\000\042\000\000\000\ +\000\000\043\000\000\000\000\000\000\000\000\000\000\000\000\000\ +\044\000\000\000\000\000\045\000\000\000\000\000\000\000\046\000\ +\047\000\048\000\000\000\049\000\050\000\051\000\052\000\053\000\ +\000\000\054\000\000\000\000\000\000\000\000\000\000\000\000\000\ +\055\000\056\000\057\000\058\000\059\000\060\000\000\000\000\000\ +\000\000\061\000\062\000\000\000\000\000\063\000\010\000\011\000\ +\064\000\065\000\066\000\000\000\067\000\068\000\000\000\000\000\ +\069\000\070\000\071\000\072\000\073\000\000\000\074\000\000\000\ +\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\ +\000\000\000\000\000\000\000\000\000\000\000\000\075\000\000\000\ +\000\000\076\000\000\000\000\000\000\000\000\000\000\000\000\000\ +\000\000\000\000\000\000\000\000\000\000\000\000\077\000\000\000\ +\078\000\000\000\000\000\000\000\079\000\000\000\000\000\000\000\ +\080\000\081\000\000\000\000\000\000\000\000\000\000\000\082\000\ +\083\000\000\000\000\000\084\000\000\000\000\000\000\000\085\000\ +\000\000\086\000\000\000\087\000\088\000\089\000\000\000\000\000\ +\000\000\090\000\091\000\092\000\093\000\094\000\110\001\110\001\ +\110\001\110\001\110\001\110\001\110\001\110\001\000\000\000\000\ +\000\000\110\001\000\000\110\001\110\001\000\000\000\000\000\000\ +\000\000\000\000\000\000\110\001\000\000\000\000\110\001\000\000\ +\000\000\000\000\000\000\000\000\000\000\110\001\000\000\000\000\ +\110\001\000\000\000\000\000\000\110\001\110\001\110\001\000\000\ +\110\001\110\001\110\001\110\001\110\001\000\000\110\001\000\000\ +\000\000\000\000\000\000\000\000\000\000\110\001\110\001\110\001\ +\110\001\110\001\110\001\000\000\000\000\000\000\110\001\110\001\ +\000\000\000\000\110\001\110\001\110\001\110\001\110\001\110\001\ +\000\000\110\001\110\001\000\000\000\000\110\001\110\001\110\001\ +\110\001\110\001\000\000\110\001\000\000\000\000\000\000\000\000\ +\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\ +\000\000\000\000\000\000\110\001\000\000\000\000\110\001\000\000\ +\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\ +\000\000\000\000\000\000\110\001\000\000\110\001\000\000\000\000\ +\000\000\110\001\000\000\000\000\000\000\110\001\110\001\000\000\ +\000\000\000\000\000\000\000\000\110\001\110\001\000\000\000\000\ +\110\001\000\000\000\000\000\000\110\001\000\000\110\001\000\000\ +\110\001\110\001\110\001\000\000\000\000\000\000\110\001\110\001\ +\110\001\110\001\110\001\032\001\000\000\000\000\000\000\032\001\ +\000\000\000\000\032\001\000\000\020\001\000\000\000\000\000\000\ +\000\000\000\000\000\000\000\000\000\000\032\001\032\001\032\001\ +\032\001\032\001\000\000\000\000\000\000\000\000\000\000\032\001\ +\000\000\000\000\000\000\032\001\000\000\000\000\000\000\000\000\ +\032\001\032\001\000\000\000\000\000\000\000\000\000\000\000\000\ +\000\000\000\000\000\000\032\001\032\001\032\001\032\001\032\001\ +\000\000\000\000\000\000\000\000\032\001\000\000\000\000\000\000\ +\032\001\000\000\000\000\000\000\032\001\032\001\000\000\000\000\ +\000\000\000\000\000\000\032\001\032\001\000\000\000\000\000\000\ +\000\000\032\001\000\000\000\000\000\000\000\000\000\000\000\000\ +\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\ +\000\000\032\001\000\000\000\000\032\001\000\000\000\000\000\000\ +\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\ +\000\000\000\000\000\000\032\001\000\000\032\001\000\000\032\001\ +\000\000\000\000\000\000\032\001\000\000\000\000\000\000\000\000\ +\032\001\000\000\032\001\032\001\000\000\000\000\032\001\000\000\ +\000\000\000\000\000\000\000\000\000\000\000\000\032\001\000\000\ +\032\001\000\000\000\000\032\001\032\001\032\001\032\001\032\001\ +\032\001\027\000\000\000\032\001\000\000\027\000\000\000\032\001\ +\027\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\ +\000\000\000\000\000\000\027\000\027\000\027\000\027\000\027\000\ +\000\000\000\000\000\000\000\000\000\000\038\001\000\000\000\000\ +\000\000\027\000\000\000\000\000\000\000\000\000\027\000\027\000\ +\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\ +\000\000\027\000\027\000\027\000\027\000\027\000\000\000\000\000\ +\000\000\000\000\027\000\000\000\000\000\000\000\027\000\000\000\ +\000\000\000\000\027\000\027\000\000\000\000\000\000\000\000\000\ +\000\000\027\000\027\000\000\000\000\000\000\000\000\000\027\000\ +\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\ +\000\000\000\000\000\000\000\000\000\000\000\000\000\000\027\000\ +\000\000\000\000\027\000\000\000\000\000\000\000\000\000\000\000\ +\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\ +\000\000\027\000\000\000\038\001\000\000\027\000\000\000\000\000\ +\000\000\027\000\000\000\000\000\000\000\000\000\038\001\000\000\ +\027\000\027\000\000\000\000\000\027\000\000\000\000\000\000\000\ +\000\000\000\000\000\000\000\000\027\000\000\000\027\000\000\000\ +\000\000\000\000\027\000\027\000\027\000\027\000\027\000\249\001\ +\000\000\027\000\000\000\249\001\000\000\027\000\249\001\000\000\ +\024\001\000\000\000\000\000\000\000\000\000\000\000\000\000\000\ +\000\000\000\000\249\001\249\001\249\001\249\001\000\000\000\000\ +\000\000\000\000\000\000\042\001\000\000\000\000\000\000\249\001\ +\000\000\000\000\000\000\000\000\249\001\249\001\000\000\000\000\ +\000\000\000\000\000\000\000\000\000\000\000\000\000\000\249\001\ +\249\001\249\001\249\001\249\001\000\000\000\000\000\000\000\000\ +\249\001\000\000\000\000\000\000\249\001\000\000\000\000\000\000\ +\249\001\249\001\000\000\000\000\000\000\000\000\000\000\249\001\ +\249\001\000\000\000\000\000\000\000\000\249\001\000\000\000\000\ +\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\ +\000\000\000\000\000\000\000\000\000\000\249\001\000\000\000\000\ +\249\001\000\000\000\000\000\000\000\000\000\000\000\000\000\000\ +\000\000\000\000\000\000\000\000\000\000\000\000\000\000\249\001\ +\000\000\042\001\000\000\249\001\000\000\000\000\000\000\249\001\ +\000\000\000\000\000\000\000\000\042\001\000\000\249\001\249\001\ +\000\000\000\000\249\001\000\000\000\000\000\000\000\000\000\000\ +\000\000\000\000\249\001\000\000\249\001\000\000\000\000\000\000\ +\249\001\249\001\249\001\249\001\249\001\250\001\000\000\249\001\ +\000\000\250\001\000\000\249\001\250\001\000\000\025\001\000\000\ +\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\ +\250\001\250\001\250\001\250\001\000\000\000\000\000\000\000\000\ +\000\000\043\001\000\000\000\000\000\000\250\001\000\000\000\000\ +\000\000\000\000\250\001\250\001\000\000\000\000\000\000\000\000\ +\000\000\000\000\000\000\000\000\000\000\250\001\250\001\250\001\ +\250\001\250\001\000\000\000\000\000\000\000\000\250\001\000\000\ +\000\000\000\000\250\001\000\000\000\000\000\000\250\001\250\001\ +\000\000\000\000\000\000\000\000\000\000\250\001\250\001\000\000\ +\000\000\000\000\000\000\250\001\000\000\000\000\000\000\000\000\ +\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\ +\000\000\000\000\000\000\250\001\000\000\000\000\250\001\000\000\ +\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\ +\000\000\000\000\000\000\000\000\000\000\250\001\000\000\043\001\ +\000\000\250\001\000\000\000\000\000\000\250\001\000\000\000\000\ +\000\000\000\000\043\001\000\000\250\001\250\001\000\000\000\000\ +\250\001\000\000\000\000\000\000\000\000\000\000\000\000\000\000\ +\250\001\000\000\250\001\000\000\000\000\000\000\250\001\250\001\ +\250\001\250\001\250\001\246\001\000\000\250\001\000\000\246\001\ +\000\000\250\001\246\001\000\000\021\001\000\000\000\000\000\000\ +\000\000\000\000\000\000\000\000\000\000\000\000\246\001\246\001\ +\246\001\246\001\000\000\000\000\000\000\000\000\000\000\039\001\ +\000\000\000\000\000\000\246\001\000\000\000\000\000\000\000\000\ +\246\001\246\001\000\000\000\000\000\000\000\000\000\000\000\000\ +\000\000\000\000\000\000\246\001\246\001\246\001\246\001\246\001\ +\000\000\000\000\000\000\000\000\246\001\000\000\000\000\000\000\ +\246\001\000\000\000\000\000\000\246\001\246\001\000\000\000\000\ +\000\000\000\000\000\000\246\001\246\001\000\000\000\000\000\000\ +\000\000\246\001\000\000\000\000\000\000\000\000\000\000\000\000\ +\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\ +\000\000\246\001\000\000\000\000\246\001\000\000\000\000\000\000\ +\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\ +\000\000\000\000\000\000\246\001\000\000\039\001\000\000\246\001\ +\000\000\000\000\000\000\246\001\000\000\000\000\000\000\000\000\ +\039\001\000\000\246\001\246\001\000\000\000\000\246\001\000\000\ +\000\000\000\000\000\000\000\000\000\000\000\000\246\001\000\000\ +\246\001\000\000\000\000\000\000\246\001\246\001\246\001\246\001\ +\246\001\248\001\000\000\246\001\000\000\248\001\000\000\246\001\ +\248\001\000\000\023\001\000\000\000\000\000\000\000\000\000\000\ +\000\000\000\000\000\000\000\000\248\001\248\001\248\001\248\001\ +\000\000\000\000\000\000\000\000\000\000\041\001\000\000\000\000\ +\000\000\248\001\000\000\000\000\000\000\000\000\248\001\248\001\ +\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\ +\000\000\248\001\248\001\248\001\248\001\248\001\000\000\000\000\ +\000\000\000\000\248\001\000\000\000\000\000\000\248\001\000\000\ +\000\000\000\000\248\001\248\001\000\000\000\000\000\000\000\000\ +\000\000\248\001\248\001\000\000\000\000\000\000\000\000\248\001\ +\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\ +\000\000\000\000\000\000\000\000\000\000\000\000\000\000\248\001\ +\000\000\000\000\248\001\000\000\000\000\000\000\000\000\000\000\ +\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\ +\000\000\248\001\000\000\041\001\000\000\248\001\000\000\000\000\ +\000\000\248\001\000\000\000\000\000\000\000\000\041\001\000\000\ +\248\001\248\001\000\000\000\000\248\001\000\000\000\000\000\000\ +\000\000\000\000\000\000\000\000\248\001\000\000\248\001\000\000\ +\000\000\000\000\248\001\248\001\248\001\248\001\248\001\247\001\ +\000\000\248\001\000\000\247\001\000\000\248\001\247\001\000\000\ +\022\001\000\000\000\000\000\000\000\000\000\000\000\000\000\000\ +\000\000\000\000\247\001\247\001\247\001\247\001\000\000\000\000\ +\000\000\000\000\000\000\040\001\000\000\000\000\000\000\247\001\ +\000\000\000\000\000\000\000\000\247\001\247\001\000\000\000\000\ +\000\000\000\000\000\000\000\000\000\000\000\000\000\000\247\001\ +\247\001\247\001\247\001\247\001\000\000\000\000\000\000\000\000\ +\247\001\000\000\000\000\000\000\247\001\000\000\000\000\000\000\ +\247\001\247\001\000\000\000\000\000\000\000\000\000\000\247\001\ +\247\001\000\000\000\000\000\000\000\000\247\001\000\000\000\000\ +\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\ +\000\000\000\000\000\000\000\000\000\000\247\001\000\000\000\000\ +\247\001\000\000\000\000\000\000\000\000\000\000\000\000\000\000\ +\000\000\000\000\000\000\000\000\000\000\000\000\000\000\247\001\ +\000\000\040\001\000\000\247\001\000\000\000\000\000\000\247\001\ +\000\000\000\000\000\000\000\000\040\001\000\000\247\001\247\001\ +\000\000\000\000\247\001\000\000\000\000\000\000\000\000\000\000\ +\000\000\000\000\247\001\000\000\247\001\000\000\000\000\000\000\ +\247\001\247\001\247\001\247\001\247\001\249\001\000\000\247\001\ +\000\000\249\001\000\000\247\001\249\001\000\000\000\000\000\000\ +\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\ +\249\001\249\001\249\001\249\001\000\000\000\000\000\000\000\000\ +\000\000\042\001\000\000\000\000\000\000\249\001\000\000\000\000\ +\000\000\000\000\249\001\249\001\000\000\000\000\000\000\000\000\ +\000\000\000\000\000\000\000\000\000\000\249\001\249\001\249\001\ +\249\001\249\001\000\000\000\000\000\000\000\000\249\001\000\000\ +\000\000\000\000\249\001\000\000\000\000\000\000\249\001\249\001\ +\000\000\000\000\000\000\000\000\000\000\249\001\249\001\000\000\ +\000\000\000\000\000\000\249\001\000\000\000\000\000\000\000\000\ +\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\ +\000\000\000\000\000\000\249\001\000\000\000\000\249\001\000\000\ +\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\ +\000\000\000\000\000\000\000\000\000\000\249\001\000\000\042\001\ +\000\000\249\001\000\000\000\000\000\000\249\001\000\000\000\000\ +\000\000\000\000\042\001\000\000\249\001\249\001\000\000\000\000\ +\249\001\000\000\000\000\000\000\000\000\000\000\000\000\000\000\ +\249\001\000\000\249\001\000\000\000\000\000\000\249\001\249\001\ +\249\001\249\001\249\001\250\001\000\000\249\001\000\000\250\001\ +\000\000\249\001\250\001\000\000\000\000\000\000\000\000\000\000\ +\000\000\000\000\000\000\000\000\000\000\000\000\250\001\250\001\ +\250\001\250\001\000\000\000\000\000\000\000\000\000\000\043\001\ +\000\000\000\000\000\000\250\001\000\000\000\000\000\000\000\000\ +\250\001\250\001\000\000\000\000\000\000\000\000\000\000\000\000\ +\000\000\000\000\000\000\250\001\250\001\250\001\250\001\250\001\ +\000\000\000\000\000\000\000\000\250\001\000\000\000\000\000\000\ +\250\001\000\000\000\000\000\000\250\001\250\001\000\000\000\000\ +\000\000\000\000\000\000\250\001\250\001\000\000\000\000\000\000\ +\000\000\250\001\000\000\000\000\000\000\000\000\000\000\000\000\ +\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\ +\000\000\250\001\000\000\000\000\250\001\000\000\000\000\000\000\ +\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\ +\000\000\000\000\000\000\250\001\000\000\043\001\000\000\250\001\ +\000\000\000\000\000\000\250\001\000\000\000\000\000\000\000\000\ +\043\001\000\000\250\001\250\001\000\000\000\000\250\001\000\000\ +\000\000\000\000\000\000\000\000\000\000\000\000\250\001\000\000\ +\250\001\000\000\000\000\000\000\250\001\250\001\250\001\250\001\ +\250\001\246\001\000\000\250\001\000\000\246\001\000\000\250\001\ +\246\001\000\000\000\000\000\000\000\000\000\000\000\000\000\000\ +\000\000\000\000\000\000\000\000\246\001\246\001\246\001\246\001\ +\000\000\000\000\000\000\000\000\000\000\039\001\000\000\000\000\ +\000\000\246\001\000\000\000\000\000\000\000\000\246\001\246\001\ +\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\ +\000\000\246\001\246\001\246\001\246\001\246\001\000\000\000\000\ +\000\000\000\000\246\001\000\000\000\000\000\000\246\001\000\000\ +\000\000\000\000\246\001\246\001\000\000\000\000\000\000\000\000\ +\000\000\246\001\246\001\000\000\000\000\000\000\000\000\246\001\ +\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\ +\000\000\000\000\000\000\000\000\000\000\000\000\000\000\246\001\ +\000\000\000\000\246\001\000\000\000\000\000\000\000\000\000\000\ +\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\ +\000\000\246\001\000\000\039\001\000\000\246\001\000\000\000\000\ +\000\000\246\001\000\000\000\000\000\000\000\000\039\001\000\000\ +\246\001\246\001\000\000\000\000\246\001\000\000\000\000\000\000\ +\000\000\000\000\000\000\000\000\246\001\000\000\246\001\000\000\ +\000\000\000\000\246\001\246\001\246\001\246\001\246\001\248\001\ +\000\000\246\001\000\000\248\001\000\000\246\001\248\001\000\000\ +\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\ +\000\000\000\000\248\001\248\001\248\001\248\001\000\000\000\000\ +\000\000\000\000\000\000\041\001\000\000\000\000\000\000\248\001\ +\000\000\000\000\000\000\000\000\248\001\248\001\000\000\000\000\ +\000\000\000\000\000\000\000\000\000\000\000\000\000\000\248\001\ +\248\001\248\001\248\001\248\001\000\000\000\000\000\000\000\000\ +\248\001\000\000\000\000\000\000\248\001\000\000\000\000\000\000\ +\248\001\248\001\000\000\000\000\000\000\000\000\000\000\248\001\ +\248\001\000\000\000\000\000\000\000\000\248\001\000\000\000\000\ +\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\ +\000\000\000\000\000\000\000\000\000\000\248\001\000\000\000\000\ +\248\001\000\000\000\000\000\000\000\000\000\000\000\000\000\000\ +\000\000\000\000\000\000\000\000\000\000\000\000\000\000\248\001\ +\000\000\041\001\000\000\248\001\000\000\000\000\000\000\248\001\ +\000\000\000\000\000\000\000\000\041\001\000\000\248\001\248\001\ +\000\000\000\000\248\001\000\000\000\000\000\000\000\000\000\000\ +\000\000\000\000\248\001\000\000\248\001\000\000\000\000\000\000\ +\248\001\248\001\248\001\248\001\248\001\247\001\000\000\248\001\ +\000\000\247\001\000\000\248\001\247\001\000\000\000\000\000\000\ +\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\ +\247\001\247\001\247\001\247\001\000\000\000\000\000\000\000\000\ +\000\000\040\001\000\000\000\000\000\000\247\001\000\000\000\000\ +\000\000\000\000\247\001\247\001\000\000\000\000\000\000\000\000\ +\000\000\000\000\000\000\000\000\000\000\247\001\247\001\247\001\ +\247\001\247\001\000\000\000\000\000\000\000\000\247\001\000\000\ +\000\000\000\000\247\001\000\000\000\000\000\000\247\001\247\001\ +\000\000\000\000\000\000\000\000\000\000\247\001\247\001\000\000\ +\000\000\000\000\000\000\247\001\000\000\000\000\000\000\000\000\ +\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\ +\000\000\000\000\000\000\247\001\000\000\000\000\247\001\000\000\ +\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\ +\000\000\000\000\000\000\000\000\000\000\247\001\000\000\040\001\ +\000\000\247\001\000\000\174\003\000\000\247\001\000\000\038\000\ +\000\000\000\000\040\001\039\000\247\001\247\001\041\000\000\000\ +\247\001\014\001\015\001\000\000\016\001\000\000\000\000\017\001\ +\247\001\000\000\247\001\000\000\000\000\000\000\247\001\247\001\ +\247\001\247\001\247\001\018\001\000\000\247\001\000\000\047\000\ +\000\000\247\001\000\000\000\000\000\000\141\000\000\000\019\001\ +\000\000\020\001\000\000\000\000\000\000\000\000\000\000\055\000\ +\056\000\057\000\058\000\059\000\000\000\000\000\000\000\000\000\ +\000\000\000\000\000\000\000\000\063\000\000\000\000\000\000\000\ +\065\000\066\000\000\000\000\000\000\000\000\000\000\000\142\000\ +\070\000\000\000\000\000\000\000\000\000\074\000\000\000\000\000\ +\000\000\000\000\000\000\000\000\000\000\022\001\023\001\024\001\ +\025\001\026\001\027\001\028\001\029\001\075\000\031\001\032\001\ +\076\000\033\001\000\000\000\000\000\000\000\000\000\000\000\000\ +\000\000\000\000\000\000\000\000\000\000\000\000\000\000\078\000\ +\000\000\000\000\000\000\079\000\000\000\000\000\000\000\080\000\ +\034\000\035\000\036\000\037\000\038\000\000\000\082\000\083\000\ +\039\000\000\000\084\000\041\000\000\000\000\000\000\000\000\000\ +\000\000\000\000\087\000\000\000\089\000\043\000\000\000\000\000\ +\090\000\091\000\092\000\093\000\143\000\000\000\000\000\000\000\ +\000\000\000\000\000\000\046\000\047\000\048\000\000\000\049\000\ +\000\000\051\000\052\000\000\000\000\000\000\000\000\000\000\000\ +\000\000\000\000\000\000\000\000\055\000\056\000\057\000\058\000\ +\059\000\000\000\000\000\000\000\000\000\061\000\062\000\000\000\ +\195\000\063\000\000\000\000\000\064\000\065\000\066\000\000\000\ +\000\000\000\000\000\000\000\000\069\000\070\000\000\000\000\000\ +\073\000\000\000\074\000\000\000\000\000\000\000\000\000\000\000\ +\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\ +\000\000\000\000\075\000\000\000\000\000\076\000\000\000\000\000\ +\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\ +\000\000\000\000\077\000\000\000\078\000\000\000\000\000\000\000\ +\079\000\000\000\000\000\000\000\080\000\034\000\035\000\036\000\ +\037\000\038\000\242\003\082\000\083\000\039\000\000\000\084\000\ +\041\000\000\000\000\000\000\000\000\000\086\000\000\000\087\000\ +\000\000\089\000\043\000\000\000\000\000\090\000\091\000\092\000\ +\093\000\184\000\000\000\000\000\000\000\000\000\000\000\000\000\ +\046\000\047\000\048\000\000\000\049\000\000\000\051\000\052\000\ +\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\ +\000\000\055\000\056\000\057\000\058\000\059\000\000\000\000\000\ +\000\000\000\000\243\003\062\000\000\000\000\000\063\000\000\000\ +\000\000\064\000\065\000\066\000\000\000\000\000\000\000\000\000\ +\000\000\069\000\070\000\000\000\000\000\073\000\000\000\074\000\ +\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\ +\000\000\000\000\000\000\000\000\000\000\000\000\000\000\075\000\ +\000\000\000\000\076\000\000\000\000\000\000\000\000\000\000\000\ +\000\000\000\000\000\000\000\000\000\000\000\000\000\000\077\000\ +\000\000\078\000\000\000\000\000\000\000\079\000\000\000\000\000\ +\000\000\080\000\034\000\035\000\036\000\037\000\038\000\000\000\ +\082\000\083\000\039\000\000\000\084\000\041\000\000\000\000\000\ +\000\000\000\000\086\000\000\000\087\000\000\000\089\000\043\000\ +\000\000\000\000\090\000\091\000\092\000\093\000\184\000\000\000\ +\000\000\000\000\000\000\000\000\000\000\046\000\047\000\048\000\ +\000\000\049\000\000\000\051\000\052\000\000\000\000\000\000\000\ +\000\000\000\000\000\000\000\000\000\000\000\000\055\000\056\000\ +\057\000\058\000\059\000\000\000\000\000\000\000\000\000\061\000\ +\062\000\000\000\000\000\063\000\000\000\000\000\064\000\065\000\ +\066\000\000\000\000\000\000\000\000\000\000\000\069\000\070\000\ +\000\000\000\000\073\000\000\000\074\000\000\000\000\000\000\000\ +\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\ +\000\000\000\000\000\000\000\000\075\000\000\000\000\000\076\000\ +\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\ +\000\000\000\000\000\000\000\000\077\000\000\000\078\000\000\000\ +\000\000\000\000\079\000\000\000\000\000\000\000\080\000\034\000\ +\035\000\036\000\037\000\038\000\000\000\082\000\083\000\039\000\ +\000\000\084\000\041\000\000\000\000\000\000\000\000\000\086\000\ +\000\000\087\000\000\000\089\000\043\000\000\000\000\000\090\000\ +\091\000\092\000\093\000\184\000\000\000\000\000\000\000\000\000\ +\000\000\000\000\000\000\047\000\000\000\000\000\049\000\000\000\ +\051\000\052\000\000\000\000\000\000\000\000\000\000\000\000\000\ +\000\000\000\000\000\000\055\000\056\000\057\000\058\000\059\000\ +\000\000\000\000\000\000\000\000\061\000\062\000\000\000\000\000\ +\063\000\000\000\000\000\064\000\065\000\066\000\000\000\000\000\ +\000\000\000\000\000\000\069\000\070\000\000\000\000\000\073\000\ +\000\000\074\000\000\000\000\000\000\000\000\000\000\000\000\000\ +\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\ +\000\000\075\000\000\000\000\000\076\000\000\000\000\000\000\000\ +\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\ +\000\000\077\000\000\000\078\000\000\000\000\000\000\000\079\000\ +\000\000\000\000\000\000\080\000\170\001\171\001\172\001\173\001\ +\038\000\000\000\082\000\083\000\039\000\000\000\084\000\041\000\ +\000\000\000\000\000\000\000\000\086\000\000\000\087\000\000\000\ +\089\000\043\000\000\000\000\000\090\000\091\000\092\000\093\000\ +\184\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\ +\047\000\000\000\000\000\000\000\000\000\051\000\052\000\000\000\ +\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\ +\055\000\056\000\057\000\058\000\059\000\000\000\000\000\000\000\ +\000\000\174\001\175\001\000\000\000\000\063\000\000\000\000\000\ +\064\000\065\000\066\000\000\000\000\000\000\000\000\000\000\000\ +\142\000\070\000\000\000\000\000\176\001\000\000\074\000\000\000\ +\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\ +\000\000\000\000\000\000\000\000\000\000\000\000\075\000\000\000\ +\000\000\076\000\000\000\000\000\000\000\000\000\000\000\000\000\ +\000\000\000\000\000\000\000\000\000\000\000\000\177\001\000\000\ +\078\000\000\000\000\000\000\000\079\000\000\000\000\000\000\000\ +\080\000\034\000\035\000\036\000\037\000\038\000\000\000\082\000\ +\083\000\039\000\000\000\084\000\041\000\000\000\000\000\000\000\ +\000\000\178\001\000\000\087\000\000\000\089\000\043\000\000\000\ +\000\000\090\000\091\000\092\000\093\000\184\000\000\000\000\000\ +\000\000\000\000\000\000\000\000\000\000\047\000\000\000\000\000\ +\000\000\000\000\051\000\052\000\000\000\000\000\000\000\000\000\ +\000\000\000\000\000\000\000\000\000\000\055\000\056\000\057\000\ +\058\000\059\000\000\000\000\000\000\000\000\000\061\000\062\000\ +\000\000\000\000\063\000\000\000\000\000\064\000\065\000\066\000\ +\000\000\000\000\000\000\000\000\000\000\069\000\070\000\000\000\ +\000\000\073\000\000\000\074\000\000\000\000\000\000\000\000\000\ +\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\ +\000\000\000\000\000\000\075\000\000\000\000\000\076\000\000\000\ +\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\ +\000\000\000\000\000\000\077\000\000\000\078\000\000\000\000\000\ +\000\000\079\000\000\000\000\000\000\000\080\000\170\001\171\001\ +\172\001\173\001\038\000\000\000\082\000\083\000\039\000\000\000\ +\084\000\041\000\000\000\000\000\000\000\000\000\086\000\000\000\ +\087\000\000\000\089\000\043\000\000\000\000\000\090\000\091\000\ +\092\000\093\000\184\000\000\000\000\000\000\000\000\000\000\000\ +\000\000\000\000\047\000\000\000\000\000\000\000\000\000\051\000\ +\141\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\ +\000\000\000\000\055\000\056\000\057\000\058\000\059\000\000\000\ +\000\000\000\000\000\000\174\001\175\001\000\000\000\000\063\000\ +\000\000\000\000\064\000\065\000\066\000\000\000\000\000\000\000\ +\000\000\000\000\142\000\070\000\000\000\000\000\176\001\000\000\ +\074\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\ +\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\ +\075\000\000\000\000\000\076\000\034\000\035\000\036\000\037\000\ +\038\000\000\000\000\000\000\000\039\000\000\000\000\000\041\000\ +\177\001\000\000\078\000\000\000\000\000\000\000\079\000\000\000\ +\000\000\000\000\080\000\000\000\000\000\000\000\000\000\000\000\ +\000\000\082\000\083\000\000\000\000\000\084\000\000\000\198\000\ +\047\000\199\000\000\000\178\001\000\000\087\000\052\000\089\000\ +\000\000\000\000\000\000\090\000\091\000\092\000\093\000\143\000\ +\055\000\056\000\057\000\058\000\059\000\000\000\000\000\000\000\ +\000\000\061\000\000\000\000\000\000\000\063\000\000\000\000\000\ +\000\000\065\000\066\000\000\000\000\000\000\000\000\000\000\000\ +\142\000\070\000\000\000\000\000\073\000\000\000\074\000\000\000\ +\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\ +\000\000\000\000\000\000\000\000\000\000\000\000\075\000\000\000\ +\000\000\076\000\034\000\035\000\036\000\037\000\038\000\000\000\ +\000\000\000\000\039\000\000\000\000\000\041\000\077\000\000\000\ +\078\000\000\000\000\000\000\000\079\000\000\000\000\000\000\000\ +\080\000\000\000\000\000\000\000\000\000\000\000\000\000\082\000\ +\083\000\000\000\000\000\084\000\000\000\248\000\047\000\249\000\ +\000\000\086\000\000\000\087\000\052\000\089\000\000\000\000\000\ +\000\000\090\000\091\000\092\000\093\000\184\000\055\000\056\000\ +\057\000\058\000\059\000\000\000\000\000\000\000\000\000\061\000\ +\000\000\000\000\000\000\063\000\000\000\000\000\000\000\065\000\ +\066\000\000\000\000\000\000\000\000\000\000\000\142\000\070\000\ +\000\000\000\000\073\000\000\000\074\000\000\000\000\000\000\000\ +\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\ +\000\000\000\000\000\000\000\000\075\000\000\000\000\000\076\000\ +\034\000\035\000\036\000\037\000\038\000\000\000\000\000\000\000\ +\039\000\000\000\000\000\041\000\077\000\000\000\078\000\000\000\ +\000\000\000\000\079\000\000\000\000\000\000\000\080\000\000\000\ +\000\000\000\000\000\000\000\000\000\000\082\000\083\000\000\000\ +\000\000\084\000\000\000\000\000\047\000\000\000\000\000\086\000\ +\000\000\087\000\052\000\089\000\000\000\000\000\000\000\090\000\ +\091\000\092\000\093\000\184\000\055\000\056\000\057\000\058\000\ +\059\000\000\000\000\000\000\000\000\000\061\000\000\000\000\000\ +\000\000\063\000\000\000\000\000\064\000\065\000\066\000\000\000\ +\000\000\000\000\000\000\000\000\142\000\070\000\000\000\000\000\ +\073\000\000\000\074\000\000\000\000\000\000\000\000\000\000\000\ +\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\ +\000\000\000\000\075\000\000\000\000\000\076\000\170\001\171\001\ +\172\001\173\001\038\000\000\000\000\000\000\000\039\000\000\000\ +\000\000\041\000\077\000\000\000\078\000\000\000\000\000\000\000\ +\079\000\000\000\000\000\000\000\080\000\000\000\000\000\000\000\ +\000\000\000\000\000\000\082\000\083\000\000\000\000\000\084\000\ +\000\000\000\000\047\000\000\000\000\000\086\000\000\000\087\000\ +\141\000\089\000\000\000\000\000\000\000\090\000\091\000\092\000\ +\093\000\184\000\055\000\056\000\057\000\058\000\059\000\000\000\ +\000\000\000\000\000\000\174\001\000\000\000\000\000\000\063\000\ +\000\000\000\000\064\000\065\000\066\000\000\000\000\000\000\000\ +\000\000\000\000\142\000\070\000\000\000\000\000\176\001\000\000\ +\074\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\ +\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\ +\075\000\000\000\000\000\076\000\034\000\035\000\036\000\037\000\ +\038\000\000\000\000\000\000\000\039\000\000\000\000\000\041\000\ +\177\001\000\000\078\000\000\000\000\000\000\000\079\000\000\000\ +\000\000\000\000\080\000\000\000\000\000\000\000\000\000\000\000\ +\000\000\082\000\083\000\000\000\000\000\084\000\000\000\000\000\ +\047\000\000\000\000\000\178\001\000\000\087\000\052\000\089\000\ +\000\000\000\000\000\000\090\000\091\000\092\000\093\000\143\000\ +\055\000\056\000\057\000\058\000\059\000\000\000\000\000\000\000\ +\000\000\061\000\000\000\000\000\000\000\063\000\000\000\000\000\ +\000\000\065\000\066\000\000\000\000\000\000\000\000\000\000\000\ +\142\000\070\000\000\000\000\000\073\000\000\000\074\000\000\000\ +\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\ +\000\000\000\000\000\000\000\000\000\000\000\000\075\000\000\000\ +\000\000\076\000\170\001\171\001\172\001\173\001\038\000\000\000\ +\000\000\000\000\039\000\000\000\000\000\041\000\077\000\000\000\ +\078\000\000\000\000\000\000\000\079\000\000\000\000\000\000\000\ +\080\000\000\000\000\000\000\000\000\000\000\000\000\000\082\000\ +\083\000\000\000\000\000\084\000\000\000\000\000\047\000\000\000\ +\000\000\086\000\000\000\087\000\141\000\089\000\000\000\000\000\ +\000\000\090\000\091\000\092\000\093\000\184\000\055\000\056\000\ +\057\000\058\000\059\000\000\000\000\000\000\000\000\000\174\001\ +\000\000\000\000\000\000\063\000\000\000\000\000\000\000\065\000\ +\066\000\000\000\000\000\000\000\000\000\000\000\142\000\070\000\ +\000\000\000\000\176\001\000\000\074\000\000\000\000\000\000\000\ +\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\ +\000\000\000\000\000\000\000\000\075\000\000\000\000\000\076\000\ +\034\000\035\000\036\000\037\000\038\000\000\000\000\000\000\000\ +\039\000\000\000\000\000\041\000\177\001\000\000\078\000\000\000\ +\000\000\000\000\079\000\000\000\000\000\000\000\080\000\000\000\ +\000\000\000\000\000\000\000\000\000\000\082\000\083\000\000\000\ +\000\000\084\000\000\000\000\000\047\000\000\000\000\000\178\001\ +\000\000\087\000\052\000\089\000\000\000\000\000\000\000\090\000\ +\091\000\092\000\093\000\143\000\055\000\056\000\057\000\058\000\ +\059\000\000\000\000\000\000\000\000\000\050\004\000\000\000\000\ +\000\000\063\000\000\000\000\000\000\000\065\000\066\000\000\000\ +\000\000\000\000\000\000\000\000\142\000\070\000\000\000\000\000\ +\073\000\000\000\074\000\000\000\000\000\000\000\000\000\000\000\ +\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\ +\000\000\000\000\075\000\000\000\000\000\076\000\217\000\217\000\ +\217\000\217\000\217\000\000\000\000\000\000\000\217\000\000\000\ +\000\000\217\000\077\000\000\000\078\000\000\000\000\000\000\000\ +\079\000\000\000\000\000\000\000\080\000\000\000\000\000\000\000\ +\000\000\000\000\000\000\082\000\083\000\000\000\000\000\084\000\ +\000\000\000\000\217\000\000\000\000\000\086\000\000\000\087\000\ +\217\000\089\000\000\000\000\000\000\000\090\000\091\000\092\000\ +\093\000\184\000\217\000\217\000\217\000\217\000\217\000\000\000\ +\000\000\000\000\000\000\217\000\000\000\000\000\000\000\000\000\ +\000\000\000\000\217\000\217\000\217\000\000\000\000\000\000\000\ +\000\000\000\000\217\000\217\000\000\000\000\000\217\000\000\000\ +\217\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\ +\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\ +\217\000\000\000\000\000\217\000\000\000\000\000\000\000\000\000\ +\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\ +\217\000\000\000\217\000\000\000\000\000\000\000\217\000\000\000\ +\038\000\000\000\217\000\000\000\039\000\000\000\000\000\041\000\ +\000\000\217\000\217\000\000\000\000\000\217\000\000\000\000\000\ +\000\000\000\000\000\000\217\000\000\000\217\000\000\000\217\000\ +\000\000\000\000\000\000\217\000\217\000\217\000\217\000\217\000\ +\047\000\000\000\000\000\000\000\000\000\096\001\141\000\000\000\ +\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\ +\055\000\056\000\057\000\058\000\059\000\000\000\000\000\000\000\ +\000\000\097\001\000\000\000\000\000\000\063\000\000\000\000\000\ +\000\000\065\000\066\000\000\000\000\000\000\000\000\000\000\000\ +\142\000\070\000\000\000\000\000\000\000\000\000\074\000\000\000\ +\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\ +\000\000\000\000\000\000\000\000\000\000\000\000\075\000\000\000\ +\000\000\076\000\000\000\000\000\000\000\000\000\000\000\000\000\ +\000\000\000\000\038\000\000\000\000\000\000\000\039\000\000\000\ +\078\000\041\000\000\000\000\000\079\000\000\000\000\000\000\000\ +\080\000\000\000\000\000\000\000\000\000\000\000\000\000\082\000\ +\083\000\000\000\000\000\084\000\000\000\000\000\000\000\000\000\ +\000\000\000\000\047\000\087\000\000\000\089\000\000\000\157\002\ +\141\000\090\000\091\000\092\000\093\000\143\000\000\000\000\000\ +\098\001\000\000\055\000\056\000\057\000\058\000\059\000\000\000\ +\000\000\000\000\000\000\000\000\000\000\000\000\000\000\063\000\ +\000\000\000\000\000\000\065\000\066\000\000\000\000\000\000\000\ +\000\000\000\000\142\000\070\000\000\000\000\000\000\000\000\000\ +\074\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\ +\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\ +\075\000\000\000\000\000\076\000\000\000\000\000\000\000\000\000\ +\000\000\000\000\000\000\037\000\038\000\000\000\000\000\000\000\ +\039\000\000\000\078\000\041\000\000\000\000\000\079\000\000\000\ +\000\000\000\000\080\000\000\000\000\000\043\000\000\000\000\000\ +\000\000\082\000\083\000\000\000\000\000\084\000\000\000\000\000\ +\000\000\000\000\000\000\000\000\047\000\087\000\000\000\089\000\ +\000\000\051\000\052\000\090\000\091\000\092\000\093\000\143\000\ +\000\000\000\000\098\001\000\000\055\000\056\000\057\000\058\000\ +\059\000\000\000\000\000\000\000\000\000\061\000\222\002\000\000\ +\000\000\063\000\000\000\000\000\064\000\065\000\066\000\000\000\ +\000\000\000\000\000\000\000\000\223\002\070\000\000\000\000\000\ +\000\000\000\000\074\000\000\000\000\000\000\000\000\000\000\000\ +\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\ +\000\000\000\000\075\000\000\000\000\000\076\000\000\000\000\000\ +\000\000\037\000\038\000\000\000\000\000\000\000\039\000\000\000\ +\000\000\041\000\000\000\000\000\078\000\000\000\000\000\000\000\ +\079\000\000\000\000\000\000\000\080\000\000\000\000\000\000\000\ +\000\000\000\000\000\000\082\000\083\000\000\000\000\000\084\000\ +\000\000\000\000\047\000\000\000\000\000\086\000\000\000\087\000\ +\052\000\089\000\000\000\000\000\000\000\090\000\091\000\092\000\ +\093\000\184\000\055\000\056\000\057\000\058\000\059\000\000\000\ +\000\000\000\000\000\000\061\000\000\000\000\000\000\000\063\000\ +\000\000\000\000\064\000\065\000\066\000\000\000\000\000\000\000\ +\000\000\000\000\142\000\070\000\000\000\000\000\000\000\000\000\ +\074\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\ +\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\ +\075\000\000\000\000\000\076\000\000\000\000\000\000\000\037\000\ +\038\000\000\000\000\000\000\000\039\000\000\000\000\000\041\000\ +\000\000\000\000\078\000\000\000\000\000\000\000\079\000\000\000\ +\000\000\000\000\080\000\000\000\000\000\000\000\000\000\000\000\ +\000\000\082\000\083\000\000\000\000\000\084\000\000\000\000\000\ +\047\000\000\000\000\000\086\000\000\000\087\000\052\000\089\000\ +\000\000\000\000\000\000\090\000\091\000\092\000\093\000\184\000\ +\055\000\056\000\057\000\058\000\059\000\000\000\000\000\000\000\ +\000\000\061\000\000\000\000\000\000\000\063\000\000\000\000\000\ +\000\000\065\000\066\000\000\000\000\000\000\000\000\000\000\000\ +\142\000\070\000\000\000\000\000\000\000\000\000\074\000\000\000\ +\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\ +\000\000\000\000\000\000\000\000\000\000\000\000\075\000\000\000\ +\000\000\076\000\000\000\000\000\000\000\173\001\038\000\000\000\ +\000\000\000\000\039\000\000\000\000\000\041\000\000\000\000\000\ +\078\000\000\000\000\000\000\000\079\000\000\000\000\000\000\000\ +\080\000\000\000\000\000\000\000\000\000\000\000\000\000\082\000\ +\083\000\000\000\000\000\084\000\000\000\000\000\047\000\000\000\ +\000\000\086\000\000\000\087\000\141\000\089\000\000\000\000\000\ +\000\000\090\000\091\000\092\000\093\000\184\000\055\000\056\000\ +\057\000\058\000\059\000\000\000\000\000\000\000\000\000\174\001\ +\000\000\000\000\000\000\063\000\000\000\000\000\000\000\065\000\ +\066\000\000\000\000\000\000\000\000\000\000\000\142\000\070\000\ +\000\000\000\000\000\000\000\000\074\000\000\000\000\000\000\000\ +\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\ +\000\000\000\000\000\000\000\000\075\000\000\000\000\000\076\000\ +\000\000\000\000\000\000\000\000\000\000\000\000\000\000\217\000\ +\000\000\000\000\000\000\000\000\000\000\000\000\078\000\041\000\ +\000\000\000\000\079\000\000\000\000\000\000\000\080\000\000\000\ +\000\000\043\000\000\000\000\000\000\000\082\000\083\000\000\000\ +\000\000\084\000\000\000\000\000\000\000\000\000\000\000\178\001\ +\047\000\087\000\000\000\089\000\000\000\218\000\141\000\090\000\ +\091\000\092\000\093\000\143\000\000\000\000\000\000\000\000\000\ +\055\000\056\000\057\000\058\000\059\000\000\000\000\000\000\000\ +\000\000\219\000\220\000\000\000\000\000\221\000\000\000\000\000\ +\064\000\000\000\222\000\000\000\000\000\000\000\000\000\000\000\ +\223\000\070\000\000\000\000\000\000\000\000\000\074\000\000\000\ +\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\ +\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\ +\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\ +\000\000\217\000\000\000\236\000\000\000\000\000\000\000\000\000\ +\078\000\041\000\000\000\000\000\079\000\000\000\000\000\000\000\ +\080\000\000\000\000\000\043\000\000\000\000\000\000\000\082\000\ +\083\000\000\000\000\000\084\000\000\000\000\000\000\000\000\000\ +\000\000\000\000\047\000\087\000\000\000\089\000\000\000\218\000\ +\141\000\090\000\091\000\092\000\093\000\224\000\000\000\000\000\ +\000\000\000\000\055\000\056\000\057\000\058\000\059\000\000\000\ +\000\000\000\000\000\000\219\000\000\000\000\000\000\000\221\000\ +\000\000\000\000\064\000\000\000\222\000\000\000\000\000\000\000\ +\000\000\000\000\237\000\070\000\000\000\000\000\000\000\000\000\ +\074\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\ +\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\ +\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\ +\000\000\000\000\000\000\217\000\000\000\000\000\000\000\000\000\ +\000\000\000\000\078\000\041\000\000\000\000\000\079\000\000\000\ +\000\000\000\000\080\000\000\000\000\000\043\000\000\000\000\000\ +\000\000\082\000\083\000\000\000\000\000\084\000\000\000\000\000\ +\000\000\000\000\000\000\000\000\047\000\087\000\000\000\089\000\ +\000\000\218\000\141\000\090\000\091\000\092\000\093\000\224\000\ +\000\000\000\000\000\000\000\000\055\000\056\000\057\000\058\000\ +\059\000\000\000\000\000\000\000\000\000\219\000\000\000\000\000\ +\000\000\221\000\000\000\000\000\064\000\000\000\222\000\000\000\ +\000\000\000\000\000\000\000\000\237\000\070\000\000\000\000\000\ +\000\000\000\000\074\000\000\000\000\000\000\000\000\000\000\000\ +\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\ +\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\ +\000\000\000\000\000\000\000\000\000\000\217\000\000\000\000\000\ +\000\000\000\000\000\000\000\000\078\000\041\000\000\000\000\000\ +\079\000\000\000\000\000\000\000\080\000\000\000\000\000\043\000\ +\011\002\000\000\000\000\082\000\083\000\000\000\000\000\084\000\ +\000\000\000\000\000\000\000\000\000\000\000\000\047\000\087\000\ +\000\000\089\000\000\000\218\000\141\000\090\000\091\000\092\000\ +\093\000\224\000\000\000\000\000\000\000\000\000\055\000\056\000\ +\057\000\058\000\059\000\000\000\000\000\000\000\000\000\219\000\ +\000\000\000\000\000\000\221\000\000\000\000\000\064\000\000\000\ +\222\000\000\000\000\000\000\000\000\000\000\000\237\000\070\000\ +\000\000\000\000\000\000\000\000\074\000\000\000\000\000\000\000\ +\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\ +\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\ +\000\000\000\000\000\000\000\000\000\000\000\000\000\000\217\000\ +\000\000\000\000\000\000\000\000\000\000\000\000\078\000\041\000\ +\000\000\000\000\079\000\000\000\000\000\000\000\080\000\000\000\ +\000\000\043\000\200\002\000\000\000\000\082\000\083\000\000\000\ +\000\000\084\000\000\000\000\000\000\000\000\000\000\000\000\000\ +\047\000\087\000\000\000\089\000\000\000\218\000\141\000\090\000\ +\091\000\092\000\093\000\224\000\000\000\000\000\000\000\000\000\ +\055\000\056\000\057\000\058\000\059\000\000\000\000\000\000\000\ +\000\000\219\000\000\000\000\000\000\000\221\000\000\000\000\000\ +\064\000\000\000\222\000\000\000\000\000\000\000\000\000\000\000\ +\237\000\070\000\000\000\000\000\000\000\000\000\074\000\000\000\ +\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\ +\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\ +\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\ +\000\000\215\000\000\000\000\000\000\000\000\000\000\000\000\000\ +\078\000\215\000\000\000\000\000\079\000\000\000\000\000\000\000\ +\080\000\000\000\000\000\215\000\124\004\000\000\000\000\082\000\ +\083\000\000\000\000\000\084\000\000\000\000\000\000\000\000\000\ +\000\000\000\000\215\000\087\000\000\000\089\000\000\000\215\000\ +\215\000\090\000\091\000\092\000\093\000\224\000\000\000\000\000\ +\000\000\000\000\215\000\215\000\215\000\215\000\215\000\000\000\ +\000\000\000\000\000\000\215\000\000\000\000\000\000\000\215\000\ +\000\000\000\000\215\000\000\000\215\000\000\000\000\000\000\000\ +\000\000\000\000\215\000\215\000\000\000\000\000\000\000\000\000\ +\215\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\ +\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\ +\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\ +\000\000\000\000\000\000\217\000\000\000\000\000\000\000\000\000\ +\000\000\000\000\215\000\041\000\000\000\000\000\215\000\000\000\ +\000\000\000\000\215\000\000\000\000\000\043\000\000\000\000\000\ +\000\000\215\000\215\000\000\000\215\000\215\000\000\000\000\000\ +\000\000\000\000\000\000\000\000\047\000\215\000\000\000\215\000\ +\000\000\218\000\141\000\215\000\215\000\215\000\215\000\215\000\ +\000\000\000\000\000\000\000\000\055\000\056\000\057\000\058\000\ +\059\000\000\000\000\000\000\000\000\000\219\000\000\000\000\000\ +\000\000\221\000\000\000\000\000\064\000\000\000\222\000\000\000\ +\000\000\000\000\000\000\000\000\237\000\070\000\000\000\000\000\ +\000\000\000\000\074\000\000\000\000\000\000\000\000\000\000\000\ +\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\ +\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\ +\000\000\000\000\000\000\000\000\000\000\217\000\000\000\000\000\ +\000\000\000\000\000\000\000\000\078\000\041\000\000\000\000\000\ +\079\000\000\000\000\000\000\000\080\000\000\000\000\000\043\000\ +\000\000\000\000\000\000\082\000\083\000\000\000\000\000\084\000\ +\000\000\000\000\000\000\000\000\000\000\000\000\047\000\087\000\ +\000\000\089\000\000\000\218\000\141\000\090\000\091\000\092\000\ +\093\000\224\000\000\000\000\000\000\000\000\000\055\000\056\000\ +\057\000\058\000\059\000\000\000\000\000\000\000\000\000\219\000\ +\000\000\000\000\000\000\221\000\000\000\000\000\064\000\000\000\ +\222\000\000\000\000\000\000\000\000\000\000\000\217\002\070\000\ +\000\000\000\000\000\000\000\000\074\000\000\000\000\000\000\000\ +\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\ +\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\ +\000\000\000\000\000\000\000\000\000\000\000\000\000\000\037\000\ +\000\000\000\000\000\000\000\000\000\000\000\000\078\000\037\000\ +\000\000\000\000\079\000\000\000\000\000\000\000\080\000\000\000\ +\000\000\037\000\000\000\000\000\000\000\082\000\083\000\000\000\ +\000\000\084\000\000\000\000\000\000\000\000\000\000\000\000\000\ +\037\000\087\000\000\000\089\000\000\000\037\000\037\000\090\000\ +\091\000\092\000\093\000\224\000\000\000\000\000\000\000\000\000\ +\037\000\037\000\037\000\037\000\037\000\000\000\000\000\000\000\ +\000\000\037\000\000\000\000\000\000\000\037\000\000\000\000\000\ +\037\000\000\000\037\000\000\000\000\000\000\000\000\000\000\000\ +\037\000\037\000\000\000\000\000\000\000\000\000\037\000\000\000\ +\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\ +\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\ +\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\ +\000\000\000\000\038\000\000\000\000\000\000\000\039\000\000\000\ +\037\000\041\000\000\000\000\000\037\000\000\000\000\000\000\000\ +\037\000\000\000\000\000\043\000\000\000\000\000\000\000\037\000\ +\037\000\000\000\000\000\037\000\000\000\000\000\000\000\000\000\ +\000\000\000\000\047\000\037\000\000\000\037\000\000\000\051\000\ +\141\000\037\000\037\000\037\000\037\000\037\000\000\000\000\000\ +\000\000\000\000\055\000\056\000\057\000\058\000\059\000\000\000\ +\000\000\000\000\000\000\000\000\000\000\000\000\000\000\063\000\ +\000\000\000\000\064\000\065\000\066\000\000\000\000\000\000\000\ +\000\000\000\000\042\004\070\000\000\000\000\000\000\000\000\000\ +\074\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\ +\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\ +\075\000\000\000\000\000\076\000\000\000\000\000\000\000\000\000\ +\038\000\000\000\000\000\000\000\039\000\000\000\000\000\041\000\ +\000\000\000\000\078\000\000\000\000\000\000\000\079\000\000\000\ +\000\000\000\000\080\000\000\000\000\000\000\000\000\000\000\000\ +\000\000\082\000\083\000\000\000\000\000\084\000\000\000\000\000\ +\047\000\000\000\000\000\000\000\000\000\087\000\141\000\089\000\ +\000\000\000\000\000\000\090\000\091\000\092\000\093\000\143\000\ +\055\000\056\000\057\000\058\000\059\000\000\000\000\000\000\000\ +\000\000\000\000\000\000\000\000\000\000\063\000\000\000\000\000\ +\000\000\065\000\066\000\000\000\000\000\000\000\000\000\000\000\ +\142\000\070\000\000\000\000\000\000\000\000\000\074\000\000\000\ +\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\ +\000\000\000\000\000\000\000\000\000\000\000\000\039\001\000\000\ +\000\000\076\000\000\000\000\000\000\000\000\000\038\000\000\000\ +\000\000\000\000\039\000\000\000\000\000\041\000\000\000\000\000\ +\078\000\000\000\000\000\000\000\079\000\000\000\000\000\000\000\ +\080\000\000\000\000\000\000\000\012\002\000\000\000\000\082\000\ +\083\000\000\000\000\000\084\000\000\000\000\000\047\000\000\000\ +\000\000\000\000\000\000\087\000\141\000\089\000\000\000\000\000\ +\000\000\090\000\091\000\092\000\093\000\143\000\055\000\056\000\ +\057\000\058\000\059\000\000\000\000\000\000\000\000\000\000\000\ +\000\000\000\000\000\000\063\000\000\000\000\000\000\000\065\000\ +\066\000\000\000\000\000\000\000\000\000\000\000\142\000\070\000\ +\000\000\000\000\000\000\000\000\074\000\000\000\000\000\000\000\ +\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\ +\000\000\000\000\000\000\000\000\075\000\000\000\000\000\076\000\ +\000\000\000\000\000\000\000\000\038\000\000\000\000\000\000\000\ +\039\000\000\000\000\000\041\000\000\000\000\000\078\000\000\000\ +\000\000\000\000\079\000\000\000\000\000\000\000\080\000\000\000\ +\000\000\000\000\013\002\000\000\000\000\082\000\083\000\000\000\ +\000\000\084\000\000\000\000\000\047\000\000\000\000\000\000\000\ +\000\000\087\000\141\000\089\000\000\000\000\000\000\000\090\000\ +\091\000\092\000\093\000\143\000\055\000\056\000\057\000\058\000\ +\059\000\000\000\000\000\000\000\000\000\072\002\000\000\000\000\ +\000\000\063\000\000\000\000\000\000\000\065\000\066\000\000\000\ +\000\000\000\000\000\000\000\000\142\000\070\000\000\000\000\000\ +\000\000\000\000\074\000\000\000\000\000\000\000\000\000\000\000\ +\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\ +\000\000\000\000\075\000\000\000\000\000\076\000\000\000\000\000\ +\000\000\000\000\038\000\000\000\000\000\000\000\039\000\000\000\ +\000\000\041\000\000\000\000\000\078\000\000\000\000\000\000\000\ +\079\000\000\000\000\000\000\000\080\000\000\000\000\000\000\000\ +\000\000\000\000\000\000\082\000\083\000\000\000\000\000\084\000\ +\000\000\000\000\047\000\000\000\000\000\000\000\000\000\087\000\ +\141\000\089\000\000\000\000\000\000\000\090\000\091\000\092\000\ +\093\000\143\000\055\000\056\000\057\000\058\000\059\000\000\000\ +\000\000\000\000\000\000\000\000\000\000\000\000\000\000\063\000\ +\000\000\000\000\000\000\065\000\066\000\000\000\000\000\000\000\ +\000\000\000\000\142\000\070\000\000\000\000\000\000\000\000\000\ +\074\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\ +\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\ +\039\001\000\000\000\000\076\000\000\000\000\000\000\000\000\000\ +\038\000\000\000\000\000\000\000\039\000\000\000\000\000\041\000\ +\000\000\000\000\078\000\000\000\000\000\000\000\079\000\000\000\ +\000\000\000\000\080\000\000\000\000\000\000\000\201\002\000\000\ +\000\000\082\000\083\000\000\000\000\000\084\000\000\000\000\000\ +\047\000\000\000\000\000\000\000\000\000\087\000\141\000\089\000\ +\000\000\000\000\000\000\090\000\091\000\092\000\093\000\143\000\ +\055\000\056\000\057\000\058\000\059\000\000\000\000\000\000\000\ +\000\000\000\000\000\000\000\000\000\000\063\000\000\000\000\000\ +\000\000\065\000\066\000\000\000\000\000\000\000\000\000\000\000\ +\142\000\070\000\000\000\000\000\000\000\000\000\074\000\000\000\ +\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\ +\000\000\000\000\000\000\000\000\000\000\000\000\075\000\000\000\ +\000\000\076\000\000\000\000\000\000\000\000\000\038\000\000\000\ +\000\000\000\000\039\000\000\000\000\000\041\000\000\000\000\000\ +\078\000\000\000\000\000\000\000\079\000\000\000\000\000\000\000\ +\080\000\000\000\000\000\000\000\202\002\000\000\000\000\082\000\ +\083\000\000\000\000\000\084\000\000\000\000\000\047\000\000\000\ +\000\000\000\000\000\000\087\000\141\000\089\000\000\000\000\000\ +\000\000\090\000\091\000\092\000\093\000\143\000\055\000\056\000\ +\057\000\058\000\059\000\000\000\000\000\000\000\000\000\000\000\ +\000\000\000\000\000\000\063\000\000\000\000\000\000\000\065\000\ +\066\000\000\000\000\000\000\000\000\000\000\000\142\000\070\000\ +\000\000\000\000\000\000\000\000\074\000\000\000\000\000\000\000\ +\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\ +\000\000\000\000\000\000\000\000\039\001\000\000\000\000\076\000\ +\000\000\000\000\000\000\000\000\038\000\000\000\000\000\000\000\ +\039\000\000\000\000\000\041\000\000\000\000\000\078\000\000\000\ +\000\000\000\000\079\000\000\000\000\000\000\000\080\000\000\000\ +\000\000\000\000\125\004\000\000\000\000\082\000\083\000\000\000\ +\000\000\084\000\000\000\000\000\047\000\000\000\000\000\000\000\ +\000\000\087\000\141\000\089\000\000\000\000\000\000\000\090\000\ +\091\000\092\000\093\000\143\000\055\000\056\000\057\000\058\000\ +\059\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\ +\000\000\063\000\000\000\000\000\000\000\065\000\066\000\000\000\ +\000\000\000\000\000\000\000\000\142\000\070\000\000\000\000\000\ +\000\000\000\000\074\000\000\000\000\000\000\000\000\000\000\000\ +\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\ +\000\000\000\000\075\000\000\000\000\000\076\000\000\000\000\000\ +\000\000\000\000\038\000\000\000\000\000\000\000\039\000\000\000\ +\000\000\041\000\000\000\000\000\078\000\000\000\000\000\000\000\ +\079\000\000\000\000\000\000\000\080\000\000\000\000\000\000\000\ +\126\004\000\000\000\000\082\000\083\000\000\000\000\000\084\000\ +\000\000\000\000\047\000\000\000\000\000\000\000\000\000\087\000\ +\141\000\089\000\000\000\000\000\000\000\090\000\091\000\092\000\ +\093\000\143\000\055\000\056\000\057\000\058\000\059\000\000\000\ +\000\000\000\000\000\000\000\000\000\000\000\000\000\000\063\000\ +\000\000\000\000\000\000\065\000\066\000\000\000\000\000\000\000\ +\000\000\000\000\142\000\070\000\000\000\000\000\000\000\000\000\ +\074\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\ +\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\ +\075\000\000\000\000\000\076\000\000\000\000\000\000\000\000\000\ +\038\000\000\000\000\000\000\000\039\000\000\000\000\000\041\000\ +\000\000\000\000\078\000\000\000\000\000\000\000\079\000\000\000\ +\000\000\000\000\080\000\000\000\000\000\000\000\000\000\000\000\ +\000\000\082\000\083\000\000\000\000\000\084\000\000\000\000\000\ +\047\000\000\000\000\000\000\000\000\000\087\000\141\000\089\000\ +\000\000\000\000\000\000\090\000\091\000\092\000\093\000\143\000\ +\055\000\056\000\057\000\058\000\059\000\000\000\000\000\000\000\ +\000\000\000\000\000\000\000\000\000\000\063\000\000\000\000\000\ +\000\000\065\000\066\000\000\000\000\000\000\000\000\000\000\000\ +\252\000\070\000\000\000\000\000\000\000\000\000\074\000\000\000\ +\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\ +\000\000\000\000\000\000\000\000\000\000\000\000\075\000\000\000\ +\000\000\076\000\000\000\000\000\000\000\000\000\038\000\000\000\ +\000\000\000\000\039\000\000\000\000\000\041\000\000\000\000\000\ +\078\000\000\000\000\000\000\000\079\000\000\000\000\000\000\000\ +\080\000\000\000\000\000\000\000\000\000\000\000\000\000\082\000\ +\083\000\000\000\000\000\084\000\000\000\000\000\047\000\000\000\ +\000\000\000\000\000\000\087\000\141\000\089\000\000\000\000\000\ +\000\000\090\000\091\000\092\000\093\000\143\000\055\000\056\000\ +\057\000\058\000\059\000\000\000\000\000\106\002\000\000\000\000\ +\000\000\000\000\000\000\063\000\000\000\000\000\000\000\065\000\ +\066\000\000\000\000\000\000\000\000\000\000\000\142\000\070\000\ +\014\001\015\001\000\000\016\001\074\000\000\000\017\001\000\000\ +\000\000\000\000\000\000\000\000\000\000\000\000\000\000\090\003\ +\000\000\000\000\018\001\000\000\039\001\000\000\000\000\076\000\ +\000\000\000\000\000\000\000\000\000\000\000\000\019\001\000\000\ +\020\001\000\000\014\001\015\001\000\000\016\001\078\000\000\000\ +\017\001\000\000\079\000\000\000\000\000\000\000\080\000\000\000\ +\000\000\000\000\000\000\000\000\018\001\082\000\083\000\000\000\ +\000\000\084\000\000\000\107\002\000\000\000\000\000\000\000\000\ +\019\001\087\000\020\001\089\000\000\000\000\000\000\000\090\000\ +\091\000\092\000\093\000\143\000\022\001\023\001\024\001\025\001\ +\026\001\027\001\028\001\029\001\108\002\031\001\032\001\000\000\ +\033\001\000\000\000\000\000\000\000\000\091\003\000\000\000\000\ +\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\ +\128\004\000\000\000\000\000\000\000\000\000\000\022\001\023\001\ +\024\001\025\001\026\001\027\001\028\001\029\001\092\003\031\001\ +\032\001\000\000\033\001\014\001\015\001\000\000\016\001\109\002\ +\000\000\017\001\000\000\000\000\136\004\000\000\000\000\000\000\ +\000\000\000\000\000\000\000\000\000\000\018\001\000\000\000\000\ +\000\000\000\000\000\000\000\000\000\000\000\000\000\000\014\001\ +\015\001\019\001\016\001\020\001\000\000\017\001\000\000\000\000\ +\000\000\093\003\000\000\000\000\000\000\000\000\000\000\000\000\ +\000\000\018\001\000\000\000\000\000\000\000\000\000\000\000\000\ +\000\000\000\000\000\000\000\000\000\000\019\001\129\004\020\001\ +\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\ +\000\000\000\000\000\000\000\000\000\000\000\000\000\000\022\001\ +\023\001\024\001\025\001\026\001\027\001\028\001\029\001\130\004\ +\031\001\032\001\137\004\033\001\000\000\000\000\000\000\000\000\ +\000\000\000\000\000\000\000\000\000\000\160\004\000\000\000\000\ +\000\000\000\000\000\000\022\001\023\001\024\001\025\001\026\001\ +\027\001\028\001\029\001\138\004\031\001\032\001\000\000\033\001\ +\014\001\015\001\000\000\016\001\000\000\000\000\017\001\000\000\ +\000\000\177\004\131\004\000\000\000\000\000\000\000\000\000\000\ +\000\000\000\000\018\001\000\000\000\000\000\000\000\000\000\000\ +\000\000\000\000\000\000\000\000\014\001\015\001\019\001\016\001\ +\020\001\000\000\017\001\000\000\000\000\000\000\139\004\000\000\ +\000\000\000\000\000\000\000\000\000\000\000\000\018\001\000\000\ +\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\ +\000\000\000\000\019\001\161\004\020\001\000\000\000\000\000\000\ +\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\ +\000\000\000\000\000\000\000\000\022\001\023\001\024\001\025\001\ +\026\001\027\001\028\001\029\001\162\004\031\001\032\001\178\004\ +\033\001\000\000\000\000\000\000\000\000\000\000\000\000\000\000\ +\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\ +\022\001\023\001\024\001\025\001\026\001\027\001\028\001\029\001\ +\179\004\031\001\032\001\000\000\033\001\000\000\000\000\000\000\ +\000\000\000\000\000\000\000\000\000\000\000\000\000\000\163\004\ +\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\ +\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\ +\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\ +\000\000\000\000\000\000\180\004" + +let yycheck = "\002\000\ +\010\001\247\000\068\000\044\000\049\000\220\000\236\000\010\000\ +\011\000\145\000\075\000\100\001\098\001\046\000\001\000\048\000\ +\016\002\061\000\223\000\060\000\108\000\062\000\011\000\056\001\ +\077\001\145\001\044\000\250\001\031\000\032\000\033\000\229\000\ +\035\000\036\000\037\000\222\000\039\000\040\000\205\000\026\000\ +\097\001\028\000\060\000\013\003\063\000\064\000\065\000\188\001\ +\009\004\034\000\152\002\153\002\154\002\155\002\156\002\054\001\ +\226\001\076\000\111\002\175\001\063\000\064\000\065\000\179\001\ +\180\001\056\001\069\000\078\001\028\001\110\000\111\000\108\003\ +\075\000\076\000\063\000\064\000\065\000\157\000\028\001\159\000\ +\025\001\034\001\085\000\086\000\021\001\088\000\050\001\076\000\ +\073\000\015\001\029\001\042\000\077\000\067\003\045\000\015\001\ +\060\001\094\004\098\002\120\001\121\001\073\001\063\004\028\001\ +\025\001\028\001\050\001\125\001\103\001\083\003\049\001\050\001\ +\115\000\116\000\124\001\042\000\160\000\174\001\045\000\060\001\ +\084\001\125\001\021\001\022\001\142\001\024\001\090\001\116\000\ +\014\001\008\001\081\000\029\001\028\001\038\000\025\003\156\001\ +\014\001\076\001\142\001\142\000\029\001\136\001\145\000\050\001\ +\028\001\097\001\090\001\103\001\118\003\167\001\028\001\049\001\ +\050\001\151\001\081\000\221\000\061\000\223\000\169\001\050\001\ +\049\001\050\001\223\000\167\001\014\001\198\000\199\000\120\001\ +\121\001\060\001\028\001\237\000\070\001\023\001\171\004\219\000\ +\237\000\129\001\076\001\182\000\136\001\070\001\123\001\069\001\ +\229\000\021\001\084\001\076\001\028\001\161\001\160\003\252\000\ +\195\000\084\001\041\001\084\001\014\001\161\001\243\000\136\001\ +\125\001\127\001\125\001\156\001\040\001\023\001\195\000\127\001\ +\168\001\028\001\002\000\021\001\076\002\134\001\217\000\248\000\ +\249\000\142\001\168\001\069\001\194\003\030\001\161\001\168\001\ +\090\001\116\003\105\001\188\004\219\001\125\001\241\001\055\001\ +\029\003\030\003\031\003\032\003\033\003\136\001\035\002\125\001\ +\037\002\125\001\023\004\024\004\025\004\026\004\027\004\039\000\ +\098\001\252\000\136\001\069\001\037\001\223\003\161\001\153\001\ +\255\001\227\003\156\001\233\001\174\002\008\001\028\001\161\001\ +\153\001\214\001\014\001\050\001\126\001\021\001\161\001\072\002\ +\161\001\158\002\014\001\125\001\030\002\137\002\063\001\190\001\ +\098\001\099\001\014\001\030\001\028\001\125\001\136\001\034\001\ +\054\001\125\001\069\001\023\001\039\001\076\001\225\001\000\000\ +\088\000\050\004\145\001\021\001\008\001\048\001\049\001\050\001\ +\051\001\040\001\125\001\125\001\040\001\097\001\057\001\090\001\ +\050\001\215\002\076\001\103\001\030\004\136\001\136\001\066\001\ +\034\004\069\001\003\001\115\000\071\001\072\001\073\001\074\001\ +\081\004\069\001\002\001\083\001\126\001\066\001\069\001\237\002\ +\073\001\069\001\076\001\116\001\186\003\050\001\119\001\137\001\ +\017\001\150\001\084\001\069\001\050\001\112\001\069\001\060\001\ +\081\001\082\001\083\001\084\001\085\001\086\001\087\001\088\001\ +\089\001\090\001\109\001\001\001\078\004\112\001\098\001\099\001\ +\100\001\111\002\008\001\090\001\156\001\095\001\055\001\084\001\ +\109\001\125\001\161\001\112\001\001\001\125\001\084\001\168\001\ +\095\003\125\001\174\001\008\001\136\001\050\001\167\002\050\001\ +\136\001\125\001\103\001\003\001\136\001\105\001\069\001\070\001\ +\070\001\115\004\074\001\075\001\136\001\167\001\134\001\135\001\ +\079\001\156\001\157\001\158\001\159\001\210\002\084\001\028\001\ +\163\001\076\001\026\003\163\003\137\001\138\001\166\003\084\001\ +\171\001\172\001\173\001\136\001\005\003\090\001\163\001\178\001\ +\040\001\243\001\008\003\244\001\024\001\140\002\141\002\228\001\ +\168\001\054\001\076\001\240\002\020\002\050\001\231\001\055\001\ +\097\001\003\001\004\002\005\002\161\001\029\001\001\001\240\001\ +\090\001\160\002\153\001\213\002\248\001\008\001\250\001\001\000\ +\002\000\003\000\104\001\105\001\171\002\028\001\217\001\029\001\ +\008\001\049\001\050\001\022\001\080\001\239\001\181\002\084\001\ +\050\001\030\001\153\001\104\001\105\001\232\001\040\001\180\002\ +\222\002\018\002\224\002\049\001\050\001\227\002\014\001\054\001\ +\028\001\244\001\245\001\025\001\076\001\055\001\249\001\023\001\ +\025\001\021\001\076\001\028\001\084\001\134\001\135\001\052\001\ +\161\001\049\001\050\001\088\001\249\001\002\000\076\001\030\001\ +\040\001\057\001\054\001\148\001\040\001\174\001\054\001\000\000\ +\003\002\102\001\103\001\249\002\218\002\054\001\021\001\071\001\ +\072\001\073\001\074\001\022\001\072\002\024\001\150\003\029\003\ +\030\003\031\003\032\003\033\003\126\001\069\001\031\001\032\001\ +\033\001\034\001\039\000\134\001\135\001\104\001\105\001\137\001\ +\127\001\046\000\030\001\048\000\170\001\040\001\054\004\010\000\ +\089\002\146\003\176\001\177\001\040\001\094\002\022\001\149\003\ +\024\001\003\001\098\001\099\001\100\001\101\001\123\003\127\001\ +\069\000\088\001\067\001\013\001\031\000\032\000\033\000\126\001\ +\035\000\036\000\037\000\021\001\022\001\040\000\024\001\102\001\ +\103\001\016\002\137\001\088\000\102\003\125\001\137\001\110\001\ +\031\001\032\001\033\001\034\001\166\002\088\001\040\001\021\001\ +\136\001\208\000\209\000\173\002\156\001\157\001\158\001\159\001\ +\099\001\100\001\101\001\102\001\103\001\055\001\115\000\122\002\ +\123\002\088\001\081\003\110\001\114\003\169\002\129\001\069\001\ +\084\001\119\003\085\000\086\000\067\001\122\002\123\002\102\001\ +\103\001\001\001\143\001\088\001\091\002\079\001\001\001\204\002\ +\008\001\142\000\073\001\147\004\017\001\008\001\126\001\217\002\ +\101\001\102\001\103\001\038\001\217\002\024\001\022\001\069\001\ +\163\002\110\001\165\002\022\001\091\002\025\001\125\001\072\002\ +\158\003\217\001\050\001\098\002\001\001\218\002\163\002\228\003\ +\165\002\021\001\022\001\008\001\024\001\030\001\182\004\013\001\ +\232\001\030\001\013\001\125\001\126\001\127\001\145\000\194\002\ +\195\002\022\001\030\001\126\001\040\001\025\001\136\001\137\001\ +\088\001\198\000\199\000\203\004\142\001\194\002\195\002\204\000\ +\205\000\212\002\168\001\208\000\209\000\101\001\102\001\103\001\ +\213\000\214\000\221\002\040\001\223\002\137\001\110\001\220\000\ +\127\001\228\002\127\001\182\000\215\002\167\001\220\003\015\001\ +\235\002\024\001\088\001\040\003\142\001\003\001\021\001\242\002\ +\104\001\105\001\245\002\040\001\136\001\104\001\105\001\250\002\ +\102\001\103\001\237\002\248\000\249\000\242\002\144\001\252\000\ +\110\001\162\002\232\003\136\001\168\001\250\002\217\000\031\001\ +\032\001\033\001\034\001\008\001\004\001\211\003\212\003\213\003\ +\214\003\215\003\127\001\104\001\105\001\095\001\025\003\040\001\ +\142\002\143\002\144\002\145\002\146\002\147\002\148\002\149\002\ +\150\002\151\002\145\001\088\001\142\001\040\003\002\001\126\001\ +\043\003\044\003\045\003\067\001\251\002\181\003\253\002\100\001\ +\101\001\102\001\103\001\095\003\049\001\050\001\043\003\044\003\ +\045\003\110\001\030\001\030\001\057\001\197\003\014\001\040\001\ +\247\002\248\002\017\003\021\001\251\002\125\001\253\002\021\001\ +\071\001\114\003\071\001\072\001\073\001\074\001\040\001\034\001\ +\088\001\084\003\030\001\040\001\035\003\126\001\089\003\014\001\ +\021\001\022\001\017\003\024\001\137\001\048\001\102\001\103\001\ +\051\001\100\003\021\001\022\001\089\003\024\001\021\001\014\001\ +\127\001\137\001\109\003\040\001\035\003\136\001\136\001\088\001\ +\023\001\116\003\127\001\136\001\177\003\040\001\136\001\116\001\ +\136\001\030\001\119\001\100\001\101\001\102\001\103\001\030\001\ +\040\001\040\001\174\003\088\001\136\001\110\001\137\003\136\001\ +\139\003\125\001\141\003\055\001\143\003\098\001\099\001\100\001\ +\101\001\102\001\103\001\191\003\137\003\055\001\139\003\024\001\ +\141\003\110\001\143\003\136\001\014\001\000\000\069\001\156\001\ +\157\001\158\001\159\001\136\001\212\002\023\001\211\003\212\003\ +\213\003\214\003\215\003\155\001\069\001\221\002\177\003\134\001\ +\137\001\180\003\181\003\220\003\228\002\168\001\040\001\031\001\ +\032\001\033\001\034\001\098\001\099\001\100\001\135\001\180\003\ +\148\001\190\001\197\003\198\003\199\003\245\002\195\001\243\003\ +\031\001\032\001\033\001\034\001\017\001\156\003\247\003\017\001\ +\015\001\198\003\199\003\069\001\127\001\079\001\125\001\218\003\ +\171\001\172\001\173\001\067\001\217\001\105\001\136\001\178\001\ +\126\001\136\001\021\001\230\003\153\001\156\003\233\003\021\001\ +\022\001\010\004\024\001\232\001\163\003\042\004\040\001\166\003\ +\098\001\099\001\100\001\101\001\233\003\021\001\022\001\002\001\ +\024\001\024\001\040\001\127\001\110\001\136\001\046\000\137\001\ +\048\000\049\000\050\000\006\004\021\001\136\001\050\004\015\001\ +\040\001\136\001\136\001\125\001\031\001\032\001\033\001\034\001\ +\136\001\127\001\021\004\022\004\068\000\087\004\136\001\088\004\ +\079\001\028\004\137\001\188\003\189\003\136\001\126\001\092\004\ +\021\004\022\004\245\001\096\004\084\003\021\001\022\001\042\004\ +\024\001\134\001\014\001\021\001\168\001\022\001\137\001\254\003\ +\255\003\000\004\001\004\002\004\100\003\079\001\055\001\002\001\ +\040\001\118\004\017\001\023\001\125\001\109\003\126\001\111\000\ +\067\004\125\001\155\001\100\004\024\001\040\001\168\001\254\003\ +\255\003\000\004\001\004\002\004\040\001\021\001\067\004\040\001\ +\141\004\134\001\243\003\168\001\014\001\088\004\089\004\105\001\ +\003\001\137\001\028\001\126\001\089\002\137\001\014\001\168\001\ +\079\001\094\002\013\001\090\001\168\001\040\001\105\004\136\001\ +\107\004\108\004\021\001\110\004\111\004\112\004\113\004\114\004\ +\136\001\136\001\136\001\136\001\105\004\014\001\107\004\108\004\ +\136\001\136\001\136\001\136\001\088\001\040\001\136\001\054\004\ +\125\001\080\004\125\001\082\004\125\001\055\001\098\001\099\001\ +\100\001\101\001\102\001\103\001\055\001\126\001\013\001\037\001\ +\095\004\050\004\110\001\136\001\151\004\050\001\198\000\199\000\ +\021\001\080\004\021\001\082\004\204\000\205\000\021\001\021\001\ +\208\000\209\000\151\004\021\001\079\001\069\001\214\000\136\001\ +\095\004\126\001\218\003\136\001\220\000\221\000\222\000\223\000\ +\168\001\020\001\168\001\030\001\002\001\229\000\230\003\040\001\ +\125\001\136\001\013\001\235\000\236\000\237\000\125\001\110\001\ +\035\001\126\001\168\001\243\000\040\001\008\001\168\001\042\001\ +\248\000\249\000\136\001\046\001\207\004\002\001\137\001\136\001\ +\125\001\021\001\125\001\126\001\127\001\056\001\006\004\212\002\ +\059\001\126\001\207\004\126\001\147\004\136\001\137\001\030\001\ +\221\002\068\001\223\002\142\001\030\001\021\001\040\001\228\002\ +\040\001\125\001\040\001\040\001\028\004\080\001\136\001\040\001\ +\136\001\126\001\126\001\194\004\137\001\037\001\089\001\040\001\ +\245\002\092\001\030\001\126\001\167\001\136\001\097\001\182\004\ +\136\001\136\001\136\001\136\001\050\001\137\001\136\001\136\001\ +\136\001\040\001\136\001\194\004\111\001\112\001\113\001\114\001\ +\115\001\116\001\117\001\118\001\203\004\136\001\002\001\021\001\ +\235\002\137\001\136\001\136\001\136\001\040\001\136\001\023\001\ +\024\001\025\001\136\001\136\001\028\001\030\001\136\001\136\001\ +\003\001\136\001\141\001\136\001\126\001\247\000\127\001\146\001\ +\040\001\126\001\013\001\127\001\030\001\015\001\126\001\154\001\ +\127\001\126\001\021\001\022\001\055\001\024\001\110\004\111\004\ +\112\004\113\004\114\004\166\001\116\001\000\000\025\003\119\001\ +\040\001\127\001\021\001\126\001\046\000\040\001\048\000\049\000\ +\050\000\136\001\021\001\127\001\003\001\040\003\126\001\084\003\ +\055\001\168\001\155\001\088\003\055\001\021\001\013\001\040\001\ +\088\001\127\001\068\000\069\000\126\001\021\001\021\001\100\003\ +\126\001\024\001\098\001\099\001\100\001\101\001\102\001\103\001\ +\109\003\155\001\014\001\136\001\079\001\126\001\110\001\126\001\ +\126\001\040\001\022\001\023\001\040\001\002\001\126\001\126\001\ +\253\002\126\001\126\001\219\002\180\001\125\001\085\004\126\001\ +\055\001\068\001\168\000\170\000\040\001\161\001\190\001\088\001\ +\136\001\091\001\092\001\093\001\094\001\095\001\220\002\158\002\ +\026\003\098\001\099\001\100\001\101\001\102\001\103\001\026\000\ +\079\001\116\003\125\001\126\001\127\001\110\001\214\001\173\002\ +\081\002\069\001\005\002\177\003\028\000\136\001\137\001\246\003\ +\224\001\225\001\226\001\142\001\228\001\180\002\190\001\228\001\ +\040\001\233\001\182\000\105\002\088\001\149\003\020\003\152\000\ +\224\001\235\002\066\000\243\001\189\003\188\003\098\001\099\001\ +\100\001\101\001\102\001\103\001\167\001\146\004\125\001\126\001\ +\127\001\153\003\110\001\119\001\004\002\005\002\161\000\007\002\ +\219\000\136\001\137\001\022\002\197\001\218\003\177\003\142\001\ +\190\002\125\001\181\003\080\001\198\000\199\000\022\002\065\001\ +\088\001\230\003\204\000\205\000\136\001\150\003\208\000\209\000\ +\006\001\108\001\197\003\099\001\100\001\101\001\102\001\103\001\ +\167\001\191\003\220\000\221\000\222\000\223\000\110\001\014\001\ +\171\004\095\003\023\001\229\000\248\001\027\001\255\255\255\255\ +\023\001\006\004\236\000\237\000\009\004\010\004\255\255\255\255\ +\255\255\243\000\255\255\040\001\255\255\255\255\248\000\249\000\ +\255\255\040\001\255\255\255\255\255\255\255\255\255\255\028\004\ +\255\255\255\255\255\255\057\001\058\001\255\255\255\255\255\255\ +\255\255\089\002\255\255\255\255\066\001\042\004\094\002\255\255\ +\255\255\255\255\255\255\021\001\074\001\075\001\069\001\255\255\ +\255\255\255\255\255\255\255\255\082\001\007\002\255\002\000\003\ +\001\003\002\003\063\004\088\001\255\255\091\001\255\255\093\001\ +\094\001\088\001\096\001\255\255\255\255\098\001\099\001\100\001\ +\101\001\102\001\103\001\098\001\099\001\100\001\101\001\102\001\ +\103\001\110\001\255\255\255\255\140\002\141\002\255\255\110\001\ +\255\255\119\001\255\255\036\003\037\003\038\003\039\003\100\004\ +\255\255\255\255\255\255\255\255\130\001\131\001\125\001\255\255\ +\160\002\110\004\111\004\112\004\113\004\114\004\166\002\255\255\ +\255\255\136\001\255\255\171\002\255\255\173\002\174\002\255\255\ +\150\001\255\255\255\255\255\255\180\002\181\002\089\004\255\255\ +\255\255\255\255\020\001\255\255\162\001\163\001\255\255\165\001\ +\255\255\255\255\116\001\255\255\255\255\119\001\255\255\255\255\ +\255\255\035\001\046\000\255\255\048\000\049\000\050\000\255\255\ +\042\001\255\255\255\255\255\255\046\001\255\255\255\255\255\255\ +\255\255\217\002\218\002\255\255\255\255\255\255\056\001\255\255\ +\068\000\059\001\255\255\227\002\255\255\255\255\255\255\255\255\ +\255\255\255\255\068\001\255\255\255\255\255\255\255\255\188\004\ +\255\255\255\255\255\255\255\255\255\255\255\255\080\001\255\255\ +\255\255\249\002\255\255\255\255\255\255\255\255\255\255\089\001\ +\255\255\255\255\092\001\255\255\255\255\014\001\255\255\097\001\ +\255\255\255\255\255\255\255\255\190\001\013\003\023\001\255\255\ +\255\255\255\255\255\255\255\255\255\255\111\001\112\001\113\001\ +\114\001\115\001\116\001\117\001\118\001\255\255\255\255\040\001\ +\255\255\255\255\255\255\255\255\214\001\255\255\255\255\255\255\ +\255\255\255\255\255\255\255\255\255\255\255\255\224\001\225\001\ +\226\001\255\255\228\001\141\001\255\255\255\255\255\255\233\001\ +\146\001\255\255\255\255\255\255\069\001\255\255\255\255\255\255\ +\154\001\243\001\255\255\255\255\222\002\255\255\224\002\255\255\ +\255\255\227\002\255\255\255\255\166\001\255\255\255\255\088\001\ +\255\255\081\003\004\002\005\002\255\255\007\002\255\255\255\255\ +\088\003\098\001\099\001\100\001\101\001\102\001\103\001\255\255\ +\255\255\255\255\198\000\199\000\022\002\110\001\255\255\255\255\ +\255\255\003\003\255\255\255\255\208\000\209\000\255\255\006\001\ +\255\255\255\255\114\003\013\003\125\001\255\255\118\003\255\255\ +\255\255\221\000\222\000\223\000\255\255\255\255\255\255\136\001\ +\255\255\229\000\255\255\255\255\027\001\255\255\255\255\255\255\ +\236\000\237\000\255\255\255\255\255\255\255\255\255\255\243\000\ +\255\255\255\255\255\255\255\255\248\000\249\000\255\255\255\255\ +\255\255\255\255\255\255\255\255\156\003\255\255\255\255\255\255\ +\160\003\255\255\057\001\058\001\255\255\255\255\255\255\089\002\ +\255\255\255\255\255\255\066\001\094\002\255\255\255\255\255\255\ +\255\255\021\001\255\255\074\001\075\001\255\255\255\255\255\255\ +\255\255\255\255\255\255\082\001\255\255\255\255\255\255\255\255\ +\255\255\255\255\255\255\255\255\091\001\255\255\093\001\094\001\ +\255\255\096\001\255\255\255\255\255\255\255\255\255\255\255\255\ +\255\255\255\255\255\255\211\003\212\003\213\003\214\003\215\003\ +\114\003\255\255\140\002\141\002\118\003\119\003\255\255\223\003\ +\119\001\255\255\255\255\227\003\255\255\255\255\255\255\255\255\ +\232\003\255\255\255\255\130\001\131\001\255\255\160\002\255\255\ +\255\255\255\255\242\003\243\003\166\002\255\255\255\255\255\255\ +\255\255\171\002\255\255\173\002\174\002\255\255\255\255\150\001\ +\255\255\255\255\180\002\181\002\158\003\255\255\160\003\255\255\ +\255\255\009\004\010\004\162\001\163\001\255\255\165\001\255\255\ +\116\001\255\255\255\255\119\001\001\001\255\255\255\255\255\255\ +\255\255\255\255\255\255\008\001\255\255\255\255\030\004\255\255\ +\255\255\014\001\034\004\255\255\255\255\255\255\255\255\217\002\ +\218\002\022\001\023\001\255\255\255\255\223\002\255\255\255\255\ +\048\004\255\255\050\004\255\255\255\255\014\001\255\255\255\255\ +\255\255\255\255\255\255\040\001\255\255\255\255\023\001\063\004\ +\255\255\255\255\220\003\255\255\255\255\223\003\255\255\249\002\ +\255\255\227\003\255\255\255\255\255\255\255\255\078\004\040\001\ +\255\255\081\004\255\255\049\000\050\000\255\255\255\255\087\004\ +\069\001\255\255\255\255\013\003\255\255\255\255\094\004\255\255\ +\255\255\255\255\255\255\255\255\100\004\255\255\068\000\255\255\ +\255\255\255\255\255\255\088\001\069\001\255\255\255\255\255\255\ +\255\255\255\255\255\255\115\004\255\255\098\001\099\001\100\001\ +\101\001\102\001\103\001\104\001\224\001\225\001\226\001\255\255\ +\228\001\110\001\255\255\255\255\030\004\233\001\255\255\255\255\ +\034\004\098\001\099\001\100\001\101\001\255\255\255\255\243\001\ +\125\001\255\255\255\255\255\255\255\255\110\001\255\255\255\255\ +\255\255\255\255\255\255\136\001\255\255\255\255\255\255\081\003\ +\004\002\005\002\255\255\255\255\125\001\255\255\088\003\255\255\ +\255\255\255\255\255\255\171\004\255\255\255\255\255\255\136\001\ +\255\255\255\255\022\002\255\255\078\004\255\255\255\255\255\255\ +\255\255\255\255\152\000\255\255\188\004\255\255\255\255\255\255\ +\255\255\255\255\255\255\255\255\118\003\255\255\255\255\255\255\ +\255\255\255\255\255\255\255\255\255\255\255\255\255\255\173\000\ +\174\000\255\255\255\255\255\255\255\255\255\255\255\255\255\255\ +\255\255\115\004\255\255\255\255\255\255\255\255\255\255\255\255\ +\255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\ +\255\255\255\255\255\255\255\255\255\255\255\255\160\003\255\255\ +\255\255\085\002\255\255\255\255\255\255\089\002\255\255\255\255\ +\255\255\255\255\094\002\255\255\255\255\255\255\255\255\221\000\ +\222\000\223\000\255\255\255\255\255\255\255\255\255\255\229\000\ +\255\255\255\255\255\255\255\255\234\000\235\000\236\000\237\000\ +\255\255\255\255\255\255\255\255\255\255\243\000\255\255\255\255\ +\255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\ +\255\255\211\003\212\003\213\003\214\003\215\003\255\255\255\255\ +\255\255\255\255\020\001\255\255\255\255\223\003\255\255\005\000\ +\255\255\227\003\255\255\255\255\255\255\255\255\232\003\021\001\ +\255\255\035\001\255\255\255\255\255\255\255\255\255\255\255\255\ +\042\001\243\003\166\002\255\255\046\001\255\255\255\255\255\255\ +\255\255\173\002\174\002\255\255\127\000\255\255\056\001\255\255\ +\255\255\059\001\255\255\001\001\255\255\255\255\255\255\009\004\ +\010\004\255\255\068\001\049\000\050\000\059\001\255\255\255\255\ +\014\001\255\255\255\255\255\255\255\255\255\255\080\001\255\255\ +\022\001\023\001\255\255\255\255\030\004\255\255\068\000\089\001\ +\034\004\255\255\092\001\255\255\255\255\217\002\218\002\097\001\ +\255\255\255\255\040\001\255\255\255\255\255\255\255\255\255\255\ +\050\004\255\255\255\255\255\255\098\001\111\001\112\001\113\001\ +\114\001\115\001\116\001\117\001\118\001\063\004\255\255\255\255\ +\255\255\255\255\255\255\255\255\255\255\249\002\255\255\069\001\ +\255\255\204\000\255\255\255\255\078\004\255\255\255\255\081\004\ +\255\255\255\255\255\255\141\001\255\255\087\004\255\255\255\255\ +\146\001\220\000\088\001\255\255\094\004\255\255\255\255\255\255\ +\154\001\255\255\100\004\145\001\098\001\099\001\100\001\101\001\ +\102\001\103\001\104\001\255\255\166\001\255\255\255\255\255\255\ +\110\001\115\004\152\000\153\000\154\000\155\000\156\000\255\255\ +\255\255\255\255\160\000\161\000\162\000\255\255\164\000\125\001\ +\255\255\255\255\255\255\255\255\255\255\255\255\172\000\173\000\ +\255\255\255\255\136\001\255\255\255\255\255\255\255\255\255\255\ +\255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\ +\049\000\050\000\255\255\255\255\255\255\255\255\255\255\255\255\ +\255\255\255\255\255\255\255\255\088\003\255\255\255\255\255\255\ +\214\001\171\004\255\255\068\000\255\255\255\255\255\255\255\255\ +\222\001\255\255\224\001\225\001\226\001\219\000\228\001\221\000\ +\222\000\223\000\188\004\233\001\255\255\255\255\065\001\229\000\ +\255\255\255\255\255\255\255\255\255\255\243\001\236\000\237\000\ +\255\255\255\255\255\255\255\255\255\255\243\000\255\255\255\255\ +\255\255\255\255\255\255\255\255\255\255\255\255\004\002\005\002\ +\255\255\255\255\255\255\049\000\050\000\096\001\255\255\255\255\ +\255\255\100\001\255\255\255\255\255\255\153\003\255\255\255\255\ +\022\002\255\255\255\255\255\255\255\255\255\255\068\000\021\001\ +\255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\ +\255\255\255\255\040\002\255\255\255\255\255\255\255\255\255\255\ +\255\255\255\255\155\000\156\000\255\255\255\255\255\255\160\000\ +\255\255\162\000\255\255\164\000\255\255\255\255\255\255\255\255\ +\255\255\255\255\255\255\172\000\255\255\255\255\255\255\255\255\ +\255\255\255\255\255\255\255\255\255\255\255\255\076\002\211\003\ +\212\003\213\003\214\003\215\003\255\255\255\255\255\255\170\001\ +\255\255\255\255\255\255\255\255\175\001\176\001\177\001\255\255\ +\179\001\180\001\255\255\255\255\232\003\255\255\255\255\255\255\ +\255\255\188\001\255\255\105\002\255\255\255\255\255\255\255\255\ +\255\255\103\001\255\255\255\255\221\000\222\000\223\000\255\255\ +\255\255\255\255\255\255\255\255\229\000\255\255\255\255\255\255\ +\118\001\255\255\255\255\236\000\237\000\009\004\010\004\125\001\ +\174\000\255\255\243\000\255\255\255\255\255\255\255\255\255\255\ +\255\255\255\255\136\001\255\255\255\255\255\255\255\255\255\255\ +\255\255\255\255\255\255\145\001\255\255\255\255\255\255\255\255\ +\255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\ +\166\002\255\255\255\255\255\255\021\001\255\255\255\255\173\002\ +\174\002\255\255\255\255\255\255\255\255\255\255\180\002\221\000\ +\222\000\223\000\255\255\063\004\255\255\255\255\039\001\229\000\ +\255\255\255\255\255\255\255\255\255\255\255\255\236\000\237\000\ +\255\255\255\255\255\255\255\255\255\255\243\000\255\255\255\255\ +\255\255\255\255\255\255\087\004\255\255\255\255\255\255\255\255\ +\255\255\255\255\255\255\217\002\218\002\255\255\255\255\255\255\ +\100\004\255\255\255\255\255\255\255\255\219\001\255\255\255\255\ +\255\255\255\255\224\001\225\001\226\001\255\255\228\001\021\001\ +\255\255\255\255\255\255\233\001\255\255\255\255\255\255\255\255\ +\255\255\255\255\255\255\249\002\255\255\243\001\255\255\255\255\ +\255\255\255\255\248\001\255\255\250\001\255\255\255\255\255\255\ +\255\255\255\255\008\003\255\255\255\255\255\255\004\002\005\002\ +\255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\ +\255\255\255\255\255\255\255\255\026\003\255\255\255\255\136\001\ +\022\002\255\255\255\255\255\255\255\255\255\255\255\255\255\255\ +\255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\ +\255\255\255\255\255\255\255\255\255\255\255\255\137\002\255\255\ +\188\004\140\002\141\002\142\002\143\002\144\002\145\002\146\002\ +\147\002\148\002\149\002\150\002\151\002\152\002\153\002\154\002\ +\155\002\156\002\157\002\158\002\255\255\160\002\255\255\255\255\ +\255\255\255\255\255\255\255\255\255\255\255\255\076\002\255\255\ +\171\002\255\255\255\255\255\255\255\255\255\255\255\255\255\255\ +\255\255\255\255\181\002\255\255\255\255\255\255\255\255\255\255\ +\255\255\255\255\255\255\097\002\255\255\255\255\100\002\255\255\ +\255\255\255\255\104\002\105\002\255\255\255\255\255\255\224\001\ +\225\001\226\001\255\255\228\001\255\255\255\255\255\255\255\255\ +\233\001\255\255\255\255\255\255\255\255\255\255\255\255\255\255\ +\255\255\255\255\243\001\255\255\255\255\255\255\255\255\255\255\ +\255\255\255\255\255\255\255\255\255\255\255\255\255\255\149\003\ +\150\003\255\255\255\255\004\002\005\002\255\255\255\255\255\255\ +\255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\ +\255\255\255\255\255\255\255\255\255\255\022\002\255\255\255\255\ +\166\002\167\002\005\003\169\002\255\255\255\255\255\255\173\002\ +\174\002\255\255\224\001\225\001\226\001\255\255\228\001\255\255\ +\255\255\255\255\255\255\233\001\255\255\255\255\255\255\255\255\ +\255\255\255\255\255\255\255\255\255\255\243\001\255\255\255\255\ +\255\255\255\255\255\255\255\255\255\255\211\003\212\003\213\003\ +\214\003\215\003\255\255\255\255\255\255\255\255\004\002\005\002\ +\255\255\255\255\255\255\217\002\218\002\255\255\255\255\255\255\ +\255\255\255\255\232\003\255\255\255\255\255\255\255\255\255\255\ +\022\002\255\255\255\255\255\255\255\255\243\003\255\255\255\255\ +\097\002\255\255\255\255\100\002\255\255\255\255\081\003\104\002\ +\255\255\019\001\000\000\249\002\255\255\255\255\255\255\255\255\ +\255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\ +\255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\ +\255\255\255\255\044\001\255\255\255\255\255\255\255\255\255\255\ +\050\001\023\003\255\255\255\255\026\003\255\255\255\255\255\255\ +\255\255\255\255\060\001\061\001\062\001\063\001\064\001\045\004\ +\255\255\255\255\048\004\255\255\050\004\255\255\052\004\255\255\ +\255\255\255\255\255\255\255\255\255\255\166\002\255\255\146\003\ +\255\255\255\255\084\001\085\001\173\002\174\002\255\255\255\255\ +\255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\ +\255\255\255\255\255\255\081\004\255\255\255\255\255\255\255\255\ +\255\255\087\004\255\255\255\255\255\255\255\255\255\255\001\001\ +\094\004\255\255\255\255\255\255\098\004\255\255\008\001\186\003\ +\255\255\095\003\124\001\255\255\014\001\255\255\128\001\255\255\ +\217\002\218\002\132\001\255\255\022\001\023\001\255\255\255\255\ +\255\255\139\001\140\001\255\255\255\255\143\001\255\255\255\255\ +\166\002\255\255\255\255\255\255\255\255\151\001\040\001\173\002\ +\174\002\255\255\255\255\157\001\158\001\159\001\160\001\255\255\ +\249\002\255\255\255\255\255\255\146\004\255\255\255\255\255\255\ +\255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\ +\150\003\255\255\255\255\069\001\255\255\255\255\255\255\255\255\ +\255\255\255\255\255\255\255\255\255\255\171\004\023\003\255\255\ +\255\255\255\255\255\255\217\002\218\002\255\255\088\001\255\255\ +\174\003\255\255\255\255\255\255\255\255\255\255\255\255\255\255\ +\098\001\099\001\100\001\101\001\102\001\103\001\104\001\255\255\ +\255\255\191\003\255\255\255\255\110\001\255\255\255\255\255\255\ +\255\255\255\255\255\255\249\002\255\255\255\255\255\255\255\255\ +\255\255\255\255\255\255\125\001\255\255\211\003\212\003\213\003\ +\214\003\215\003\255\255\255\255\255\255\255\255\136\001\255\255\ +\255\255\000\000\255\255\255\255\255\255\255\255\255\255\255\255\ +\255\255\255\255\232\003\255\255\255\255\255\255\255\255\255\255\ +\255\255\255\255\255\255\255\255\242\003\255\255\255\255\255\255\ +\255\255\255\255\255\255\255\255\002\001\003\001\004\001\255\255\ +\006\001\255\255\255\255\255\255\255\255\255\255\255\255\013\001\ +\255\255\015\001\255\255\017\001\255\255\255\255\020\001\255\255\ +\255\255\255\255\255\255\255\255\255\255\027\001\255\255\255\255\ +\255\255\255\255\255\255\255\255\255\255\035\001\255\255\037\001\ +\038\001\255\255\255\255\041\001\042\001\255\255\255\255\255\255\ +\046\001\255\255\255\255\041\004\255\255\255\255\052\001\255\255\ +\054\001\055\001\056\001\057\001\058\001\059\001\255\255\053\004\ +\255\255\255\255\255\255\255\255\066\001\255\255\068\001\255\255\ +\255\255\255\255\255\255\255\255\074\001\075\001\255\255\255\255\ +\255\255\079\001\080\001\255\255\082\001\255\255\255\255\255\255\ +\255\255\255\255\255\255\089\001\255\255\091\001\092\001\093\001\ +\094\001\087\004\096\001\097\001\255\255\255\255\255\255\255\255\ +\255\255\255\255\211\003\212\003\213\003\214\003\215\003\255\255\ +\255\255\111\001\112\001\113\001\114\001\115\001\116\001\117\001\ +\118\001\119\001\255\255\255\255\255\255\255\255\255\255\232\003\ +\126\001\127\001\255\255\255\255\130\001\131\001\255\255\255\255\ +\134\001\135\001\136\001\137\001\138\001\255\255\255\255\141\001\ +\255\255\000\000\144\001\145\001\146\001\255\255\148\001\255\255\ +\150\001\255\255\255\255\255\255\154\001\255\255\255\255\255\255\ +\255\255\255\255\255\255\255\255\162\001\163\001\255\255\165\001\ +\166\001\255\255\168\001\255\255\255\255\211\003\212\003\213\003\ +\214\003\215\003\255\255\255\255\255\255\255\255\255\255\255\255\ +\255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\ +\255\255\255\255\232\003\255\255\255\255\255\255\255\255\255\255\ +\255\255\255\255\255\255\255\255\053\004\255\255\255\255\255\255\ +\255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\ +\255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\ +\255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\ +\255\255\255\255\001\001\002\001\003\001\004\001\087\004\006\001\ +\255\255\008\001\255\255\255\255\011\001\012\001\013\001\014\001\ +\015\001\016\001\017\001\255\255\019\001\020\001\021\001\022\001\ +\023\001\024\001\025\001\255\255\027\001\028\001\029\001\030\001\ +\031\001\032\001\033\001\034\001\035\001\255\255\037\001\038\001\ +\255\255\040\001\041\001\042\001\255\255\044\001\255\255\046\001\ +\255\255\255\255\049\001\050\001\255\255\052\001\255\255\054\001\ +\055\001\056\001\057\001\058\001\059\001\060\001\061\001\062\001\ +\063\001\064\001\255\255\066\001\255\255\068\001\069\001\070\001\ +\255\255\087\004\073\001\074\001\075\001\076\001\077\001\078\001\ +\079\001\080\001\000\000\082\001\255\255\084\001\085\001\255\255\ +\255\255\088\001\089\001\090\001\091\001\092\001\093\001\094\001\ +\255\255\096\001\097\001\098\001\099\001\100\001\101\001\102\001\ +\103\001\104\001\105\001\106\001\255\255\255\255\109\001\110\001\ +\111\001\112\001\113\001\114\001\115\001\116\001\117\001\118\001\ +\119\001\255\255\255\255\255\255\255\255\124\001\125\001\126\001\ +\127\001\128\001\255\255\130\001\131\001\132\001\255\255\134\001\ +\135\001\136\001\137\001\138\001\139\001\140\001\141\001\142\001\ +\143\001\144\001\145\001\146\001\255\255\148\001\255\255\150\001\ +\151\001\255\255\153\001\154\001\155\001\255\255\157\001\158\001\ +\159\001\160\001\161\001\162\001\163\001\164\001\165\001\166\001\ +\167\001\168\001\001\001\002\001\003\001\004\001\255\255\006\001\ +\255\255\008\001\255\255\255\255\011\001\012\001\013\001\014\001\ +\015\001\016\001\017\001\255\255\019\001\020\001\021\001\022\001\ +\023\001\024\001\025\001\255\255\027\001\028\001\029\001\255\255\ +\255\255\255\255\255\255\034\001\035\001\255\255\037\001\038\001\ +\255\255\040\001\041\001\042\001\255\255\044\001\255\255\046\001\ +\255\255\255\255\049\001\050\001\255\255\052\001\255\255\054\001\ +\055\001\056\001\057\001\058\001\059\001\060\001\061\001\062\001\ +\063\001\064\001\255\255\066\001\255\255\068\001\069\001\070\001\ +\255\255\255\255\073\001\074\001\075\001\076\001\077\001\078\001\ +\079\001\080\001\000\000\082\001\255\255\084\001\085\001\255\255\ +\255\255\088\001\089\001\090\001\091\001\092\001\093\001\094\001\ +\255\255\096\001\097\001\098\001\099\001\100\001\101\001\102\001\ +\103\001\104\001\105\001\106\001\255\255\255\255\109\001\110\001\ +\111\001\112\001\113\001\114\001\115\001\116\001\117\001\118\001\ +\119\001\120\001\121\001\255\255\255\255\124\001\125\001\126\001\ +\127\001\128\001\255\255\130\001\131\001\132\001\255\255\134\001\ +\135\001\136\001\137\001\138\001\139\001\140\001\141\001\142\001\ +\143\001\144\001\145\001\146\001\255\255\148\001\255\255\150\001\ +\151\001\255\255\153\001\154\001\155\001\156\001\157\001\158\001\ +\159\001\160\001\161\001\162\001\163\001\164\001\165\001\166\001\ +\167\001\168\001\255\255\001\001\002\001\003\001\004\001\255\255\ +\006\001\255\255\008\001\255\255\255\255\011\001\012\001\013\001\ +\014\001\015\001\016\001\017\001\255\255\019\001\020\001\021\001\ +\022\001\023\001\024\001\025\001\255\255\027\001\028\001\029\001\ +\255\255\031\001\032\001\033\001\034\001\035\001\255\255\037\001\ +\038\001\255\255\040\001\041\001\042\001\255\255\044\001\255\255\ +\046\001\255\255\255\255\049\001\050\001\255\255\052\001\255\255\ +\054\001\055\001\056\001\057\001\058\001\059\001\060\001\061\001\ +\062\001\063\001\064\001\255\255\066\001\255\255\068\001\069\001\ +\070\001\255\255\255\255\073\001\074\001\075\001\076\001\077\001\ +\078\001\079\001\080\001\000\000\082\001\255\255\084\001\085\001\ +\255\255\255\255\088\001\089\001\090\001\091\001\092\001\093\001\ +\094\001\255\255\096\001\097\001\098\001\099\001\100\001\101\001\ +\102\001\103\001\104\001\105\001\106\001\255\255\255\255\109\001\ +\110\001\111\001\112\001\113\001\114\001\115\001\116\001\117\001\ +\118\001\119\001\255\255\255\255\255\255\255\255\124\001\125\001\ +\126\001\127\001\128\001\255\255\130\001\131\001\132\001\255\255\ +\134\001\135\001\136\001\137\001\138\001\139\001\140\001\141\001\ +\142\001\143\001\144\001\145\001\146\001\255\255\148\001\255\255\ +\150\001\151\001\255\255\153\001\154\001\155\001\255\255\157\001\ +\158\001\159\001\160\001\161\001\162\001\163\001\164\001\165\001\ +\166\001\167\001\168\001\001\001\002\001\003\001\004\001\255\255\ +\006\001\255\255\008\001\255\255\255\255\255\255\012\001\013\001\ +\014\001\015\001\016\001\017\001\255\255\019\001\020\001\021\001\ +\022\001\023\001\024\001\025\001\255\255\027\001\028\001\255\255\ +\030\001\031\001\032\001\033\001\034\001\035\001\255\255\037\001\ +\038\001\255\255\040\001\041\001\042\001\255\255\044\001\255\255\ +\046\001\255\255\255\255\049\001\050\001\255\255\052\001\255\255\ +\054\001\055\001\056\001\057\001\058\001\059\001\060\001\061\001\ +\062\001\063\001\064\001\255\255\066\001\255\255\068\001\069\001\ +\255\255\255\255\255\255\073\001\074\001\075\001\255\255\077\001\ +\078\001\079\001\080\001\000\000\082\001\083\001\084\001\085\001\ +\255\255\255\255\088\001\089\001\090\001\091\001\092\001\093\001\ +\094\001\255\255\096\001\097\001\098\001\099\001\100\001\101\001\ +\102\001\103\001\104\001\105\001\106\001\255\255\255\255\109\001\ +\110\001\111\001\112\001\113\001\114\001\115\001\116\001\117\001\ +\118\001\119\001\255\255\255\255\255\255\255\255\124\001\125\001\ +\126\001\127\001\128\001\255\255\130\001\131\001\132\001\255\255\ +\134\001\135\001\136\001\137\001\138\001\139\001\140\001\141\001\ +\142\001\143\001\144\001\145\001\146\001\255\255\148\001\255\255\ +\150\001\151\001\255\255\153\001\154\001\255\255\156\001\157\001\ +\158\001\159\001\160\001\161\001\162\001\163\001\164\001\165\001\ +\166\001\255\255\168\001\255\255\001\001\002\001\003\001\004\001\ +\255\255\006\001\255\255\008\001\255\255\255\255\011\001\012\001\ +\013\001\014\001\015\001\016\001\017\001\255\255\019\001\020\001\ +\021\001\022\001\023\001\024\001\025\001\255\255\027\001\028\001\ +\029\001\255\255\255\255\255\255\255\255\255\255\035\001\255\255\ +\037\001\038\001\255\255\040\001\041\001\042\001\255\255\044\001\ +\255\255\046\001\255\255\255\255\049\001\050\001\255\255\052\001\ +\255\255\054\001\055\001\056\001\057\001\058\001\059\001\060\001\ +\061\001\062\001\063\001\064\001\255\255\066\001\255\255\068\001\ +\069\001\070\001\255\255\255\255\073\001\074\001\075\001\076\001\ +\077\001\078\001\079\001\080\001\000\000\082\001\255\255\084\001\ +\085\001\255\255\255\255\088\001\089\001\090\001\091\001\092\001\ +\093\001\094\001\255\255\096\001\097\001\098\001\099\001\100\001\ +\101\001\102\001\103\001\104\001\105\001\106\001\255\255\255\255\ +\109\001\110\001\111\001\112\001\113\001\114\001\115\001\116\001\ +\117\001\118\001\119\001\255\255\255\255\255\255\255\255\124\001\ +\125\001\126\001\127\001\128\001\255\255\130\001\131\001\132\001\ +\255\255\134\001\135\001\136\001\137\001\138\001\139\001\140\001\ +\141\001\142\001\143\001\144\001\145\001\146\001\255\255\148\001\ +\255\255\150\001\151\001\255\255\153\001\154\001\155\001\255\255\ +\157\001\158\001\159\001\160\001\161\001\162\001\163\001\164\001\ +\165\001\166\001\167\001\168\001\001\001\002\001\003\001\004\001\ +\255\255\006\001\255\255\008\001\255\255\255\255\255\255\012\001\ +\013\001\014\001\015\001\016\001\017\001\255\255\019\001\020\001\ +\021\001\022\001\023\001\024\001\025\001\255\255\027\001\028\001\ +\255\255\255\255\031\001\032\001\033\001\034\001\035\001\255\255\ +\037\001\038\001\255\255\040\001\041\001\042\001\255\255\044\001\ +\255\255\046\001\255\255\255\255\049\001\050\001\255\255\052\001\ +\255\255\054\001\055\001\056\001\057\001\058\001\059\001\060\001\ +\061\001\062\001\063\001\064\001\255\255\066\001\255\255\068\001\ +\069\001\255\255\255\255\255\255\073\001\074\001\075\001\255\255\ +\077\001\078\001\079\001\080\001\000\000\082\001\255\255\084\001\ +\085\001\255\255\255\255\088\001\089\001\090\001\091\001\092\001\ +\093\001\094\001\255\255\096\001\097\001\098\001\099\001\100\001\ +\101\001\102\001\103\001\104\001\105\001\106\001\255\255\255\255\ +\109\001\110\001\111\001\112\001\113\001\114\001\115\001\116\001\ +\117\001\118\001\119\001\255\255\255\255\255\255\255\255\124\001\ +\125\001\126\001\127\001\128\001\255\255\130\001\131\001\132\001\ +\255\255\134\001\135\001\136\001\137\001\138\001\139\001\140\001\ +\141\001\142\001\143\001\144\001\145\001\146\001\255\255\148\001\ +\255\255\150\001\151\001\255\255\153\001\154\001\255\255\255\255\ +\157\001\158\001\159\001\160\001\161\001\162\001\163\001\164\001\ +\165\001\166\001\255\255\168\001\255\255\001\001\002\001\003\001\ +\004\001\255\255\006\001\255\255\008\001\255\255\255\255\255\255\ +\012\001\013\001\255\255\015\001\016\001\255\255\255\255\019\001\ +\020\001\021\001\022\001\023\001\024\001\025\001\255\255\027\001\ +\028\001\255\255\255\255\031\001\032\001\033\001\034\001\035\001\ +\255\255\037\001\038\001\255\255\040\001\041\001\042\001\255\255\ +\044\001\255\255\046\001\255\255\255\255\049\001\050\001\255\255\ +\052\001\255\255\054\001\055\001\056\001\057\001\058\001\059\001\ +\060\001\061\001\062\001\063\001\064\001\255\255\066\001\255\255\ +\068\001\069\001\255\255\255\255\255\255\073\001\074\001\075\001\ +\255\255\077\001\078\001\079\001\080\001\000\000\082\001\083\001\ +\084\001\085\001\255\255\255\255\088\001\089\001\090\001\091\001\ +\092\001\093\001\094\001\255\255\096\001\097\001\098\001\099\001\ +\100\001\101\001\102\001\103\001\104\001\105\001\106\001\255\255\ +\255\255\109\001\110\001\111\001\112\001\113\001\114\001\115\001\ +\116\001\117\001\118\001\119\001\255\255\255\255\255\255\255\255\ +\124\001\125\001\126\001\127\001\128\001\255\255\130\001\131\001\ +\132\001\255\255\134\001\135\001\136\001\137\001\138\001\139\001\ +\140\001\141\001\255\255\143\001\144\001\145\001\146\001\255\255\ +\148\001\255\255\150\001\151\001\255\255\153\001\154\001\255\255\ +\255\255\157\001\158\001\159\001\160\001\161\001\162\001\163\001\ +\164\001\165\001\166\001\255\255\168\001\001\001\002\001\003\001\ +\004\001\255\255\006\001\255\255\008\001\255\255\255\255\255\255\ +\012\001\013\001\014\001\015\001\016\001\017\001\255\255\019\001\ +\020\001\255\255\022\001\023\001\024\001\025\001\255\255\027\001\ +\028\001\255\255\255\255\255\255\255\255\255\255\255\255\035\001\ +\255\255\037\001\038\001\255\255\040\001\041\001\042\001\255\255\ +\044\001\255\255\046\001\255\255\255\255\049\001\050\001\255\255\ +\052\001\255\255\054\001\055\001\056\001\057\001\058\001\059\001\ +\060\001\061\001\062\001\063\001\064\001\255\255\066\001\255\255\ +\068\001\069\001\255\255\255\255\255\255\073\001\074\001\075\001\ +\255\255\077\001\078\001\079\001\080\001\000\000\082\001\255\255\ +\084\001\085\001\255\255\255\255\088\001\089\001\090\001\091\001\ +\092\001\093\001\094\001\255\255\096\001\097\001\098\001\099\001\ +\100\001\101\001\102\001\103\001\104\001\105\001\106\001\255\255\ +\255\255\109\001\110\001\111\001\112\001\113\001\114\001\115\001\ +\116\001\117\001\118\001\119\001\255\255\255\255\255\255\255\255\ +\124\001\125\001\126\001\127\001\128\001\255\255\130\001\131\001\ +\132\001\255\255\134\001\135\001\136\001\137\001\138\001\139\001\ +\140\001\141\001\142\001\143\001\144\001\145\001\146\001\255\255\ +\148\001\255\255\150\001\151\001\255\255\153\001\154\001\255\255\ +\255\255\157\001\158\001\159\001\160\001\161\001\162\001\163\001\ +\164\001\165\001\166\001\255\255\168\001\255\255\001\001\002\001\ +\003\001\004\001\255\255\006\001\255\255\008\001\255\255\255\255\ +\255\255\012\001\013\001\014\001\015\001\016\001\017\001\255\255\ +\019\001\020\001\255\255\022\001\023\001\024\001\025\001\255\255\ +\027\001\028\001\255\255\255\255\255\255\255\255\255\255\255\255\ +\035\001\255\255\037\001\038\001\255\255\040\001\041\001\042\001\ +\255\255\044\001\255\255\046\001\255\255\255\255\049\001\050\001\ +\255\255\052\001\255\255\054\001\055\001\056\001\057\001\058\001\ +\059\001\060\001\061\001\062\001\063\001\064\001\255\255\066\001\ +\255\255\068\001\069\001\255\255\255\255\255\255\073\001\074\001\ +\075\001\255\255\077\001\078\001\079\001\080\001\000\000\082\001\ +\255\255\084\001\085\001\255\255\255\255\088\001\089\001\090\001\ +\091\001\092\001\093\001\094\001\255\255\096\001\097\001\098\001\ +\099\001\100\001\101\001\102\001\103\001\104\001\105\001\106\001\ +\255\255\255\255\109\001\110\001\111\001\112\001\113\001\114\001\ +\115\001\116\001\117\001\118\001\119\001\255\255\255\255\255\255\ +\255\255\124\001\125\001\126\001\127\001\128\001\255\255\130\001\ +\131\001\132\001\255\255\134\001\135\001\136\001\137\001\138\001\ +\139\001\140\001\141\001\142\001\143\001\144\001\145\001\146\001\ +\255\255\148\001\255\255\150\001\151\001\255\255\153\001\154\001\ +\255\255\255\255\157\001\158\001\159\001\160\001\161\001\162\001\ +\163\001\164\001\165\001\166\001\255\255\168\001\001\001\002\001\ +\003\001\004\001\255\255\006\001\255\255\008\001\255\255\255\255\ +\255\255\012\001\013\001\014\001\015\001\016\001\017\001\255\255\ +\019\001\020\001\255\255\022\001\023\001\024\001\025\001\255\255\ +\027\001\028\001\255\255\255\255\255\255\255\255\255\255\255\255\ +\035\001\255\255\037\001\038\001\255\255\040\001\041\001\042\001\ +\255\255\044\001\255\255\046\001\255\255\255\255\049\001\050\001\ +\255\255\052\001\255\255\054\001\055\001\056\001\057\001\058\001\ +\059\001\060\001\061\001\062\001\063\001\064\001\255\255\066\001\ +\255\255\068\001\069\001\255\255\255\255\255\255\073\001\074\001\ +\075\001\255\255\077\001\078\001\079\001\080\001\000\000\082\001\ +\255\255\084\001\085\001\255\255\255\255\088\001\089\001\090\001\ +\091\001\092\001\093\001\094\001\255\255\096\001\097\001\098\001\ +\099\001\100\001\101\001\102\001\103\001\104\001\105\001\106\001\ +\255\255\255\255\109\001\110\001\111\001\112\001\113\001\114\001\ +\115\001\116\001\117\001\118\001\119\001\255\255\255\255\255\255\ +\255\255\124\001\125\001\126\001\127\001\128\001\255\255\130\001\ +\131\001\132\001\255\255\134\001\135\001\136\001\137\001\138\001\ +\139\001\140\001\141\001\142\001\143\001\144\001\145\001\146\001\ +\255\255\148\001\255\255\150\001\151\001\255\255\153\001\154\001\ +\255\255\255\255\157\001\158\001\159\001\160\001\161\001\162\001\ +\163\001\164\001\165\001\166\001\255\255\168\001\255\255\001\001\ +\002\001\003\001\004\001\255\255\006\001\255\255\008\001\255\255\ +\255\255\255\255\012\001\013\001\014\001\015\001\016\001\017\001\ +\255\255\019\001\020\001\255\255\022\001\023\001\024\001\025\001\ +\255\255\027\001\028\001\255\255\255\255\255\255\255\255\255\255\ +\255\255\035\001\255\255\037\001\038\001\255\255\040\001\041\001\ +\042\001\255\255\044\001\255\255\046\001\255\255\255\255\049\001\ +\050\001\255\255\052\001\255\255\054\001\055\001\056\001\057\001\ +\058\001\059\001\060\001\061\001\062\001\063\001\064\001\255\255\ +\066\001\255\255\068\001\069\001\255\255\255\255\255\255\073\001\ +\074\001\075\001\255\255\077\001\078\001\079\001\080\001\000\000\ +\082\001\255\255\084\001\085\001\255\255\255\255\088\001\089\001\ +\090\001\091\001\092\001\093\001\094\001\255\255\096\001\097\001\ +\098\001\099\001\100\001\101\001\102\001\103\001\104\001\105\001\ +\106\001\255\255\255\255\109\001\110\001\111\001\112\001\113\001\ +\114\001\115\001\116\001\117\001\118\001\119\001\255\255\255\255\ +\255\255\255\255\124\001\125\001\126\001\127\001\128\001\255\255\ +\130\001\131\001\132\001\255\255\134\001\135\001\136\001\137\001\ +\138\001\139\001\140\001\141\001\142\001\143\001\144\001\145\001\ +\146\001\255\255\148\001\255\255\150\001\151\001\255\255\153\001\ +\154\001\255\255\255\255\157\001\158\001\159\001\160\001\161\001\ +\162\001\163\001\164\001\165\001\166\001\255\255\168\001\001\001\ +\002\001\003\001\004\001\255\255\006\001\255\255\008\001\255\255\ +\255\255\255\255\012\001\013\001\014\001\015\001\016\001\017\001\ +\255\255\019\001\020\001\255\255\022\001\023\001\024\001\025\001\ +\255\255\027\001\028\001\255\255\255\255\255\255\255\255\255\255\ +\255\255\035\001\255\255\037\001\038\001\255\255\040\001\041\001\ +\042\001\255\255\044\001\255\255\046\001\255\255\255\255\049\001\ +\050\001\255\255\052\001\255\255\054\001\055\001\056\001\057\001\ +\058\001\059\001\060\001\061\001\062\001\063\001\064\001\255\255\ +\066\001\255\255\068\001\069\001\255\255\255\255\255\255\073\001\ +\074\001\075\001\255\255\077\001\078\001\079\001\080\001\000\000\ +\082\001\255\255\084\001\085\001\255\255\255\255\088\001\089\001\ +\090\001\091\001\092\001\093\001\094\001\255\255\096\001\097\001\ +\098\001\099\001\100\001\101\001\102\001\103\001\104\001\105\001\ +\106\001\255\255\255\255\109\001\110\001\111\001\112\001\113\001\ +\114\001\115\001\116\001\117\001\118\001\119\001\255\255\255\255\ +\255\255\255\255\124\001\125\001\126\001\127\001\128\001\255\255\ +\130\001\131\001\132\001\255\255\134\001\135\001\136\001\137\001\ +\138\001\139\001\140\001\141\001\142\001\143\001\144\001\145\001\ +\146\001\255\255\148\001\255\255\150\001\151\001\255\255\153\001\ +\154\001\255\255\255\255\157\001\158\001\159\001\160\001\161\001\ +\162\001\163\001\164\001\165\001\166\001\255\255\168\001\255\255\ +\001\001\002\001\003\001\004\001\255\255\006\001\255\255\008\001\ +\255\255\255\255\255\255\012\001\013\001\255\255\015\001\016\001\ +\255\255\255\255\019\001\020\001\255\255\022\001\023\001\024\001\ +\025\001\255\255\027\001\028\001\255\255\255\255\255\255\255\255\ +\255\255\255\255\035\001\255\255\037\001\038\001\255\255\040\001\ +\041\001\042\001\255\255\044\001\255\255\046\001\255\255\255\255\ +\049\001\050\001\255\255\052\001\255\255\054\001\055\001\056\001\ +\057\001\058\001\059\001\060\001\061\001\062\001\063\001\064\001\ +\255\255\066\001\255\255\068\001\069\001\255\255\255\255\255\255\ +\073\001\074\001\075\001\255\255\077\001\078\001\079\001\080\001\ +\000\000\082\001\255\255\084\001\085\001\255\255\255\255\088\001\ +\089\001\090\001\091\001\092\001\093\001\094\001\255\255\096\001\ +\097\001\098\001\099\001\100\001\101\001\102\001\103\001\104\001\ +\105\001\106\001\255\255\255\255\109\001\110\001\111\001\112\001\ +\113\001\114\001\115\001\116\001\117\001\118\001\119\001\255\255\ +\255\255\255\255\255\255\124\001\125\001\126\001\127\001\128\001\ +\255\255\130\001\131\001\132\001\255\255\134\001\135\001\136\001\ +\137\001\138\001\139\001\140\001\141\001\255\255\143\001\144\001\ +\145\001\146\001\255\255\148\001\255\255\150\001\151\001\255\255\ +\153\001\154\001\255\255\255\255\157\001\158\001\159\001\160\001\ +\161\001\162\001\163\001\164\001\165\001\166\001\255\255\168\001\ +\001\001\002\001\003\001\004\001\255\255\006\001\255\255\008\001\ +\255\255\255\255\255\255\012\001\013\001\255\255\015\001\016\001\ +\255\255\255\255\019\001\020\001\255\255\022\001\023\001\024\001\ +\025\001\255\255\027\001\028\001\255\255\255\255\255\255\255\255\ +\255\255\255\255\035\001\255\255\037\001\038\001\255\255\040\001\ +\041\001\042\001\255\255\044\001\255\255\046\001\255\255\255\255\ +\049\001\050\001\255\255\052\001\255\255\054\001\055\001\056\001\ +\057\001\058\001\059\001\060\001\061\001\062\001\063\001\064\001\ +\255\255\066\001\255\255\068\001\069\001\255\255\255\255\255\255\ +\073\001\074\001\075\001\255\255\077\001\078\001\079\001\080\001\ +\000\000\082\001\255\255\084\001\085\001\255\255\255\255\088\001\ +\089\001\090\001\091\001\092\001\093\001\094\001\255\255\096\001\ +\097\001\098\001\099\001\100\001\101\001\102\001\103\001\104\001\ +\105\001\106\001\255\255\255\255\109\001\110\001\111\001\112\001\ +\113\001\114\001\115\001\116\001\117\001\118\001\119\001\255\255\ +\255\255\255\255\255\255\124\001\125\001\126\001\127\001\128\001\ +\255\255\130\001\131\001\132\001\255\255\134\001\135\001\136\001\ +\137\001\138\001\139\001\140\001\141\001\255\255\143\001\144\001\ +\145\001\146\001\255\255\148\001\255\255\150\001\151\001\255\255\ +\153\001\154\001\255\255\255\255\157\001\158\001\159\001\160\001\ +\161\001\162\001\163\001\164\001\165\001\166\001\255\255\168\001\ +\255\255\001\001\002\001\003\001\004\001\255\255\006\001\255\255\ +\008\001\255\255\255\255\255\255\012\001\013\001\255\255\015\001\ +\016\001\255\255\255\255\019\001\020\001\255\255\022\001\023\001\ +\024\001\025\001\255\255\027\001\028\001\255\255\255\255\255\255\ +\255\255\255\255\255\255\035\001\255\255\037\001\038\001\255\255\ +\040\001\041\001\042\001\255\255\044\001\255\255\046\001\255\255\ +\255\255\049\001\050\001\255\255\052\001\255\255\054\001\055\001\ +\056\001\057\001\058\001\059\001\060\001\061\001\062\001\063\001\ +\064\001\255\255\066\001\255\255\068\001\069\001\255\255\255\255\ +\255\255\073\001\074\001\075\001\255\255\077\001\078\001\079\001\ +\080\001\000\000\082\001\255\255\084\001\085\001\255\255\255\255\ +\088\001\089\001\090\001\091\001\092\001\093\001\094\001\255\255\ +\096\001\097\001\098\001\099\001\100\001\101\001\102\001\103\001\ +\104\001\105\001\106\001\255\255\255\255\109\001\110\001\111\001\ +\112\001\113\001\114\001\115\001\116\001\117\001\118\001\119\001\ +\255\255\255\255\255\255\255\255\124\001\125\001\126\001\127\001\ +\128\001\255\255\130\001\131\001\132\001\255\255\134\001\135\001\ +\136\001\137\001\138\001\139\001\140\001\141\001\255\255\143\001\ +\144\001\145\001\146\001\255\255\148\001\255\255\150\001\151\001\ +\255\255\153\001\154\001\255\255\255\255\157\001\158\001\159\001\ +\160\001\161\001\162\001\163\001\164\001\165\001\166\001\255\255\ +\168\001\001\001\002\001\003\001\004\001\255\255\006\001\255\255\ +\008\001\255\255\255\255\255\255\012\001\013\001\255\255\015\001\ +\016\001\255\255\255\255\019\001\020\001\255\255\022\001\023\001\ +\024\001\025\001\255\255\027\001\028\001\255\255\255\255\255\255\ +\255\255\255\255\255\255\035\001\255\255\037\001\038\001\255\255\ +\040\001\041\001\042\001\255\255\044\001\255\255\046\001\255\255\ +\255\255\049\001\050\001\255\255\052\001\255\255\054\001\055\001\ +\056\001\057\001\058\001\059\001\060\001\061\001\062\001\063\001\ +\064\001\255\255\066\001\255\255\068\001\069\001\255\255\255\255\ +\255\255\073\001\074\001\075\001\255\255\077\001\078\001\079\001\ +\080\001\000\000\082\001\255\255\084\001\085\001\255\255\255\255\ +\088\001\089\001\090\001\091\001\092\001\093\001\094\001\255\255\ +\096\001\097\001\098\001\099\001\100\001\101\001\102\001\103\001\ +\104\001\105\001\106\001\255\255\255\255\109\001\110\001\111\001\ +\112\001\113\001\114\001\115\001\116\001\117\001\118\001\119\001\ +\255\255\255\255\255\255\255\255\124\001\125\001\126\001\127\001\ +\128\001\255\255\130\001\131\001\132\001\255\255\134\001\135\001\ +\136\001\137\001\138\001\139\001\140\001\141\001\255\255\143\001\ +\144\001\145\001\146\001\255\255\148\001\255\255\150\001\151\001\ +\255\255\153\001\154\001\255\255\255\255\157\001\158\001\159\001\ +\160\001\161\001\162\001\163\001\164\001\165\001\166\001\255\255\ +\168\001\255\255\001\001\002\001\003\001\004\001\255\255\006\001\ +\255\255\008\001\255\255\255\255\255\255\012\001\013\001\255\255\ +\015\001\016\001\255\255\255\255\019\001\020\001\255\255\022\001\ +\023\001\024\001\025\001\255\255\027\001\028\001\255\255\255\255\ +\255\255\255\255\255\255\255\255\035\001\255\255\037\001\038\001\ +\255\255\040\001\041\001\042\001\255\255\044\001\255\255\046\001\ +\255\255\255\255\049\001\050\001\255\255\052\001\255\255\054\001\ +\055\001\056\001\057\001\058\001\059\001\060\001\061\001\062\001\ +\063\001\064\001\255\255\066\001\255\255\068\001\069\001\255\255\ +\255\255\255\255\073\001\074\001\075\001\255\255\077\001\078\001\ +\079\001\080\001\000\000\082\001\255\255\084\001\085\001\255\255\ +\255\255\088\001\089\001\090\001\091\001\092\001\093\001\094\001\ +\255\255\096\001\097\001\098\001\099\001\100\001\101\001\102\001\ +\103\001\104\001\105\001\106\001\255\255\255\255\109\001\110\001\ +\111\001\112\001\113\001\114\001\115\001\116\001\117\001\118\001\ +\119\001\255\255\255\255\255\255\255\255\124\001\125\001\126\001\ +\127\001\128\001\255\255\130\001\131\001\132\001\255\255\134\001\ +\135\001\136\001\137\001\138\001\139\001\140\001\141\001\255\255\ +\143\001\144\001\145\001\146\001\255\255\148\001\255\255\150\001\ +\151\001\255\255\153\001\154\001\255\255\255\255\157\001\158\001\ +\159\001\160\001\161\001\162\001\163\001\164\001\165\001\166\001\ +\255\255\168\001\001\001\002\001\003\001\004\001\255\255\006\001\ +\255\255\008\001\255\255\255\255\255\255\255\255\013\001\014\001\ +\015\001\255\255\017\001\255\255\255\255\020\001\255\255\022\001\ +\023\001\024\001\025\001\255\255\027\001\028\001\255\255\255\255\ +\255\255\255\255\255\255\255\255\035\001\255\255\037\001\038\001\ +\255\255\040\001\041\001\042\001\255\255\255\255\255\255\046\001\ +\255\255\255\255\255\255\255\255\255\255\052\001\255\255\054\001\ +\055\001\056\001\057\001\058\001\059\001\255\255\255\255\255\255\ +\255\255\255\255\255\255\066\001\255\255\068\001\069\001\255\255\ +\255\255\255\255\255\255\074\001\075\001\255\255\255\255\255\255\ +\079\001\080\001\000\000\082\001\255\255\255\255\255\255\255\255\ +\255\255\088\001\089\001\255\255\091\001\092\001\093\001\094\001\ +\255\255\096\001\097\001\098\001\099\001\100\001\101\001\102\001\ +\103\001\104\001\105\001\255\255\255\255\255\255\255\255\110\001\ +\111\001\112\001\113\001\114\001\115\001\116\001\117\001\118\001\ +\119\001\255\255\255\255\255\255\255\255\255\255\125\001\126\001\ +\127\001\255\255\255\255\130\001\131\001\255\255\255\255\134\001\ +\135\001\136\001\137\001\138\001\255\255\255\255\141\001\142\001\ +\255\255\144\001\145\001\146\001\255\255\148\001\255\255\150\001\ +\255\255\255\255\255\255\154\001\255\255\255\255\255\255\255\255\ +\255\255\255\255\255\255\162\001\163\001\255\255\165\001\166\001\ +\255\255\168\001\255\255\001\001\002\001\003\001\004\001\255\255\ +\006\001\255\255\008\001\255\255\255\255\255\255\255\255\013\001\ +\014\001\015\001\255\255\017\001\255\255\255\255\020\001\255\255\ +\022\001\023\001\024\001\025\001\255\255\027\001\028\001\255\255\ +\255\255\255\255\255\255\255\255\255\255\035\001\255\255\037\001\ +\038\001\255\255\040\001\041\001\042\001\255\255\255\255\255\255\ +\046\001\255\255\255\255\255\255\255\255\255\255\052\001\255\255\ +\054\001\055\001\056\001\057\001\058\001\059\001\255\255\255\255\ +\255\255\255\255\255\255\255\255\066\001\255\255\068\001\255\255\ +\255\255\255\255\255\255\255\255\074\001\075\001\255\255\255\255\ +\255\255\079\001\080\001\000\000\082\001\255\255\255\255\255\255\ +\255\255\255\255\088\001\089\001\255\255\091\001\092\001\093\001\ +\094\001\255\255\096\001\097\001\098\001\099\001\100\001\101\001\ +\102\001\103\001\104\001\105\001\255\255\255\255\255\255\255\255\ +\110\001\111\001\112\001\113\001\114\001\115\001\116\001\117\001\ +\118\001\119\001\255\255\255\255\255\255\255\255\255\255\125\001\ +\126\001\127\001\255\255\255\255\130\001\131\001\255\255\255\255\ +\134\001\135\001\136\001\137\001\138\001\255\255\255\255\141\001\ +\142\001\255\255\144\001\145\001\146\001\255\255\148\001\255\255\ +\150\001\255\255\255\255\255\255\154\001\255\255\255\255\255\255\ +\255\255\255\255\255\255\255\255\162\001\163\001\255\255\165\001\ +\166\001\255\255\168\001\001\001\002\001\003\001\004\001\255\255\ +\006\001\255\255\008\001\255\255\255\255\255\255\255\255\013\001\ +\014\001\015\001\255\255\017\001\255\255\255\255\020\001\255\255\ +\022\001\023\001\024\001\025\001\255\255\027\001\028\001\255\255\ +\255\255\255\255\255\255\255\255\255\255\035\001\255\255\037\001\ +\038\001\255\255\040\001\041\001\042\001\255\255\255\255\255\255\ +\046\001\255\255\255\255\255\255\255\255\255\255\052\001\255\255\ +\054\001\055\001\056\001\057\001\058\001\059\001\255\255\255\255\ +\255\255\255\255\255\255\255\255\066\001\255\255\068\001\255\255\ +\255\255\255\255\255\255\255\255\074\001\075\001\255\255\255\255\ +\255\255\079\001\080\001\000\000\082\001\255\255\255\255\255\255\ +\255\255\255\255\088\001\089\001\255\255\091\001\092\001\093\001\ +\094\001\255\255\096\001\097\001\098\001\099\001\100\001\101\001\ +\102\001\103\001\104\001\105\001\255\255\255\255\255\255\255\255\ +\110\001\111\001\112\001\113\001\114\001\115\001\116\001\117\001\ +\118\001\119\001\255\255\255\255\255\255\255\255\255\255\125\001\ +\126\001\127\001\255\255\255\255\130\001\131\001\255\255\255\255\ +\134\001\135\001\136\001\137\001\138\001\255\255\255\255\141\001\ +\142\001\255\255\144\001\145\001\146\001\255\255\148\001\255\255\ +\150\001\255\255\255\255\255\255\154\001\255\255\255\255\255\255\ +\255\255\255\255\255\255\255\255\162\001\163\001\255\255\165\001\ +\166\001\255\255\168\001\255\255\001\001\002\001\003\001\004\001\ +\255\255\006\001\255\255\008\001\255\255\255\255\255\255\255\255\ +\013\001\014\001\015\001\255\255\017\001\255\255\255\255\020\001\ +\255\255\022\001\023\001\024\001\025\001\255\255\027\001\028\001\ +\255\255\255\255\255\255\255\255\255\255\255\255\035\001\255\255\ +\037\001\038\001\255\255\040\001\041\001\042\001\255\255\255\255\ +\255\255\046\001\255\255\255\255\255\255\255\255\255\255\052\001\ +\255\255\054\001\055\001\056\001\057\001\058\001\059\001\255\255\ +\255\255\255\255\255\255\255\255\255\255\066\001\255\255\068\001\ +\255\255\255\255\255\255\255\255\255\255\074\001\075\001\255\255\ +\255\255\255\255\079\001\080\001\000\000\082\001\255\255\255\255\ +\255\255\255\255\255\255\088\001\089\001\255\255\091\001\092\001\ +\093\001\094\001\255\255\096\001\097\001\098\001\099\001\100\001\ +\101\001\102\001\103\001\104\001\255\255\255\255\255\255\255\255\ +\255\255\110\001\111\001\112\001\113\001\114\001\115\001\116\001\ +\117\001\118\001\119\001\255\255\255\255\255\255\255\255\255\255\ +\125\001\126\001\127\001\255\255\255\255\130\001\131\001\255\255\ +\255\255\134\001\135\001\136\001\137\001\138\001\255\255\255\255\ +\141\001\142\001\255\255\144\001\145\001\146\001\255\255\148\001\ +\255\255\150\001\255\255\255\255\255\255\154\001\255\255\255\255\ +\255\255\255\255\255\255\255\255\255\255\162\001\163\001\255\255\ +\165\001\166\001\255\255\168\001\001\001\002\001\003\001\004\001\ +\255\255\006\001\255\255\008\001\255\255\255\255\255\255\255\255\ +\013\001\014\001\015\001\255\255\017\001\255\255\255\255\020\001\ +\255\255\022\001\023\001\024\001\025\001\255\255\027\001\028\001\ +\255\255\255\255\255\255\255\255\255\255\255\255\035\001\255\255\ +\037\001\038\001\255\255\040\001\041\001\042\001\255\255\255\255\ +\255\255\046\001\255\255\255\255\255\255\255\255\255\255\052\001\ +\255\255\054\001\055\001\056\001\057\001\058\001\059\001\255\255\ +\255\255\255\255\255\255\255\255\255\255\066\001\255\255\068\001\ +\255\255\255\255\255\255\255\255\255\255\074\001\075\001\255\255\ +\255\255\255\255\079\001\080\001\000\000\082\001\255\255\255\255\ +\255\255\255\255\255\255\088\001\089\001\255\255\091\001\092\001\ +\093\001\094\001\255\255\096\001\097\001\098\001\099\001\100\001\ +\101\001\102\001\103\001\104\001\255\255\255\255\255\255\255\255\ +\255\255\110\001\111\001\112\001\113\001\114\001\115\001\116\001\ +\117\001\118\001\119\001\255\255\255\255\255\255\255\255\255\255\ +\125\001\126\001\127\001\255\255\255\255\130\001\131\001\255\255\ +\255\255\134\001\135\001\136\001\137\001\138\001\255\255\255\255\ +\141\001\142\001\255\255\144\001\145\001\146\001\255\255\148\001\ +\255\255\150\001\255\255\255\255\255\255\154\001\255\255\255\255\ +\255\255\255\255\255\255\255\255\255\255\162\001\163\001\255\255\ +\165\001\166\001\255\255\168\001\255\255\001\001\002\001\003\001\ +\004\001\255\255\006\001\255\255\255\255\255\255\255\255\255\255\ +\255\255\013\001\014\001\015\001\255\255\017\001\255\255\255\255\ +\020\001\255\255\022\001\023\001\024\001\025\001\255\255\027\001\ +\028\001\255\255\255\255\255\255\255\255\255\255\255\255\035\001\ +\255\255\037\001\038\001\255\255\040\001\041\001\042\001\255\255\ +\255\255\255\255\046\001\255\255\255\255\255\255\255\255\255\255\ +\052\001\255\255\054\001\055\001\056\001\057\001\058\001\059\001\ +\255\255\255\255\255\255\255\255\255\255\255\255\066\001\255\255\ +\068\001\255\255\255\255\255\255\255\255\255\255\074\001\075\001\ +\255\255\255\255\255\255\079\001\080\001\000\000\082\001\255\255\ +\255\255\255\255\255\255\255\255\088\001\089\001\255\255\091\001\ +\092\001\093\001\094\001\255\255\096\001\097\001\098\001\099\001\ +\100\001\101\001\102\001\103\001\104\001\255\255\255\255\255\255\ +\255\255\255\255\110\001\111\001\112\001\113\001\114\001\115\001\ +\116\001\117\001\118\001\119\001\255\255\255\255\255\255\255\255\ +\255\255\125\001\126\001\127\001\255\255\255\255\130\001\131\001\ +\255\255\255\255\134\001\135\001\136\001\137\001\138\001\255\255\ +\255\255\141\001\142\001\255\255\144\001\145\001\146\001\255\255\ +\148\001\255\255\150\001\255\255\255\255\255\255\154\001\255\255\ +\255\255\255\255\255\255\255\255\255\255\255\255\162\001\163\001\ +\255\255\165\001\166\001\255\255\168\001\255\255\002\001\003\001\ +\004\001\255\255\006\001\255\255\255\255\255\255\255\255\255\255\ +\255\255\013\001\014\001\015\001\255\255\017\001\255\255\255\255\ +\020\001\255\255\022\001\023\001\024\001\025\001\255\255\027\001\ +\028\001\255\255\255\255\255\255\255\255\255\255\255\255\035\001\ +\255\255\037\001\038\001\255\255\040\001\041\001\042\001\255\255\ +\255\255\255\255\046\001\255\255\255\255\255\255\255\255\255\255\ +\052\001\255\255\054\001\055\001\056\001\057\001\058\001\059\001\ +\255\255\255\255\255\255\255\255\255\255\255\255\066\001\255\255\ +\068\001\255\255\255\255\255\255\255\255\255\255\074\001\075\001\ +\255\255\255\255\255\255\079\001\080\001\000\000\082\001\255\255\ +\255\255\255\255\255\255\255\255\088\001\089\001\255\255\091\001\ +\092\001\093\001\094\001\255\255\096\001\097\001\098\001\099\001\ +\100\001\101\001\102\001\103\001\255\255\255\255\255\255\255\255\ +\255\255\255\255\110\001\111\001\112\001\113\001\114\001\115\001\ +\116\001\117\001\118\001\119\001\255\255\255\255\255\255\255\255\ +\255\255\125\001\126\001\127\001\255\255\255\255\130\001\131\001\ +\255\255\255\255\134\001\135\001\136\001\137\001\138\001\255\255\ +\255\255\141\001\142\001\255\255\144\001\145\001\146\001\255\255\ +\148\001\255\255\150\001\255\255\255\255\255\255\154\001\255\255\ +\255\255\255\255\255\255\255\255\255\255\255\255\162\001\163\001\ +\255\255\165\001\166\001\255\255\168\001\255\255\255\255\002\001\ +\003\001\004\001\255\255\006\001\255\255\255\255\255\255\255\255\ +\255\255\255\255\013\001\014\001\015\001\255\255\017\001\255\255\ +\255\255\020\001\255\255\255\255\023\001\024\001\025\001\255\255\ +\027\001\028\001\255\255\255\255\255\255\255\255\255\255\255\255\ +\035\001\255\255\037\001\038\001\255\255\040\001\041\001\042\001\ +\255\255\255\255\255\255\046\001\255\255\255\255\255\255\255\255\ +\255\255\052\001\255\255\054\001\055\001\056\001\057\001\058\001\ +\059\001\255\255\255\255\255\255\255\255\255\255\255\255\066\001\ +\255\255\068\001\255\255\255\255\255\255\255\255\255\255\074\001\ +\075\001\255\255\255\255\255\255\079\001\080\001\000\000\082\001\ +\255\255\255\255\255\255\255\255\255\255\088\001\089\001\255\255\ +\091\001\092\001\093\001\094\001\255\255\096\001\097\001\098\001\ +\099\001\100\001\101\001\102\001\103\001\255\255\255\255\255\255\ +\255\255\255\255\255\255\110\001\111\001\112\001\113\001\114\001\ +\115\001\116\001\117\001\118\001\119\001\255\255\255\255\255\255\ +\255\255\255\255\125\001\126\001\127\001\255\255\255\255\130\001\ +\131\001\255\255\255\255\134\001\135\001\136\001\137\001\138\001\ +\255\255\255\255\141\001\142\001\255\255\144\001\145\001\146\001\ +\255\255\148\001\255\255\150\001\255\255\255\255\255\255\154\001\ +\255\255\255\255\255\255\255\255\255\255\255\255\255\255\162\001\ +\163\001\255\255\165\001\166\001\255\255\168\001\255\255\002\001\ +\003\001\004\001\255\255\006\001\255\255\255\255\255\255\255\255\ +\255\255\255\255\013\001\014\001\015\001\255\255\017\001\255\255\ +\255\255\020\001\255\255\255\255\023\001\024\001\025\001\255\255\ +\027\001\028\001\255\255\255\255\255\255\255\255\255\255\255\255\ +\035\001\255\255\037\001\038\001\255\255\040\001\041\001\042\001\ +\255\255\255\255\255\255\046\001\255\255\255\255\255\255\255\255\ +\255\255\052\001\255\255\054\001\055\001\056\001\057\001\058\001\ +\059\001\255\255\255\255\255\255\255\255\255\255\255\255\066\001\ +\255\255\068\001\255\255\255\255\255\255\255\255\255\255\074\001\ +\075\001\255\255\255\255\255\255\079\001\080\001\000\000\082\001\ +\255\255\255\255\255\255\255\255\255\255\088\001\089\001\255\255\ +\091\001\092\001\093\001\094\001\255\255\096\001\097\001\098\001\ +\099\001\100\001\101\001\102\001\103\001\255\255\255\255\255\255\ +\255\255\255\255\255\255\110\001\111\001\112\001\113\001\114\001\ +\115\001\116\001\117\001\118\001\119\001\255\255\255\255\255\255\ +\255\255\255\255\125\001\126\001\127\001\255\255\255\255\130\001\ +\131\001\255\255\255\255\134\001\135\001\136\001\137\001\138\001\ +\255\255\255\255\141\001\142\001\255\255\144\001\145\001\146\001\ +\255\255\148\001\255\255\150\001\255\255\255\255\255\255\154\001\ +\255\255\255\255\255\255\255\255\255\255\255\255\255\255\162\001\ +\163\001\255\255\165\001\166\001\255\255\168\001\255\255\255\255\ +\002\001\003\001\004\001\255\255\006\001\255\255\255\255\255\255\ +\255\255\255\255\255\255\013\001\014\001\015\001\255\255\017\001\ +\255\255\255\255\020\001\255\255\255\255\023\001\024\001\025\001\ +\255\255\027\001\028\001\255\255\255\255\255\255\255\255\255\255\ +\255\255\035\001\255\255\037\001\038\001\255\255\040\001\041\001\ +\042\001\255\255\255\255\255\255\046\001\255\255\255\255\255\255\ +\255\255\255\255\052\001\255\255\054\001\055\001\056\001\057\001\ +\058\001\059\001\255\255\255\255\255\255\255\255\255\255\255\255\ +\066\001\255\255\068\001\255\255\255\255\255\255\255\255\255\255\ +\074\001\075\001\255\255\255\255\255\255\079\001\080\001\000\000\ +\082\001\255\255\255\255\255\255\255\255\255\255\255\255\089\001\ +\255\255\091\001\092\001\093\001\094\001\255\255\096\001\097\001\ +\098\001\099\001\100\001\101\001\255\255\255\255\255\255\255\255\ +\255\255\255\255\255\255\255\255\110\001\111\001\112\001\113\001\ +\114\001\115\001\116\001\117\001\118\001\119\001\255\255\255\255\ +\255\255\255\255\255\255\125\001\126\001\127\001\255\255\255\255\ +\130\001\131\001\255\255\255\255\134\001\135\001\136\001\137\001\ +\138\001\255\255\255\255\141\001\142\001\255\255\144\001\145\001\ +\146\001\255\255\148\001\255\255\150\001\255\255\255\255\255\255\ +\154\001\255\255\255\255\255\255\255\255\255\255\255\255\255\255\ +\162\001\163\001\255\255\165\001\166\001\255\255\168\001\255\255\ +\002\001\003\001\004\001\255\255\006\001\255\255\255\255\255\255\ +\255\255\255\255\255\255\013\001\014\001\015\001\255\255\017\001\ +\255\255\255\255\020\001\255\255\255\255\023\001\024\001\025\001\ +\255\255\027\001\028\001\255\255\255\255\255\255\255\255\255\255\ +\255\255\035\001\255\255\037\001\038\001\255\255\040\001\041\001\ +\042\001\255\255\255\255\255\255\046\001\255\255\255\255\255\255\ +\255\255\255\255\052\001\255\255\054\001\055\001\056\001\057\001\ +\058\001\059\001\255\255\255\255\255\255\255\255\255\255\255\255\ +\066\001\255\255\068\001\255\255\255\255\255\255\255\255\255\255\ +\074\001\075\001\255\255\255\255\255\255\079\001\080\001\000\000\ +\082\001\255\255\255\255\255\255\255\255\255\255\255\255\089\001\ +\255\255\091\001\092\001\093\001\094\001\255\255\096\001\097\001\ +\098\001\099\001\100\001\101\001\255\255\255\255\255\255\255\255\ +\255\255\255\255\255\255\255\255\110\001\111\001\112\001\113\001\ +\114\001\115\001\116\001\117\001\118\001\119\001\255\255\255\255\ +\255\255\255\255\255\255\125\001\126\001\127\001\255\255\255\255\ +\130\001\131\001\255\255\255\255\134\001\135\001\136\001\137\001\ +\138\001\255\255\255\255\141\001\142\001\255\255\144\001\145\001\ +\146\001\255\255\148\001\255\255\150\001\255\255\255\255\255\255\ +\154\001\255\255\255\255\255\255\255\255\255\255\255\255\255\255\ +\162\001\163\001\255\255\165\001\166\001\255\255\168\001\255\255\ +\255\255\002\001\003\001\004\001\255\255\006\001\255\255\255\255\ +\255\255\255\255\255\255\255\255\013\001\014\001\015\001\255\255\ +\017\001\255\255\255\255\020\001\255\255\255\255\023\001\024\001\ +\025\001\255\255\027\001\028\001\255\255\255\255\255\255\255\255\ +\255\255\255\255\035\001\255\255\037\001\038\001\255\255\040\001\ +\041\001\042\001\255\255\255\255\255\255\046\001\255\255\255\255\ +\255\255\255\255\255\255\052\001\255\255\054\001\055\001\056\001\ +\057\001\058\001\059\001\255\255\255\255\255\255\255\255\255\255\ +\255\255\066\001\255\255\068\001\255\255\255\255\255\255\255\255\ +\255\255\074\001\075\001\255\255\255\255\255\255\079\001\080\001\ +\000\000\082\001\255\255\255\255\255\255\255\255\255\255\255\255\ +\089\001\255\255\091\001\092\001\093\001\094\001\255\255\096\001\ +\097\001\098\001\099\001\100\001\101\001\255\255\255\255\255\255\ +\255\255\255\255\255\255\255\255\255\255\255\255\111\001\112\001\ +\113\001\114\001\115\001\116\001\117\001\118\001\119\001\255\255\ +\255\255\255\255\255\255\255\255\125\001\126\001\127\001\255\255\ +\255\255\130\001\131\001\255\255\255\255\134\001\135\001\136\001\ +\137\001\138\001\255\255\255\255\141\001\142\001\255\255\144\001\ +\145\001\146\001\255\255\148\001\255\255\150\001\255\255\255\255\ +\255\255\154\001\255\255\255\255\255\255\255\255\255\255\255\255\ +\255\255\162\001\163\001\255\255\165\001\166\001\255\255\168\001\ +\255\255\002\001\003\001\004\001\255\255\006\001\255\255\255\255\ +\255\255\255\255\255\255\255\255\013\001\014\001\015\001\255\255\ +\017\001\255\255\255\255\020\001\255\255\255\255\023\001\024\001\ +\025\001\255\255\027\001\028\001\255\255\255\255\255\255\255\255\ +\255\255\255\255\035\001\255\255\037\001\038\001\255\255\040\001\ +\041\001\042\001\255\255\255\255\255\255\046\001\255\255\255\255\ +\255\255\255\255\255\255\052\001\255\255\054\001\055\001\056\001\ +\057\001\058\001\059\001\255\255\255\255\255\255\255\255\255\255\ +\255\255\066\001\255\255\068\001\255\255\255\255\255\255\255\255\ +\255\255\074\001\075\001\255\255\255\255\255\255\079\001\080\001\ +\000\000\082\001\255\255\255\255\255\255\255\255\255\255\255\255\ +\089\001\255\255\091\001\092\001\093\001\094\001\255\255\096\001\ +\097\001\098\001\099\001\100\001\255\255\255\255\255\255\255\255\ +\255\255\255\255\255\255\255\255\255\255\255\255\111\001\112\001\ +\113\001\114\001\115\001\116\001\117\001\118\001\119\001\255\255\ +\255\255\255\255\255\255\255\255\125\001\126\001\127\001\255\255\ +\255\255\130\001\131\001\255\255\255\255\134\001\135\001\136\001\ +\137\001\138\001\255\255\255\255\141\001\142\001\255\255\144\001\ +\145\001\146\001\255\255\148\001\255\255\150\001\255\255\255\255\ +\255\255\154\001\255\255\255\255\255\255\255\255\255\255\255\255\ +\255\255\162\001\163\001\255\255\165\001\166\001\255\255\168\001\ +\255\255\255\255\002\001\003\001\004\001\255\255\006\001\255\255\ +\255\255\255\255\255\255\255\255\255\255\013\001\014\001\015\001\ +\255\255\017\001\255\255\255\255\020\001\255\255\255\255\023\001\ +\024\001\025\001\255\255\027\001\028\001\255\255\255\255\255\255\ +\255\255\255\255\255\255\035\001\255\255\037\001\038\001\255\255\ +\040\001\041\001\042\001\255\255\255\255\255\255\046\001\255\255\ +\255\255\255\255\255\255\255\255\052\001\255\255\054\001\055\001\ +\056\001\057\001\058\001\059\001\255\255\255\255\255\255\255\255\ +\255\255\255\255\066\001\255\255\068\001\255\255\255\255\255\255\ +\255\255\255\255\074\001\075\001\255\255\255\255\255\255\079\001\ +\080\001\000\000\082\001\255\255\255\255\255\255\255\255\255\255\ +\255\255\089\001\255\255\091\001\092\001\093\001\094\001\255\255\ +\096\001\097\001\098\001\099\001\100\001\255\255\255\255\255\255\ +\255\255\255\255\255\255\255\255\255\255\255\255\255\255\111\001\ +\112\001\113\001\114\001\115\001\116\001\117\001\118\001\119\001\ +\255\255\255\255\255\255\255\255\255\255\125\001\126\001\127\001\ +\255\255\255\255\130\001\131\001\255\255\255\255\134\001\135\001\ +\136\001\137\001\138\001\255\255\255\255\141\001\142\001\255\255\ +\144\001\145\001\146\001\255\255\148\001\255\255\150\001\255\255\ +\255\255\255\255\154\001\255\255\255\255\255\255\255\255\255\255\ +\255\255\255\255\162\001\163\001\255\255\165\001\166\001\255\255\ +\168\001\255\255\002\001\003\001\004\001\255\255\006\001\255\255\ +\255\255\255\255\255\255\255\255\255\255\013\001\014\001\015\001\ +\255\255\017\001\255\255\255\255\020\001\255\255\255\255\023\001\ +\024\001\025\001\255\255\027\001\028\001\255\255\255\255\255\255\ +\255\255\255\255\255\255\035\001\255\255\037\001\038\001\255\255\ +\255\255\041\001\042\001\255\255\255\255\255\255\046\001\255\255\ +\255\255\255\255\255\255\255\255\052\001\255\255\054\001\055\001\ +\056\001\057\001\058\001\059\001\255\255\255\255\255\255\255\255\ +\255\255\255\255\066\001\255\255\068\001\255\255\255\255\255\255\ +\255\255\255\255\074\001\075\001\255\255\255\255\255\255\079\001\ +\080\001\000\000\082\001\255\255\255\255\255\255\255\255\255\255\ +\255\255\089\001\255\255\091\001\092\001\093\001\094\001\255\255\ +\096\001\097\001\098\001\099\001\255\255\255\255\255\255\255\255\ +\255\255\255\255\255\255\255\255\255\255\255\255\255\255\111\001\ +\112\001\113\001\114\001\115\001\116\001\117\001\118\001\119\001\ +\255\255\255\255\255\255\255\255\255\255\125\001\126\001\127\001\ +\255\255\255\255\130\001\131\001\255\255\255\255\134\001\135\001\ +\136\001\137\001\138\001\255\255\255\255\141\001\142\001\255\255\ +\144\001\145\001\146\001\255\255\148\001\255\255\150\001\255\255\ +\255\255\255\255\154\001\255\255\255\255\255\255\255\255\255\255\ +\255\255\255\255\162\001\163\001\255\255\165\001\166\001\255\255\ +\168\001\255\255\255\255\002\001\003\001\004\001\255\255\006\001\ +\255\255\255\255\255\255\255\255\255\255\255\255\013\001\014\001\ +\015\001\255\255\017\001\255\255\255\255\020\001\255\255\255\255\ +\023\001\024\001\025\001\255\255\027\001\028\001\255\255\255\255\ +\255\255\255\255\255\255\255\255\035\001\255\255\037\001\038\001\ +\255\255\255\255\041\001\042\001\255\255\255\255\255\255\046\001\ +\255\255\255\255\255\255\255\255\255\255\052\001\255\255\054\001\ +\055\001\056\001\057\001\058\001\059\001\255\255\255\255\255\255\ +\255\255\255\255\255\255\066\001\255\255\068\001\255\255\255\255\ +\255\255\255\255\255\255\074\001\075\001\255\255\255\255\255\255\ +\079\001\080\001\000\000\082\001\255\255\255\255\255\255\255\255\ +\255\255\255\255\089\001\255\255\091\001\092\001\093\001\094\001\ +\255\255\096\001\097\001\098\001\255\255\255\255\255\255\255\255\ +\255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\ +\111\001\112\001\113\001\114\001\115\001\116\001\117\001\118\001\ +\119\001\255\255\255\255\255\255\255\255\255\255\125\001\126\001\ +\127\001\255\255\255\255\130\001\131\001\255\255\255\255\134\001\ +\135\001\136\001\137\001\138\001\255\255\255\255\141\001\142\001\ +\255\255\144\001\145\001\146\001\255\255\148\001\255\255\150\001\ +\255\255\255\255\255\255\154\001\255\255\255\255\255\255\255\255\ +\255\255\255\255\255\255\162\001\163\001\255\255\165\001\166\001\ +\255\255\168\001\255\255\002\001\003\001\004\001\255\255\006\001\ +\255\255\255\255\255\255\255\255\255\255\255\255\013\001\014\001\ +\015\001\255\255\017\001\255\255\255\255\020\001\255\255\255\255\ +\255\255\024\001\025\001\255\255\027\001\028\001\255\255\255\255\ +\255\255\255\255\255\255\255\255\035\001\255\255\037\001\038\001\ +\255\255\255\255\041\001\042\001\255\255\255\255\255\255\046\001\ +\255\255\255\255\255\255\255\255\255\255\052\001\255\255\054\001\ +\055\001\056\001\057\001\058\001\059\001\255\255\255\255\255\255\ +\255\255\255\255\255\255\066\001\255\255\068\001\255\255\255\255\ +\255\255\255\255\255\255\074\001\075\001\255\255\255\255\255\255\ +\079\001\080\001\000\000\082\001\255\255\255\255\255\255\255\255\ +\255\255\255\255\089\001\255\255\091\001\092\001\093\001\094\001\ +\255\255\096\001\097\001\255\255\255\255\255\255\255\255\255\255\ +\255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\ +\111\001\112\001\113\001\114\001\115\001\116\001\117\001\118\001\ +\119\001\255\255\255\255\255\255\255\255\255\255\125\001\126\001\ +\127\001\255\255\255\255\130\001\131\001\255\255\255\255\134\001\ +\135\001\136\001\137\001\138\001\255\255\255\255\141\001\142\001\ +\255\255\144\001\145\001\146\001\255\255\148\001\255\255\150\001\ +\255\255\255\255\255\255\154\001\255\255\255\255\255\255\255\255\ +\255\255\255\255\255\255\162\001\163\001\255\255\165\001\166\001\ +\255\255\168\001\255\255\255\255\002\001\003\001\004\001\255\255\ +\006\001\255\255\255\255\255\255\255\255\255\255\255\255\013\001\ +\014\001\015\001\255\255\017\001\255\255\255\255\020\001\255\255\ +\255\255\255\255\024\001\025\001\255\255\027\001\028\001\255\255\ +\255\255\255\255\255\255\255\255\255\255\035\001\255\255\037\001\ +\038\001\255\255\255\255\041\001\042\001\255\255\255\255\255\255\ +\046\001\255\255\255\255\255\255\255\255\255\255\052\001\255\255\ +\054\001\055\001\056\001\057\001\058\001\059\001\255\255\255\255\ +\255\255\255\255\255\255\255\255\066\001\255\255\068\001\255\255\ +\255\255\255\255\255\255\255\255\074\001\075\001\255\255\255\255\ +\255\255\079\001\080\001\000\000\082\001\255\255\255\255\255\255\ +\255\255\255\255\255\255\089\001\255\255\091\001\092\001\093\001\ +\094\001\255\255\096\001\097\001\255\255\255\255\255\255\255\255\ +\255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\ +\255\255\111\001\112\001\113\001\114\001\115\001\116\001\117\001\ +\118\001\119\001\255\255\255\255\255\255\255\255\255\255\125\001\ +\126\001\127\001\255\255\255\255\130\001\131\001\255\255\255\255\ +\134\001\135\001\136\001\137\001\138\001\255\255\255\255\141\001\ +\142\001\255\255\144\001\145\001\146\001\255\255\148\001\255\255\ +\150\001\255\255\255\255\255\255\154\001\255\255\255\255\255\255\ +\255\255\255\255\255\255\255\255\162\001\163\001\255\255\165\001\ +\166\001\255\255\168\001\255\255\002\001\003\001\004\001\255\255\ +\006\001\255\255\255\255\255\255\255\255\255\255\255\255\013\001\ +\014\001\015\001\255\255\017\001\255\255\255\255\020\001\255\255\ +\255\255\255\255\255\255\025\001\255\255\027\001\028\001\255\255\ +\255\255\255\255\255\255\255\255\255\255\035\001\255\255\037\001\ +\038\001\255\255\255\255\041\001\042\001\255\255\255\255\255\255\ +\046\001\255\255\255\255\255\255\255\255\255\255\052\001\255\255\ +\054\001\055\001\056\001\057\001\058\001\059\001\255\255\255\255\ +\255\255\255\255\255\255\255\255\066\001\255\255\068\001\255\255\ +\255\255\255\255\255\255\255\255\074\001\075\001\255\255\255\255\ +\255\255\079\001\080\001\000\000\082\001\255\255\255\255\255\255\ +\255\255\255\255\255\255\089\001\255\255\091\001\092\001\093\001\ +\094\001\255\255\096\001\097\001\255\255\255\255\255\255\255\255\ +\255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\ +\255\255\111\001\112\001\113\001\114\001\115\001\116\001\117\001\ +\118\001\119\001\255\255\255\255\255\255\255\255\255\255\125\001\ +\126\001\127\001\255\255\255\255\130\001\131\001\255\255\255\255\ +\134\001\135\001\136\001\137\001\138\001\255\255\255\255\141\001\ +\142\001\255\255\144\001\145\001\146\001\255\255\148\001\255\255\ +\150\001\255\255\255\255\255\255\154\001\255\255\255\255\255\255\ +\255\255\255\255\255\255\255\255\162\001\163\001\255\255\165\001\ +\166\001\255\255\168\001\255\255\255\255\002\001\003\001\004\001\ +\255\255\006\001\255\255\255\255\255\255\255\255\255\255\255\255\ +\013\001\014\001\015\001\255\255\017\001\255\255\255\255\020\001\ +\255\255\255\255\255\255\255\255\255\255\255\255\027\001\028\001\ +\255\255\255\255\255\255\255\255\255\255\255\255\035\001\255\255\ +\037\001\038\001\255\255\255\255\041\001\042\001\255\255\255\255\ +\255\255\046\001\255\255\255\255\255\255\255\255\255\255\052\001\ +\255\255\054\001\055\001\056\001\057\001\058\001\059\001\255\255\ +\255\255\255\255\255\255\255\255\255\255\066\001\255\255\068\001\ +\255\255\255\255\255\255\255\255\255\255\074\001\075\001\255\255\ +\255\255\255\255\079\001\080\001\000\000\082\001\255\255\255\255\ +\255\255\255\255\255\255\255\255\089\001\255\255\091\001\092\001\ +\093\001\094\001\255\255\096\001\097\001\255\255\255\255\255\255\ +\255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\ +\255\255\255\255\111\001\112\001\113\001\114\001\115\001\116\001\ +\117\001\118\001\119\001\255\255\255\255\255\255\255\255\255\255\ +\125\001\126\001\127\001\255\255\255\255\130\001\131\001\255\255\ +\255\255\134\001\135\001\136\001\137\001\138\001\255\255\255\255\ +\141\001\142\001\255\255\144\001\145\001\146\001\255\255\148\001\ +\255\255\150\001\255\255\255\255\255\255\154\001\255\255\255\255\ +\255\255\255\255\255\255\255\255\255\255\162\001\163\001\255\255\ +\165\001\166\001\255\255\168\001\255\255\002\001\003\001\004\001\ +\255\255\006\001\255\255\255\255\255\255\255\255\255\255\255\255\ +\013\001\014\001\015\001\255\255\017\001\255\255\255\255\020\001\ +\255\255\255\255\255\255\255\255\255\255\255\255\027\001\028\001\ +\255\255\255\255\255\255\255\255\255\255\255\255\035\001\255\255\ +\037\001\038\001\255\255\255\255\041\001\042\001\255\255\255\255\ +\255\255\046\001\255\255\255\255\255\255\255\255\255\255\052\001\ +\255\255\054\001\055\001\056\001\057\001\058\001\059\001\255\255\ +\255\255\255\255\255\255\255\255\255\255\066\001\000\000\068\001\ +\255\255\255\255\255\255\255\255\255\255\074\001\075\001\255\255\ +\255\255\255\255\079\001\080\001\255\255\082\001\255\255\255\255\ +\255\255\255\255\255\255\255\255\089\001\255\255\091\001\092\001\ +\093\001\094\001\255\255\096\001\097\001\255\255\255\255\255\255\ +\255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\ +\255\255\255\255\111\001\112\001\113\001\114\001\115\001\116\001\ +\117\001\118\001\119\001\255\255\255\255\255\255\255\255\255\255\ +\125\001\126\001\127\001\255\255\255\255\130\001\131\001\255\255\ +\255\255\134\001\135\001\136\001\137\001\138\001\255\255\255\255\ +\141\001\142\001\255\255\144\001\145\001\146\001\255\255\148\001\ +\255\255\150\001\255\255\255\255\255\255\154\001\255\255\255\255\ +\255\255\255\255\255\255\255\255\255\255\162\001\163\001\255\255\ +\165\001\166\001\255\255\168\001\255\255\255\255\002\001\003\001\ +\004\001\255\255\006\001\255\255\255\255\255\255\255\255\255\255\ +\255\255\013\001\255\255\015\001\255\255\017\001\255\255\255\255\ +\020\001\255\255\255\255\255\255\255\255\255\255\255\255\027\001\ +\255\255\255\255\255\255\255\255\255\255\255\255\255\255\035\001\ +\255\255\037\001\038\001\255\255\255\255\041\001\042\001\255\255\ +\255\255\255\255\046\001\255\255\255\255\255\255\255\255\255\255\ +\052\001\255\255\255\255\055\001\056\001\057\001\058\001\059\001\ +\255\255\255\255\255\255\255\255\255\255\000\000\066\001\255\255\ +\068\001\255\255\255\255\255\255\255\255\255\255\074\001\075\001\ +\255\255\255\255\255\255\079\001\080\001\255\255\082\001\255\255\ +\255\255\255\255\255\255\255\255\255\255\089\001\255\255\091\001\ +\092\001\093\001\094\001\255\255\096\001\097\001\255\255\255\255\ +\255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\ +\255\255\255\255\255\255\111\001\112\001\113\001\114\001\115\001\ +\116\001\117\001\118\001\119\001\255\255\255\255\255\255\255\255\ +\255\255\255\255\126\001\127\001\255\255\255\255\130\001\131\001\ +\255\255\255\255\134\001\135\001\136\001\137\001\138\001\255\255\ +\255\255\141\001\255\255\255\255\144\001\145\001\146\001\255\255\ +\148\001\255\255\150\001\255\255\255\255\255\255\154\001\255\255\ +\002\001\003\001\004\001\255\255\006\001\255\255\162\001\163\001\ +\255\255\165\001\166\001\013\001\168\001\015\001\255\255\017\001\ +\255\255\255\255\020\001\255\255\255\255\255\255\255\255\255\255\ +\255\255\027\001\255\255\255\255\255\255\255\255\255\255\255\255\ +\255\255\035\001\255\255\037\001\038\001\255\255\255\255\041\001\ +\042\001\255\255\255\255\255\255\046\001\255\255\255\255\255\255\ +\255\255\255\255\255\255\255\255\255\255\055\001\056\001\057\001\ +\058\001\059\001\255\255\255\255\255\255\255\255\255\255\000\000\ +\066\001\255\255\068\001\255\255\255\255\255\255\255\255\255\255\ +\074\001\075\001\255\255\255\255\255\255\079\001\080\001\255\255\ +\082\001\255\255\255\255\255\255\255\255\255\255\255\255\089\001\ +\255\255\091\001\092\001\093\001\094\001\255\255\096\001\097\001\ +\255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\ +\255\255\255\255\255\255\255\255\255\255\111\001\112\001\113\001\ +\114\001\115\001\116\001\117\001\118\001\119\001\255\255\255\255\ +\255\255\255\255\255\255\255\255\126\001\127\001\255\255\255\255\ +\130\001\131\001\255\255\255\255\134\001\135\001\136\001\137\001\ +\138\001\255\255\255\255\141\001\255\255\255\255\144\001\145\001\ +\146\001\255\255\148\001\255\255\150\001\255\255\255\255\255\255\ +\154\001\255\255\255\255\255\255\255\255\255\255\255\255\255\255\ +\162\001\163\001\255\255\165\001\166\001\255\255\168\001\002\001\ +\003\001\004\001\255\255\006\001\255\255\255\255\255\255\255\255\ +\255\255\255\255\013\001\255\255\015\001\255\255\255\255\255\255\ +\255\255\020\001\255\255\255\255\255\255\255\255\255\255\255\255\ +\027\001\255\255\255\255\255\255\255\255\255\255\255\255\255\255\ +\035\001\255\255\037\001\038\001\255\255\255\255\255\255\042\001\ +\255\255\255\255\255\255\046\001\255\255\255\255\255\255\255\255\ +\255\255\000\000\255\255\255\255\055\001\056\001\057\001\058\001\ +\059\001\255\255\255\255\255\255\255\255\255\255\255\255\066\001\ +\255\255\068\001\255\255\255\255\255\255\255\255\255\255\074\001\ +\075\001\255\255\255\255\255\255\079\001\080\001\255\255\082\001\ +\255\255\255\255\255\255\255\255\255\255\255\255\089\001\255\255\ +\091\001\092\001\093\001\094\001\255\255\096\001\097\001\255\255\ +\255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\ +\255\255\255\255\255\255\255\255\111\001\112\001\113\001\114\001\ +\115\001\116\001\117\001\118\001\119\001\255\255\255\255\255\255\ +\255\255\255\255\255\255\126\001\127\001\255\255\255\255\130\001\ +\131\001\255\255\255\255\134\001\135\001\136\001\137\001\138\001\ +\255\255\255\255\141\001\255\255\255\255\144\001\255\255\146\001\ +\255\255\148\001\255\255\150\001\255\255\255\255\255\255\154\001\ +\255\255\002\001\003\001\004\001\255\255\006\001\255\255\162\001\ +\163\001\255\255\165\001\166\001\013\001\168\001\015\001\255\255\ +\255\255\255\255\255\255\020\001\255\255\255\255\255\255\255\255\ +\255\255\255\255\027\001\255\255\255\255\255\255\255\255\255\255\ +\255\255\255\255\035\001\255\255\037\001\038\001\255\255\255\255\ +\255\255\042\001\255\255\255\255\255\255\046\001\255\255\255\255\ +\255\255\255\255\255\255\000\000\255\255\255\255\055\001\056\001\ +\057\001\058\001\059\001\255\255\255\255\255\255\255\255\255\255\ +\255\255\066\001\255\255\068\001\255\255\255\255\255\255\255\255\ +\255\255\074\001\075\001\255\255\255\255\255\255\079\001\080\001\ +\255\255\082\001\255\255\255\255\255\255\255\255\255\255\255\255\ +\089\001\255\255\091\001\092\001\093\001\094\001\255\255\096\001\ +\097\001\255\255\255\255\255\255\255\255\255\255\255\255\255\255\ +\255\255\255\255\255\255\255\255\255\255\255\255\111\001\112\001\ +\113\001\114\001\115\001\116\001\117\001\118\001\119\001\255\255\ +\255\255\255\255\255\255\255\255\255\255\126\001\127\001\255\255\ +\255\255\130\001\131\001\255\255\255\255\134\001\135\001\136\001\ +\137\001\138\001\255\255\255\255\141\001\255\255\255\255\144\001\ +\255\255\146\001\255\255\148\001\255\255\150\001\255\255\255\255\ +\255\255\154\001\255\255\002\001\003\001\004\001\255\255\006\001\ +\255\255\162\001\163\001\255\255\165\001\166\001\013\001\168\001\ +\015\001\255\255\255\255\255\255\255\255\020\001\255\255\255\255\ +\255\255\255\255\255\255\255\255\027\001\255\255\255\255\255\255\ +\255\255\255\255\255\255\255\255\035\001\255\255\037\001\038\001\ +\255\255\255\255\255\255\042\001\255\255\255\255\255\255\046\001\ +\255\255\255\255\255\255\255\255\255\255\000\000\255\255\255\255\ +\055\001\056\001\057\001\058\001\059\001\255\255\255\255\255\255\ +\255\255\255\255\255\255\066\001\255\255\068\001\255\255\255\255\ +\255\255\255\255\255\255\074\001\075\001\255\255\255\255\255\255\ +\079\001\080\001\255\255\082\001\255\255\255\255\255\255\255\255\ +\255\255\255\255\089\001\255\255\091\001\092\001\093\001\094\001\ +\255\255\096\001\097\001\255\255\255\255\255\255\255\255\255\255\ +\255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\ +\111\001\112\001\113\001\114\001\115\001\116\001\117\001\118\001\ +\119\001\255\255\255\255\255\255\255\255\255\255\255\255\126\001\ +\127\001\255\255\255\255\130\001\131\001\255\255\255\255\134\001\ +\135\001\136\001\137\001\138\001\255\255\255\255\141\001\255\255\ +\255\255\144\001\255\255\146\001\255\255\148\001\255\255\150\001\ +\255\255\255\255\255\255\154\001\255\255\002\001\003\001\004\001\ +\255\255\006\001\255\255\162\001\163\001\255\255\165\001\166\001\ +\013\001\168\001\015\001\255\255\255\255\255\255\255\255\020\001\ +\255\255\255\255\255\255\255\255\255\255\255\255\027\001\255\255\ +\255\255\255\255\255\255\255\255\255\255\255\255\035\001\255\255\ +\037\001\038\001\255\255\255\255\255\255\042\001\255\255\255\255\ +\255\255\046\001\255\255\255\255\255\255\255\255\255\255\000\000\ +\255\255\255\255\055\001\056\001\057\001\058\001\059\001\255\255\ +\255\255\255\255\255\255\255\255\255\255\066\001\255\255\068\001\ +\255\255\255\255\255\255\255\255\255\255\074\001\075\001\255\255\ +\255\255\255\255\079\001\080\001\255\255\082\001\255\255\255\255\ +\255\255\255\255\255\255\255\255\089\001\255\255\091\001\092\001\ +\093\001\094\001\255\255\096\001\097\001\255\255\255\255\255\255\ +\255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\ +\255\255\255\255\111\001\112\001\113\001\114\001\115\001\116\001\ +\117\001\118\001\119\001\255\255\255\255\255\255\255\255\255\255\ +\255\255\126\001\127\001\255\255\255\255\130\001\131\001\255\255\ +\255\255\134\001\135\001\136\001\137\001\138\001\255\255\255\255\ +\141\001\255\255\255\255\144\001\255\255\146\001\255\255\148\001\ +\255\255\150\001\255\255\255\255\255\255\154\001\255\255\002\001\ +\003\001\004\001\255\255\006\001\255\255\162\001\163\001\255\255\ +\165\001\166\001\013\001\168\001\015\001\255\255\255\255\255\255\ +\255\255\020\001\255\255\255\255\255\255\255\255\255\255\255\255\ +\027\001\255\255\255\255\255\255\255\255\255\255\255\255\255\255\ +\035\001\255\255\037\001\038\001\255\255\255\255\255\255\042\001\ +\255\255\255\255\255\255\046\001\255\255\255\255\255\255\255\255\ +\255\255\000\000\255\255\255\255\055\001\056\001\057\001\058\001\ +\059\001\255\255\255\255\255\255\255\255\255\255\255\255\066\001\ +\255\255\068\001\255\255\255\255\255\255\255\255\255\255\074\001\ +\075\001\255\255\255\255\255\255\079\001\080\001\255\255\082\001\ +\255\255\255\255\255\255\255\255\255\255\255\255\089\001\255\255\ +\091\001\092\001\093\001\094\001\255\255\096\001\097\001\255\255\ +\255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\ +\255\255\255\255\255\255\255\255\111\001\112\001\113\001\114\001\ +\115\001\116\001\117\001\118\001\119\001\255\255\255\255\255\255\ +\255\255\255\255\255\255\126\001\127\001\255\255\255\255\130\001\ +\131\001\255\255\255\255\134\001\135\001\136\001\137\001\138\001\ +\255\255\255\255\141\001\255\255\255\255\144\001\255\255\146\001\ +\255\255\148\001\255\255\150\001\255\255\255\255\255\255\154\001\ +\255\255\002\001\003\001\004\001\255\255\006\001\255\255\162\001\ +\163\001\255\255\165\001\166\001\013\001\168\001\015\001\255\255\ +\255\255\255\255\255\255\020\001\255\255\255\255\255\255\255\255\ +\255\255\255\255\027\001\255\255\255\255\255\255\255\255\255\255\ +\255\255\255\255\035\001\255\255\037\001\038\001\255\255\255\255\ +\255\255\042\001\255\255\255\255\255\255\046\001\000\000\255\255\ +\255\255\255\255\255\255\255\255\255\255\255\255\055\001\056\001\ +\057\001\058\001\059\001\255\255\255\255\255\255\255\255\255\255\ +\255\255\066\001\255\255\068\001\255\255\255\255\255\255\255\255\ +\255\255\074\001\075\001\255\255\255\255\255\255\079\001\080\001\ +\255\255\082\001\255\255\255\255\255\255\255\255\255\255\255\255\ +\089\001\255\255\091\001\092\001\093\001\094\001\255\255\096\001\ +\097\001\255\255\255\255\255\255\255\255\255\255\255\255\255\255\ +\255\255\255\255\255\255\255\255\255\255\255\255\111\001\112\001\ +\113\001\114\001\115\001\116\001\117\001\118\001\119\001\255\255\ +\255\255\255\255\255\255\255\255\255\255\126\001\127\001\255\255\ +\255\255\130\001\131\001\255\255\255\255\134\001\135\001\136\001\ +\137\001\138\001\255\255\255\255\141\001\255\255\255\255\144\001\ +\255\255\146\001\255\255\148\001\255\255\150\001\255\255\255\255\ +\255\255\154\001\255\255\002\001\003\001\004\001\255\255\006\001\ +\255\255\162\001\163\001\255\255\165\001\166\001\013\001\168\001\ +\015\001\255\255\255\255\255\255\255\255\020\001\255\255\255\255\ +\255\255\255\255\255\255\255\255\027\001\255\255\255\255\255\255\ +\255\255\255\255\255\255\255\255\035\001\255\255\037\001\038\001\ +\255\255\255\255\255\255\042\001\255\255\255\255\255\255\046\001\ +\000\000\255\255\255\255\255\255\255\255\255\255\255\255\255\255\ +\055\001\056\001\057\001\058\001\059\001\255\255\255\255\255\255\ +\255\255\255\255\255\255\066\001\255\255\068\001\255\255\255\255\ +\255\255\255\255\255\255\074\001\075\001\255\255\255\255\255\255\ +\079\001\080\001\255\255\082\001\255\255\255\255\255\255\255\255\ +\255\255\255\255\089\001\255\255\091\001\092\001\093\001\094\001\ +\255\255\096\001\097\001\255\255\255\255\255\255\255\255\255\255\ +\255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\ +\111\001\112\001\113\001\114\001\115\001\116\001\117\001\118\001\ +\119\001\255\255\255\255\255\255\255\255\255\255\255\255\126\001\ +\127\001\255\255\255\255\130\001\131\001\255\255\255\255\134\001\ +\135\001\136\001\137\001\138\001\255\255\255\255\141\001\255\255\ +\255\255\144\001\255\255\146\001\255\255\148\001\255\255\150\001\ +\002\001\003\001\004\001\154\001\006\001\255\255\255\255\255\255\ +\255\255\255\255\255\255\162\001\163\001\015\001\165\001\166\001\ +\255\255\168\001\020\001\255\255\255\255\255\255\255\255\255\255\ +\255\255\027\001\255\255\255\255\255\255\255\255\255\255\255\255\ +\255\255\035\001\255\255\037\001\038\001\255\255\255\255\255\255\ +\042\001\255\255\255\255\255\255\046\001\000\000\255\255\255\255\ +\255\255\255\255\255\255\255\255\255\255\055\001\056\001\057\001\ +\058\001\059\001\255\255\255\255\255\255\255\255\255\255\255\255\ +\066\001\255\255\068\001\255\255\255\255\255\255\255\255\255\255\ +\074\001\075\001\255\255\255\255\255\255\079\001\080\001\255\255\ +\082\001\255\255\255\255\255\255\255\255\255\255\255\255\089\001\ +\255\255\091\001\092\001\093\001\094\001\255\255\096\001\097\001\ +\255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\ +\255\255\255\255\255\255\255\255\255\255\111\001\112\001\113\001\ +\114\001\115\001\116\001\117\001\118\001\119\001\255\255\255\255\ +\255\255\255\255\255\255\255\255\126\001\127\001\255\255\255\255\ +\130\001\131\001\255\255\255\255\134\001\135\001\136\001\137\001\ +\138\001\255\255\255\255\141\001\255\255\255\255\144\001\255\255\ +\146\001\255\255\148\001\255\255\150\001\255\255\255\255\255\255\ +\154\001\255\255\002\001\003\001\004\001\255\255\006\001\255\255\ +\162\001\163\001\255\255\165\001\166\001\255\255\168\001\015\001\ +\255\255\255\255\255\255\255\255\020\001\255\255\255\255\255\255\ +\255\255\255\255\255\255\027\001\255\255\255\255\255\255\255\255\ +\255\255\255\255\255\255\035\001\255\255\037\001\038\001\255\255\ +\255\255\255\255\042\001\255\255\255\255\255\255\046\001\000\000\ +\255\255\255\255\255\255\255\255\255\255\255\255\255\255\055\001\ +\056\001\057\001\058\001\059\001\255\255\255\255\255\255\255\255\ +\255\255\255\255\066\001\255\255\068\001\255\255\255\255\255\255\ +\255\255\255\255\074\001\075\001\255\255\255\255\255\255\079\001\ +\080\001\255\255\082\001\255\255\255\255\255\255\255\255\255\255\ +\255\255\089\001\255\255\091\001\092\001\093\001\094\001\255\255\ +\096\001\097\001\255\255\255\255\255\255\255\255\255\255\255\255\ +\255\255\255\255\255\255\255\255\255\255\255\255\255\255\111\001\ +\112\001\113\001\114\001\115\001\116\001\117\001\118\001\119\001\ +\255\255\255\255\255\255\255\255\255\255\255\255\126\001\127\001\ +\255\255\255\255\130\001\131\001\255\255\255\255\134\001\135\001\ +\136\001\137\001\138\001\255\255\255\255\141\001\255\255\255\255\ +\144\001\255\255\146\001\255\255\148\001\255\255\150\001\002\001\ +\003\001\004\001\154\001\006\001\255\255\255\255\255\255\255\255\ +\255\255\255\255\162\001\163\001\015\001\165\001\166\001\255\255\ +\168\001\020\001\255\255\255\255\255\255\255\255\255\255\255\255\ +\027\001\255\255\255\255\255\255\255\255\255\255\255\255\255\255\ +\035\001\255\255\037\001\038\001\255\255\255\255\255\255\042\001\ +\255\255\255\255\255\255\046\001\255\255\255\255\255\255\255\255\ +\255\255\000\000\255\255\255\255\055\001\056\001\057\001\058\001\ +\059\001\255\255\255\255\255\255\255\255\255\255\255\255\066\001\ +\255\255\068\001\255\255\255\255\255\255\255\255\255\255\074\001\ +\075\001\255\255\255\255\255\255\079\001\080\001\255\255\082\001\ +\255\255\255\255\255\255\255\255\255\255\255\255\089\001\255\255\ +\091\001\092\001\093\001\094\001\255\255\096\001\097\001\255\255\ +\255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\ +\255\255\255\255\255\255\255\255\111\001\112\001\113\001\114\001\ +\115\001\116\001\117\001\118\001\119\001\255\255\255\255\255\255\ +\255\255\255\255\255\255\126\001\127\001\255\255\255\255\130\001\ +\131\001\255\255\255\255\134\001\135\001\136\001\137\001\138\001\ +\255\255\255\255\141\001\255\255\255\255\144\001\255\255\146\001\ +\255\255\148\001\255\255\150\001\255\255\255\255\255\255\154\001\ +\255\255\002\001\003\001\004\001\255\255\006\001\255\255\162\001\ +\163\001\255\255\165\001\166\001\013\001\168\001\015\001\255\255\ +\255\255\255\255\255\255\020\001\255\255\255\255\255\255\255\255\ +\255\255\255\255\027\001\255\255\255\255\255\255\255\255\255\255\ +\255\255\255\255\035\001\255\255\255\255\038\001\255\255\255\255\ +\255\255\042\001\255\255\255\255\255\255\046\001\255\255\000\000\ +\255\255\255\255\255\255\255\255\255\255\255\255\055\001\056\001\ +\057\001\058\001\059\001\255\255\255\255\255\255\255\255\255\255\ +\255\255\066\001\255\255\068\001\255\255\255\255\255\255\255\255\ +\255\255\074\001\075\001\255\255\255\255\255\255\079\001\080\001\ +\255\255\082\001\255\255\255\255\255\255\255\255\255\255\255\255\ +\089\001\255\255\091\001\092\001\093\001\094\001\255\255\096\001\ +\097\001\255\255\255\255\255\255\255\255\255\255\255\255\255\255\ +\255\255\255\255\255\255\255\255\255\255\255\255\111\001\112\001\ +\113\001\114\001\115\001\116\001\117\001\118\001\119\001\255\255\ +\255\255\255\255\255\255\255\255\255\255\126\001\127\001\255\255\ +\255\255\130\001\131\001\255\255\255\255\134\001\135\001\136\001\ +\137\001\138\001\255\255\255\255\141\001\255\255\255\255\144\001\ +\255\255\146\001\255\255\148\001\255\255\150\001\255\255\255\255\ +\255\255\154\001\255\255\002\001\003\001\004\001\255\255\006\001\ +\255\255\162\001\163\001\255\255\165\001\166\001\013\001\168\001\ +\015\001\255\255\255\255\255\255\255\255\020\001\255\255\255\255\ +\255\255\255\255\255\255\000\000\027\001\255\255\255\255\255\255\ +\255\255\255\255\255\255\255\255\035\001\255\255\037\001\038\001\ +\255\255\255\255\255\255\042\001\255\255\255\255\255\255\046\001\ +\255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\ +\055\001\056\001\057\001\058\001\059\001\255\255\255\255\255\255\ +\255\255\255\255\255\255\066\001\255\255\068\001\255\255\255\255\ +\255\255\255\255\255\255\074\001\075\001\255\255\255\255\255\255\ +\079\001\080\001\255\255\082\001\255\255\255\255\255\255\255\255\ +\255\255\255\255\089\001\255\255\091\001\092\001\093\001\094\001\ +\255\255\096\001\097\001\255\255\255\255\255\255\255\255\255\255\ +\255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\ +\111\001\112\001\113\001\114\001\115\001\116\001\117\001\118\001\ +\119\001\255\255\255\255\255\255\255\255\255\255\255\255\126\001\ +\127\001\255\255\255\255\130\001\131\001\255\255\255\255\134\001\ +\135\001\136\001\255\255\255\255\255\255\255\255\141\001\255\255\ +\255\255\144\001\255\255\146\001\255\255\148\001\255\255\150\001\ +\255\255\002\001\003\001\154\001\255\255\006\001\255\255\255\255\ +\255\255\255\255\255\255\162\001\163\001\014\001\165\001\166\001\ +\017\001\168\001\255\255\020\001\255\255\255\255\255\255\255\255\ +\000\000\255\255\027\001\255\255\255\255\255\255\255\255\255\255\ +\255\255\255\255\035\001\255\255\255\255\255\255\255\255\040\001\ +\255\255\042\001\255\255\255\255\255\255\046\001\255\255\255\255\ +\255\255\255\255\255\255\255\255\255\255\255\255\055\001\056\001\ +\057\001\058\001\059\001\255\255\255\255\255\255\255\255\255\255\ +\255\255\066\001\255\255\068\001\255\255\255\255\255\255\255\255\ +\255\255\074\001\075\001\255\255\255\255\255\255\255\255\080\001\ +\255\255\082\001\255\255\255\255\255\255\255\255\255\255\255\255\ +\089\001\255\255\091\001\092\001\093\001\094\001\255\255\096\001\ +\097\001\255\255\255\255\255\255\255\255\255\255\255\255\255\255\ +\255\255\255\255\255\255\255\255\255\255\255\255\111\001\112\001\ +\113\001\114\001\115\001\116\001\117\001\118\001\119\001\255\255\ +\255\255\255\255\255\255\255\255\125\001\126\001\127\001\255\255\ +\255\255\130\001\131\001\255\255\255\255\002\001\003\001\255\255\ +\255\255\006\001\255\255\255\255\141\001\255\255\255\255\255\255\ +\255\255\146\001\255\255\255\255\017\001\150\001\255\255\020\001\ +\255\255\154\001\255\255\255\255\255\255\255\255\027\001\255\255\ +\255\255\162\001\163\001\255\255\165\001\166\001\035\001\168\001\ +\255\255\255\255\255\255\040\001\255\255\042\001\255\255\255\255\ +\255\255\046\001\255\255\255\255\255\255\255\255\000\000\255\255\ +\255\255\255\255\055\001\056\001\057\001\058\001\059\001\255\255\ +\255\255\255\255\255\255\255\255\255\255\066\001\255\255\068\001\ +\255\255\255\255\255\255\255\255\255\255\074\001\075\001\255\255\ +\255\255\255\255\255\255\080\001\255\255\082\001\255\255\255\255\ +\255\255\255\255\255\255\255\255\089\001\255\255\091\001\092\001\ +\093\001\094\001\255\255\096\001\097\001\255\255\255\255\255\255\ +\255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\ +\255\255\255\255\111\001\112\001\113\001\114\001\115\001\116\001\ +\117\001\118\001\119\001\255\255\255\255\255\255\255\255\255\255\ +\255\255\255\255\255\255\255\255\255\255\130\001\131\001\255\255\ +\255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\ +\141\001\255\255\255\255\255\255\255\255\146\001\255\255\255\255\ +\255\255\150\001\002\001\255\255\255\255\154\001\006\001\255\255\ +\255\255\255\255\255\255\255\255\255\255\162\001\163\001\255\255\ +\165\001\166\001\255\255\168\001\020\001\021\001\255\255\255\255\ +\255\255\255\255\255\255\027\001\255\255\255\255\030\001\255\255\ +\255\255\255\255\255\255\035\001\255\255\255\255\255\255\255\255\ +\040\001\255\255\042\001\255\255\255\255\255\255\046\001\255\255\ +\255\255\255\255\255\255\255\255\000\000\255\255\255\255\255\255\ +\056\001\057\001\058\001\059\001\255\255\255\255\255\255\255\255\ +\255\255\255\255\066\001\255\255\068\001\255\255\255\255\255\255\ +\255\255\255\255\074\001\075\001\255\255\255\255\255\255\255\255\ +\080\001\255\255\082\001\255\255\255\255\255\255\255\255\255\255\ +\255\255\089\001\255\255\091\001\092\001\093\001\094\001\255\255\ +\096\001\097\001\255\255\255\255\255\255\255\255\255\255\255\255\ +\255\255\255\255\255\255\255\255\255\255\255\255\255\255\111\001\ +\112\001\113\001\114\001\115\001\116\001\117\001\118\001\119\001\ +\255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\ +\255\255\255\255\130\001\131\001\255\255\255\255\255\255\255\255\ +\255\255\255\255\255\255\255\255\255\255\141\001\255\255\255\255\ +\255\255\255\255\146\001\255\255\255\255\255\255\150\001\255\255\ +\255\255\255\255\154\001\255\255\255\255\255\255\255\255\255\255\ +\255\255\003\001\162\001\163\001\006\001\165\001\166\001\255\255\ +\168\001\011\001\000\000\013\001\255\255\255\255\255\255\255\255\ +\255\255\019\001\020\001\021\001\022\001\255\255\024\001\255\255\ +\255\255\027\001\255\255\029\001\255\255\255\255\255\255\255\255\ +\255\255\035\001\255\255\255\255\255\255\255\255\040\001\255\255\ +\042\001\255\255\044\001\255\255\046\001\255\255\255\255\049\001\ +\050\001\255\255\255\255\255\255\255\255\055\001\056\001\057\001\ +\058\001\059\001\060\001\061\001\062\001\063\001\064\001\255\255\ +\066\001\255\255\068\001\069\001\070\001\255\255\255\255\073\001\ +\074\001\075\001\076\001\255\255\078\001\079\001\080\001\255\255\ +\082\001\255\255\084\001\085\001\255\255\255\255\255\255\089\001\ +\090\001\091\001\092\001\093\001\094\001\255\255\096\001\097\001\ +\255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\ +\255\255\255\255\255\255\255\255\255\255\111\001\112\001\113\001\ +\114\001\115\001\116\001\117\001\118\001\119\001\255\255\255\255\ +\255\255\255\255\124\001\125\001\126\001\127\001\128\001\255\255\ +\130\001\131\001\132\001\255\255\000\000\255\255\136\001\137\001\ +\255\255\139\001\140\001\141\001\142\001\143\001\255\255\145\001\ +\146\001\255\255\255\255\255\255\150\001\151\001\002\001\153\001\ +\154\001\255\255\006\001\157\001\158\001\159\001\160\001\161\001\ +\162\001\163\001\255\255\165\001\166\001\167\001\255\255\255\255\ +\020\001\021\001\255\255\255\255\255\255\255\255\255\255\027\001\ +\255\255\255\255\255\255\255\255\255\255\255\255\255\255\035\001\ +\255\255\255\255\255\255\255\255\040\001\255\255\042\001\255\255\ +\255\255\255\255\046\001\255\255\255\255\255\255\255\255\255\255\ +\255\255\255\255\255\255\255\255\056\001\057\001\058\001\059\001\ +\255\255\255\255\255\255\255\255\255\255\255\255\066\001\255\255\ +\068\001\255\255\255\255\255\255\255\255\255\255\074\001\075\001\ +\255\255\255\255\255\255\255\255\080\001\255\255\082\001\255\255\ +\255\255\255\255\255\255\255\255\255\255\089\001\255\255\091\001\ +\092\001\093\001\094\001\255\255\096\001\097\001\255\255\255\255\ +\255\255\255\255\255\255\255\255\255\255\255\255\000\000\255\255\ +\255\255\255\255\255\255\111\001\112\001\113\001\114\001\115\001\ +\116\001\117\001\118\001\119\001\002\001\255\255\255\255\255\255\ +\006\001\255\255\255\255\255\255\255\255\255\255\130\001\131\001\ +\255\255\255\255\255\255\255\255\255\255\255\255\020\001\255\255\ +\255\255\141\001\255\255\255\255\255\255\027\001\146\001\255\255\ +\255\255\255\255\150\001\255\255\255\255\035\001\154\001\255\255\ +\255\255\255\255\040\001\255\255\042\001\255\255\162\001\163\001\ +\046\001\165\001\166\001\255\255\255\255\255\255\255\255\255\255\ +\255\255\255\255\056\001\057\001\058\001\059\001\255\255\255\255\ +\255\255\255\255\255\255\255\255\066\001\255\255\068\001\255\255\ +\255\255\255\255\255\255\255\255\074\001\075\001\255\255\255\255\ +\255\255\255\255\080\001\255\255\082\001\255\255\255\255\255\255\ +\255\255\255\255\255\255\089\001\000\000\091\001\092\001\093\001\ +\094\001\255\255\096\001\097\001\255\255\255\255\255\255\255\255\ +\255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\ +\255\255\111\001\112\001\113\001\114\001\115\001\116\001\117\001\ +\118\001\119\001\255\255\255\255\255\255\255\255\002\001\255\255\ +\255\255\255\255\006\001\255\255\130\001\131\001\255\255\255\255\ +\255\255\013\001\255\255\255\255\255\255\255\255\255\255\141\001\ +\020\001\255\255\255\255\255\255\146\001\255\255\255\255\027\001\ +\150\001\255\255\255\255\255\255\154\001\255\255\255\255\035\001\ +\255\255\255\255\255\255\255\255\162\001\163\001\042\001\165\001\ +\166\001\255\255\046\001\255\255\255\255\255\255\255\255\255\255\ +\255\255\255\255\255\255\255\255\056\001\057\001\058\001\059\001\ +\255\255\255\255\255\255\255\255\255\255\255\255\066\001\255\255\ +\068\001\000\000\255\255\255\255\255\255\255\255\074\001\075\001\ +\255\255\255\255\255\255\255\255\080\001\255\255\082\001\255\255\ +\255\255\255\255\255\255\255\255\255\255\089\001\255\255\091\001\ +\092\001\093\001\094\001\255\255\096\001\097\001\255\255\255\255\ +\255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\ +\255\255\255\255\255\255\111\001\112\001\113\001\114\001\115\001\ +\116\001\117\001\118\001\119\001\255\255\255\255\255\255\255\255\ +\002\001\255\255\255\255\255\255\006\001\255\255\130\001\131\001\ +\255\255\255\255\255\255\013\001\255\255\255\255\255\255\255\255\ +\255\255\141\001\020\001\255\255\255\255\255\255\146\001\255\255\ +\255\255\027\001\150\001\255\255\255\255\255\255\154\001\255\255\ +\255\255\035\001\255\255\255\255\255\255\255\255\162\001\163\001\ +\042\001\165\001\166\001\255\255\046\001\255\255\000\000\255\255\ +\255\255\255\255\255\255\255\255\255\255\255\255\056\001\057\001\ +\058\001\059\001\255\255\255\255\255\255\255\255\255\255\255\255\ +\066\001\255\255\068\001\255\255\255\255\255\255\255\255\255\255\ +\074\001\075\001\255\255\255\255\255\255\255\255\080\001\255\255\ +\082\001\255\255\255\255\255\255\255\255\255\255\255\255\089\001\ +\255\255\091\001\092\001\093\001\094\001\255\255\096\001\097\001\ +\255\255\255\255\255\255\255\255\255\255\255\255\002\001\255\255\ +\255\255\255\255\006\001\255\255\255\255\111\001\112\001\113\001\ +\114\001\115\001\116\001\117\001\118\001\119\001\255\255\255\255\ +\020\001\255\255\255\255\255\255\255\255\255\255\255\255\027\001\ +\130\001\131\001\255\255\255\255\255\255\255\255\255\255\035\001\ +\255\255\255\255\255\255\141\001\255\255\255\255\042\001\255\255\ +\146\001\255\255\046\001\000\000\150\001\255\255\255\255\255\255\ +\154\001\255\255\255\255\255\255\056\001\057\001\058\001\059\001\ +\162\001\163\001\255\255\165\001\166\001\255\255\066\001\255\255\ +\068\001\255\255\255\255\255\255\255\255\255\255\074\001\075\001\ +\255\255\255\255\255\255\255\255\080\001\255\255\082\001\255\255\ +\255\255\255\255\255\255\255\255\255\255\089\001\255\255\091\001\ +\092\001\093\001\094\001\255\255\096\001\097\001\255\255\255\255\ +\255\255\255\255\255\255\002\001\255\255\255\255\255\255\006\001\ +\255\255\255\255\255\255\111\001\112\001\113\001\114\001\115\001\ +\116\001\117\001\118\001\119\001\255\255\020\001\255\255\255\255\ +\255\255\255\255\255\255\255\255\027\001\255\255\130\001\131\001\ +\255\255\255\255\255\255\255\255\035\001\255\255\255\255\255\255\ +\255\255\141\001\255\255\042\001\255\255\255\255\146\001\046\001\ +\000\000\255\255\150\001\255\255\255\255\255\255\154\001\255\255\ +\255\255\056\001\057\001\058\001\059\001\255\255\162\001\163\001\ +\255\255\165\001\166\001\066\001\255\255\068\001\255\255\255\255\ +\255\255\255\255\255\255\074\001\075\001\255\255\255\255\255\255\ +\255\255\080\001\255\255\082\001\255\255\255\255\255\255\255\255\ +\255\255\255\255\089\001\255\255\091\001\092\001\093\001\094\001\ +\255\255\096\001\097\001\255\255\255\255\255\255\255\255\255\255\ +\255\255\255\255\255\255\255\255\006\001\255\255\255\255\255\255\ +\111\001\112\001\113\001\114\001\115\001\116\001\117\001\118\001\ +\119\001\255\255\020\001\255\255\255\255\255\255\255\255\255\255\ +\255\255\027\001\255\255\130\001\131\001\255\255\255\255\255\255\ +\255\255\035\001\255\255\255\255\255\255\255\255\141\001\255\255\ +\042\001\255\255\255\255\146\001\046\001\000\000\255\255\150\001\ +\255\255\255\255\255\255\154\001\255\255\255\255\056\001\057\001\ +\058\001\059\001\255\255\162\001\163\001\255\255\165\001\166\001\ +\066\001\255\255\068\001\255\255\255\255\255\255\255\255\255\255\ +\074\001\075\001\255\255\255\255\255\255\255\255\080\001\255\255\ +\082\001\255\255\255\255\255\255\255\255\255\255\255\255\089\001\ +\255\255\091\001\092\001\093\001\094\001\255\255\096\001\097\001\ +\255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\ +\255\255\006\001\255\255\255\255\255\255\111\001\112\001\113\001\ +\114\001\115\001\116\001\117\001\118\001\119\001\255\255\020\001\ +\255\255\255\255\255\255\255\255\255\255\255\255\027\001\255\255\ +\130\001\131\001\255\255\255\255\255\255\255\255\035\001\255\255\ +\255\255\255\255\255\255\141\001\255\255\042\001\255\255\255\255\ +\146\001\046\001\000\000\255\255\150\001\255\255\255\255\255\255\ +\154\001\255\255\255\255\056\001\057\001\058\001\059\001\255\255\ +\162\001\163\001\255\255\165\001\166\001\066\001\255\255\068\001\ +\255\255\255\255\255\255\255\255\255\255\074\001\075\001\255\255\ +\255\255\255\255\255\255\080\001\255\255\082\001\255\255\255\255\ +\255\255\255\255\255\255\255\255\089\001\255\255\091\001\092\001\ +\093\001\094\001\255\255\096\001\097\001\255\255\255\255\255\255\ +\255\255\255\255\255\255\255\255\255\255\255\255\006\001\255\255\ +\255\255\255\255\111\001\112\001\113\001\114\001\115\001\116\001\ +\117\001\118\001\119\001\255\255\020\001\255\255\255\255\255\255\ +\255\255\255\255\255\255\027\001\255\255\130\001\131\001\255\255\ +\255\255\255\255\255\255\035\001\255\255\255\255\255\255\255\255\ +\141\001\255\255\042\001\255\255\255\255\146\001\046\001\255\255\ +\255\255\150\001\255\255\255\255\255\255\154\001\255\255\255\255\ +\056\001\057\001\058\001\059\001\255\255\162\001\163\001\255\255\ +\165\001\166\001\066\001\255\255\068\001\255\255\255\255\255\255\ +\255\255\255\255\074\001\075\001\255\255\255\255\255\255\255\255\ +\080\001\255\255\082\001\255\255\255\255\255\255\255\255\255\255\ +\255\255\089\001\255\255\091\001\092\001\093\001\094\001\255\255\ +\096\001\097\001\255\255\255\255\255\255\255\255\255\255\255\255\ +\255\255\255\255\255\255\006\001\255\255\255\255\255\255\111\001\ +\112\001\113\001\114\001\115\001\116\001\117\001\118\001\119\001\ +\255\255\020\001\255\255\255\255\255\255\255\255\255\255\255\255\ +\027\001\255\255\130\001\131\001\255\255\255\255\255\255\255\255\ +\035\001\255\255\255\255\255\255\255\255\141\001\255\255\042\001\ +\255\255\255\255\146\001\046\001\255\255\255\255\150\001\255\255\ +\255\255\255\255\154\001\255\255\255\255\056\001\057\001\058\001\ +\059\001\255\255\162\001\163\001\255\255\165\001\166\001\066\001\ +\255\255\068\001\255\255\255\255\255\255\255\255\255\255\074\001\ +\075\001\255\255\255\255\255\255\255\255\080\001\255\255\082\001\ +\255\255\255\255\255\255\255\255\255\255\255\255\089\001\255\255\ +\091\001\092\001\093\001\094\001\255\255\096\001\097\001\255\255\ +\255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\ +\006\001\255\255\255\255\255\255\111\001\112\001\113\001\114\001\ +\115\001\116\001\117\001\118\001\119\001\255\255\020\001\255\255\ +\255\255\255\255\255\255\255\255\255\255\027\001\255\255\130\001\ +\131\001\255\255\255\255\255\255\255\255\035\001\255\255\255\255\ +\255\255\255\255\141\001\255\255\042\001\255\255\255\255\146\001\ +\046\001\255\255\255\255\150\001\255\255\255\255\255\255\154\001\ +\255\255\255\255\056\001\057\001\058\001\059\001\255\255\162\001\ +\163\001\255\255\165\001\166\001\066\001\255\255\068\001\255\255\ +\255\255\255\255\255\255\255\255\074\001\075\001\255\255\255\255\ +\255\255\255\255\080\001\255\255\082\001\255\255\255\255\255\255\ +\255\255\255\255\255\255\089\001\255\255\091\001\092\001\093\001\ +\094\001\255\255\096\001\097\001\255\255\255\255\255\255\255\255\ +\255\255\255\255\255\255\255\255\255\255\006\001\255\255\255\255\ +\255\255\111\001\112\001\113\001\114\001\115\001\116\001\117\001\ +\118\001\119\001\255\255\020\001\255\255\255\255\255\255\255\255\ +\255\255\255\255\027\001\255\255\130\001\131\001\255\255\255\255\ +\255\255\255\255\035\001\255\255\255\255\255\255\255\255\141\001\ +\255\255\042\001\255\255\255\255\146\001\046\001\255\255\255\255\ +\150\001\255\255\255\255\255\255\154\001\255\255\255\255\056\001\ +\057\001\058\001\059\001\255\255\162\001\163\001\255\255\165\001\ +\166\001\066\001\255\255\068\001\255\255\255\255\255\255\255\255\ +\255\255\074\001\075\001\255\255\255\255\255\255\255\255\080\001\ +\255\255\082\001\255\255\255\255\255\255\255\255\255\255\255\255\ +\089\001\255\255\091\001\092\001\093\001\094\001\255\255\096\001\ +\097\001\255\255\255\255\255\255\255\255\255\255\255\255\255\255\ +\255\255\255\255\255\255\255\255\255\255\255\255\111\001\112\001\ +\113\001\114\001\115\001\116\001\117\001\118\001\119\001\255\255\ +\255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\ +\255\255\130\001\131\001\255\255\255\255\255\255\255\255\255\255\ +\255\255\255\255\255\255\255\255\141\001\255\255\255\255\255\255\ +\255\255\146\001\255\255\255\255\255\255\150\001\255\255\255\255\ +\255\255\154\001\255\255\255\255\255\255\255\255\255\255\255\255\ +\255\255\162\001\163\001\255\255\165\001\166\001\003\001\255\255\ +\005\001\006\001\007\001\008\001\009\001\010\001\011\001\012\001\ +\255\255\255\255\255\255\016\001\255\255\018\001\019\001\255\255\ +\255\255\022\001\023\001\255\255\025\001\026\001\255\255\028\001\ +\029\001\255\255\255\255\255\255\255\255\255\255\255\255\036\001\ +\255\255\255\255\039\001\040\001\255\255\255\255\043\001\044\001\ +\045\001\255\255\047\001\048\001\049\001\050\001\051\001\052\001\ +\053\001\054\001\255\255\255\255\255\255\255\255\255\255\060\001\ +\061\001\062\001\063\001\064\001\065\001\255\255\255\255\255\255\ +\069\001\070\001\255\255\255\255\073\001\074\001\075\001\076\001\ +\077\001\078\001\255\255\080\001\081\001\255\255\255\255\084\001\ +\085\001\086\001\087\001\088\001\255\255\090\001\255\255\255\255\ +\255\255\255\255\255\255\255\255\255\255\098\001\099\001\100\001\ +\101\001\102\001\103\001\104\001\105\001\106\001\107\001\108\001\ +\109\001\110\001\255\255\255\255\255\255\255\255\255\255\255\255\ +\255\255\255\255\255\255\255\255\255\255\122\001\255\255\124\001\ +\255\255\255\255\255\255\128\001\255\255\255\255\255\255\132\001\ +\133\001\255\255\255\255\255\255\255\255\255\255\139\001\140\001\ +\255\255\255\255\143\001\255\255\255\255\255\255\147\001\255\255\ +\149\001\255\255\151\001\152\001\153\001\255\255\255\255\255\255\ +\157\001\158\001\159\001\160\001\161\001\003\001\255\255\005\001\ +\006\001\007\001\008\001\009\001\010\001\011\001\012\001\255\255\ +\255\255\255\255\016\001\255\255\018\001\019\001\255\255\255\255\ +\022\001\023\001\255\255\025\001\026\001\255\255\028\001\029\001\ +\255\255\255\255\255\255\255\255\255\255\255\255\036\001\255\255\ +\255\255\039\001\040\001\255\255\255\255\043\001\044\001\045\001\ +\255\255\047\001\048\001\049\001\050\001\051\001\052\001\053\001\ +\054\001\255\255\255\255\255\255\255\255\255\255\060\001\061\001\ +\062\001\063\001\064\001\065\001\255\255\255\255\255\255\069\001\ +\070\001\255\255\255\255\073\001\074\001\075\001\076\001\077\001\ +\078\001\255\255\080\001\081\001\255\255\255\255\084\001\085\001\ +\086\001\087\001\088\001\255\255\090\001\255\255\255\255\255\255\ +\255\255\255\255\255\255\255\255\098\001\099\001\100\001\101\001\ +\102\001\103\001\104\001\105\001\106\001\107\001\108\001\109\001\ +\110\001\255\255\255\255\255\255\255\255\255\255\255\255\255\255\ +\255\255\255\255\255\255\255\255\122\001\255\255\124\001\255\255\ +\255\255\255\255\128\001\255\255\255\255\255\255\132\001\133\001\ +\255\255\255\255\255\255\255\255\255\255\139\001\140\001\255\255\ +\255\255\143\001\255\255\255\255\255\255\147\001\255\255\149\001\ +\255\255\151\001\152\001\153\001\255\255\255\255\255\255\157\001\ +\158\001\159\001\160\001\161\001\003\001\255\255\005\001\006\001\ +\007\001\008\001\009\001\010\001\011\001\012\001\255\255\255\255\ +\255\255\016\001\255\255\018\001\019\001\255\255\255\255\022\001\ +\023\001\255\255\025\001\026\001\255\255\028\001\029\001\255\255\ +\255\255\255\255\255\255\255\255\255\255\036\001\255\255\255\255\ +\039\001\040\001\255\255\255\255\043\001\044\001\045\001\255\255\ +\047\001\048\001\049\001\050\001\051\001\052\001\053\001\054\001\ +\255\255\255\255\255\255\255\255\255\255\060\001\061\001\062\001\ +\063\001\064\001\065\001\255\255\255\255\255\255\069\001\070\001\ +\255\255\255\255\073\001\074\001\075\001\076\001\077\001\078\001\ +\255\255\080\001\081\001\255\255\255\255\084\001\085\001\086\001\ +\087\001\088\001\255\255\090\001\255\255\255\255\255\255\255\255\ +\255\255\255\255\255\255\098\001\099\001\100\001\101\001\102\001\ +\103\001\104\001\105\001\106\001\107\001\108\001\109\001\110\001\ +\255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\ +\255\255\255\255\255\255\122\001\255\255\124\001\255\255\255\255\ +\255\255\128\001\255\255\255\255\255\255\132\001\133\001\255\255\ +\255\255\255\255\255\255\255\255\139\001\140\001\255\255\255\255\ +\143\001\255\255\255\255\003\001\147\001\255\255\149\001\255\255\ +\151\001\152\001\153\001\011\001\255\255\255\255\157\001\158\001\ +\159\001\160\001\161\001\019\001\255\255\255\255\022\001\023\001\ +\255\255\025\001\255\255\255\255\028\001\029\001\255\255\255\255\ +\255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\ +\040\001\255\255\255\255\255\255\044\001\255\255\255\255\255\255\ +\255\255\049\001\050\001\255\255\052\001\255\255\054\001\255\255\ +\255\255\255\255\255\255\255\255\060\001\061\001\062\001\063\001\ +\064\001\255\255\255\255\255\255\255\255\069\001\255\255\255\255\ +\255\255\073\001\255\255\255\255\076\001\255\255\078\001\255\255\ +\255\255\081\001\255\255\255\255\084\001\085\001\255\255\255\255\ +\255\255\255\255\090\001\255\255\255\255\255\255\255\255\255\255\ +\255\255\255\255\098\001\099\001\100\001\101\001\102\001\103\001\ +\104\001\105\001\106\001\107\001\108\001\255\255\110\001\255\255\ +\255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\ +\255\255\255\255\255\255\255\255\124\001\255\255\255\255\255\255\ +\128\001\255\255\255\255\255\255\132\001\255\255\255\255\255\255\ +\255\255\255\255\255\255\139\001\140\001\255\255\255\255\143\001\ +\255\255\255\255\003\001\255\255\255\255\149\001\255\255\151\001\ +\255\255\153\001\011\001\255\255\255\255\157\001\158\001\159\001\ +\160\001\161\001\019\001\255\255\255\255\022\001\023\001\255\255\ +\025\001\255\255\255\255\028\001\029\001\255\255\255\255\255\255\ +\255\255\255\255\255\255\255\255\255\255\255\255\255\255\040\001\ +\255\255\255\255\255\255\044\001\255\255\255\255\255\255\255\255\ +\049\001\050\001\255\255\052\001\255\255\054\001\255\255\255\255\ +\255\255\255\255\255\255\060\001\061\001\062\001\063\001\064\001\ +\255\255\255\255\255\255\255\255\069\001\255\255\255\255\255\255\ +\073\001\255\255\255\255\076\001\255\255\078\001\255\255\255\255\ +\081\001\255\255\255\255\084\001\085\001\255\255\255\255\255\255\ +\255\255\090\001\255\255\255\255\255\255\255\255\255\255\255\255\ +\255\255\098\001\099\001\100\001\101\001\102\001\103\001\104\001\ +\105\001\106\001\107\001\108\001\255\255\110\001\255\255\255\255\ +\255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\ +\255\255\255\255\255\255\124\001\255\255\255\255\255\255\128\001\ +\255\255\255\255\255\255\132\001\255\255\255\255\255\255\255\255\ +\255\255\255\255\139\001\140\001\255\255\255\255\143\001\255\255\ +\255\255\255\255\255\255\255\255\149\001\255\255\151\001\255\255\ +\153\001\255\255\255\255\255\255\157\001\158\001\159\001\160\001\ +\161\001\005\001\006\001\007\001\008\001\009\001\010\001\011\001\ +\012\001\255\255\255\255\255\255\016\001\255\255\018\001\019\001\ +\255\255\255\255\255\255\255\255\255\255\255\255\026\001\255\255\ +\255\255\029\001\255\255\255\255\255\255\255\255\255\255\255\255\ +\036\001\255\255\255\255\039\001\255\255\255\255\255\255\043\001\ +\044\001\045\001\255\255\047\001\048\001\049\001\050\001\051\001\ +\255\255\053\001\255\255\255\255\255\255\255\255\255\255\255\255\ +\060\001\061\001\062\001\063\001\064\001\065\001\255\255\255\255\ +\255\255\069\001\070\001\255\255\255\255\073\001\074\001\075\001\ +\076\001\077\001\078\001\255\255\080\001\081\001\255\255\255\255\ +\084\001\085\001\086\001\087\001\088\001\255\255\090\001\255\255\ +\255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\ +\255\255\255\255\255\255\255\255\255\255\255\255\106\001\255\255\ +\255\255\109\001\255\255\255\255\255\255\255\255\255\255\255\255\ +\255\255\255\255\255\255\255\255\255\255\255\255\122\001\255\255\ +\124\001\255\255\255\255\255\255\128\001\255\255\255\255\255\255\ +\132\001\133\001\255\255\255\255\255\255\255\255\255\255\139\001\ +\140\001\255\255\255\255\143\001\255\255\255\255\255\255\147\001\ +\255\255\149\001\255\255\151\001\152\001\153\001\255\255\255\255\ +\255\255\157\001\158\001\159\001\160\001\161\001\005\001\006\001\ +\007\001\008\001\009\001\010\001\011\001\012\001\255\255\255\255\ +\255\255\016\001\255\255\018\001\019\001\255\255\255\255\255\255\ +\255\255\255\255\255\255\026\001\255\255\255\255\029\001\255\255\ +\255\255\255\255\255\255\255\255\255\255\036\001\255\255\255\255\ +\039\001\255\255\255\255\255\255\043\001\044\001\045\001\255\255\ +\047\001\048\001\049\001\050\001\051\001\255\255\053\001\255\255\ +\255\255\255\255\255\255\255\255\255\255\060\001\061\001\062\001\ +\063\001\064\001\065\001\255\255\255\255\255\255\069\001\070\001\ +\255\255\255\255\073\001\074\001\075\001\076\001\077\001\078\001\ +\255\255\080\001\081\001\255\255\255\255\084\001\085\001\086\001\ +\087\001\088\001\255\255\090\001\255\255\255\255\255\255\255\255\ +\255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\ +\255\255\255\255\255\255\106\001\255\255\255\255\109\001\255\255\ +\255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\ +\255\255\255\255\255\255\122\001\255\255\124\001\255\255\255\255\ +\255\255\128\001\255\255\255\255\255\255\132\001\133\001\255\255\ +\255\255\255\255\255\255\255\255\139\001\140\001\255\255\255\255\ +\143\001\255\255\255\255\255\255\147\001\255\255\149\001\255\255\ +\151\001\152\001\153\001\255\255\255\255\255\255\157\001\158\001\ +\159\001\160\001\161\001\012\001\255\255\255\255\255\255\016\001\ +\255\255\255\255\019\001\255\255\021\001\255\255\255\255\255\255\ +\255\255\255\255\255\255\255\255\255\255\030\001\031\001\032\001\ +\033\001\034\001\255\255\255\255\255\255\255\255\255\255\040\001\ +\255\255\255\255\255\255\044\001\255\255\255\255\255\255\255\255\ +\049\001\050\001\255\255\255\255\255\255\255\255\255\255\255\255\ +\255\255\255\255\255\255\060\001\061\001\062\001\063\001\064\001\ +\255\255\255\255\255\255\255\255\069\001\255\255\255\255\255\255\ +\073\001\255\255\255\255\255\255\077\001\078\001\255\255\255\255\ +\255\255\255\255\255\255\084\001\085\001\255\255\255\255\255\255\ +\255\255\090\001\255\255\255\255\255\255\255\255\255\255\255\255\ +\255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\ +\255\255\106\001\255\255\255\255\109\001\255\255\255\255\255\255\ +\255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\ +\255\255\255\255\255\255\124\001\255\255\126\001\255\255\128\001\ +\255\255\255\255\255\255\132\001\255\255\255\255\255\255\255\255\ +\137\001\255\255\139\001\140\001\255\255\255\255\143\001\255\255\ +\255\255\255\255\255\255\255\255\255\255\255\255\151\001\255\255\ +\153\001\255\255\255\255\156\001\157\001\158\001\159\001\160\001\ +\161\001\012\001\255\255\164\001\255\255\016\001\255\255\168\001\ +\019\001\255\255\255\255\255\255\255\255\255\255\255\255\255\255\ +\255\255\255\255\255\255\030\001\031\001\032\001\033\001\034\001\ +\255\255\255\255\255\255\255\255\255\255\040\001\255\255\255\255\ +\255\255\044\001\255\255\255\255\255\255\255\255\049\001\050\001\ +\255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\ +\255\255\060\001\061\001\062\001\063\001\064\001\255\255\255\255\ +\255\255\255\255\069\001\255\255\255\255\255\255\073\001\255\255\ +\255\255\255\255\077\001\078\001\255\255\255\255\255\255\255\255\ +\255\255\084\001\085\001\255\255\255\255\255\255\255\255\090\001\ +\255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\ +\255\255\255\255\255\255\255\255\255\255\255\255\255\255\106\001\ +\255\255\255\255\109\001\255\255\255\255\255\255\255\255\255\255\ +\255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\ +\255\255\124\001\255\255\126\001\255\255\128\001\255\255\255\255\ +\255\255\132\001\255\255\255\255\255\255\255\255\137\001\255\255\ +\139\001\140\001\255\255\255\255\143\001\255\255\255\255\255\255\ +\255\255\255\255\255\255\255\255\151\001\255\255\153\001\255\255\ +\255\255\255\255\157\001\158\001\159\001\160\001\161\001\012\001\ +\255\255\164\001\255\255\016\001\255\255\168\001\019\001\255\255\ +\021\001\255\255\255\255\255\255\255\255\255\255\255\255\255\255\ +\255\255\255\255\031\001\032\001\033\001\034\001\255\255\255\255\ +\255\255\255\255\255\255\040\001\255\255\255\255\255\255\044\001\ +\255\255\255\255\255\255\255\255\049\001\050\001\255\255\255\255\ +\255\255\255\255\255\255\255\255\255\255\255\255\255\255\060\001\ +\061\001\062\001\063\001\064\001\255\255\255\255\255\255\255\255\ +\069\001\255\255\255\255\255\255\073\001\255\255\255\255\255\255\ +\077\001\078\001\255\255\255\255\255\255\255\255\255\255\084\001\ +\085\001\255\255\255\255\255\255\255\255\090\001\255\255\255\255\ +\255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\ +\255\255\255\255\255\255\255\255\255\255\106\001\255\255\255\255\ +\109\001\255\255\255\255\255\255\255\255\255\255\255\255\255\255\ +\255\255\255\255\255\255\255\255\255\255\255\255\255\255\124\001\ +\255\255\126\001\255\255\128\001\255\255\255\255\255\255\132\001\ +\255\255\255\255\255\255\255\255\137\001\255\255\139\001\140\001\ +\255\255\255\255\143\001\255\255\255\255\255\255\255\255\255\255\ +\255\255\255\255\151\001\255\255\153\001\255\255\255\255\255\255\ +\157\001\158\001\159\001\160\001\161\001\012\001\255\255\164\001\ +\255\255\016\001\255\255\168\001\019\001\255\255\021\001\255\255\ +\255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\ +\031\001\032\001\033\001\034\001\255\255\255\255\255\255\255\255\ +\255\255\040\001\255\255\255\255\255\255\044\001\255\255\255\255\ +\255\255\255\255\049\001\050\001\255\255\255\255\255\255\255\255\ +\255\255\255\255\255\255\255\255\255\255\060\001\061\001\062\001\ +\063\001\064\001\255\255\255\255\255\255\255\255\069\001\255\255\ +\255\255\255\255\073\001\255\255\255\255\255\255\077\001\078\001\ +\255\255\255\255\255\255\255\255\255\255\084\001\085\001\255\255\ +\255\255\255\255\255\255\090\001\255\255\255\255\255\255\255\255\ +\255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\ +\255\255\255\255\255\255\106\001\255\255\255\255\109\001\255\255\ +\255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\ +\255\255\255\255\255\255\255\255\255\255\124\001\255\255\126\001\ +\255\255\128\001\255\255\255\255\255\255\132\001\255\255\255\255\ +\255\255\255\255\137\001\255\255\139\001\140\001\255\255\255\255\ +\143\001\255\255\255\255\255\255\255\255\255\255\255\255\255\255\ +\151\001\255\255\153\001\255\255\255\255\255\255\157\001\158\001\ +\159\001\160\001\161\001\012\001\255\255\164\001\255\255\016\001\ +\255\255\168\001\019\001\255\255\021\001\255\255\255\255\255\255\ +\255\255\255\255\255\255\255\255\255\255\255\255\031\001\032\001\ +\033\001\034\001\255\255\255\255\255\255\255\255\255\255\040\001\ +\255\255\255\255\255\255\044\001\255\255\255\255\255\255\255\255\ +\049\001\050\001\255\255\255\255\255\255\255\255\255\255\255\255\ +\255\255\255\255\255\255\060\001\061\001\062\001\063\001\064\001\ +\255\255\255\255\255\255\255\255\069\001\255\255\255\255\255\255\ +\073\001\255\255\255\255\255\255\077\001\078\001\255\255\255\255\ +\255\255\255\255\255\255\084\001\085\001\255\255\255\255\255\255\ +\255\255\090\001\255\255\255\255\255\255\255\255\255\255\255\255\ +\255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\ +\255\255\106\001\255\255\255\255\109\001\255\255\255\255\255\255\ +\255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\ +\255\255\255\255\255\255\124\001\255\255\126\001\255\255\128\001\ +\255\255\255\255\255\255\132\001\255\255\255\255\255\255\255\255\ +\137\001\255\255\139\001\140\001\255\255\255\255\143\001\255\255\ +\255\255\255\255\255\255\255\255\255\255\255\255\151\001\255\255\ +\153\001\255\255\255\255\255\255\157\001\158\001\159\001\160\001\ +\161\001\012\001\255\255\164\001\255\255\016\001\255\255\168\001\ +\019\001\255\255\021\001\255\255\255\255\255\255\255\255\255\255\ +\255\255\255\255\255\255\255\255\031\001\032\001\033\001\034\001\ +\255\255\255\255\255\255\255\255\255\255\040\001\255\255\255\255\ +\255\255\044\001\255\255\255\255\255\255\255\255\049\001\050\001\ +\255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\ +\255\255\060\001\061\001\062\001\063\001\064\001\255\255\255\255\ +\255\255\255\255\069\001\255\255\255\255\255\255\073\001\255\255\ +\255\255\255\255\077\001\078\001\255\255\255\255\255\255\255\255\ +\255\255\084\001\085\001\255\255\255\255\255\255\255\255\090\001\ +\255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\ +\255\255\255\255\255\255\255\255\255\255\255\255\255\255\106\001\ +\255\255\255\255\109\001\255\255\255\255\255\255\255\255\255\255\ +\255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\ +\255\255\124\001\255\255\126\001\255\255\128\001\255\255\255\255\ +\255\255\132\001\255\255\255\255\255\255\255\255\137\001\255\255\ +\139\001\140\001\255\255\255\255\143\001\255\255\255\255\255\255\ +\255\255\255\255\255\255\255\255\151\001\255\255\153\001\255\255\ +\255\255\255\255\157\001\158\001\159\001\160\001\161\001\012\001\ +\255\255\164\001\255\255\016\001\255\255\168\001\019\001\255\255\ +\021\001\255\255\255\255\255\255\255\255\255\255\255\255\255\255\ +\255\255\255\255\031\001\032\001\033\001\034\001\255\255\255\255\ +\255\255\255\255\255\255\040\001\255\255\255\255\255\255\044\001\ +\255\255\255\255\255\255\255\255\049\001\050\001\255\255\255\255\ +\255\255\255\255\255\255\255\255\255\255\255\255\255\255\060\001\ +\061\001\062\001\063\001\064\001\255\255\255\255\255\255\255\255\ +\069\001\255\255\255\255\255\255\073\001\255\255\255\255\255\255\ +\077\001\078\001\255\255\255\255\255\255\255\255\255\255\084\001\ +\085\001\255\255\255\255\255\255\255\255\090\001\255\255\255\255\ +\255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\ +\255\255\255\255\255\255\255\255\255\255\106\001\255\255\255\255\ +\109\001\255\255\255\255\255\255\255\255\255\255\255\255\255\255\ +\255\255\255\255\255\255\255\255\255\255\255\255\255\255\124\001\ +\255\255\126\001\255\255\128\001\255\255\255\255\255\255\132\001\ +\255\255\255\255\255\255\255\255\137\001\255\255\139\001\140\001\ +\255\255\255\255\143\001\255\255\255\255\255\255\255\255\255\255\ +\255\255\255\255\151\001\255\255\153\001\255\255\255\255\255\255\ +\157\001\158\001\159\001\160\001\161\001\012\001\255\255\164\001\ +\255\255\016\001\255\255\168\001\019\001\255\255\255\255\255\255\ +\255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\ +\031\001\032\001\033\001\034\001\255\255\255\255\255\255\255\255\ +\255\255\040\001\255\255\255\255\255\255\044\001\255\255\255\255\ +\255\255\255\255\049\001\050\001\255\255\255\255\255\255\255\255\ +\255\255\255\255\255\255\255\255\255\255\060\001\061\001\062\001\ +\063\001\064\001\255\255\255\255\255\255\255\255\069\001\255\255\ +\255\255\255\255\073\001\255\255\255\255\255\255\077\001\078\001\ +\255\255\255\255\255\255\255\255\255\255\084\001\085\001\255\255\ +\255\255\255\255\255\255\090\001\255\255\255\255\255\255\255\255\ +\255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\ +\255\255\255\255\255\255\106\001\255\255\255\255\109\001\255\255\ +\255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\ +\255\255\255\255\255\255\255\255\255\255\124\001\255\255\126\001\ +\255\255\128\001\255\255\255\255\255\255\132\001\255\255\255\255\ +\255\255\255\255\137\001\255\255\139\001\140\001\255\255\255\255\ +\143\001\255\255\255\255\255\255\255\255\255\255\255\255\255\255\ +\151\001\255\255\153\001\255\255\255\255\255\255\157\001\158\001\ +\159\001\160\001\161\001\012\001\255\255\164\001\255\255\016\001\ +\255\255\168\001\019\001\255\255\255\255\255\255\255\255\255\255\ +\255\255\255\255\255\255\255\255\255\255\255\255\031\001\032\001\ +\033\001\034\001\255\255\255\255\255\255\255\255\255\255\040\001\ +\255\255\255\255\255\255\044\001\255\255\255\255\255\255\255\255\ +\049\001\050\001\255\255\255\255\255\255\255\255\255\255\255\255\ +\255\255\255\255\255\255\060\001\061\001\062\001\063\001\064\001\ +\255\255\255\255\255\255\255\255\069\001\255\255\255\255\255\255\ +\073\001\255\255\255\255\255\255\077\001\078\001\255\255\255\255\ +\255\255\255\255\255\255\084\001\085\001\255\255\255\255\255\255\ +\255\255\090\001\255\255\255\255\255\255\255\255\255\255\255\255\ +\255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\ +\255\255\106\001\255\255\255\255\109\001\255\255\255\255\255\255\ +\255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\ +\255\255\255\255\255\255\124\001\255\255\126\001\255\255\128\001\ +\255\255\255\255\255\255\132\001\255\255\255\255\255\255\255\255\ +\137\001\255\255\139\001\140\001\255\255\255\255\143\001\255\255\ +\255\255\255\255\255\255\255\255\255\255\255\255\151\001\255\255\ +\153\001\255\255\255\255\255\255\157\001\158\001\159\001\160\001\ +\161\001\012\001\255\255\164\001\255\255\016\001\255\255\168\001\ +\019\001\255\255\255\255\255\255\255\255\255\255\255\255\255\255\ +\255\255\255\255\255\255\255\255\031\001\032\001\033\001\034\001\ +\255\255\255\255\255\255\255\255\255\255\040\001\255\255\255\255\ +\255\255\044\001\255\255\255\255\255\255\255\255\049\001\050\001\ +\255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\ +\255\255\060\001\061\001\062\001\063\001\064\001\255\255\255\255\ +\255\255\255\255\069\001\255\255\255\255\255\255\073\001\255\255\ +\255\255\255\255\077\001\078\001\255\255\255\255\255\255\255\255\ +\255\255\084\001\085\001\255\255\255\255\255\255\255\255\090\001\ +\255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\ +\255\255\255\255\255\255\255\255\255\255\255\255\255\255\106\001\ +\255\255\255\255\109\001\255\255\255\255\255\255\255\255\255\255\ +\255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\ +\255\255\124\001\255\255\126\001\255\255\128\001\255\255\255\255\ +\255\255\132\001\255\255\255\255\255\255\255\255\137\001\255\255\ +\139\001\140\001\255\255\255\255\143\001\255\255\255\255\255\255\ +\255\255\255\255\255\255\255\255\151\001\255\255\153\001\255\255\ +\255\255\255\255\157\001\158\001\159\001\160\001\161\001\012\001\ +\255\255\164\001\255\255\016\001\255\255\168\001\019\001\255\255\ +\255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\ +\255\255\255\255\031\001\032\001\033\001\034\001\255\255\255\255\ +\255\255\255\255\255\255\040\001\255\255\255\255\255\255\044\001\ +\255\255\255\255\255\255\255\255\049\001\050\001\255\255\255\255\ +\255\255\255\255\255\255\255\255\255\255\255\255\255\255\060\001\ +\061\001\062\001\063\001\064\001\255\255\255\255\255\255\255\255\ +\069\001\255\255\255\255\255\255\073\001\255\255\255\255\255\255\ +\077\001\078\001\255\255\255\255\255\255\255\255\255\255\084\001\ +\085\001\255\255\255\255\255\255\255\255\090\001\255\255\255\255\ +\255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\ +\255\255\255\255\255\255\255\255\255\255\106\001\255\255\255\255\ +\109\001\255\255\255\255\255\255\255\255\255\255\255\255\255\255\ +\255\255\255\255\255\255\255\255\255\255\255\255\255\255\124\001\ +\255\255\126\001\255\255\128\001\255\255\255\255\255\255\132\001\ +\255\255\255\255\255\255\255\255\137\001\255\255\139\001\140\001\ +\255\255\255\255\143\001\255\255\255\255\255\255\255\255\255\255\ +\255\255\255\255\151\001\255\255\153\001\255\255\255\255\255\255\ +\157\001\158\001\159\001\160\001\161\001\012\001\255\255\164\001\ +\255\255\016\001\255\255\168\001\019\001\255\255\255\255\255\255\ +\255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\ +\031\001\032\001\033\001\034\001\255\255\255\255\255\255\255\255\ +\255\255\040\001\255\255\255\255\255\255\044\001\255\255\255\255\ +\255\255\255\255\049\001\050\001\255\255\255\255\255\255\255\255\ +\255\255\255\255\255\255\255\255\255\255\060\001\061\001\062\001\ +\063\001\064\001\255\255\255\255\255\255\255\255\069\001\255\255\ +\255\255\255\255\073\001\255\255\255\255\255\255\077\001\078\001\ +\255\255\255\255\255\255\255\255\255\255\084\001\085\001\255\255\ +\255\255\255\255\255\255\090\001\255\255\255\255\255\255\255\255\ +\255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\ +\255\255\255\255\255\255\106\001\255\255\255\255\109\001\255\255\ +\255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\ +\255\255\255\255\255\255\255\255\255\255\124\001\255\255\126\001\ +\255\255\128\001\255\255\008\001\255\255\132\001\255\255\012\001\ +\255\255\255\255\137\001\016\001\139\001\140\001\019\001\255\255\ +\143\001\022\001\023\001\255\255\025\001\255\255\255\255\028\001\ +\151\001\255\255\153\001\255\255\255\255\255\255\157\001\158\001\ +\159\001\160\001\161\001\040\001\255\255\164\001\255\255\044\001\ +\255\255\168\001\255\255\255\255\255\255\050\001\255\255\052\001\ +\255\255\054\001\255\255\255\255\255\255\255\255\255\255\060\001\ +\061\001\062\001\063\001\064\001\255\255\255\255\255\255\255\255\ +\255\255\255\255\255\255\255\255\073\001\255\255\255\255\255\255\ +\077\001\078\001\255\255\255\255\255\255\255\255\255\255\084\001\ +\085\001\255\255\255\255\255\255\255\255\090\001\255\255\255\255\ +\255\255\255\255\255\255\255\255\255\255\098\001\099\001\100\001\ +\101\001\102\001\103\001\104\001\105\001\106\001\107\001\108\001\ +\109\001\110\001\255\255\255\255\255\255\255\255\255\255\255\255\ +\255\255\255\255\255\255\255\255\255\255\255\255\255\255\124\001\ +\255\255\255\255\255\255\128\001\255\255\255\255\255\255\132\001\ +\008\001\009\001\010\001\011\001\012\001\255\255\139\001\140\001\ +\016\001\255\255\143\001\019\001\255\255\255\255\255\255\255\255\ +\255\255\255\255\151\001\255\255\153\001\029\001\255\255\255\255\ +\157\001\158\001\159\001\160\001\161\001\255\255\255\255\255\255\ +\255\255\255\255\255\255\043\001\044\001\045\001\255\255\047\001\ +\255\255\049\001\050\001\255\255\255\255\255\255\255\255\255\255\ +\255\255\255\255\255\255\255\255\060\001\061\001\062\001\063\001\ +\064\001\255\255\255\255\255\255\255\255\069\001\070\001\255\255\ +\072\001\073\001\255\255\255\255\076\001\077\001\078\001\255\255\ +\255\255\255\255\255\255\255\255\084\001\085\001\255\255\255\255\ +\088\001\255\255\090\001\255\255\255\255\255\255\255\255\255\255\ +\255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\ +\255\255\255\255\106\001\255\255\255\255\109\001\255\255\255\255\ +\255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\ +\255\255\255\255\122\001\255\255\124\001\255\255\255\255\255\255\ +\128\001\255\255\255\255\255\255\132\001\008\001\009\001\010\001\ +\011\001\012\001\013\001\139\001\140\001\016\001\255\255\143\001\ +\019\001\255\255\255\255\255\255\255\255\149\001\255\255\151\001\ +\255\255\153\001\029\001\255\255\255\255\157\001\158\001\159\001\ +\160\001\161\001\255\255\255\255\255\255\255\255\255\255\255\255\ +\043\001\044\001\045\001\255\255\047\001\255\255\049\001\050\001\ +\255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\ +\255\255\060\001\061\001\062\001\063\001\064\001\255\255\255\255\ +\255\255\255\255\069\001\070\001\255\255\255\255\073\001\255\255\ +\255\255\076\001\077\001\078\001\255\255\255\255\255\255\255\255\ +\255\255\084\001\085\001\255\255\255\255\088\001\255\255\090\001\ +\255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\ +\255\255\255\255\255\255\255\255\255\255\255\255\255\255\106\001\ +\255\255\255\255\109\001\255\255\255\255\255\255\255\255\255\255\ +\255\255\255\255\255\255\255\255\255\255\255\255\255\255\122\001\ +\255\255\124\001\255\255\255\255\255\255\128\001\255\255\255\255\ +\255\255\132\001\008\001\009\001\010\001\011\001\012\001\255\255\ +\139\001\140\001\016\001\255\255\143\001\019\001\255\255\255\255\ +\255\255\255\255\149\001\255\255\151\001\255\255\153\001\029\001\ +\255\255\255\255\157\001\158\001\159\001\160\001\161\001\255\255\ +\255\255\255\255\255\255\255\255\255\255\043\001\044\001\045\001\ +\255\255\047\001\255\255\049\001\050\001\255\255\255\255\255\255\ +\255\255\255\255\255\255\255\255\255\255\255\255\060\001\061\001\ +\062\001\063\001\064\001\255\255\255\255\255\255\255\255\069\001\ +\070\001\255\255\255\255\073\001\255\255\255\255\076\001\077\001\ +\078\001\255\255\255\255\255\255\255\255\255\255\084\001\085\001\ +\255\255\255\255\088\001\255\255\090\001\255\255\255\255\255\255\ +\255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\ +\255\255\255\255\255\255\255\255\106\001\255\255\255\255\109\001\ +\255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\ +\255\255\255\255\255\255\255\255\122\001\255\255\124\001\255\255\ +\255\255\255\255\128\001\255\255\255\255\255\255\132\001\008\001\ +\009\001\010\001\011\001\012\001\255\255\139\001\140\001\016\001\ +\255\255\143\001\019\001\255\255\255\255\255\255\255\255\149\001\ +\255\255\151\001\255\255\153\001\029\001\255\255\255\255\157\001\ +\158\001\159\001\160\001\161\001\255\255\255\255\255\255\255\255\ +\255\255\255\255\255\255\044\001\255\255\255\255\047\001\255\255\ +\049\001\050\001\255\255\255\255\255\255\255\255\255\255\255\255\ +\255\255\255\255\255\255\060\001\061\001\062\001\063\001\064\001\ +\255\255\255\255\255\255\255\255\069\001\070\001\255\255\255\255\ +\073\001\255\255\255\255\076\001\077\001\078\001\255\255\255\255\ +\255\255\255\255\255\255\084\001\085\001\255\255\255\255\088\001\ +\255\255\090\001\255\255\255\255\255\255\255\255\255\255\255\255\ +\255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\ +\255\255\106\001\255\255\255\255\109\001\255\255\255\255\255\255\ +\255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\ +\255\255\122\001\255\255\124\001\255\255\255\255\255\255\128\001\ +\255\255\255\255\255\255\132\001\008\001\009\001\010\001\011\001\ +\012\001\255\255\139\001\140\001\016\001\255\255\143\001\019\001\ +\255\255\255\255\255\255\255\255\149\001\255\255\151\001\255\255\ +\153\001\029\001\255\255\255\255\157\001\158\001\159\001\160\001\ +\161\001\255\255\255\255\255\255\255\255\255\255\255\255\255\255\ +\044\001\255\255\255\255\255\255\255\255\049\001\050\001\255\255\ +\255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\ +\060\001\061\001\062\001\063\001\064\001\255\255\255\255\255\255\ +\255\255\069\001\070\001\255\255\255\255\073\001\255\255\255\255\ +\076\001\077\001\078\001\255\255\255\255\255\255\255\255\255\255\ +\084\001\085\001\255\255\255\255\088\001\255\255\090\001\255\255\ +\255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\ +\255\255\255\255\255\255\255\255\255\255\255\255\106\001\255\255\ +\255\255\109\001\255\255\255\255\255\255\255\255\255\255\255\255\ +\255\255\255\255\255\255\255\255\255\255\255\255\122\001\255\255\ +\124\001\255\255\255\255\255\255\128\001\255\255\255\255\255\255\ +\132\001\008\001\009\001\010\001\011\001\012\001\255\255\139\001\ +\140\001\016\001\255\255\143\001\019\001\255\255\255\255\255\255\ +\255\255\149\001\255\255\151\001\255\255\153\001\029\001\255\255\ +\255\255\157\001\158\001\159\001\160\001\161\001\255\255\255\255\ +\255\255\255\255\255\255\255\255\255\255\044\001\255\255\255\255\ +\255\255\255\255\049\001\050\001\255\255\255\255\255\255\255\255\ +\255\255\255\255\255\255\255\255\255\255\060\001\061\001\062\001\ +\063\001\064\001\255\255\255\255\255\255\255\255\069\001\070\001\ +\255\255\255\255\073\001\255\255\255\255\076\001\077\001\078\001\ +\255\255\255\255\255\255\255\255\255\255\084\001\085\001\255\255\ +\255\255\088\001\255\255\090\001\255\255\255\255\255\255\255\255\ +\255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\ +\255\255\255\255\255\255\106\001\255\255\255\255\109\001\255\255\ +\255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\ +\255\255\255\255\255\255\122\001\255\255\124\001\255\255\255\255\ +\255\255\128\001\255\255\255\255\255\255\132\001\008\001\009\001\ +\010\001\011\001\012\001\255\255\139\001\140\001\016\001\255\255\ +\143\001\019\001\255\255\255\255\255\255\255\255\149\001\255\255\ +\151\001\255\255\153\001\029\001\255\255\255\255\157\001\158\001\ +\159\001\160\001\161\001\255\255\255\255\255\255\255\255\255\255\ +\255\255\255\255\044\001\255\255\255\255\255\255\255\255\049\001\ +\050\001\255\255\255\255\255\255\255\255\255\255\255\255\255\255\ +\255\255\255\255\060\001\061\001\062\001\063\001\064\001\255\255\ +\255\255\255\255\255\255\069\001\070\001\255\255\255\255\073\001\ +\255\255\255\255\076\001\077\001\078\001\255\255\255\255\255\255\ +\255\255\255\255\084\001\085\001\255\255\255\255\088\001\255\255\ +\090\001\255\255\255\255\255\255\255\255\255\255\255\255\255\255\ +\255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\ +\106\001\255\255\255\255\109\001\008\001\009\001\010\001\011\001\ +\012\001\255\255\255\255\255\255\016\001\255\255\255\255\019\001\ +\122\001\255\255\124\001\255\255\255\255\255\255\128\001\255\255\ +\255\255\255\255\132\001\255\255\255\255\255\255\255\255\255\255\ +\255\255\139\001\140\001\255\255\255\255\143\001\255\255\043\001\ +\044\001\045\001\255\255\149\001\255\255\151\001\050\001\153\001\ +\255\255\255\255\255\255\157\001\158\001\159\001\160\001\161\001\ +\060\001\061\001\062\001\063\001\064\001\255\255\255\255\255\255\ +\255\255\069\001\255\255\255\255\255\255\073\001\255\255\255\255\ +\255\255\077\001\078\001\255\255\255\255\255\255\255\255\255\255\ +\084\001\085\001\255\255\255\255\088\001\255\255\090\001\255\255\ +\255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\ +\255\255\255\255\255\255\255\255\255\255\255\255\106\001\255\255\ +\255\255\109\001\008\001\009\001\010\001\011\001\012\001\255\255\ +\255\255\255\255\016\001\255\255\255\255\019\001\122\001\255\255\ +\124\001\255\255\255\255\255\255\128\001\255\255\255\255\255\255\ +\132\001\255\255\255\255\255\255\255\255\255\255\255\255\139\001\ +\140\001\255\255\255\255\143\001\255\255\043\001\044\001\045\001\ +\255\255\149\001\255\255\151\001\050\001\153\001\255\255\255\255\ +\255\255\157\001\158\001\159\001\160\001\161\001\060\001\061\001\ +\062\001\063\001\064\001\255\255\255\255\255\255\255\255\069\001\ +\255\255\255\255\255\255\073\001\255\255\255\255\255\255\077\001\ +\078\001\255\255\255\255\255\255\255\255\255\255\084\001\085\001\ +\255\255\255\255\088\001\255\255\090\001\255\255\255\255\255\255\ +\255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\ +\255\255\255\255\255\255\255\255\106\001\255\255\255\255\109\001\ +\008\001\009\001\010\001\011\001\012\001\255\255\255\255\255\255\ +\016\001\255\255\255\255\019\001\122\001\255\255\124\001\255\255\ +\255\255\255\255\128\001\255\255\255\255\255\255\132\001\255\255\ +\255\255\255\255\255\255\255\255\255\255\139\001\140\001\255\255\ +\255\255\143\001\255\255\255\255\044\001\255\255\255\255\149\001\ +\255\255\151\001\050\001\153\001\255\255\255\255\255\255\157\001\ +\158\001\159\001\160\001\161\001\060\001\061\001\062\001\063\001\ +\064\001\255\255\255\255\255\255\255\255\069\001\255\255\255\255\ +\255\255\073\001\255\255\255\255\076\001\077\001\078\001\255\255\ +\255\255\255\255\255\255\255\255\084\001\085\001\255\255\255\255\ +\088\001\255\255\090\001\255\255\255\255\255\255\255\255\255\255\ +\255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\ +\255\255\255\255\106\001\255\255\255\255\109\001\008\001\009\001\ +\010\001\011\001\012\001\255\255\255\255\255\255\016\001\255\255\ +\255\255\019\001\122\001\255\255\124\001\255\255\255\255\255\255\ +\128\001\255\255\255\255\255\255\132\001\255\255\255\255\255\255\ +\255\255\255\255\255\255\139\001\140\001\255\255\255\255\143\001\ +\255\255\255\255\044\001\255\255\255\255\149\001\255\255\151\001\ +\050\001\153\001\255\255\255\255\255\255\157\001\158\001\159\001\ +\160\001\161\001\060\001\061\001\062\001\063\001\064\001\255\255\ +\255\255\255\255\255\255\069\001\255\255\255\255\255\255\073\001\ +\255\255\255\255\076\001\077\001\078\001\255\255\255\255\255\255\ +\255\255\255\255\084\001\085\001\255\255\255\255\088\001\255\255\ +\090\001\255\255\255\255\255\255\255\255\255\255\255\255\255\255\ +\255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\ +\106\001\255\255\255\255\109\001\008\001\009\001\010\001\011\001\ +\012\001\255\255\255\255\255\255\016\001\255\255\255\255\019\001\ +\122\001\255\255\124\001\255\255\255\255\255\255\128\001\255\255\ +\255\255\255\255\132\001\255\255\255\255\255\255\255\255\255\255\ +\255\255\139\001\140\001\255\255\255\255\143\001\255\255\255\255\ +\044\001\255\255\255\255\149\001\255\255\151\001\050\001\153\001\ +\255\255\255\255\255\255\157\001\158\001\159\001\160\001\161\001\ +\060\001\061\001\062\001\063\001\064\001\255\255\255\255\255\255\ +\255\255\069\001\255\255\255\255\255\255\073\001\255\255\255\255\ +\255\255\077\001\078\001\255\255\255\255\255\255\255\255\255\255\ +\084\001\085\001\255\255\255\255\088\001\255\255\090\001\255\255\ +\255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\ +\255\255\255\255\255\255\255\255\255\255\255\255\106\001\255\255\ +\255\255\109\001\008\001\009\001\010\001\011\001\012\001\255\255\ +\255\255\255\255\016\001\255\255\255\255\019\001\122\001\255\255\ +\124\001\255\255\255\255\255\255\128\001\255\255\255\255\255\255\ +\132\001\255\255\255\255\255\255\255\255\255\255\255\255\139\001\ +\140\001\255\255\255\255\143\001\255\255\255\255\044\001\255\255\ +\255\255\149\001\255\255\151\001\050\001\153\001\255\255\255\255\ +\255\255\157\001\158\001\159\001\160\001\161\001\060\001\061\001\ +\062\001\063\001\064\001\255\255\255\255\255\255\255\255\069\001\ +\255\255\255\255\255\255\073\001\255\255\255\255\255\255\077\001\ +\078\001\255\255\255\255\255\255\255\255\255\255\084\001\085\001\ +\255\255\255\255\088\001\255\255\090\001\255\255\255\255\255\255\ +\255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\ +\255\255\255\255\255\255\255\255\106\001\255\255\255\255\109\001\ +\008\001\009\001\010\001\011\001\012\001\255\255\255\255\255\255\ +\016\001\255\255\255\255\019\001\122\001\255\255\124\001\255\255\ +\255\255\255\255\128\001\255\255\255\255\255\255\132\001\255\255\ +\255\255\255\255\255\255\255\255\255\255\139\001\140\001\255\255\ +\255\255\143\001\255\255\255\255\044\001\255\255\255\255\149\001\ +\255\255\151\001\050\001\153\001\255\255\255\255\255\255\157\001\ +\158\001\159\001\160\001\161\001\060\001\061\001\062\001\063\001\ +\064\001\255\255\255\255\255\255\255\255\069\001\255\255\255\255\ +\255\255\073\001\255\255\255\255\255\255\077\001\078\001\255\255\ +\255\255\255\255\255\255\255\255\084\001\085\001\255\255\255\255\ +\088\001\255\255\090\001\255\255\255\255\255\255\255\255\255\255\ +\255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\ +\255\255\255\255\106\001\255\255\255\255\109\001\008\001\009\001\ +\010\001\011\001\012\001\255\255\255\255\255\255\016\001\255\255\ +\255\255\019\001\122\001\255\255\124\001\255\255\255\255\255\255\ +\128\001\255\255\255\255\255\255\132\001\255\255\255\255\255\255\ +\255\255\255\255\255\255\139\001\140\001\255\255\255\255\143\001\ +\255\255\255\255\044\001\255\255\255\255\149\001\255\255\151\001\ +\050\001\153\001\255\255\255\255\255\255\157\001\158\001\159\001\ +\160\001\161\001\060\001\061\001\062\001\063\001\064\001\255\255\ +\255\255\255\255\255\255\069\001\255\255\255\255\255\255\255\255\ +\255\255\255\255\076\001\077\001\078\001\255\255\255\255\255\255\ +\255\255\255\255\084\001\085\001\255\255\255\255\088\001\255\255\ +\090\001\255\255\255\255\255\255\255\255\255\255\255\255\255\255\ +\255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\ +\106\001\255\255\255\255\109\001\255\255\255\255\255\255\255\255\ +\255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\ +\122\001\255\255\124\001\255\255\255\255\255\255\128\001\255\255\ +\012\001\255\255\132\001\255\255\016\001\255\255\255\255\019\001\ +\255\255\139\001\140\001\255\255\255\255\143\001\255\255\255\255\ +\255\255\255\255\255\255\149\001\255\255\151\001\255\255\153\001\ +\255\255\255\255\255\255\157\001\158\001\159\001\160\001\161\001\ +\044\001\255\255\255\255\255\255\255\255\049\001\050\001\255\255\ +\255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\ +\060\001\061\001\062\001\063\001\064\001\255\255\255\255\255\255\ +\255\255\069\001\255\255\255\255\255\255\073\001\255\255\255\255\ +\255\255\077\001\078\001\255\255\255\255\255\255\255\255\255\255\ +\084\001\085\001\255\255\255\255\255\255\255\255\090\001\255\255\ +\255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\ +\255\255\255\255\255\255\255\255\255\255\255\255\106\001\255\255\ +\255\255\109\001\255\255\255\255\255\255\255\255\255\255\255\255\ +\255\255\255\255\012\001\255\255\255\255\255\255\016\001\255\255\ +\124\001\019\001\255\255\255\255\128\001\255\255\255\255\255\255\ +\132\001\255\255\255\255\255\255\255\255\255\255\255\255\139\001\ +\140\001\255\255\255\255\143\001\255\255\255\255\255\255\255\255\ +\255\255\255\255\044\001\151\001\255\255\153\001\255\255\049\001\ +\050\001\157\001\158\001\159\001\160\001\161\001\255\255\255\255\ +\164\001\255\255\060\001\061\001\062\001\063\001\064\001\255\255\ +\255\255\255\255\255\255\255\255\255\255\255\255\255\255\073\001\ +\255\255\255\255\255\255\077\001\078\001\255\255\255\255\255\255\ +\255\255\255\255\084\001\085\001\255\255\255\255\255\255\255\255\ +\090\001\255\255\255\255\255\255\255\255\255\255\255\255\255\255\ +\255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\ +\106\001\255\255\255\255\109\001\255\255\255\255\255\255\255\255\ +\255\255\255\255\255\255\011\001\012\001\255\255\255\255\255\255\ +\016\001\255\255\124\001\019\001\255\255\255\255\128\001\255\255\ +\255\255\255\255\132\001\255\255\255\255\029\001\255\255\255\255\ +\255\255\139\001\140\001\255\255\255\255\143\001\255\255\255\255\ +\255\255\255\255\255\255\255\255\044\001\151\001\255\255\153\001\ +\255\255\049\001\050\001\157\001\158\001\159\001\160\001\161\001\ +\255\255\255\255\164\001\255\255\060\001\061\001\062\001\063\001\ +\064\001\255\255\255\255\255\255\255\255\069\001\070\001\255\255\ +\255\255\073\001\255\255\255\255\076\001\077\001\078\001\255\255\ +\255\255\255\255\255\255\255\255\084\001\085\001\255\255\255\255\ +\255\255\255\255\090\001\255\255\255\255\255\255\255\255\255\255\ +\255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\ +\255\255\255\255\106\001\255\255\255\255\109\001\255\255\255\255\ +\255\255\011\001\012\001\255\255\255\255\255\255\016\001\255\255\ +\255\255\019\001\255\255\255\255\124\001\255\255\255\255\255\255\ +\128\001\255\255\255\255\255\255\132\001\255\255\255\255\255\255\ +\255\255\255\255\255\255\139\001\140\001\255\255\255\255\143\001\ +\255\255\255\255\044\001\255\255\255\255\149\001\255\255\151\001\ +\050\001\153\001\255\255\255\255\255\255\157\001\158\001\159\001\ +\160\001\161\001\060\001\061\001\062\001\063\001\064\001\255\255\ +\255\255\255\255\255\255\069\001\255\255\255\255\255\255\073\001\ +\255\255\255\255\076\001\077\001\078\001\255\255\255\255\255\255\ +\255\255\255\255\084\001\085\001\255\255\255\255\255\255\255\255\ +\090\001\255\255\255\255\255\255\255\255\255\255\255\255\255\255\ +\255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\ +\106\001\255\255\255\255\109\001\255\255\255\255\255\255\011\001\ +\012\001\255\255\255\255\255\255\016\001\255\255\255\255\019\001\ +\255\255\255\255\124\001\255\255\255\255\255\255\128\001\255\255\ +\255\255\255\255\132\001\255\255\255\255\255\255\255\255\255\255\ +\255\255\139\001\140\001\255\255\255\255\143\001\255\255\255\255\ +\044\001\255\255\255\255\149\001\255\255\151\001\050\001\153\001\ +\255\255\255\255\255\255\157\001\158\001\159\001\160\001\161\001\ +\060\001\061\001\062\001\063\001\064\001\255\255\255\255\255\255\ +\255\255\069\001\255\255\255\255\255\255\073\001\255\255\255\255\ +\255\255\077\001\078\001\255\255\255\255\255\255\255\255\255\255\ +\084\001\085\001\255\255\255\255\255\255\255\255\090\001\255\255\ +\255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\ +\255\255\255\255\255\255\255\255\255\255\255\255\106\001\255\255\ +\255\255\109\001\255\255\255\255\255\255\011\001\012\001\255\255\ +\255\255\255\255\016\001\255\255\255\255\019\001\255\255\255\255\ +\124\001\255\255\255\255\255\255\128\001\255\255\255\255\255\255\ +\132\001\255\255\255\255\255\255\255\255\255\255\255\255\139\001\ +\140\001\255\255\255\255\143\001\255\255\255\255\044\001\255\255\ +\255\255\149\001\255\255\151\001\050\001\153\001\255\255\255\255\ +\255\255\157\001\158\001\159\001\160\001\161\001\060\001\061\001\ +\062\001\063\001\064\001\255\255\255\255\255\255\255\255\069\001\ +\255\255\255\255\255\255\073\001\255\255\255\255\255\255\077\001\ +\078\001\255\255\255\255\255\255\255\255\255\255\084\001\085\001\ +\255\255\255\255\255\255\255\255\090\001\255\255\255\255\255\255\ +\255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\ +\255\255\255\255\255\255\255\255\106\001\255\255\255\255\109\001\ +\255\255\255\255\255\255\255\255\255\255\255\255\255\255\011\001\ +\255\255\255\255\255\255\255\255\255\255\255\255\124\001\019\001\ +\255\255\255\255\128\001\255\255\255\255\255\255\132\001\255\255\ +\255\255\029\001\255\255\255\255\255\255\139\001\140\001\255\255\ +\255\255\143\001\255\255\255\255\255\255\255\255\255\255\149\001\ +\044\001\151\001\255\255\153\001\255\255\049\001\050\001\157\001\ +\158\001\159\001\160\001\161\001\255\255\255\255\255\255\255\255\ +\060\001\061\001\062\001\063\001\064\001\255\255\255\255\255\255\ +\255\255\069\001\070\001\255\255\255\255\073\001\255\255\255\255\ +\076\001\255\255\078\001\255\255\255\255\255\255\255\255\255\255\ +\084\001\085\001\255\255\255\255\255\255\255\255\090\001\255\255\ +\255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\ +\255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\ +\255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\ +\255\255\011\001\255\255\013\001\255\255\255\255\255\255\255\255\ +\124\001\019\001\255\255\255\255\128\001\255\255\255\255\255\255\ +\132\001\255\255\255\255\029\001\255\255\255\255\255\255\139\001\ +\140\001\255\255\255\255\143\001\255\255\255\255\255\255\255\255\ +\255\255\255\255\044\001\151\001\255\255\153\001\255\255\049\001\ +\050\001\157\001\158\001\159\001\160\001\161\001\255\255\255\255\ +\255\255\255\255\060\001\061\001\062\001\063\001\064\001\255\255\ +\255\255\255\255\255\255\069\001\255\255\255\255\255\255\073\001\ +\255\255\255\255\076\001\255\255\078\001\255\255\255\255\255\255\ +\255\255\255\255\084\001\085\001\255\255\255\255\255\255\255\255\ +\090\001\255\255\255\255\255\255\255\255\255\255\255\255\255\255\ +\255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\ +\255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\ +\255\255\255\255\255\255\011\001\255\255\255\255\255\255\255\255\ +\255\255\255\255\124\001\019\001\255\255\255\255\128\001\255\255\ +\255\255\255\255\132\001\255\255\255\255\029\001\255\255\255\255\ +\255\255\139\001\140\001\255\255\255\255\143\001\255\255\255\255\ +\255\255\255\255\255\255\255\255\044\001\151\001\255\255\153\001\ +\255\255\049\001\050\001\157\001\158\001\159\001\160\001\161\001\ +\255\255\255\255\255\255\255\255\060\001\061\001\062\001\063\001\ +\064\001\255\255\255\255\255\255\255\255\069\001\255\255\255\255\ +\255\255\073\001\255\255\255\255\076\001\255\255\078\001\255\255\ +\255\255\255\255\255\255\255\255\084\001\085\001\255\255\255\255\ +\255\255\255\255\090\001\255\255\255\255\255\255\255\255\255\255\ +\255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\ +\255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\ +\255\255\255\255\255\255\255\255\255\255\011\001\255\255\255\255\ +\255\255\255\255\255\255\255\255\124\001\019\001\255\255\255\255\ +\128\001\255\255\255\255\255\255\132\001\255\255\255\255\029\001\ +\136\001\255\255\255\255\139\001\140\001\255\255\255\255\143\001\ +\255\255\255\255\255\255\255\255\255\255\255\255\044\001\151\001\ +\255\255\153\001\255\255\049\001\050\001\157\001\158\001\159\001\ +\160\001\161\001\255\255\255\255\255\255\255\255\060\001\061\001\ +\062\001\063\001\064\001\255\255\255\255\255\255\255\255\069\001\ +\255\255\255\255\255\255\073\001\255\255\255\255\076\001\255\255\ +\078\001\255\255\255\255\255\255\255\255\255\255\084\001\085\001\ +\255\255\255\255\255\255\255\255\090\001\255\255\255\255\255\255\ +\255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\ +\255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\ +\255\255\255\255\255\255\255\255\255\255\255\255\255\255\011\001\ +\255\255\255\255\255\255\255\255\255\255\255\255\124\001\019\001\ +\255\255\255\255\128\001\255\255\255\255\255\255\132\001\255\255\ +\255\255\029\001\136\001\255\255\255\255\139\001\140\001\255\255\ +\255\255\143\001\255\255\255\255\255\255\255\255\255\255\255\255\ +\044\001\151\001\255\255\153\001\255\255\049\001\050\001\157\001\ +\158\001\159\001\160\001\161\001\255\255\255\255\255\255\255\255\ +\060\001\061\001\062\001\063\001\064\001\255\255\255\255\255\255\ +\255\255\069\001\255\255\255\255\255\255\073\001\255\255\255\255\ +\076\001\255\255\078\001\255\255\255\255\255\255\255\255\255\255\ +\084\001\085\001\255\255\255\255\255\255\255\255\090\001\255\255\ +\255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\ +\255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\ +\255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\ +\255\255\011\001\255\255\255\255\255\255\255\255\255\255\255\255\ +\124\001\019\001\255\255\255\255\128\001\255\255\255\255\255\255\ +\132\001\255\255\255\255\029\001\136\001\255\255\255\255\139\001\ +\140\001\255\255\255\255\143\001\255\255\255\255\255\255\255\255\ +\255\255\255\255\044\001\151\001\255\255\153\001\255\255\049\001\ +\050\001\157\001\158\001\159\001\160\001\161\001\255\255\255\255\ +\255\255\255\255\060\001\061\001\062\001\063\001\064\001\255\255\ +\255\255\255\255\255\255\069\001\255\255\255\255\255\255\073\001\ +\255\255\255\255\076\001\255\255\078\001\255\255\255\255\255\255\ +\255\255\255\255\084\001\085\001\255\255\255\255\255\255\255\255\ +\090\001\255\255\255\255\255\255\255\255\255\255\255\255\255\255\ +\255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\ +\255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\ +\255\255\255\255\255\255\011\001\255\255\255\255\255\255\255\255\ +\255\255\255\255\124\001\019\001\255\255\255\255\128\001\255\255\ +\255\255\255\255\132\001\255\255\255\255\029\001\255\255\255\255\ +\255\255\139\001\140\001\255\255\142\001\143\001\255\255\255\255\ +\255\255\255\255\255\255\255\255\044\001\151\001\255\255\153\001\ +\255\255\049\001\050\001\157\001\158\001\159\001\160\001\161\001\ +\255\255\255\255\255\255\255\255\060\001\061\001\062\001\063\001\ +\064\001\255\255\255\255\255\255\255\255\069\001\255\255\255\255\ +\255\255\073\001\255\255\255\255\076\001\255\255\078\001\255\255\ +\255\255\255\255\255\255\255\255\084\001\085\001\255\255\255\255\ +\255\255\255\255\090\001\255\255\255\255\255\255\255\255\255\255\ +\255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\ +\255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\ +\255\255\255\255\255\255\255\255\255\255\011\001\255\255\255\255\ +\255\255\255\255\255\255\255\255\124\001\019\001\255\255\255\255\ +\128\001\255\255\255\255\255\255\132\001\255\255\255\255\029\001\ +\255\255\255\255\255\255\139\001\140\001\255\255\255\255\143\001\ +\255\255\255\255\255\255\255\255\255\255\255\255\044\001\151\001\ +\255\255\153\001\255\255\049\001\050\001\157\001\158\001\159\001\ +\160\001\161\001\255\255\255\255\255\255\255\255\060\001\061\001\ +\062\001\063\001\064\001\255\255\255\255\255\255\255\255\069\001\ +\255\255\255\255\255\255\073\001\255\255\255\255\076\001\255\255\ +\078\001\255\255\255\255\255\255\255\255\255\255\084\001\085\001\ +\255\255\255\255\255\255\255\255\090\001\255\255\255\255\255\255\ +\255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\ +\255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\ +\255\255\255\255\255\255\255\255\255\255\255\255\255\255\011\001\ +\255\255\255\255\255\255\255\255\255\255\255\255\124\001\019\001\ +\255\255\255\255\128\001\255\255\255\255\255\255\132\001\255\255\ +\255\255\029\001\255\255\255\255\255\255\139\001\140\001\255\255\ +\255\255\143\001\255\255\255\255\255\255\255\255\255\255\255\255\ +\044\001\151\001\255\255\153\001\255\255\049\001\050\001\157\001\ +\158\001\159\001\160\001\161\001\255\255\255\255\255\255\255\255\ +\060\001\061\001\062\001\063\001\064\001\255\255\255\255\255\255\ +\255\255\069\001\255\255\255\255\255\255\073\001\255\255\255\255\ +\076\001\255\255\078\001\255\255\255\255\255\255\255\255\255\255\ +\084\001\085\001\255\255\255\255\255\255\255\255\090\001\255\255\ +\255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\ +\255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\ +\255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\ +\255\255\255\255\012\001\255\255\255\255\255\255\016\001\255\255\ +\124\001\019\001\255\255\255\255\128\001\255\255\255\255\255\255\ +\132\001\255\255\255\255\029\001\255\255\255\255\255\255\139\001\ +\140\001\255\255\255\255\143\001\255\255\255\255\255\255\255\255\ +\255\255\255\255\044\001\151\001\255\255\153\001\255\255\049\001\ +\050\001\157\001\158\001\159\001\160\001\161\001\255\255\255\255\ +\255\255\255\255\060\001\061\001\062\001\063\001\064\001\255\255\ +\255\255\255\255\255\255\255\255\255\255\255\255\255\255\073\001\ +\255\255\255\255\076\001\077\001\078\001\255\255\255\255\255\255\ +\255\255\255\255\084\001\085\001\255\255\255\255\255\255\255\255\ +\090\001\255\255\255\255\255\255\255\255\255\255\255\255\255\255\ +\255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\ +\106\001\255\255\255\255\109\001\255\255\255\255\255\255\255\255\ +\012\001\255\255\255\255\255\255\016\001\255\255\255\255\019\001\ +\255\255\255\255\124\001\255\255\255\255\255\255\128\001\255\255\ +\255\255\255\255\132\001\255\255\255\255\255\255\255\255\255\255\ +\255\255\139\001\140\001\255\255\255\255\143\001\255\255\255\255\ +\044\001\255\255\255\255\255\255\255\255\151\001\050\001\153\001\ +\255\255\255\255\255\255\157\001\158\001\159\001\160\001\161\001\ +\060\001\061\001\062\001\063\001\064\001\255\255\255\255\255\255\ +\255\255\255\255\255\255\255\255\255\255\073\001\255\255\255\255\ +\255\255\077\001\078\001\255\255\255\255\255\255\255\255\255\255\ +\084\001\085\001\255\255\255\255\255\255\255\255\090\001\255\255\ +\255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\ +\255\255\255\255\255\255\255\255\255\255\255\255\106\001\255\255\ +\255\255\109\001\255\255\255\255\255\255\255\255\012\001\255\255\ +\255\255\255\255\016\001\255\255\255\255\019\001\255\255\255\255\ +\124\001\255\255\255\255\255\255\128\001\255\255\255\255\255\255\ +\132\001\255\255\255\255\255\255\136\001\255\255\255\255\139\001\ +\140\001\255\255\255\255\143\001\255\255\255\255\044\001\255\255\ +\255\255\255\255\255\255\151\001\050\001\153\001\255\255\255\255\ +\255\255\157\001\158\001\159\001\160\001\161\001\060\001\061\001\ +\062\001\063\001\064\001\255\255\255\255\255\255\255\255\255\255\ +\255\255\255\255\255\255\073\001\255\255\255\255\255\255\077\001\ +\078\001\255\255\255\255\255\255\255\255\255\255\084\001\085\001\ +\255\255\255\255\255\255\255\255\090\001\255\255\255\255\255\255\ +\255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\ +\255\255\255\255\255\255\255\255\106\001\255\255\255\255\109\001\ +\255\255\255\255\255\255\255\255\012\001\255\255\255\255\255\255\ +\016\001\255\255\255\255\019\001\255\255\255\255\124\001\255\255\ +\255\255\255\255\128\001\255\255\255\255\255\255\132\001\255\255\ +\255\255\255\255\136\001\255\255\255\255\139\001\140\001\255\255\ +\255\255\143\001\255\255\255\255\044\001\255\255\255\255\255\255\ +\255\255\151\001\050\001\153\001\255\255\255\255\255\255\157\001\ +\158\001\159\001\160\001\161\001\060\001\061\001\062\001\063\001\ +\064\001\255\255\255\255\255\255\255\255\069\001\255\255\255\255\ +\255\255\073\001\255\255\255\255\255\255\077\001\078\001\255\255\ +\255\255\255\255\255\255\255\255\084\001\085\001\255\255\255\255\ +\255\255\255\255\090\001\255\255\255\255\255\255\255\255\255\255\ +\255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\ +\255\255\255\255\106\001\255\255\255\255\109\001\255\255\255\255\ +\255\255\255\255\012\001\255\255\255\255\255\255\016\001\255\255\ +\255\255\019\001\255\255\255\255\124\001\255\255\255\255\255\255\ +\128\001\255\255\255\255\255\255\132\001\255\255\255\255\255\255\ +\255\255\255\255\255\255\139\001\140\001\255\255\255\255\143\001\ +\255\255\255\255\044\001\255\255\255\255\255\255\255\255\151\001\ +\050\001\153\001\255\255\255\255\255\255\157\001\158\001\159\001\ +\160\001\161\001\060\001\061\001\062\001\063\001\064\001\255\255\ +\255\255\255\255\255\255\255\255\255\255\255\255\255\255\073\001\ +\255\255\255\255\255\255\077\001\078\001\255\255\255\255\255\255\ +\255\255\255\255\084\001\085\001\255\255\255\255\255\255\255\255\ +\090\001\255\255\255\255\255\255\255\255\255\255\255\255\255\255\ +\255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\ +\106\001\255\255\255\255\109\001\255\255\255\255\255\255\255\255\ +\012\001\255\255\255\255\255\255\016\001\255\255\255\255\019\001\ +\255\255\255\255\124\001\255\255\255\255\255\255\128\001\255\255\ +\255\255\255\255\132\001\255\255\255\255\255\255\136\001\255\255\ +\255\255\139\001\140\001\255\255\255\255\143\001\255\255\255\255\ +\044\001\255\255\255\255\255\255\255\255\151\001\050\001\153\001\ +\255\255\255\255\255\255\157\001\158\001\159\001\160\001\161\001\ +\060\001\061\001\062\001\063\001\064\001\255\255\255\255\255\255\ +\255\255\255\255\255\255\255\255\255\255\073\001\255\255\255\255\ +\255\255\077\001\078\001\255\255\255\255\255\255\255\255\255\255\ +\084\001\085\001\255\255\255\255\255\255\255\255\090\001\255\255\ +\255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\ +\255\255\255\255\255\255\255\255\255\255\255\255\106\001\255\255\ +\255\255\109\001\255\255\255\255\255\255\255\255\012\001\255\255\ +\255\255\255\255\016\001\255\255\255\255\019\001\255\255\255\255\ +\124\001\255\255\255\255\255\255\128\001\255\255\255\255\255\255\ +\132\001\255\255\255\255\255\255\136\001\255\255\255\255\139\001\ +\140\001\255\255\255\255\143\001\255\255\255\255\044\001\255\255\ +\255\255\255\255\255\255\151\001\050\001\153\001\255\255\255\255\ +\255\255\157\001\158\001\159\001\160\001\161\001\060\001\061\001\ +\062\001\063\001\064\001\255\255\255\255\255\255\255\255\255\255\ +\255\255\255\255\255\255\073\001\255\255\255\255\255\255\077\001\ +\078\001\255\255\255\255\255\255\255\255\255\255\084\001\085\001\ +\255\255\255\255\255\255\255\255\090\001\255\255\255\255\255\255\ +\255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\ +\255\255\255\255\255\255\255\255\106\001\255\255\255\255\109\001\ +\255\255\255\255\255\255\255\255\012\001\255\255\255\255\255\255\ +\016\001\255\255\255\255\019\001\255\255\255\255\124\001\255\255\ +\255\255\255\255\128\001\255\255\255\255\255\255\132\001\255\255\ +\255\255\255\255\136\001\255\255\255\255\139\001\140\001\255\255\ +\255\255\143\001\255\255\255\255\044\001\255\255\255\255\255\255\ +\255\255\151\001\050\001\153\001\255\255\255\255\255\255\157\001\ +\158\001\159\001\160\001\161\001\060\001\061\001\062\001\063\001\ +\064\001\255\255\255\255\255\255\255\255\255\255\255\255\255\255\ +\255\255\073\001\255\255\255\255\255\255\077\001\078\001\255\255\ +\255\255\255\255\255\255\255\255\084\001\085\001\255\255\255\255\ +\255\255\255\255\090\001\255\255\255\255\255\255\255\255\255\255\ +\255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\ +\255\255\255\255\106\001\255\255\255\255\109\001\255\255\255\255\ +\255\255\255\255\012\001\255\255\255\255\255\255\016\001\255\255\ +\255\255\019\001\255\255\255\255\124\001\255\255\255\255\255\255\ +\128\001\255\255\255\255\255\255\132\001\255\255\255\255\255\255\ +\136\001\255\255\255\255\139\001\140\001\255\255\255\255\143\001\ +\255\255\255\255\044\001\255\255\255\255\255\255\255\255\151\001\ +\050\001\153\001\255\255\255\255\255\255\157\001\158\001\159\001\ +\160\001\161\001\060\001\061\001\062\001\063\001\064\001\255\255\ +\255\255\255\255\255\255\255\255\255\255\255\255\255\255\073\001\ +\255\255\255\255\255\255\077\001\078\001\255\255\255\255\255\255\ +\255\255\255\255\084\001\085\001\255\255\255\255\255\255\255\255\ +\090\001\255\255\255\255\255\255\255\255\255\255\255\255\255\255\ +\255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\ +\106\001\255\255\255\255\109\001\255\255\255\255\255\255\255\255\ +\012\001\255\255\255\255\255\255\016\001\255\255\255\255\019\001\ +\255\255\255\255\124\001\255\255\255\255\255\255\128\001\255\255\ +\255\255\255\255\132\001\255\255\255\255\255\255\255\255\255\255\ +\255\255\139\001\140\001\255\255\255\255\143\001\255\255\255\255\ +\044\001\255\255\255\255\255\255\255\255\151\001\050\001\153\001\ +\255\255\255\255\255\255\157\001\158\001\159\001\160\001\161\001\ +\060\001\061\001\062\001\063\001\064\001\255\255\255\255\255\255\ +\255\255\255\255\255\255\255\255\255\255\073\001\255\255\255\255\ +\255\255\077\001\078\001\255\255\255\255\255\255\255\255\255\255\ +\084\001\085\001\255\255\255\255\255\255\255\255\090\001\255\255\ +\255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\ +\255\255\255\255\255\255\255\255\255\255\255\255\106\001\255\255\ +\255\255\109\001\255\255\255\255\255\255\255\255\012\001\255\255\ +\255\255\255\255\016\001\255\255\255\255\019\001\255\255\255\255\ +\124\001\255\255\255\255\255\255\128\001\255\255\255\255\255\255\ +\132\001\255\255\255\255\255\255\255\255\255\255\255\255\139\001\ +\140\001\255\255\255\255\143\001\255\255\255\255\044\001\255\255\ +\255\255\255\255\255\255\151\001\050\001\153\001\255\255\255\255\ +\255\255\157\001\158\001\159\001\160\001\161\001\060\001\061\001\ +\062\001\063\001\064\001\255\255\255\255\003\001\255\255\255\255\ +\255\255\255\255\255\255\073\001\255\255\255\255\255\255\077\001\ +\078\001\255\255\255\255\255\255\255\255\255\255\084\001\085\001\ +\022\001\023\001\255\255\025\001\090\001\255\255\028\001\255\255\ +\255\255\255\255\255\255\255\255\255\255\255\255\255\255\003\001\ +\255\255\255\255\040\001\255\255\106\001\255\255\255\255\109\001\ +\255\255\255\255\255\255\255\255\255\255\255\255\052\001\255\255\ +\054\001\255\255\022\001\023\001\255\255\025\001\124\001\255\255\ +\028\001\255\255\128\001\255\255\255\255\255\255\132\001\255\255\ +\255\255\255\255\255\255\255\255\040\001\139\001\140\001\255\255\ +\255\255\143\001\255\255\081\001\255\255\255\255\255\255\255\255\ +\052\001\151\001\054\001\153\001\255\255\255\255\255\255\157\001\ +\158\001\159\001\160\001\161\001\098\001\099\001\100\001\101\001\ +\102\001\103\001\104\001\105\001\106\001\107\001\108\001\255\255\ +\110\001\255\255\255\255\255\255\255\255\081\001\255\255\255\255\ +\255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\ +\003\001\255\255\255\255\255\255\255\255\255\255\098\001\099\001\ +\100\001\101\001\102\001\103\001\104\001\105\001\106\001\107\001\ +\108\001\255\255\110\001\022\001\023\001\255\255\025\001\149\001\ +\255\255\028\001\255\255\255\255\003\001\255\255\255\255\255\255\ +\255\255\255\255\255\255\255\255\255\255\040\001\255\255\255\255\ +\255\255\255\255\255\255\255\255\255\255\255\255\255\255\022\001\ +\023\001\052\001\025\001\054\001\255\255\028\001\255\255\255\255\ +\255\255\149\001\255\255\255\255\255\255\255\255\255\255\255\255\ +\255\255\040\001\255\255\255\255\255\255\255\255\255\255\255\255\ +\255\255\255\255\255\255\255\255\255\255\052\001\081\001\054\001\ +\255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\ +\255\255\255\255\255\255\255\255\255\255\255\255\255\255\098\001\ +\099\001\100\001\101\001\102\001\103\001\104\001\105\001\106\001\ +\107\001\108\001\081\001\110\001\255\255\255\255\255\255\255\255\ +\255\255\255\255\255\255\255\255\255\255\003\001\255\255\255\255\ +\255\255\255\255\255\255\098\001\099\001\100\001\101\001\102\001\ +\103\001\104\001\105\001\106\001\107\001\108\001\255\255\110\001\ +\022\001\023\001\255\255\025\001\255\255\255\255\028\001\255\255\ +\255\255\003\001\149\001\255\255\255\255\255\255\255\255\255\255\ +\255\255\255\255\040\001\255\255\255\255\255\255\255\255\255\255\ +\255\255\255\255\255\255\255\255\022\001\023\001\052\001\025\001\ +\054\001\255\255\028\001\255\255\255\255\255\255\149\001\255\255\ +\255\255\255\255\255\255\255\255\255\255\255\255\040\001\255\255\ +\255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\ +\255\255\255\255\052\001\081\001\054\001\255\255\255\255\255\255\ +\255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\ +\255\255\255\255\255\255\255\255\098\001\099\001\100\001\101\001\ +\102\001\103\001\104\001\105\001\106\001\107\001\108\001\081\001\ +\110\001\255\255\255\255\255\255\255\255\255\255\255\255\255\255\ +\255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\ +\098\001\099\001\100\001\101\001\102\001\103\001\104\001\105\001\ +\106\001\107\001\108\001\255\255\110\001\255\255\255\255\255\255\ +\255\255\255\255\255\255\255\255\255\255\255\255\255\255\149\001\ +\255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\ +\255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\ +\255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\ +\255\255\255\255\255\255\149\001" + +let yynames_const = "\ + AMP\000\ + AND\000\ + AS\000\ + ASSERT\000\ + ASSUME\000\ + ATTRIBUTES\000\ + BACKTICK\000\ + BACKTICK_AT\000\ + BACKTICK_HASH\000\ + BACKTICK_PERC\000\ + BANG_LBRACE\000\ + BAR\000\ + BAR_RBRACE\000\ + BAR_RBRACK\000\ + BEGIN\000\ + BY\000\ + CALC\000\ + CLASS\000\ + COLON\000\ + COLON_COLON\000\ + COLON_EQUALS\000\ + COMMA\000\ + CONJUNCTION\000\ + DECREASES\000\ + DEFAULT\000\ + DISJUNCTION\000\ + DOLLAR\000\ + DOT\000\ + DOT_LBRACK\000\ + DOT_LBRACK_BAR\000\ + DOT_LENS_PAREN_LEFT\000\ + DOT_LPAREN\000\ + EFFECT\000\ + ELIM\000\ + ELSE\000\ + END\000\ + ENSURES\000\ + EOF\000\ + EQUALS\000\ + EQUALTYPE\000\ + EXCEPTION\000\ + EXISTS\000\ + FALSE\000\ + FORALL\000\ + FRIEND\000\ + FUN\000\ + FUNCTION\000\ + HASH\000\ + IF\000\ + IFF\000\ + IMPLIES\000\ + IN\000\ + INCLUDE\000\ + INLINE\000\ + INLINE_FOR_EXTRACTION\000\ + INSTANCE\000\ + INTRO\000\ + IRREDUCIBLE\000\ + LARROW\000\ + LAYERED_EFFECT\000\ + LBRACE\000\ + LBRACE_BAR\000\ + LBRACE_COLON_PATTERN\000\ + LBRACE_COLON_WELL_FOUNDED\000\ + LBRACK\000\ + LBRACK_AT\000\ + LBRACK_AT_AT\000\ + LBRACK_AT_AT_AT\000\ + LBRACK_BAR\000\ + LENS_PAREN_LEFT\000\ + LENS_PAREN_RIGHT\000\ + LOGIC\000\ + LONG_LEFT_ARROW\000\ + LPAREN\000\ + LPAREN_RPAREN\000\ + MATCH\000\ + MINUS\000\ + MODULE\000\ + NEW\000\ + NEW_EFFECT\000\ + NOEQUALITY\000\ + NOEXTRACT\000\ + OF\000\ + OPAQUE\000\ + OPEN\000\ + PERCENT_LBRACK\000\ + PIPE_RIGHT\000\ + POLYMONADIC_BIND\000\ + POLYMONADIC_SUBCOMP\000\ + PRAGMA_POP_OPTIONS\000\ + PRAGMA_PRINT_EFFECTS_GRAPH\000\ + PRAGMA_PUSH_OPTIONS\000\ + PRAGMA_RESET_OPTIONS\000\ + PRAGMA_RESTART_SOLVER\000\ + PRAGMA_SET_OPTIONS\000\ + PRIVATE\000\ + QMARK\000\ + QMARK_DOT\000\ + QUOTE\000\ + RANGE_OF\000\ + RARROW\000\ + RBRACE\000\ + RBRACK\000\ + REC\000\ + REFLECTABLE\000\ + REIFIABLE\000\ + REIFY\000\ + REQUIRES\000\ + RETURNS\000\ + RETURNS_EQ\000\ + RPAREN\000\ + SEMICOLON\000\ + SET_RANGE_OF\000\ + SPLICE\000\ + SQUIGGLY_RARROW\000\ + SUBKIND\000\ + SUBTYPE\000\ + SUB_EFFECT\000\ + SYNTH\000\ + THEN\000\ + TOTAL\000\ + TRUE\000\ + TRY\000\ + TYPE\000\ + TYP_APP_GREATER\000\ + TYP_APP_LESS\000\ + UNDERSCORE\000\ + UNFOLD\000\ + UNFOLDABLE\000\ + UNIV_HASH\000\ + UNOPTEQUALITY\000\ + VAL\000\ + WHEN\000\ + WITH\000\ + " + +let yynames_block = "\ + AND_OP\000\ + CHAR\000\ + IDENT\000\ + IF_OP\000\ + INT\000\ + INT16\000\ + INT32\000\ + INT64\000\ + INT8\000\ + LET\000\ + LET_OP\000\ + MATCH_OP\000\ + NAME\000\ + OPINFIX0a\000\ + OPINFIX0b\000\ + OPINFIX0c\000\ + OPINFIX0d\000\ + OPINFIX1\000\ + OPINFIX2\000\ + OPINFIX3\000\ + OPINFIX4\000\ + OPPREFIX\000\ + OP_MIXFIX_ACCESS\000\ + OP_MIXFIX_ASSIGNMENT\000\ + RANGE\000\ + REAL\000\ + SEMICOLON_OP\000\ + SIZET\000\ + STRING\000\ + TILDE\000\ + TVAR\000\ + UINT16\000\ + UINT32\000\ + UINT64\000\ + UINT8\000\ + " + +let yyact = [| + (fun _ -> failwith "parser") +; (fun __caml_parser_env -> + Obj.repr( +# 238 "parse.mly" + ( ( None )) +# 6691 "parse.ml" + : 'option___anonymous_0_)) +; (fun __caml_parser_env -> + let _2 = (Parsing.peek_val __caml_parser_env 0 : 'typ) in + Obj.repr( +# 240 "parse.mly" + (let (_1, t) = ((), _2) in +let x = (t) in + ( Some x )) +# 6700 "parse.ml" + : 'option___anonymous_0_)) +; (fun __caml_parser_env -> + Obj.repr( +# 246 "parse.mly" + ( ( None )) +# 6706 "parse.ml" + : 'option___anonymous_1_)) +; (fun __caml_parser_env -> + let _2 = (Parsing.peek_val __caml_parser_env 0 : 'typ) in + Obj.repr( +# 248 "parse.mly" + (let (_1, t) = ((), _2) in +let x = (t) in + ( Some x )) +# 6715 "parse.ml" + : 'option___anonymous_1_)) +; (fun __caml_parser_env -> + Obj.repr( +# 254 "parse.mly" + ( ( None )) +# 6721 "parse.ml" + : 'option___anonymous_12_)) +; (fun __caml_parser_env -> + let _2 = (Parsing.peek_val __caml_parser_env 0 : 'thunk2_typ_) in + Obj.repr( +# 256 "parse.mly" + (let (_1, tactic) = ((), _2) in +let x = (tactic) in + ( Some x )) +# 6730 "parse.ml" + : 'option___anonymous_12_)) +; (fun __caml_parser_env -> + Obj.repr( +# 262 "parse.mly" + ( ( None )) +# 6736 "parse.ml" + : 'option___anonymous_13_)) +; (fun __caml_parser_env -> + let _2 = (Parsing.peek_val __caml_parser_env 1 : 'noSeqTerm) in + Obj.repr( +# 264 "parse.mly" + (let (_1, e, _3) = ((), _2, ()) in +let x = + let phi = ( {e with level=Formula} ) in + (phi) +in + ( Some x )) +# 6748 "parse.ml" + : 'option___anonymous_13_)) +; (fun __caml_parser_env -> + Obj.repr( +# 273 "parse.mly" + ( ( None )) +# 6754 "parse.ml" + : 'option___anonymous_2_)) +; (fun __caml_parser_env -> + let _2 = (Parsing.peek_val __caml_parser_env 0 : FStar_Parser_AST.term) in + Obj.repr( +# 275 "parse.mly" + (let (_1, tm) = ((), _2) in +let x = (tm) in + ( Some x )) +# 6763 "parse.ml" + : 'option___anonymous_2_)) +; (fun __caml_parser_env -> + Obj.repr( +# 281 "parse.mly" + ( ( None )) +# 6769 "parse.ml" + : 'option___anonymous_5_)) +; (fun __caml_parser_env -> + let _2 = (Parsing.peek_val __caml_parser_env 0 : 'thunk_atomicTerm_) in + Obj.repr( +# 283 "parse.mly" + (let (_1, tactic) = ((), _2) in +let x = (tactic) in + ( Some x )) +# 6778 "parse.ml" + : 'option___anonymous_5_)) +; (fun __caml_parser_env -> + Obj.repr( +# 289 "parse.mly" + ( ( None )) +# 6784 "parse.ml" + : 'option___anonymous_6_)) +; (fun __caml_parser_env -> + let _2 = (Parsing.peek_val __caml_parser_env 0 : FStar_Ident.ident) in + Obj.repr( +# 291 "parse.mly" + (let (_1, i) = ((), _2) in +let x = (i) in + ( Some x )) +# 6793 "parse.ml" + : 'option___anonymous_6_)) +; (fun __caml_parser_env -> + Obj.repr( +# 297 "parse.mly" + ( ( None )) +# 6799 "parse.ml" + : 'option___anonymous_7_)) +; (fun __caml_parser_env -> + let _2 = (Parsing.peek_val __caml_parser_env 0 : FStar_Ident.ident) in + Obj.repr( +# 299 "parse.mly" + (let (_1, i) = ((), _2) in +let x = (i) in + ( Some x )) +# 6808 "parse.ml" + : 'option___anonymous_7_)) +; (fun __caml_parser_env -> + Obj.repr( +# 305 "parse.mly" + ( ( None )) +# 6814 "parse.ml" + : 'option___anonymous_8_)) +; (fun __caml_parser_env -> + let _2 = (Parsing.peek_val __caml_parser_env 0 : 'thunk_typ_) in + Obj.repr( +# 307 "parse.mly" + (let (_1, tactic) = ((), _2) in +let x = (tactic) in + ( Some x )) +# 6823 "parse.ml" + : 'option___anonymous_8_)) +; (fun __caml_parser_env -> + Obj.repr( +# 313 "parse.mly" + ( ( None )) +# 6829 "parse.ml" + : 'option___anonymous_9_)) +; (fun __caml_parser_env -> + let _2 = (Parsing.peek_val __caml_parser_env 0 : 'thunk_typ_) in + Obj.repr( +# 315 "parse.mly" + (let (_1, tactic) = ((), _2) in +let x = (tactic) in + ( Some x )) +# 6838 "parse.ml" + : 'option___anonymous_9_)) +; (fun __caml_parser_env -> + Obj.repr( +# 321 "parse.mly" + ( ( None )) +# 6844 "parse.ml" + : 'option_ascribeKind_)) +; (fun __caml_parser_env -> + let _1 = (Parsing.peek_val __caml_parser_env 0 : 'ascribeKind) in + Obj.repr( +# 323 "parse.mly" + (let x = _1 in + ( Some x )) +# 6852 "parse.ml" + : 'option_ascribeKind_)) +; (fun __caml_parser_env -> + Obj.repr( +# 328 "parse.mly" + ( ( None )) +# 6858 "parse.ml" + : 'option_ascribeTyp_)) +; (fun __caml_parser_env -> + let _1 = (Parsing.peek_val __caml_parser_env 0 : 'ascribeTyp) in + Obj.repr( +# 330 "parse.mly" + (let x = _1 in + ( Some x )) +# 6866 "parse.ml" + : 'option_ascribeTyp_)) +; (fun __caml_parser_env -> + Obj.repr( +# 335 "parse.mly" + ( ( None )) +# 6872 "parse.ml" + : 'option_constructorPayload_)) +; (fun __caml_parser_env -> + let _1 = (Parsing.peek_val __caml_parser_env 0 : 'constructorPayload) in + Obj.repr( +# 337 "parse.mly" + (let x = _1 in + ( Some x )) +# 6880 "parse.ml" + : 'option_constructorPayload_)) +; (fun __caml_parser_env -> + Obj.repr( +# 342 "parse.mly" + ( ( None )) +# 6886 "parse.ml" + : 'option_fsTypeArgs_)) +; (fun __caml_parser_env -> + let _1 = (Parsing.peek_val __caml_parser_env 0 : 'fsTypeArgs) in + Obj.repr( +# 344 "parse.mly" + (let x = _1 in + ( Some x )) +# 6894 "parse.ml" + : 'option_fsTypeArgs_)) +; (fun __caml_parser_env -> + Obj.repr( +# 349 "parse.mly" + ( ( None )) +# 6900 "parse.ml" + : 'option_match_returning_)) +; (fun __caml_parser_env -> + let _1 = (Parsing.peek_val __caml_parser_env 0 : 'match_returning) in + Obj.repr( +# 351 "parse.mly" + (let x = _1 in + ( Some x )) +# 6908 "parse.ml" + : 'option_match_returning_)) +; (fun __caml_parser_env -> + Obj.repr( +# 356 "parse.mly" + ( ( None )) +# 6914 "parse.ml" + : 'option_pair_hasSort_simpleTerm__)) +; (fun __caml_parser_env -> + let _1 = (Parsing.peek_val __caml_parser_env 1 : 'hasSort) in + let _2 = (Parsing.peek_val __caml_parser_env 0 : 'simpleTerm) in + Obj.repr( +# 358 "parse.mly" + (let (x, y) = (_1, _2) in +let x = ( (x, y) ) in + ( Some x )) +# 6924 "parse.ml" + : 'option_pair_hasSort_simpleTerm__)) +; (fun __caml_parser_env -> + Obj.repr( +# 364 "parse.mly" + ( ( None )) +# 6930 "parse.ml" + : 'option_string_)) +; (fun __caml_parser_env -> + let _1 = (Parsing.peek_val __caml_parser_env 0 : 'string) in + Obj.repr( +# 366 "parse.mly" + (let x = _1 in + ( Some x )) +# 6938 "parse.ml" + : 'option_string_)) +; (fun __caml_parser_env -> + Obj.repr( +# 371 "parse.mly" + ( ( None )) +# 6944 "parse.ml" + : 'option_term_)) +; (fun __caml_parser_env -> + let _1 = (Parsing.peek_val __caml_parser_env 0 : FStar_Parser_AST.term) in + Obj.repr( +# 373 "parse.mly" + (let x = _1 in + ( Some x )) +# 6952 "parse.ml" + : 'option_term_)) +; (fun __caml_parser_env -> + Obj.repr( +# 378 "parse.mly" + ( ( false )) +# 6958 "parse.ml" + : 'boption_SQUIGGLY_RARROW_)) +; (fun __caml_parser_env -> + Obj.repr( +# 380 "parse.mly" + (let _1 = () in + ( true )) +# 6965 "parse.ml" + : 'boption_SQUIGGLY_RARROW_)) +; (fun __caml_parser_env -> + Obj.repr( +# 385 "parse.mly" + ( ( [] )) +# 6971 "parse.ml" + : 'loption_separated_nonempty_list_COMMA_appTerm__)) +; (fun __caml_parser_env -> + let _1 = (Parsing.peek_val __caml_parser_env 0 : 'separated_nonempty_list_COMMA_appTerm_) in + Obj.repr( +# 387 "parse.mly" + (let x = _1 in + ( x )) +# 6979 "parse.ml" + : 'loption_separated_nonempty_list_COMMA_appTerm__)) +; (fun __caml_parser_env -> + Obj.repr( +# 392 "parse.mly" + ( ( [] )) +# 6985 "parse.ml" + : 'loption_separated_nonempty_list_SEMICOLON_ident__)) +; (fun __caml_parser_env -> + let _1 = (Parsing.peek_val __caml_parser_env 0 : 'separated_nonempty_list_SEMICOLON_ident_) in + Obj.repr( +# 394 "parse.mly" + (let x = _1 in + ( x )) +# 6993 "parse.ml" + : 'loption_separated_nonempty_list_SEMICOLON_ident__)) +; (fun __caml_parser_env -> + Obj.repr( +# 399 "parse.mly" + ( ( [] )) +# 6999 "parse.ml" + : 'loption_separated_nonempty_list_SEMICOLON_tuplePattern__)) +; (fun __caml_parser_env -> + let _1 = (Parsing.peek_val __caml_parser_env 0 : 'separated_nonempty_list_SEMICOLON_tuplePattern_) in + Obj.repr( +# 401 "parse.mly" + (let x = _1 in + ( x )) +# 7007 "parse.ml" + : 'loption_separated_nonempty_list_SEMICOLON_tuplePattern__)) +; (fun __caml_parser_env -> + Obj.repr( +# 406 "parse.mly" + ( ( [] )) +# 7013 "parse.ml" + : 'list___anonymous_11_)) +; (fun __caml_parser_env -> + let _1 = (Parsing.peek_val __caml_parser_env 2 : string) in + let _2 = (Parsing.peek_val __caml_parser_env 1 : 'letoperatorbinding) in + let _3 = (Parsing.peek_val __caml_parser_env 0 : 'list___anonymous_11_) in + Obj.repr( +# 408 "parse.mly" + (let (op, b, xs) = (_1, _2, _3) in +let x = + let op = ( mk_ident ("and" ^ op, rhs parseState 1) ) in + ((op, b)) +in + ( x :: xs )) +# 7027 "parse.ml" + : 'list___anonymous_11_)) +; (fun __caml_parser_env -> + Obj.repr( +# 417 "parse.mly" + ( ( [] )) +# 7033 "parse.ml" + : 'list___anonymous_14_)) +; (fun __caml_parser_env -> + let _1 = (Parsing.peek_val __caml_parser_env 1 : 'argTerm) in + let _2 = (Parsing.peek_val __caml_parser_env 0 : 'list___anonymous_14_) in + Obj.repr( +# 419 "parse.mly" + (let (t, xs) = (_1, _2) in +let x = (t) in + ( x :: xs )) +# 7043 "parse.ml" + : 'list___anonymous_14_)) +; (fun __caml_parser_env -> + let _2 = (Parsing.peek_val __caml_parser_env 2 : 'recordExp) in + let _4 = (Parsing.peek_val __caml_parser_env 0 : 'list___anonymous_14_) in + Obj.repr( +# 423 "parse.mly" + (let (_2, t, _4, xs) = ((), _2, (), _4) in +let x = + let h = ( Nothing ) in + (h, t) +in + ( x :: xs )) +# 7056 "parse.ml" + : 'list___anonymous_14_)) +; (fun __caml_parser_env -> + let _3 = (Parsing.peek_val __caml_parser_env 2 : 'recordExp) in + let _5 = (Parsing.peek_val __caml_parser_env 0 : 'list___anonymous_14_) in + Obj.repr( +# 430 "parse.mly" + (let (_1, _2, t, _4, xs) = ((), (), _3, (), _5) in +let x = + let h = ( Hash ) in + (h, t) +in + ( x :: xs )) +# 7069 "parse.ml" + : 'list___anonymous_14_)) +; (fun __caml_parser_env -> + Obj.repr( +# 439 "parse.mly" + ( ( [] )) +# 7075 "parse.ml" + : 'list___anonymous_15_)) +; (fun __caml_parser_env -> + let _2 = (Parsing.peek_val __caml_parser_env 1 : 'qlident) in + let _3 = (Parsing.peek_val __caml_parser_env 0 : 'list___anonymous_15_) in + Obj.repr( +# 441 "parse.mly" + (let (_1, id, xs) = ((), _2, _3) in +let x = (id) in + ( x :: xs )) +# 7085 "parse.ml" + : 'list___anonymous_15_)) +; (fun __caml_parser_env -> + Obj.repr( +# 447 "parse.mly" + ( ( [] )) +# 7091 "parse.ml" + : 'list___anonymous_4_)) +; (fun __caml_parser_env -> + let _1 = (Parsing.peek_val __caml_parser_env 1 : 'binder) in + let _2 = (Parsing.peek_val __caml_parser_env 0 : 'list___anonymous_4_) in + Obj.repr( +# 449 "parse.mly" + (let (b, xs) = (_1, _2) in +let x = ([b]) in + ( x :: xs )) +# 7101 "parse.ml" + : 'list___anonymous_4_)) +; (fun __caml_parser_env -> + let _1 = (Parsing.peek_val __caml_parser_env 1 : 'multiBinder) in + let _2 = (Parsing.peek_val __caml_parser_env 0 : 'list___anonymous_4_) in + Obj.repr( +# 453 "parse.mly" + (let (bs, xs) = (_1, _2) in +let x = (bs) in + ( x :: xs )) +# 7111 "parse.ml" + : 'list___anonymous_4_)) +; (fun __caml_parser_env -> + Obj.repr( +# 459 "parse.mly" + ( ( [] )) +# 7117 "parse.ml" + : 'list_argTerm_)) +; (fun __caml_parser_env -> + let _1 = (Parsing.peek_val __caml_parser_env 1 : 'argTerm) in + let _2 = (Parsing.peek_val __caml_parser_env 0 : 'list_argTerm_) in + Obj.repr( +# 461 "parse.mly" + (let (x, xs) = (_1, _2) in + ( x :: xs )) +# 7126 "parse.ml" + : 'list_argTerm_)) +; (fun __caml_parser_env -> + Obj.repr( +# 466 "parse.mly" + ( ( [] )) +# 7132 "parse.ml" + : 'list_atomicTerm_)) +; (fun __caml_parser_env -> + let _1 = (Parsing.peek_val __caml_parser_env 1 : 'atomicTerm) in + let _2 = (Parsing.peek_val __caml_parser_env 0 : 'list_atomicTerm_) in + Obj.repr( +# 468 "parse.mly" + (let (x, xs) = (_1, _2) in + ( x :: xs )) +# 7141 "parse.ml" + : 'list_atomicTerm_)) +; (fun __caml_parser_env -> + Obj.repr( +# 473 "parse.mly" + ( ( [] )) +# 7147 "parse.ml" + : 'list_attr_letbinding_)) +; (fun __caml_parser_env -> + let _1 = (Parsing.peek_val __caml_parser_env 1 : 'attr_letbinding) in + let _2 = (Parsing.peek_val __caml_parser_env 0 : 'list_attr_letbinding_) in + Obj.repr( +# 475 "parse.mly" + (let (x, xs) = (_1, _2) in + ( x :: xs )) +# 7156 "parse.ml" + : 'list_attr_letbinding_)) +; (fun __caml_parser_env -> + Obj.repr( +# 480 "parse.mly" + ( ( [] )) +# 7162 "parse.ml" + : 'list_calcStep_)) +; (fun __caml_parser_env -> + let _1 = (Parsing.peek_val __caml_parser_env 1 : 'calcStep) in + let _2 = (Parsing.peek_val __caml_parser_env 0 : 'list_calcStep_) in + Obj.repr( +# 482 "parse.mly" + (let (x, xs) = (_1, _2) in + ( x :: xs )) +# 7171 "parse.ml" + : 'list_calcStep_)) +; (fun __caml_parser_env -> + Obj.repr( +# 487 "parse.mly" + ( ( [] )) +# 7177 "parse.ml" + : 'list_constructorDecl_)) +; (fun __caml_parser_env -> + let _1 = (Parsing.peek_val __caml_parser_env 1 : 'constructorDecl) in + let _2 = (Parsing.peek_val __caml_parser_env 0 : 'list_constructorDecl_) in + Obj.repr( +# 489 "parse.mly" + (let (x, xs) = (_1, _2) in + ( x :: xs )) +# 7186 "parse.ml" + : 'list_constructorDecl_)) +; (fun __caml_parser_env -> + Obj.repr( +# 494 "parse.mly" + ( ( [] )) +# 7192 "parse.ml" + : 'list_decl_)) +; (fun __caml_parser_env -> + let _1 = (Parsing.peek_val __caml_parser_env 1 : 'decl) in + let _2 = (Parsing.peek_val __caml_parser_env 0 : 'list_decl_) in + Obj.repr( +# 496 "parse.mly" + (let (x, xs) = (_1, _2) in + ( x :: xs )) +# 7201 "parse.ml" + : 'list_decl_)) +; (fun __caml_parser_env -> + Obj.repr( +# 501 "parse.mly" + ( ( [] )) +# 7207 "parse.ml" + : 'list_decoration_)) +; (fun __caml_parser_env -> + let _1 = (Parsing.peek_val __caml_parser_env 1 : 'decoration) in + let _2 = (Parsing.peek_val __caml_parser_env 0 : 'list_decoration_) in + Obj.repr( +# 503 "parse.mly" + (let (x, xs) = (_1, _2) in + ( x :: xs )) +# 7216 "parse.ml" + : 'list_decoration_)) +; (fun __caml_parser_env -> + Obj.repr( +# 508 "parse.mly" + ( ( [] )) +# 7222 "parse.ml" + : 'list_multiBinder_)) +; (fun __caml_parser_env -> + let _1 = (Parsing.peek_val __caml_parser_env 1 : 'multiBinder) in + let _2 = (Parsing.peek_val __caml_parser_env 0 : 'list_multiBinder_) in + Obj.repr( +# 510 "parse.mly" + (let (x, xs) = (_1, _2) in + ( x :: xs )) +# 7231 "parse.ml" + : 'list_multiBinder_)) +; (fun __caml_parser_env -> + let _1 = (Parsing.peek_val __caml_parser_env 0 : 'aqualifiedWithAttrs_lident_) in + Obj.repr( +# 515 "parse.mly" + (let x = _1 in + ( [ x ] )) +# 7239 "parse.ml" + : 'nonempty_list_aqualifiedWithAttrs_lident__)) +; (fun __caml_parser_env -> + let _1 = (Parsing.peek_val __caml_parser_env 1 : 'aqualifiedWithAttrs_lident_) in + let _2 = (Parsing.peek_val __caml_parser_env 0 : 'nonempty_list_aqualifiedWithAttrs_lident__) in + Obj.repr( +# 518 "parse.mly" + (let (x, xs) = (_1, _2) in + ( x :: xs )) +# 7248 "parse.ml" + : 'nonempty_list_aqualifiedWithAttrs_lident__)) +; (fun __caml_parser_env -> + let _1 = (Parsing.peek_val __caml_parser_env 0 : 'aqualifiedWithAttrs_lidentOrUnderscore_) in + Obj.repr( +# 523 "parse.mly" + (let x = _1 in + ( [ x ] )) +# 7256 "parse.ml" + : 'nonempty_list_aqualifiedWithAttrs_lidentOrUnderscore__)) +; (fun __caml_parser_env -> + let _1 = (Parsing.peek_val __caml_parser_env 1 : 'aqualifiedWithAttrs_lidentOrUnderscore_) in + let _2 = (Parsing.peek_val __caml_parser_env 0 : 'nonempty_list_aqualifiedWithAttrs_lidentOrUnderscore__) in + Obj.repr( +# 526 "parse.mly" + (let (x, xs) = (_1, _2) in + ( x :: xs )) +# 7265 "parse.ml" + : 'nonempty_list_aqualifiedWithAttrs_lidentOrUnderscore__)) +; (fun __caml_parser_env -> + let _1 = (Parsing.peek_val __caml_parser_env 0 : 'atomicPattern) in + Obj.repr( +# 531 "parse.mly" + (let x = _1 in + ( [ x ] )) +# 7273 "parse.ml" + : 'nonempty_list_atomicPattern_)) +; (fun __caml_parser_env -> + let _1 = (Parsing.peek_val __caml_parser_env 1 : 'atomicPattern) in + let _2 = (Parsing.peek_val __caml_parser_env 0 : 'nonempty_list_atomicPattern_) in + Obj.repr( +# 534 "parse.mly" + (let (x, xs) = (_1, _2) in + ( x :: xs )) +# 7282 "parse.ml" + : 'nonempty_list_atomicPattern_)) +; (fun __caml_parser_env -> + let _1 = (Parsing.peek_val __caml_parser_env 0 : 'atomicTerm) in + Obj.repr( +# 539 "parse.mly" + (let x = _1 in + ( [ x ] )) +# 7290 "parse.ml" + : 'nonempty_list_atomicTerm_)) +; (fun __caml_parser_env -> + let _1 = (Parsing.peek_val __caml_parser_env 1 : 'atomicTerm) in + let _2 = (Parsing.peek_val __caml_parser_env 0 : 'nonempty_list_atomicTerm_) in + Obj.repr( +# 542 "parse.mly" + (let (x, xs) = (_1, _2) in + ( x :: xs )) +# 7299 "parse.ml" + : 'nonempty_list_atomicTerm_)) +; (fun __caml_parser_env -> + let _1 = (Parsing.peek_val __caml_parser_env 0 : 'atomicUniverse) in + Obj.repr( +# 547 "parse.mly" + (let x = _1 in + ( [ x ] )) +# 7307 "parse.ml" + : 'nonempty_list_atomicUniverse_)) +; (fun __caml_parser_env -> + let _1 = (Parsing.peek_val __caml_parser_env 1 : 'atomicUniverse) in + let _2 = (Parsing.peek_val __caml_parser_env 0 : 'nonempty_list_atomicUniverse_) in + Obj.repr( +# 550 "parse.mly" + (let (x, xs) = (_1, _2) in + ( x :: xs )) +# 7316 "parse.ml" + : 'nonempty_list_atomicUniverse_)) +; (fun __caml_parser_env -> + let _2 = (Parsing.peek_val __caml_parser_env 1 : FStar_Parser_AST.term) in + Obj.repr( +# 555 "parse.mly" + (let (_1, e, _3) = ((), _2, ()) in +let x = ( mk_ident (".()", rhs parseState 1), e, rhs2 parseState 1 3 ) in + ( [ x ] )) +# 7325 "parse.ml" + : 'nonempty_list_dotOperator_)) +; (fun __caml_parser_env -> + let _2 = (Parsing.peek_val __caml_parser_env 1 : FStar_Parser_AST.term) in + Obj.repr( +# 559 "parse.mly" + (let (_1, e, _3) = ((), _2, ()) in +let x = ( mk_ident (".[]", rhs parseState 1), e, rhs2 parseState 1 3 ) in + ( [ x ] )) +# 7334 "parse.ml" + : 'nonempty_list_dotOperator_)) +; (fun __caml_parser_env -> + let _2 = (Parsing.peek_val __caml_parser_env 1 : FStar_Parser_AST.term) in + Obj.repr( +# 563 "parse.mly" + (let (_1, e, _3) = ((), _2, ()) in +let x = ( mk_ident (".[||]", rhs parseState 1), e, rhs2 parseState 1 3 ) in + ( [ x ] )) +# 7343 "parse.ml" + : 'nonempty_list_dotOperator_)) +; (fun __caml_parser_env -> + let _2 = (Parsing.peek_val __caml_parser_env 1 : FStar_Parser_AST.term) in + Obj.repr( +# 567 "parse.mly" + (let (_1, e, _3) = ((), _2, ()) in +let x = ( mk_ident (".(||)", rhs parseState 1), e, rhs2 parseState 1 3 ) in + ( [ x ] )) +# 7352 "parse.ml" + : 'nonempty_list_dotOperator_)) +; (fun __caml_parser_env -> + let _2 = (Parsing.peek_val __caml_parser_env 2 : FStar_Parser_AST.term) in + let _4 = (Parsing.peek_val __caml_parser_env 0 : 'nonempty_list_dotOperator_) in + Obj.repr( +# 571 "parse.mly" + (let (_1, e, _3, xs) = ((), _2, (), _4) in +let x = ( mk_ident (".()", rhs parseState 1), e, rhs2 parseState 1 3 ) in + ( x :: xs )) +# 7362 "parse.ml" + : 'nonempty_list_dotOperator_)) +; (fun __caml_parser_env -> + let _2 = (Parsing.peek_val __caml_parser_env 2 : FStar_Parser_AST.term) in + let _4 = (Parsing.peek_val __caml_parser_env 0 : 'nonempty_list_dotOperator_) in + Obj.repr( +# 575 "parse.mly" + (let (_1, e, _3, xs) = ((), _2, (), _4) in +let x = ( mk_ident (".[]", rhs parseState 1), e, rhs2 parseState 1 3 ) in + ( x :: xs )) +# 7372 "parse.ml" + : 'nonempty_list_dotOperator_)) +; (fun __caml_parser_env -> + let _2 = (Parsing.peek_val __caml_parser_env 2 : FStar_Parser_AST.term) in + let _4 = (Parsing.peek_val __caml_parser_env 0 : 'nonempty_list_dotOperator_) in + Obj.repr( +# 579 "parse.mly" + (let (_1, e, _3, xs) = ((), _2, (), _4) in +let x = ( mk_ident (".[||]", rhs parseState 1), e, rhs2 parseState 1 3 ) in + ( x :: xs )) +# 7382 "parse.ml" + : 'nonempty_list_dotOperator_)) +; (fun __caml_parser_env -> + let _2 = (Parsing.peek_val __caml_parser_env 2 : FStar_Parser_AST.term) in + let _4 = (Parsing.peek_val __caml_parser_env 0 : 'nonempty_list_dotOperator_) in + Obj.repr( +# 583 "parse.mly" + (let (_1, e, _3, xs) = ((), _2, (), _4) in +let x = ( mk_ident (".(||)", rhs parseState 1), e, rhs2 parseState 1 3 ) in + ( x :: xs )) +# 7392 "parse.ml" + : 'nonempty_list_dotOperator_)) +; (fun __caml_parser_env -> + let _1 = (Parsing.peek_val __caml_parser_env 0 : 'patternOrMultibinder) in + Obj.repr( +# 589 "parse.mly" + (let x = _1 in + ( [ x ] )) +# 7400 "parse.ml" + : 'nonempty_list_patternOrMultibinder_)) +; (fun __caml_parser_env -> + let _1 = (Parsing.peek_val __caml_parser_env 1 : 'patternOrMultibinder) in + let _2 = (Parsing.peek_val __caml_parser_env 0 : 'nonempty_list_patternOrMultibinder_) in + Obj.repr( +# 592 "parse.mly" + (let (x, xs) = (_1, _2) in + ( x :: xs )) +# 7409 "parse.ml" + : 'nonempty_list_patternOrMultibinder_)) +; (fun __caml_parser_env -> + let _1 = (Parsing.peek_val __caml_parser_env 0 : 'letbinding) in + Obj.repr( +# 597 "parse.mly" + (let x = _1 in + ( [ x ] )) +# 7417 "parse.ml" + : 'separated_nonempty_list_AND_letbinding_)) +; (fun __caml_parser_env -> + let _1 = (Parsing.peek_val __caml_parser_env 2 : 'letbinding) in + let _3 = (Parsing.peek_val __caml_parser_env 0 : 'separated_nonempty_list_AND_letbinding_) in + Obj.repr( +# 600 "parse.mly" + (let (x, _2, xs) = (_1, (), _3) in + ( x :: xs )) +# 7426 "parse.ml" + : 'separated_nonempty_list_AND_letbinding_)) +; (fun __caml_parser_env -> + let _1 = (Parsing.peek_val __caml_parser_env 0 : 'typeDecl) in + Obj.repr( +# 605 "parse.mly" + (let x = _1 in + ( [ x ] )) +# 7434 "parse.ml" + : 'separated_nonempty_list_AND_typeDecl_)) +; (fun __caml_parser_env -> + let _1 = (Parsing.peek_val __caml_parser_env 2 : 'typeDecl) in + let _3 = (Parsing.peek_val __caml_parser_env 0 : 'separated_nonempty_list_AND_typeDecl_) in + Obj.repr( +# 608 "parse.mly" + (let (x, _2, xs) = (_1, (), _3) in + ( x :: xs )) +# 7443 "parse.ml" + : 'separated_nonempty_list_AND_typeDecl_)) +; (fun __caml_parser_env -> + let _1 = (Parsing.peek_val __caml_parser_env 0 : 'tuplePattern) in + Obj.repr( +# 613 "parse.mly" + (let x = _1 in + ( [ x ] )) +# 7451 "parse.ml" + : 'separated_nonempty_list_BAR_tuplePattern_)) +; (fun __caml_parser_env -> + let _1 = (Parsing.peek_val __caml_parser_env 2 : 'tuplePattern) in + let _3 = (Parsing.peek_val __caml_parser_env 0 : 'separated_nonempty_list_BAR_tuplePattern_) in + Obj.repr( +# 616 "parse.mly" + (let (x, _2, xs) = (_1, (), _3) in + ( x :: xs )) +# 7460 "parse.ml" + : 'separated_nonempty_list_BAR_tuplePattern_)) +; (fun __caml_parser_env -> + let _1 = (Parsing.peek_val __caml_parser_env 0 : 'appTerm) in + Obj.repr( +# 621 "parse.mly" + (let x = _1 in + ( [ x ] )) +# 7468 "parse.ml" + : 'separated_nonempty_list_COMMA_appTerm_)) +; (fun __caml_parser_env -> + let _1 = (Parsing.peek_val __caml_parser_env 2 : 'appTerm) in + let _3 = (Parsing.peek_val __caml_parser_env 0 : 'separated_nonempty_list_COMMA_appTerm_) in + Obj.repr( +# 624 "parse.mly" + (let (x, _2, xs) = (_1, (), _3) in + ( x :: xs )) +# 7477 "parse.ml" + : 'separated_nonempty_list_COMMA_appTerm_)) +; (fun __caml_parser_env -> + let _1 = (Parsing.peek_val __caml_parser_env 0 : 'atomicTerm) in + Obj.repr( +# 629 "parse.mly" + (let x = _1 in + ( [ x ] )) +# 7485 "parse.ml" + : 'separated_nonempty_list_COMMA_atomicTerm_)) +; (fun __caml_parser_env -> + let _1 = (Parsing.peek_val __caml_parser_env 2 : 'atomicTerm) in + let _3 = (Parsing.peek_val __caml_parser_env 0 : 'separated_nonempty_list_COMMA_atomicTerm_) in + Obj.repr( +# 632 "parse.mly" + (let (x, _2, xs) = (_1, (), _3) in + ( x :: xs )) +# 7494 "parse.ml" + : 'separated_nonempty_list_COMMA_atomicTerm_)) +; (fun __caml_parser_env -> + let _1 = (Parsing.peek_val __caml_parser_env 0 : 'constructorPattern) in + Obj.repr( +# 637 "parse.mly" + (let x = _1 in + ( [ x ] )) +# 7502 "parse.ml" + : 'separated_nonempty_list_COMMA_constructorPattern_)) +; (fun __caml_parser_env -> + let _1 = (Parsing.peek_val __caml_parser_env 2 : 'constructorPattern) in + let _3 = (Parsing.peek_val __caml_parser_env 0 : 'separated_nonempty_list_COMMA_constructorPattern_) in + Obj.repr( +# 640 "parse.mly" + (let (x, _2, xs) = (_1, (), _3) in + ( x :: xs )) +# 7511 "parse.ml" + : 'separated_nonempty_list_COMMA_constructorPattern_)) +; (fun __caml_parser_env -> + let _1 = (Parsing.peek_val __caml_parser_env 0 : 'tmEq) in + Obj.repr( +# 645 "parse.mly" + (let x = _1 in + ( [ x ] )) +# 7519 "parse.ml" + : 'separated_nonempty_list_COMMA_tmEq_)) +; (fun __caml_parser_env -> + let _1 = (Parsing.peek_val __caml_parser_env 2 : 'tmEq) in + let _3 = (Parsing.peek_val __caml_parser_env 0 : 'separated_nonempty_list_COMMA_tmEq_) in + Obj.repr( +# 648 "parse.mly" + (let (x, _2, xs) = (_1, (), _3) in + ( x :: xs )) +# 7528 "parse.ml" + : 'separated_nonempty_list_COMMA_tmEq_)) +; (fun __caml_parser_env -> + let _1 = (Parsing.peek_val __caml_parser_env 0 : 'tvar) in + Obj.repr( +# 653 "parse.mly" + (let x = _1 in + ( [ x ] )) +# 7536 "parse.ml" + : 'separated_nonempty_list_COMMA_tvar_)) +; (fun __caml_parser_env -> + let _1 = (Parsing.peek_val __caml_parser_env 2 : 'tvar) in + let _3 = (Parsing.peek_val __caml_parser_env 0 : 'separated_nonempty_list_COMMA_tvar_) in + Obj.repr( +# 656 "parse.mly" + (let (x, _2, xs) = (_1, (), _3) in + ( x :: xs )) +# 7545 "parse.ml" + : 'separated_nonempty_list_COMMA_tvar_)) +; (fun __caml_parser_env -> + let _1 = (Parsing.peek_val __caml_parser_env 0 : 'conjunctivePat) in + Obj.repr( +# 661 "parse.mly" + (let x = _1 in + ( [ x ] )) +# 7553 "parse.ml" + : 'separated_nonempty_list_DISJUNCTION_conjunctivePat_)) +; (fun __caml_parser_env -> + let _1 = (Parsing.peek_val __caml_parser_env 2 : 'conjunctivePat) in + let _3 = (Parsing.peek_val __caml_parser_env 0 : 'separated_nonempty_list_DISJUNCTION_conjunctivePat_) in + Obj.repr( +# 664 "parse.mly" + (let (x, _2, xs) = (_1, (), _3) in + ( x :: xs )) +# 7562 "parse.ml" + : 'separated_nonempty_list_DISJUNCTION_conjunctivePat_)) +; (fun __caml_parser_env -> + let _1 = (Parsing.peek_val __caml_parser_env 0 : 'appTerm) in + Obj.repr( +# 669 "parse.mly" + (let x = _1 in + ( [ x ] )) +# 7570 "parse.ml" + : 'separated_nonempty_list_SEMICOLON_appTerm_)) +; (fun __caml_parser_env -> + let _1 = (Parsing.peek_val __caml_parser_env 2 : 'appTerm) in + let _3 = (Parsing.peek_val __caml_parser_env 0 : 'separated_nonempty_list_SEMICOLON_appTerm_) in + Obj.repr( +# 672 "parse.mly" + (let (x, _2, xs) = (_1, (), _3) in + ( x :: xs )) +# 7579 "parse.ml" + : 'separated_nonempty_list_SEMICOLON_appTerm_)) +; (fun __caml_parser_env -> + let _1 = (Parsing.peek_val __caml_parser_env 0 : 'effectDecl) in + Obj.repr( +# 677 "parse.mly" + (let x = _1 in + ( [ x ] )) +# 7587 "parse.ml" + : 'separated_nonempty_list_SEMICOLON_effectDecl_)) +; (fun __caml_parser_env -> + let _1 = (Parsing.peek_val __caml_parser_env 2 : 'effectDecl) in + let _3 = (Parsing.peek_val __caml_parser_env 0 : 'separated_nonempty_list_SEMICOLON_effectDecl_) in + Obj.repr( +# 680 "parse.mly" + (let (x, _2, xs) = (_1, (), _3) in + ( x :: xs )) +# 7596 "parse.ml" + : 'separated_nonempty_list_SEMICOLON_effectDecl_)) +; (fun __caml_parser_env -> + let _1 = (Parsing.peek_val __caml_parser_env 0 : 'ident) in + Obj.repr( +# 685 "parse.mly" + (let x = _1 in + ( [ x ] )) +# 7604 "parse.ml" + : 'separated_nonempty_list_SEMICOLON_ident_)) +; (fun __caml_parser_env -> + let _1 = (Parsing.peek_val __caml_parser_env 2 : 'ident) in + let _3 = (Parsing.peek_val __caml_parser_env 0 : 'separated_nonempty_list_SEMICOLON_ident_) in + Obj.repr( +# 688 "parse.mly" + (let (x, _2, xs) = (_1, (), _3) in + ( x :: xs )) +# 7613 "parse.ml" + : 'separated_nonempty_list_SEMICOLON_ident_)) +; (fun __caml_parser_env -> + let _1 = (Parsing.peek_val __caml_parser_env 0 : 'tuplePattern) in + Obj.repr( +# 693 "parse.mly" + (let x = _1 in + ( [ x ] )) +# 7621 "parse.ml" + : 'separated_nonempty_list_SEMICOLON_tuplePattern_)) +; (fun __caml_parser_env -> + let _1 = (Parsing.peek_val __caml_parser_env 2 : 'tuplePattern) in + let _3 = (Parsing.peek_val __caml_parser_env 0 : 'separated_nonempty_list_SEMICOLON_tuplePattern_) in + Obj.repr( +# 696 "parse.mly" + (let (x, _2, xs) = (_1, (), _3) in + ( x :: xs )) +# 7630 "parse.ml" + : 'separated_nonempty_list_SEMICOLON_tuplePattern_)) +; (fun __caml_parser_env -> + let _1 = (Parsing.peek_val __caml_parser_env 1 : 'list_decl_) in + Obj.repr( +# 701 "parse.mly" + (let (decls, _2) = (_1, ()) in + ( + as_frag decls + )) +# 7640 "parse.ml" + : FStar_Parser_AST.inputFragment)) +; (fun __caml_parser_env -> + let _2 = (Parsing.peek_val __caml_parser_env 0 : 'string) in + Obj.repr( +# 708 "parse.mly" + (let (_1, s) = ((), _2) in + ( SetOptions s )) +# 7648 "parse.ml" + : 'pragma)) +; (fun __caml_parser_env -> + let _2 = (Parsing.peek_val __caml_parser_env 0 : 'option_string_) in + Obj.repr( +# 711 "parse.mly" + (let (_1, s_opt) = ((), _2) in + ( ResetOptions s_opt )) +# 7656 "parse.ml" + : 'pragma)) +; (fun __caml_parser_env -> + let _2 = (Parsing.peek_val __caml_parser_env 0 : 'option_string_) in + Obj.repr( +# 714 "parse.mly" + (let (_1, s_opt) = ((), _2) in + ( PushOptions s_opt )) +# 7664 "parse.ml" + : 'pragma)) +; (fun __caml_parser_env -> + Obj.repr( +# 717 "parse.mly" + (let _1 = () in + ( PopOptions )) +# 7671 "parse.ml" + : 'pragma)) +; (fun __caml_parser_env -> + Obj.repr( +# 720 "parse.mly" + (let _1 = () in + ( RestartSolver )) +# 7678 "parse.ml" + : 'pragma)) +; (fun __caml_parser_env -> + Obj.repr( +# 723 "parse.mly" + (let _1 = () in + ( PrintEffectsGraph )) +# 7685 "parse.ml" + : 'pragma)) +; (fun __caml_parser_env -> + let _2 = (Parsing.peek_val __caml_parser_env 1 : 'list_atomicTerm_) in + Obj.repr( +# 728 "parse.mly" + (let (_1, x, _3) = ((), _2, ()) in + ( + let _ = + match x with + | _::_::_ -> + log_issue (lhs parseState) (Warning_DeprecatedAttributeSyntax, + old_attribute_syntax_warning) + | _ -> () in + x + )) +# 7701 "parse.ml" + : 'attribute)) +; (fun __caml_parser_env -> + let _2 = (Parsing.peek_val __caml_parser_env 1 : 'right_flexible_list_SEMICOLON_noSeqTerm_) in + Obj.repr( +# 739 "parse.mly" + (let (_1, l, _3) = ((), _2, ()) in +let x = ( l ) in + ( x )) +# 7710 "parse.ml" + : 'attribute)) +; (fun __caml_parser_env -> + let _1 = (Parsing.peek_val __caml_parser_env 0 : 'attribute) in + Obj.repr( +# 745 "parse.mly" + (let x = _1 in + ( DeclAttributes x )) +# 7718 "parse.ml" + : 'decoration)) +; (fun __caml_parser_env -> + let _1 = (Parsing.peek_val __caml_parser_env 0 : 'qualifier) in + Obj.repr( +# 748 "parse.mly" + (let x = _1 in + ( Qualifier x )) +# 7726 "parse.ml" + : 'decoration)) +; (fun __caml_parser_env -> + let _2 = (Parsing.peek_val __caml_parser_env 2 : 'uident) in + let _4 = (Parsing.peek_val __caml_parser_env 0 : 'noSeqTerm) in + Obj.repr( +# 753 "parse.mly" + (let (_1, lid, _3, e) = ((), _2, (), _4) in +let phi = ( {e with level=Formula} ) in + ( mk_decl (Assume(lid, phi)) (rhs2 parseState 1 4) [ Qualifier Assumption ] )) +# 7736 "parse.ml" + : 'decl)) +; (fun __caml_parser_env -> + let _1 = (Parsing.peek_val __caml_parser_env 1 : 'list_decoration_) in + let _2 = (Parsing.peek_val __caml_parser_env 0 : 'rawDecl) in + Obj.repr( +# 757 "parse.mly" + (let (ds, decl) = (_1, _2) in + ( mk_decl decl (rhs parseState 2) ds )) +# 7745 "parse.ml" + : 'decl)) +; (fun __caml_parser_env -> + let _1 = (Parsing.peek_val __caml_parser_env 1 : 'list_decoration_) in + let _2 = (Parsing.peek_val __caml_parser_env 0 : 'typeclassDecl) in + Obj.repr( +# 760 "parse.mly" + (let (ds, decl) = (_1, _2) in + ( let (decl, extra_attrs) = decl in + let d = mk_decl decl (rhs parseState 2) ds in + { d with attrs = extra_attrs @ d.attrs } + )) +# 7757 "parse.ml" + : 'decl)) +; (fun __caml_parser_env -> + let _2 = (Parsing.peek_val __caml_parser_env 0 : 'typeDecl) in + Obj.repr( +# 768 "parse.mly" + (let (_1, tcdef) = ((), _2) in + ( + (* Only a single type decl allowed, but construct it the same as for multiple ones. + * Only difference is the `true` below marking that this a class so desugaring + * adds the needed %splice. *) + let d = Tycon (false, true, [tcdef]) in + + (* No attrs yet, but perhaps we want a `class` attribute *) + (d, []) + )) +# 7773 "parse.ml" + : 'typeclassDecl)) +; (fun __caml_parser_env -> + let _2 = (Parsing.peek_val __caml_parser_env 1 : 'letqualifier) in + let _3 = (Parsing.peek_val __caml_parser_env 0 : 'letbinding) in + Obj.repr( +# 779 "parse.mly" + (let (_1, q, lb) = ((), _2, _3) in + ( + (* Making a single letbinding *) + let r = rhs2 parseState 1 3 in + let lbs = focusLetBindings [lb] r in (* lbs is a singleton really *) + let d = TopLevelLet(q, lbs) in + + (* Slapping a `tcinstance` attribute to it *) + let at = mk_term (Var tcinstance_lid) r Type_level in + + (d, [at]) + )) +# 7792 "parse.ml" + : 'typeclassDecl)) +; (fun __caml_parser_env -> + let _1 = (Parsing.peek_val __caml_parser_env 0 : 'pragma) in + Obj.repr( +# 794 "parse.mly" + (let p = _1 in + ( Pragma p )) +# 7800 "parse.ml" + : 'rawDecl)) +; (fun __caml_parser_env -> + let _2 = (Parsing.peek_val __caml_parser_env 0 : 'quident) in + Obj.repr( +# 797 "parse.mly" + (let (_1, uid) = ((), _2) in + ( Open uid )) +# 7808 "parse.ml" + : 'rawDecl)) +; (fun __caml_parser_env -> + let _2 = (Parsing.peek_val __caml_parser_env 0 : 'quident) in + Obj.repr( +# 800 "parse.mly" + (let (_1, uid) = ((), _2) in + ( Friend uid )) +# 7816 "parse.ml" + : 'rawDecl)) +; (fun __caml_parser_env -> + let _2 = (Parsing.peek_val __caml_parser_env 0 : 'quident) in + Obj.repr( +# 803 "parse.mly" + (let (_1, uid) = ((), _2) in + ( Include uid )) +# 7824 "parse.ml" + : 'rawDecl)) +; (fun __caml_parser_env -> + let _2 = (Parsing.peek_val __caml_parser_env 2 : 'uident) in + let _4 = (Parsing.peek_val __caml_parser_env 0 : 'quident) in + Obj.repr( +# 806 "parse.mly" + (let (_1, uid1, _3, uid2) = ((), _2, (), _4) in + ( ModuleAbbrev(uid1, uid2) )) +# 7833 "parse.ml" + : 'rawDecl)) +; (fun __caml_parser_env -> + let _2 = (Parsing.peek_val __caml_parser_env 0 : 'qlident) in + Obj.repr( +# 809 "parse.mly" + (let (_1, _2) = ((), _2) in + ( raise_error (Fatal_SyntaxError, "Syntax error: expected a module name") (rhs parseState 2) )) +# 7841 "parse.ml" + : 'rawDecl)) +; (fun __caml_parser_env -> + let _2 = (Parsing.peek_val __caml_parser_env 0 : 'quident) in + Obj.repr( +# 812 "parse.mly" + (let (_1, uid) = ((), _2) in + ( TopLevelModule uid )) +# 7849 "parse.ml" + : 'rawDecl)) +; (fun __caml_parser_env -> + let _2 = (Parsing.peek_val __caml_parser_env 0 : 'separated_nonempty_list_AND_typeDecl_) in + Obj.repr( +# 815 "parse.mly" + (let (_1, tcdefs) = ((), _2) in + ( Tycon (false, false, tcdefs) )) +# 7857 "parse.ml" + : 'rawDecl)) +; (fun __caml_parser_env -> + let _2 = (Parsing.peek_val __caml_parser_env 3 : 'uident) in + let _3 = (Parsing.peek_val __caml_parser_env 2 : 'typars) in + let _5 = (Parsing.peek_val __caml_parser_env 0 : 'typ) in + Obj.repr( +# 818 "parse.mly" + (let (_1, uid, tparams, _4, t) = ((), _2, _3, (), _5) in + ( Tycon(true, false, [(TyconAbbrev(uid, tparams, None, t))]) )) +# 7867 "parse.ml" + : 'rawDecl)) +; (fun __caml_parser_env -> + let _1 = (Parsing.peek_val __caml_parser_env 2 : bool) in + let _2 = (Parsing.peek_val __caml_parser_env 1 : 'letqualifier) in + let _3 = (Parsing.peek_val __caml_parser_env 0 : 'separated_nonempty_list_AND_letbinding_) in + Obj.repr( +# 821 "parse.mly" + (let (_1, q, lbs) = (_1, _2, _3) in + ( + let r = rhs2 parseState 1 3 in + let lbs = focusLetBindings lbs r in + if q <> Rec && List.length lbs <> 1 + then raise_error (Fatal_MultipleLetBinding, "Unexpected multiple let-binding (Did you forget some rec qualifier ?)") r; + TopLevelLet(q, lbs) + )) +# 7883 "parse.ml" + : 'rawDecl)) +; (fun __caml_parser_env -> + let _2 = (Parsing.peek_val __caml_parser_env 0 : 'constant) in + Obj.repr( +# 830 "parse.mly" + (let (_1, c) = ((), _2) in + ( + (* This is just to provide a better error than "syntax error" *) + raise_error (Fatal_SyntaxError, "Syntax error: constants are not allowed in val declarations") (rhs2 parseState 1 2) + )) +# 7894 "parse.ml" + : 'rawDecl)) +; (fun __caml_parser_env -> + let _2 = (Parsing.peek_val __caml_parser_env 3 : FStar_Ident.ident) in + let _3 = (Parsing.peek_val __caml_parser_env 2 : 'list_multiBinder_) in + let _5 = (Parsing.peek_val __caml_parser_env 0 : 'typ) in + Obj.repr( +# 836 "parse.mly" + (let (_1, id, bss, _4, t) = ((), _2, _3, (), _5) in +let lid = ( id ) in + ( + let t = match flatten bss with + | [] -> t + | bs -> mk_term (Product(bs, t)) (rhs2 parseState 3 5) Type_level + in Val(lid, t) + )) +# 7910 "parse.ml" + : 'rawDecl)) +; (fun __caml_parser_env -> + let _3 = (Parsing.peek_val __caml_parser_env 4 : string) in + let _5 = (Parsing.peek_val __caml_parser_env 2 : 'list_multiBinder_) in + let _7 = (Parsing.peek_val __caml_parser_env 0 : 'typ) in + Obj.repr( +# 845 "parse.mly" + (let (_1, _1_inlined1, op, _3, bss, _4, t) = ((), (), _3, (), _5, (), _7) in +let lid = + let id = ( mk_ident (op, rhs parseState 1) ) in + ( mk_ident (compile_op' (string_of_id id) (range_of_id id), range_of_id id) ) +in + ( + let t = match flatten bss with + | [] -> t + | bs -> mk_term (Product(bs, t)) (rhs2 parseState 3 5) Type_level + in Val(lid, t) + )) +# 7929 "parse.ml" + : 'rawDecl)) +; (fun __caml_parser_env -> + let _3 = (Parsing.peek_val __caml_parser_env 4 : 'binop_name) in + let _5 = (Parsing.peek_val __caml_parser_env 2 : 'list_multiBinder_) in + let _7 = (Parsing.peek_val __caml_parser_env 0 : 'typ) in + Obj.repr( +# 857 "parse.mly" + (let (_1, _1_inlined1, op, _3, bss, _4, t) = ((), (), _3, (), _5, (), _7) in +let lid = + let id = ( op ) in + ( mk_ident (compile_op' (string_of_id id) (range_of_id id), range_of_id id) ) +in + ( + let t = match flatten bss with + | [] -> t + | bs -> mk_term (Product(bs, t)) (rhs2 parseState 3 5) Type_level + in Val(lid, t) + )) +# 7948 "parse.ml" + : 'rawDecl)) +; (fun __caml_parser_env -> + let _3 = (Parsing.peek_val __caml_parser_env 4 : string) in + let _5 = (Parsing.peek_val __caml_parser_env 2 : 'list_multiBinder_) in + let _7 = (Parsing.peek_val __caml_parser_env 0 : 'typ) in + Obj.repr( +# 869 "parse.mly" + (let (_1, _1_inlined1, op, _3, bss, _4, t) = ((), (), _3, (), _5, (), _7) in +let lid = + let id = ( mk_ident (op, rhs parseState 1) ) in + ( mk_ident (compile_op' (string_of_id id) (range_of_id id), range_of_id id) ) +in + ( + let t = match flatten bss with + | [] -> t + | bs -> mk_term (Product(bs, t)) (rhs2 parseState 3 5) Type_level + in Val(lid, t) + )) +# 7967 "parse.ml" + : 'rawDecl)) +; (fun __caml_parser_env -> + let _3 = (Parsing.peek_val __caml_parser_env 4 : string) in + let _5 = (Parsing.peek_val __caml_parser_env 2 : 'list_multiBinder_) in + let _7 = (Parsing.peek_val __caml_parser_env 0 : 'typ) in + Obj.repr( +# 881 "parse.mly" + (let (_1, _1_inlined1, op, _3, bss, _4, t) = ((), (), _3, (), _5, (), _7) in +let lid = + let id = + let op = ( mk_ident ("and" ^ op, rhs parseState 1) ) in + (op) + in + ( mk_ident (compile_op' (string_of_id id) (range_of_id id), range_of_id id) ) +in + ( + let t = match flatten bss with + | [] -> t + | bs -> mk_term (Product(bs, t)) (rhs2 parseState 3 5) Type_level + in Val(lid, t) + )) +# 7989 "parse.ml" + : 'rawDecl)) +; (fun __caml_parser_env -> + let _3 = (Parsing.peek_val __caml_parser_env 4 : string) in + let _5 = (Parsing.peek_val __caml_parser_env 2 : 'list_multiBinder_) in + let _7 = (Parsing.peek_val __caml_parser_env 0 : 'typ) in + Obj.repr( +# 896 "parse.mly" + (let (_1, _1_inlined1, op, _3, bss, _4, t) = ((), (), _3, (), _5, (), _7) in +let lid = + let id = + let op = ( mk_ident ("let" ^ op, rhs parseState 1) ) in + (op) + in + ( mk_ident (compile_op' (string_of_id id) (range_of_id id), range_of_id id) ) +in + ( + let t = match flatten bss with + | [] -> t + | bs -> mk_term (Product(bs, t)) (rhs2 parseState 3 5) Type_level + in Val(lid, t) + )) +# 8011 "parse.ml" + : 'rawDecl)) +; (fun __caml_parser_env -> + let _3 = (Parsing.peek_val __caml_parser_env 2 : 'loption_separated_nonempty_list_SEMICOLON_ident__) in + let _5 = (Parsing.peek_val __caml_parser_env 0 : 'thunk_atomicTerm_) in + Obj.repr( +# 911 "parse.mly" + (let (_1, _2, xs, _4, t) = ((), (), _3, (), _5) in +let ids = ( xs ) in + ( Splice (ids, t) )) +# 8021 "parse.ml" + : 'rawDecl)) +; (fun __caml_parser_env -> + let _2 = (Parsing.peek_val __caml_parser_env 1 : 'uident) in + let _3 = (Parsing.peek_val __caml_parser_env 0 : 'option___anonymous_0_) in + Obj.repr( +# 915 "parse.mly" + (let (_1, lid, t_opt) = ((), _2, _3) in + ( Exception(lid, t_opt) )) +# 8030 "parse.ml" + : 'rawDecl)) +; (fun __caml_parser_env -> + let _2 = (Parsing.peek_val __caml_parser_env 0 : 'newEffect) in + Obj.repr( +# 918 "parse.mly" + (let (_1, ne) = ((), _2) in + ( NewEffect ne )) +# 8038 "parse.ml" + : 'rawDecl)) +; (fun __caml_parser_env -> + let _2 = (Parsing.peek_val __caml_parser_env 0 : 'effectDefinition) in + Obj.repr( +# 921 "parse.mly" + (let (_1, ne) = ((), _2) in + ( LayeredEffect ne )) +# 8046 "parse.ml" + : 'rawDecl)) +; (fun __caml_parser_env -> + let _2 = (Parsing.peek_val __caml_parser_env 0 : 'layeredEffectDefinition) in + Obj.repr( +# 924 "parse.mly" + (let (_1, ne) = ((), _2) in + ( LayeredEffect ne )) +# 8054 "parse.ml" + : 'rawDecl)) +; (fun __caml_parser_env -> + let _2 = (Parsing.peek_val __caml_parser_env 0 : 'subEffect) in + Obj.repr( +# 927 "parse.mly" + (let (_1, se) = ((), _2) in + ( SubEffect se )) +# 8062 "parse.ml" + : 'rawDecl)) +; (fun __caml_parser_env -> + let _2 = (Parsing.peek_val __caml_parser_env 0 : 'polymonadic_bind) in + Obj.repr( +# 930 "parse.mly" + (let (_1, b) = ((), _2) in + ( Polymonadic_bind b )) +# 8070 "parse.ml" + : 'rawDecl)) +; (fun __caml_parser_env -> + let _2 = (Parsing.peek_val __caml_parser_env 0 : 'polymonadic_subcomp) in + Obj.repr( +# 933 "parse.mly" + (let (_1, c) = ((), _2) in + ( Polymonadic_subcomp c )) +# 8078 "parse.ml" + : 'rawDecl)) +; (fun __caml_parser_env -> + let _1 = (Parsing.peek_val __caml_parser_env 3 : 'ident) in + let _2 = (Parsing.peek_val __caml_parser_env 2 : 'typars) in + let _3 = (Parsing.peek_val __caml_parser_env 1 : 'option_ascribeKind_) in + let _4 = (Parsing.peek_val __caml_parser_env 0 : 'typeDefinition) in + Obj.repr( +# 938 "parse.mly" + (let (lid, tparams, ascr_opt, tcdef) = (_1, _2, _3, _4) in + ( tcdef lid tparams ascr_opt )) +# 8089 "parse.ml" + : 'typeDecl)) +; (fun __caml_parser_env -> + let _1 = (Parsing.peek_val __caml_parser_env 0 : 'tvarinsts) in + Obj.repr( +# 943 "parse.mly" + (let x = _1 in + ( x )) +# 8097 "parse.ml" + : 'typars)) +; (fun __caml_parser_env -> + let _1 = (Parsing.peek_val __caml_parser_env 0 : 'binders) in + Obj.repr( +# 946 "parse.mly" + (let x = _1 in + ( x )) +# 8105 "parse.ml" + : 'typars)) +; (fun __caml_parser_env -> + let _2 = (Parsing.peek_val __caml_parser_env 1 : 'separated_nonempty_list_COMMA_tvar_) in + Obj.repr( +# 951 "parse.mly" + (let (_1, tvs, _3) = ((), _2, ()) in + ( map (fun tv -> mk_binder (TVariable(tv)) (range_of_id tv) Kind None) tvs )) +# 8113 "parse.ml" + : 'tvarinsts)) +; (fun __caml_parser_env -> + Obj.repr( +# 956 "parse.mly" + ( ( (fun id binders kopt -> check_id id; TyconAbstract(id, binders, kopt)) )) +# 8119 "parse.ml" + : 'typeDefinition)) +; (fun __caml_parser_env -> + let _2 = (Parsing.peek_val __caml_parser_env 0 : 'typ) in + Obj.repr( +# 958 "parse.mly" + (let (_1, t) = ((), _2) in + ( (fun id binders kopt -> check_id id; TyconAbbrev(id, binders, kopt, t)) )) +# 8127 "parse.ml" + : 'typeDefinition)) +; (fun __caml_parser_env -> + let _3 = (Parsing.peek_val __caml_parser_env 1 : 'right_flexible_nonempty_list_SEMICOLON_recordFieldDecl_) in + Obj.repr( +# 961 "parse.mly" + (let (_1, _1_inlined1, record_field_decls, _3) = ((), (), _3, ()) in +let record_field_decls = ( record_field_decls ) in +let attrs_opt = ( None ) in + ( (fun id binders kopt -> check_id id; TyconRecord(id, binders, kopt, none_to_empty_list attrs_opt, record_field_decls)) )) +# 8137 "parse.ml" + : 'typeDefinition)) +; (fun __caml_parser_env -> + let _2 = (Parsing.peek_val __caml_parser_env 3 : 'binderAttributes) in + let _4 = (Parsing.peek_val __caml_parser_env 1 : 'right_flexible_nonempty_list_SEMICOLON_recordFieldDecl_) in + Obj.repr( +# 966 "parse.mly" + (let (_1, x, _1_inlined1, record_field_decls, _3) = ((), _2, (), _4, ()) in +let record_field_decls = ( record_field_decls ) in +let attrs_opt = ( Some x ) in + ( (fun id binders kopt -> check_id id; TyconRecord(id, binders, kopt, none_to_empty_list attrs_opt, record_field_decls)) )) +# 8148 "parse.ml" + : 'typeDefinition)) +; (fun __caml_parser_env -> + let _2 = (Parsing.peek_val __caml_parser_env 0 : 'list_constructorDecl_) in + Obj.repr( +# 971 "parse.mly" + (let (_1, ct_decls) = ((), _2) in + ( (fun id binders kopt -> check_id id; TyconVariant(id, binders, kopt, ct_decls)) )) +# 8156 "parse.ml" + : 'typeDefinition)) +; (fun __caml_parser_env -> + let _1 = (Parsing.peek_val __caml_parser_env 2 : 'aqualifiedWithAttrs_lidentOrOperator_) in + let _3 = (Parsing.peek_val __caml_parser_env 0 : 'typ) in + Obj.repr( +# 976 "parse.mly" + (let (qualified_lid, _2, t) = (_1, (), _3) in + ( + let (qual, attrs), lid = qualified_lid in + (lid, qual, attrs, t) + )) +# 8168 "parse.ml" + : 'recordFieldDecl)) +; (fun __caml_parser_env -> + let _2 = (Parsing.peek_val __caml_parser_env 0 : 'typ) in + Obj.repr( +# 984 "parse.mly" + (let (_1, t) = ((), _2) in + (VpArbitrary t)) +# 8176 "parse.ml" + : 'constructorPayload)) +; (fun __caml_parser_env -> + let _2 = (Parsing.peek_val __caml_parser_env 0 : 'typ) in + Obj.repr( +# 987 "parse.mly" + (let (_1, t) = ((), _2) in + (VpOfNotation t)) +# 8184 "parse.ml" + : 'constructorPayload)) +; (fun __caml_parser_env -> + let _2 = (Parsing.peek_val __caml_parser_env 2 : 'right_flexible_nonempty_list_SEMICOLON_recordFieldDecl_) in + let _4 = (Parsing.peek_val __caml_parser_env 0 : 'option___anonymous_1_) in + Obj.repr( +# 990 "parse.mly" + (let (_1, record_field_decls, _3, opt) = ((), _2, (), _4) in +let fields = ( record_field_decls ) in + (VpRecord(fields, opt))) +# 8194 "parse.ml" + : 'constructorPayload)) +; (fun __caml_parser_env -> + let _2 = (Parsing.peek_val __caml_parser_env 1 : 'uident) in + let _3 = (Parsing.peek_val __caml_parser_env 0 : 'option_constructorPayload_) in + Obj.repr( +# 996 "parse.mly" + (let (_1, uid, payload) = ((), _2, _3) in +let attrs_opt = ( None ) in + ( uid, payload, none_to_empty_list attrs_opt )) +# 8204 "parse.ml" + : 'constructorDecl)) +; (fun __caml_parser_env -> + let _2 = (Parsing.peek_val __caml_parser_env 2 : 'binderAttributes) in + let _3 = (Parsing.peek_val __caml_parser_env 1 : 'uident) in + let _4 = (Parsing.peek_val __caml_parser_env 0 : 'option_constructorPayload_) in + Obj.repr( +# 1000 "parse.mly" + (let (_1, x, uid, payload) = ((), _2, _3, _4) in +let attrs_opt = ( Some x ) in + ( uid, payload, none_to_empty_list attrs_opt )) +# 8215 "parse.ml" + : 'constructorDecl)) +; (fun __caml_parser_env -> + let _2 = (Parsing.peek_val __caml_parser_env 0 : 'letbinding) in + Obj.repr( +# 1006 "parse.mly" + (let (_2, lb) = ((), _2) in +let attr = ( None ) in + ( attr, lb )) +# 8224 "parse.ml" + : 'attr_letbinding)) +; (fun __caml_parser_env -> + let _1 = (Parsing.peek_val __caml_parser_env 2 : 'attribute) in + let _3 = (Parsing.peek_val __caml_parser_env 0 : 'letbinding) in + Obj.repr( +# 1010 "parse.mly" + (let (x, _2, lb) = (_1, (), _3) in +let attr = ( Some x ) in + ( attr, lb )) +# 8234 "parse.ml" + : 'attr_letbinding)) +; (fun __caml_parser_env -> + let _1 = (Parsing.peek_val __caml_parser_env 2 : 'tuplePattern) in + let _2 = (Parsing.peek_val __caml_parser_env 1 : 'option_ascribeTyp_) in + let _3 = (Parsing.peek_val __caml_parser_env 0 : 'option___anonymous_2_) in + Obj.repr( +# 1016 "parse.mly" + (let (pat, ascr_opt, tm) = (_1, _2, _3) in + ( + let h tm + = ( ( match ascr_opt with + | None -> pat + | Some t -> mk_pattern (PatAscribed(pat, t)) (rhs2 parseState 1 2) ) + , tm) + in + match pat.pat, tm with + | _ , Some tm -> h tm + | PatVar (v, _, _), None -> + let v = lid_of_ns_and_id [] v in + h (mk_term (Var v) (rhs parseState 1) Expr) + | _ -> raise_error (Fatal_SyntaxError, "Syntax error: let-punning expects a name, not a pattern") (rhs parseState 2) + )) +# 8257 "parse.ml" + : 'letoperatorbinding)) +; (fun __caml_parser_env -> + let _1 = (Parsing.peek_val __caml_parser_env 5 : 'maybeFocus) in + let _2 = (Parsing.peek_val __caml_parser_env 4 : FStar_Ident.ident) in + let _3 = (Parsing.peek_val __caml_parser_env 3 : 'nonempty_list_patternOrMultibinder_) in + let _4 = (Parsing.peek_val __caml_parser_env 2 : 'option_ascribeTyp_) in + let _6 = (Parsing.peek_val __caml_parser_env 0 : FStar_Parser_AST.term) in + Obj.repr( +# 1034 "parse.mly" + (let (focus_opt, id, lbp, ascr_opt, _5, tm) = (_1, _2, _3, _4, (), _6) in +let lid = ( id ) in + ( + let pat = mk_pattern (PatVar(lid, None, [])) (rhs parseState 2) in + let pat = mk_pattern (PatApp (pat, flatten lbp)) (rhs2 parseState 1 3) in + let pos = rhs2 parseState 1 6 in + match ascr_opt with + | None -> (focus_opt, (pat, tm)) + | Some t -> (focus_opt, (mk_pattern (PatAscribed(pat, t)) pos, tm)) + )) +# 8277 "parse.ml" + : 'letbinding)) +; (fun __caml_parser_env -> + let _1 = (Parsing.peek_val __caml_parser_env 7 : 'maybeFocus) in + let _3 = (Parsing.peek_val __caml_parser_env 5 : string) in + let _5 = (Parsing.peek_val __caml_parser_env 3 : 'nonempty_list_patternOrMultibinder_) in + let _6 = (Parsing.peek_val __caml_parser_env 2 : 'option_ascribeTyp_) in + let _8 = (Parsing.peek_val __caml_parser_env 0 : FStar_Parser_AST.term) in + Obj.repr( +# 1045 "parse.mly" + (let (focus_opt, _1, op, _3, lbp, ascr_opt, _5, tm) = (_1, (), _3, (), _5, _6, (), _8) in +let lid = + let id = ( mk_ident (op, rhs parseState 1) ) in + ( mk_ident (compile_op' (string_of_id id) (range_of_id id), range_of_id id) ) +in + ( + let pat = mk_pattern (PatVar(lid, None, [])) (rhs parseState 2) in + let pat = mk_pattern (PatApp (pat, flatten lbp)) (rhs2 parseState 1 3) in + let pos = rhs2 parseState 1 6 in + match ascr_opt with + | None -> (focus_opt, (pat, tm)) + | Some t -> (focus_opt, (mk_pattern (PatAscribed(pat, t)) pos, tm)) + )) +# 8300 "parse.ml" + : 'letbinding)) +; (fun __caml_parser_env -> + let _1 = (Parsing.peek_val __caml_parser_env 7 : 'maybeFocus) in + let _3 = (Parsing.peek_val __caml_parser_env 5 : 'binop_name) in + let _5 = (Parsing.peek_val __caml_parser_env 3 : 'nonempty_list_patternOrMultibinder_) in + let _6 = (Parsing.peek_val __caml_parser_env 2 : 'option_ascribeTyp_) in + let _8 = (Parsing.peek_val __caml_parser_env 0 : FStar_Parser_AST.term) in + Obj.repr( +# 1059 "parse.mly" + (let (focus_opt, _1, op, _3, lbp, ascr_opt, _5, tm) = (_1, (), _3, (), _5, _6, (), _8) in +let lid = + let id = ( op ) in + ( mk_ident (compile_op' (string_of_id id) (range_of_id id), range_of_id id) ) +in + ( + let pat = mk_pattern (PatVar(lid, None, [])) (rhs parseState 2) in + let pat = mk_pattern (PatApp (pat, flatten lbp)) (rhs2 parseState 1 3) in + let pos = rhs2 parseState 1 6 in + match ascr_opt with + | None -> (focus_opt, (pat, tm)) + | Some t -> (focus_opt, (mk_pattern (PatAscribed(pat, t)) pos, tm)) + )) +# 8323 "parse.ml" + : 'letbinding)) +; (fun __caml_parser_env -> + let _1 = (Parsing.peek_val __caml_parser_env 7 : 'maybeFocus) in + let _3 = (Parsing.peek_val __caml_parser_env 5 : string) in + let _5 = (Parsing.peek_val __caml_parser_env 3 : 'nonempty_list_patternOrMultibinder_) in + let _6 = (Parsing.peek_val __caml_parser_env 2 : 'option_ascribeTyp_) in + let _8 = (Parsing.peek_val __caml_parser_env 0 : FStar_Parser_AST.term) in + Obj.repr( +# 1073 "parse.mly" + (let (focus_opt, _1, op, _3, lbp, ascr_opt, _5, tm) = (_1, (), _3, (), _5, _6, (), _8) in +let lid = + let id = ( mk_ident (op, rhs parseState 1) ) in + ( mk_ident (compile_op' (string_of_id id) (range_of_id id), range_of_id id) ) +in + ( + let pat = mk_pattern (PatVar(lid, None, [])) (rhs parseState 2) in + let pat = mk_pattern (PatApp (pat, flatten lbp)) (rhs2 parseState 1 3) in + let pos = rhs2 parseState 1 6 in + match ascr_opt with + | None -> (focus_opt, (pat, tm)) + | Some t -> (focus_opt, (mk_pattern (PatAscribed(pat, t)) pos, tm)) + )) +# 8346 "parse.ml" + : 'letbinding)) +; (fun __caml_parser_env -> + let _1 = (Parsing.peek_val __caml_parser_env 7 : 'maybeFocus) in + let _3 = (Parsing.peek_val __caml_parser_env 5 : string) in + let _5 = (Parsing.peek_val __caml_parser_env 3 : 'nonempty_list_patternOrMultibinder_) in + let _6 = (Parsing.peek_val __caml_parser_env 2 : 'option_ascribeTyp_) in + let _8 = (Parsing.peek_val __caml_parser_env 0 : FStar_Parser_AST.term) in + Obj.repr( +# 1087 "parse.mly" + (let (focus_opt, _1, op, _3, lbp, ascr_opt, _5, tm) = (_1, (), _3, (), _5, _6, (), _8) in +let lid = + let id = + let op = ( mk_ident ("and" ^ op, rhs parseState 1) ) in + (op) + in + ( mk_ident (compile_op' (string_of_id id) (range_of_id id), range_of_id id) ) +in + ( + let pat = mk_pattern (PatVar(lid, None, [])) (rhs parseState 2) in + let pat = mk_pattern (PatApp (pat, flatten lbp)) (rhs2 parseState 1 3) in + let pos = rhs2 parseState 1 6 in + match ascr_opt with + | None -> (focus_opt, (pat, tm)) + | Some t -> (focus_opt, (mk_pattern (PatAscribed(pat, t)) pos, tm)) + )) +# 8372 "parse.ml" + : 'letbinding)) +; (fun __caml_parser_env -> + let _1 = (Parsing.peek_val __caml_parser_env 7 : 'maybeFocus) in + let _3 = (Parsing.peek_val __caml_parser_env 5 : string) in + let _5 = (Parsing.peek_val __caml_parser_env 3 : 'nonempty_list_patternOrMultibinder_) in + let _6 = (Parsing.peek_val __caml_parser_env 2 : 'option_ascribeTyp_) in + let _8 = (Parsing.peek_val __caml_parser_env 0 : FStar_Parser_AST.term) in + Obj.repr( +# 1104 "parse.mly" + (let (focus_opt, _1, op, _3, lbp, ascr_opt, _5, tm) = (_1, (), _3, (), _5, _6, (), _8) in +let lid = + let id = + let op = ( mk_ident ("let" ^ op, rhs parseState 1) ) in + (op) + in + ( mk_ident (compile_op' (string_of_id id) (range_of_id id), range_of_id id) ) +in + ( + let pat = mk_pattern (PatVar(lid, None, [])) (rhs parseState 2) in + let pat = mk_pattern (PatApp (pat, flatten lbp)) (rhs2 parseState 1 3) in + let pos = rhs2 parseState 1 6 in + match ascr_opt with + | None -> (focus_opt, (pat, tm)) + | Some t -> (focus_opt, (mk_pattern (PatAscribed(pat, t)) pos, tm)) + )) +# 8398 "parse.ml" + : 'letbinding)) +; (fun __caml_parser_env -> + let _1 = (Parsing.peek_val __caml_parser_env 4 : 'maybeFocus) in + let _2 = (Parsing.peek_val __caml_parser_env 3 : 'tuplePattern) in + let _3 = (Parsing.peek_val __caml_parser_env 2 : 'ascribeTyp) in + let _5 = (Parsing.peek_val __caml_parser_env 0 : FStar_Parser_AST.term) in + Obj.repr( +# 1121 "parse.mly" + (let (focus_opt, pat, ascr, _4, tm) = (_1, _2, _3, (), _5) in + ( focus_opt, (mk_pattern (PatAscribed(pat, ascr)) (rhs2 parseState 1 4), tm) )) +# 8409 "parse.ml" + : 'letbinding)) +; (fun __caml_parser_env -> + let _1 = (Parsing.peek_val __caml_parser_env 3 : 'maybeFocus) in + let _2 = (Parsing.peek_val __caml_parser_env 2 : 'tuplePattern) in + let _4 = (Parsing.peek_val __caml_parser_env 0 : FStar_Parser_AST.term) in + Obj.repr( +# 1124 "parse.mly" + (let (focus_opt, pat, _3, tm) = (_1, _2, (), _4) in + ( focus_opt, (pat, tm) )) +# 8419 "parse.ml" + : 'letbinding)) +; (fun __caml_parser_env -> + let _1 = (Parsing.peek_val __caml_parser_env 0 : 'effectRedefinition) in + Obj.repr( +# 1129 "parse.mly" + (let ed = _1 in + ( ed )) +# 8427 "parse.ml" + : 'newEffect)) +; (fun __caml_parser_env -> + let _1 = (Parsing.peek_val __caml_parser_env 0 : 'effectDefinition) in + Obj.repr( +# 1132 "parse.mly" + (let ed = _1 in + ( ed )) +# 8435 "parse.ml" + : 'newEffect)) +; (fun __caml_parser_env -> + let _1 = (Parsing.peek_val __caml_parser_env 2 : 'uident) in + let _3 = (Parsing.peek_val __caml_parser_env 0 : 'simpleTerm) in + Obj.repr( +# 1137 "parse.mly" + (let (lid, _2, t) = (_1, (), _3) in + ( RedefineEffect(lid, [], t) )) +# 8444 "parse.ml" + : 'effectRedefinition)) +; (fun __caml_parser_env -> + let _2 = (Parsing.peek_val __caml_parser_env 6 : 'uident) in + let _3 = (Parsing.peek_val __caml_parser_env 5 : 'binders) in + let _5 = (Parsing.peek_val __caml_parser_env 3 : 'tmArrow_tmNoEq_) in + let _7 = (Parsing.peek_val __caml_parser_env 1 : 'separated_nonempty_list_SEMICOLON_effectDecl_) in + Obj.repr( +# 1142 "parse.mly" + (let (_1, lid, bs, _4, typ, _6, eds, _8) = ((), _2, _3, (), _5, (), _7, ()) in + ( DefineEffect(lid, bs, typ, eds) )) +# 8455 "parse.ml" + : 'effectDefinition)) +; (fun __caml_parser_env -> + let _2 = (Parsing.peek_val __caml_parser_env 4 : 'uident) in + let _3 = (Parsing.peek_val __caml_parser_env 3 : 'binders) in + let _5 = (Parsing.peek_val __caml_parser_env 1 : 'tmNoEq) in + Obj.repr( +# 1147 "parse.mly" + (let (_1, lid, bs, _4, r, _6) = ((), _2, _3, (), _5, ()) in + ( + let typ = (* bs -> Effect *) + let first_b, last_b = + match bs with + | [] -> + raise_error (Fatal_SyntaxError, + "Syntax error: unexpected empty binders list in the layered effect definition") + (range_of_id lid) + | _ -> hd bs, last bs in + let r = union_ranges first_b.brange last_b.brange in + mk_term (Product (bs, mk_term (Name (lid_of_str "Effect")) r Type_level)) r Type_level in + let rec decls (r:term) = + match r.tm with + | Paren r -> decls r + | Record (None, flds) -> + flds |> List.map (fun (lid, t) -> + mk_decl (Tycon (false, + false, + [TyconAbbrev (ident_of_lid lid, [], None, t)])) + t.range []) + | _ -> + raise_error (Fatal_SyntaxError, + "Syntax error: layered effect combinators should be declared as a record") + r.range in + DefineEffect (lid, [], typ, decls r) )) +# 8489 "parse.ml" + : 'layeredEffectDefinition)) +; (fun __caml_parser_env -> + let _1 = (Parsing.peek_val __caml_parser_env 3 : FStar_Ident.ident) in + let _2 = (Parsing.peek_val __caml_parser_env 2 : 'binders) in + let _4 = (Parsing.peek_val __caml_parser_env 0 : 'simpleTerm) in + Obj.repr( +# 1176 "parse.mly" + (let (lid, action_params, _3, t) = (_1, _2, (), _4) in + ( mk_decl (Tycon (false, false, [TyconAbbrev(lid, action_params, None, t)])) (rhs2 parseState 1 3) [] )) +# 8499 "parse.ml" + : 'effectDecl)) +; (fun __caml_parser_env -> + let _1 = (Parsing.peek_val __caml_parser_env 4 : 'quident) in + let _3 = (Parsing.peek_val __caml_parser_env 2 : 'quident) in + let _5 = (Parsing.peek_val __caml_parser_env 0 : 'simpleTerm) in + Obj.repr( +# 1181 "parse.mly" + (let (src_eff, _2, tgt_eff, _4, lift) = (_1, (), _3, (), _5) in + ( { msource = src_eff; mdest = tgt_eff; lift_op = NonReifiableLift lift } )) +# 8509 "parse.ml" + : 'subEffect)) +; (fun __caml_parser_env -> + let _1 = (Parsing.peek_val __caml_parser_env 7 : 'quident) in + let _3 = (Parsing.peek_val __caml_parser_env 5 : 'quident) in + let _5 = (Parsing.peek_val __caml_parser_env 3 : string) in + let _7 = (Parsing.peek_val __caml_parser_env 1 : 'simpleTerm) in + Obj.repr( +# 1184 "parse.mly" + (let (src_eff, _2, tgt_eff, _4, x, _2_inlined1, y, _7) = (_1, (), _3, (), _5, (), _7, ()) in +let lift2_opt = ( None ) in +let lift1 = ( (x, y) ) in + ( + match lift2_opt with + | None -> + begin match lift1 with + | ("lift", lift) -> + { msource = src_eff; mdest = tgt_eff; lift_op = LiftForFree lift } + | ("lift_wp", lift_wp) -> + { msource = src_eff; mdest = tgt_eff; lift_op = NonReifiableLift lift_wp } + | _ -> + raise_error (Fatal_UnexpectedIdentifier, "Unexpected identifier; expected {'lift', and possibly 'lift_wp'}") (lhs parseState) + end + | Some (id2, tm2) -> + let (id1, tm1) = lift1 in + let lift, lift_wp = match (id1, id2) with + | "lift_wp", "lift" -> tm1, tm2 + | "lift", "lift_wp" -> tm2, tm1 + | _ -> raise_error (Fatal_UnexpectedIdentifier, "Unexpected identifier; expected {'lift', 'lift_wp'}") (lhs parseState) + in + { msource = src_eff; mdest = tgt_eff; lift_op = ReifiableLift (lift, lift_wp) } + )) +# 8541 "parse.ml" + : 'subEffect)) +; (fun __caml_parser_env -> + let _1 = (Parsing.peek_val __caml_parser_env 11 : 'quident) in + let _3 = (Parsing.peek_val __caml_parser_env 9 : 'quident) in + let _5 = (Parsing.peek_val __caml_parser_env 7 : string) in + let _7 = (Parsing.peek_val __caml_parser_env 5 : 'simpleTerm) in + let _9 = (Parsing.peek_val __caml_parser_env 3 : string) in + let _11 = (Parsing.peek_val __caml_parser_env 1 : 'simpleTerm) in + Obj.repr( +# 1208 "parse.mly" + (let (src_eff, _2, tgt_eff, _4, x, _2_inlined1, y, _1, id, _2_inlined2, y_inlined1, _7) = (_1, (), _3, (), _5, (), _7, (), _9, (), _11, ()) in +let lift2_opt = + let y = y_inlined1 in + let x = + let x = (id) in + ( (x, y) ) + in + ( Some x ) +in +let lift1 = ( (x, y) ) in + ( + match lift2_opt with + | None -> + begin match lift1 with + | ("lift", lift) -> + { msource = src_eff; mdest = tgt_eff; lift_op = LiftForFree lift } + | ("lift_wp", lift_wp) -> + { msource = src_eff; mdest = tgt_eff; lift_op = NonReifiableLift lift_wp } + | _ -> + raise_error (Fatal_UnexpectedIdentifier, "Unexpected identifier; expected {'lift', and possibly 'lift_wp'}") (lhs parseState) + end + | Some (id2, tm2) -> + let (id1, tm1) = lift1 in + let lift, lift_wp = match (id1, id2) with + | "lift_wp", "lift" -> tm1, tm2 + | "lift", "lift_wp" -> tm2, tm1 + | _ -> raise_error (Fatal_UnexpectedIdentifier, "Unexpected identifier; expected {'lift', 'lift_wp'}") (lhs parseState) + in + { msource = src_eff; mdest = tgt_eff; lift_op = ReifiableLift (lift, lift_wp) } + )) +# 8582 "parse.ml" + : 'subEffect)) +; (fun __caml_parser_env -> + let _2 = (Parsing.peek_val __caml_parser_env 7 : 'quident) in + let _4 = (Parsing.peek_val __caml_parser_env 5 : 'quident) in + let _7 = (Parsing.peek_val __caml_parser_env 2 : 'quident) in + let _9 = (Parsing.peek_val __caml_parser_env 0 : 'simpleTerm) in + Obj.repr( +# 1241 "parse.mly" + (let (_1, m_eff, _3, n_eff, _5, _6, p_eff, _8, bind) = ((), _2, (), _4, (), (), _7, (), _9) in + ( (m_eff, n_eff, p_eff, bind) )) +# 8593 "parse.ml" + : 'polymonadic_bind)) +; (fun __caml_parser_env -> + let _1 = (Parsing.peek_val __caml_parser_env 4 : 'quident) in + let _3 = (Parsing.peek_val __caml_parser_env 2 : 'quident) in + let _5 = (Parsing.peek_val __caml_parser_env 0 : 'simpleTerm) in + Obj.repr( +# 1246 "parse.mly" + (let (m_eff, _2, n_eff, _4, subcomp) = (_1, (), _3, (), _5) in + ( (m_eff, n_eff, subcomp) )) +# 8603 "parse.ml" + : 'polymonadic_subcomp)) +; (fun __caml_parser_env -> + Obj.repr( +# 1251 "parse.mly" + (let _1 = () in + ( Assumption )) +# 8610 "parse.ml" + : 'qualifier)) +; (fun __caml_parser_env -> + Obj.repr( +# 1254 "parse.mly" + (let _1 = () in + ( + raise_error (Fatal_InlineRenamedAsUnfold, "The 'inline' qualifier has been renamed to 'unfold'") (lhs parseState) + )) +# 8619 "parse.ml" + : 'qualifier)) +; (fun __caml_parser_env -> + Obj.repr( +# 1259 "parse.mly" + (let _1 = () in + ( + raise_error (Fatal_UnfoldableDeprecated, "The 'unfoldable' qualifier is no longer denotable; it is the default qualifier so just omit it") (lhs parseState) + )) +# 8628 "parse.ml" + : 'qualifier)) +; (fun __caml_parser_env -> + Obj.repr( +# 1264 "parse.mly" + (let _1 = () in + ( + Inline_for_extraction + )) +# 8637 "parse.ml" + : 'qualifier)) +; (fun __caml_parser_env -> + Obj.repr( +# 1269 "parse.mly" + (let _1 = () in + ( + Unfold_for_unification_and_vcgen + )) +# 8646 "parse.ml" + : 'qualifier)) +; (fun __caml_parser_env -> + Obj.repr( +# 1274 "parse.mly" + (let _1 = () in + ( Irreducible )) +# 8653 "parse.ml" + : 'qualifier)) +; (fun __caml_parser_env -> + Obj.repr( +# 1277 "parse.mly" + (let _1 = () in + ( NoExtract )) +# 8660 "parse.ml" + : 'qualifier)) +; (fun __caml_parser_env -> + Obj.repr( +# 1280 "parse.mly" + (let _1 = () in + ( DefaultEffect )) +# 8667 "parse.ml" + : 'qualifier)) +; (fun __caml_parser_env -> + Obj.repr( +# 1283 "parse.mly" + (let _1 = () in + ( TotalEffect )) +# 8674 "parse.ml" + : 'qualifier)) +; (fun __caml_parser_env -> + Obj.repr( +# 1286 "parse.mly" + (let _1 = () in + ( Private )) +# 8681 "parse.ml" + : 'qualifier)) +; (fun __caml_parser_env -> + Obj.repr( +# 1289 "parse.mly" + (let _1 = () in + ( Noeq )) +# 8688 "parse.ml" + : 'qualifier)) +; (fun __caml_parser_env -> + Obj.repr( +# 1292 "parse.mly" + (let _1 = () in + ( Unopteq )) +# 8695 "parse.ml" + : 'qualifier)) +; (fun __caml_parser_env -> + Obj.repr( +# 1295 "parse.mly" + (let _1 = () in + ( New )) +# 8702 "parse.ml" + : 'qualifier)) +; (fun __caml_parser_env -> + Obj.repr( +# 1298 "parse.mly" + (let _1 = () in + ( log_issue (lhs parseState) (Warning_logicqualifier, + logic_qualifier_deprecation_warning); + Logic )) +# 8711 "parse.ml" + : 'qualifier)) +; (fun __caml_parser_env -> + Obj.repr( +# 1303 "parse.mly" + (let _1 = () in + ( Opaque )) +# 8718 "parse.ml" + : 'qualifier)) +; (fun __caml_parser_env -> + Obj.repr( +# 1306 "parse.mly" + (let _1 = () in + ( Reifiable )) +# 8725 "parse.ml" + : 'qualifier)) +; (fun __caml_parser_env -> + Obj.repr( +# 1309 "parse.mly" + (let _1 = () in + ( Reflectable )) +# 8732 "parse.ml" + : 'qualifier)) +; (fun __caml_parser_env -> + let _1 = (Parsing.peek_val __caml_parser_env 0 : 'boption_SQUIGGLY_RARROW_) in + Obj.repr( +# 1314 "parse.mly" + (let b = _1 in + ( b )) +# 8740 "parse.ml" + : 'maybeFocus)) +; (fun __caml_parser_env -> + Obj.repr( +# 1319 "parse.mly" + (let _1 = () in + ( Rec )) +# 8747 "parse.ml" + : 'letqualifier)) +; (fun __caml_parser_env -> + Obj.repr( +# 1322 "parse.mly" + ( ( NoLetQualifier )) +# 8753 "parse.ml" + : 'letqualifier)) +; (fun __caml_parser_env -> + let _3 = (Parsing.peek_val __caml_parser_env 1 : 'thunk_tmNoEq_) in + Obj.repr( +# 1326 "parse.mly" + (let (_1, _2, t, _4) = ((), (), _3, ()) in + ( mk_meta_tac t )) +# 8761 "parse.ml" + : 'aqual)) +; (fun __caml_parser_env -> + Obj.repr( +# 1329 "parse.mly" + (let _1 = () in + ( Implicit )) +# 8768 "parse.ml" + : 'aqual)) +; (fun __caml_parser_env -> + Obj.repr( +# 1332 "parse.mly" + (let _1 = () in + ( Equality )) +# 8775 "parse.ml" + : 'aqual)) +; (fun __caml_parser_env -> + let _2 = (Parsing.peek_val __caml_parser_env 1 : 'right_flexible_list_SEMICOLON_noSeqTerm_) in + Obj.repr( +# 1337 "parse.mly" + (let (_1, l, _3) = ((), _2, ()) in +let t = ( l ) in + ( t )) +# 8784 "parse.ml" + : 'binderAttributes)) +; (fun __caml_parser_env -> + let _1 = (Parsing.peek_val __caml_parser_env 0 : 'separated_nonempty_list_BAR_tuplePattern_) in + Obj.repr( +# 1343 "parse.mly" + (let pats = _1 in + ( pats )) +# 8792 "parse.ml" + : 'disjunctivePattern)) +; (fun __caml_parser_env -> + let _1 = (Parsing.peek_val __caml_parser_env 0 : 'separated_nonempty_list_COMMA_constructorPattern_) in + Obj.repr( +# 1348 "parse.mly" + (let pats = _1 in + ( match pats with | [x] -> x | l -> mk_pattern (PatTuple (l, false)) (rhs parseState 1) )) +# 8800 "parse.ml" + : 'tuplePattern)) +; (fun __caml_parser_env -> + let _1 = (Parsing.peek_val __caml_parser_env 2 : 'constructorPattern) in + let _3 = (Parsing.peek_val __caml_parser_env 0 : 'constructorPattern) in + Obj.repr( +# 1353 "parse.mly" + (let (pat, _2, pats) = (_1, (), _3) in + ( mk_pattern (consPat (rhs parseState 3) pat pats) (rhs2 parseState 1 3) )) +# 8809 "parse.ml" + : 'constructorPattern)) +; (fun __caml_parser_env -> + let _1 = (Parsing.peek_val __caml_parser_env 1 : 'quident) in + let _2 = (Parsing.peek_val __caml_parser_env 0 : 'nonempty_list_atomicPattern_) in + Obj.repr( +# 1356 "parse.mly" + (let (uid, args) = (_1, _2) in + ( + let head_pat = mk_pattern (PatName uid) (rhs parseState 1) in + mk_pattern (PatApp (head_pat, args)) (rhs2 parseState 1 2) + )) +# 8821 "parse.ml" + : 'constructorPattern)) +; (fun __caml_parser_env -> + let _1 = (Parsing.peek_val __caml_parser_env 0 : 'atomicPattern) in + Obj.repr( +# 1362 "parse.mly" + (let pat = _1 in + ( pat )) +# 8829 "parse.ml" + : 'constructorPattern)) +; (fun __caml_parser_env -> + let _2 = (Parsing.peek_val __caml_parser_env 4 : 'tuplePattern) in + let _4 = (Parsing.peek_val __caml_parser_env 2 : 'simpleArrow) in + let _5 = (Parsing.peek_val __caml_parser_env 1 : 'refineOpt) in + Obj.repr( +# 1367 "parse.mly" + (let (_1, pat, _3, t, phi_opt, _6) = ((), _2, (), _4, _5, ()) in + ( + let pos_t = rhs2 parseState 2 4 in + let pos = rhs2 parseState 1 6 in + mkRefinedPattern pat t true phi_opt pos_t pos + )) +# 8843 "parse.ml" + : 'atomicPattern)) +; (fun __caml_parser_env -> + let _2 = (Parsing.peek_val __caml_parser_env 1 : 'loption_separated_nonempty_list_SEMICOLON_tuplePattern__) in + Obj.repr( +# 1374 "parse.mly" + (let (_1, xs, _3) = ((), _2, ()) in +let pats = ( xs ) in + ( mk_pattern (PatList pats) (rhs2 parseState 1 3) )) +# 8852 "parse.ml" + : 'atomicPattern)) +; (fun __caml_parser_env -> + let _2 = (Parsing.peek_val __caml_parser_env 1 : 'right_flexible_nonempty_list_SEMICOLON_fieldPattern_) in + Obj.repr( +# 1378 "parse.mly" + (let (_1, record_pat, _3) = ((), _2, ()) in + ( mk_pattern (PatRecord record_pat) (rhs2 parseState 1 3) )) +# 8860 "parse.ml" + : 'atomicPattern)) +; (fun __caml_parser_env -> + let _2 = (Parsing.peek_val __caml_parser_env 3 : 'constructorPattern) in + let _4 = (Parsing.peek_val __caml_parser_env 1 : 'separated_nonempty_list_COMMA_constructorPattern_) in + Obj.repr( +# 1381 "parse.mly" + (let (_1, pat0, _3, pats, _5) = ((), _2, (), _4, ()) in + ( mk_pattern (PatTuple(pat0::pats, true)) (rhs2 parseState 1 5) )) +# 8869 "parse.ml" + : 'atomicPattern)) +; (fun __caml_parser_env -> + let _2 = (Parsing.peek_val __caml_parser_env 1 : 'tuplePattern) in + Obj.repr( +# 1384 "parse.mly" + (let (_1, pat, _3) = ((), _2, ()) in + ( pat )) +# 8877 "parse.ml" + : 'atomicPattern)) +; (fun __caml_parser_env -> + let _1 = (Parsing.peek_val __caml_parser_env 0 : 'tvar) in + Obj.repr( +# 1387 "parse.mly" + (let tv = _1 in + ( mk_pattern (PatTvar (tv, None, [])) (rhs parseState 1) )) +# 8885 "parse.ml" + : 'atomicPattern)) +; (fun __caml_parser_env -> + let _2 = (Parsing.peek_val __caml_parser_env 1 : string) in + Obj.repr( +# 1390 "parse.mly" + (let (_1, op, _3) = ((), _2, ()) in +let op = ( mk_ident (op, rhs parseState 1) ) in + ( mk_pattern (PatOp op) (rhs2 parseState 1 3) )) +# 8894 "parse.ml" + : 'atomicPattern)) +; (fun __caml_parser_env -> + let _2 = (Parsing.peek_val __caml_parser_env 1 : 'binop_name) in + Obj.repr( +# 1394 "parse.mly" + (let (_1, op, _3) = ((), _2, ()) in +let op = ( op ) in + ( mk_pattern (PatOp op) (rhs2 parseState 1 3) )) +# 8903 "parse.ml" + : 'atomicPattern)) +; (fun __caml_parser_env -> + let _2 = (Parsing.peek_val __caml_parser_env 1 : string) in + Obj.repr( +# 1398 "parse.mly" + (let (_1, op, _3) = ((), _2, ()) in +let op = ( mk_ident (op, rhs parseState 1) ) in + ( mk_pattern (PatOp op) (rhs2 parseState 1 3) )) +# 8912 "parse.ml" + : 'atomicPattern)) +; (fun __caml_parser_env -> + let _2 = (Parsing.peek_val __caml_parser_env 1 : string) in + Obj.repr( +# 1402 "parse.mly" + (let (_1, op, _3) = ((), _2, ()) in +let op = + let op = ( mk_ident ("and" ^ op, rhs parseState 1) ) in + (op) +in + ( mk_pattern (PatOp op) (rhs2 parseState 1 3) )) +# 8924 "parse.ml" + : 'atomicPattern)) +; (fun __caml_parser_env -> + let _2 = (Parsing.peek_val __caml_parser_env 1 : string) in + Obj.repr( +# 1409 "parse.mly" + (let (_1, op, _3) = ((), _2, ()) in +let op = + let op = ( mk_ident ("let" ^ op, rhs parseState 1) ) in + (op) +in + ( mk_pattern (PatOp op) (rhs2 parseState 1 3) )) +# 8936 "parse.ml" + : 'atomicPattern)) +; (fun __caml_parser_env -> + Obj.repr( +# 1416 "parse.mly" + (let _1 = () in + ( mk_pattern (PatWild (None, [])) (rhs parseState 1) )) +# 8943 "parse.ml" + : 'atomicPattern)) +; (fun __caml_parser_env -> + Obj.repr( +# 1419 "parse.mly" + (let (_1, _2) = ((), ()) in + ( mk_pattern (PatWild (Some Implicit, [])) (rhs parseState 1) )) +# 8950 "parse.ml" + : 'atomicPattern)) +; (fun __caml_parser_env -> + let _1 = (Parsing.peek_val __caml_parser_env 0 : 'constant) in + Obj.repr( +# 1422 "parse.mly" + (let c = _1 in + ( mk_pattern (PatConst c) (rhs parseState 1) )) +# 8958 "parse.ml" + : 'atomicPattern)) +; (fun __caml_parser_env -> + let _2 = (Parsing.peek_val __caml_parser_env 0 : 'atomicTerm) in + Obj.repr( +# 1425 "parse.mly" + (let (_1, q) = ((), _2) in + ( mk_pattern (PatVQuote q) (rhs2 parseState 1 2) )) +# 8966 "parse.ml" + : 'atomicPattern)) +; (fun __caml_parser_env -> + let _1 = (Parsing.peek_val __caml_parser_env 0 : 'aqualifiedWithAttrs_lident_) in + Obj.repr( +# 1428 "parse.mly" + (let qual_id = _1 in + ( + let (aqual, attrs), lid = qual_id in + mk_pattern (PatVar (lid, aqual, attrs)) (rhs parseState 1) )) +# 8976 "parse.ml" + : 'atomicPattern)) +; (fun __caml_parser_env -> + let _1 = (Parsing.peek_val __caml_parser_env 0 : 'quident) in + Obj.repr( +# 1433 "parse.mly" + (let uid = _1 in + ( mk_pattern (PatName uid) (rhs parseState 1) )) +# 8984 "parse.ml" + : 'atomicPattern)) +; (fun __caml_parser_env -> + let _1 = (Parsing.peek_val __caml_parser_env 2 : 'qlident) in + let _3 = (Parsing.peek_val __caml_parser_env 0 : 'tuplePattern) in + Obj.repr( +# 1438 "parse.mly" + (let (x, _2, y) = (_1, (), _3) in +let p = ( (x, y) ) in + ( p )) +# 8994 "parse.ml" + : 'fieldPattern)) +; (fun __caml_parser_env -> + let _1 = (Parsing.peek_val __caml_parser_env 0 : 'qlident) in + Obj.repr( +# 1442 "parse.mly" + (let lid = _1 in + ( lid, mk_pattern (PatVar (ident_of_lid lid, None, [])) (rhs parseState 1) )) +# 9002 "parse.ml" + : 'fieldPattern)) +; (fun __caml_parser_env -> + let _2 = (Parsing.peek_val __caml_parser_env 3 : 'lidentOrUnderscore) in + let _4 = (Parsing.peek_val __caml_parser_env 1 : 'simpleArrow) in + Obj.repr( +# 1447 "parse.mly" + (let (_1, id, _3, t, _5) = ((), _2, (), _4, ()) in + ( let r = rhs2 parseState 1 5 in + let w = mk_pattern (PatVar (id, Some TypeClassArg, [])) r in + let asc = (t, None) in + [mk_pattern (PatAscribed(w, asc)) r] + )) +# 9015 "parse.ml" + : 'patternOrMultibinder)) +; (fun __caml_parser_env -> + let _2 = (Parsing.peek_val __caml_parser_env 1 : 'simpleArrow) in + Obj.repr( +# 1454 "parse.mly" + (let (_1, t, _3) = ((), _2, ()) in + ( let r = rhs2 parseState 1 3 in + let id = gen r in + let w = mk_pattern (PatVar (id, Some TypeClassArg, [])) r in + let asc = (t, None) in + [mk_pattern (PatAscribed(w, asc)) r] + )) +# 9028 "parse.ml" + : 'patternOrMultibinder)) +; (fun __caml_parser_env -> + let _1 = (Parsing.peek_val __caml_parser_env 0 : 'atomicPattern) in + Obj.repr( +# 1462 "parse.mly" + (let pat = _1 in + ( [pat] )) +# 9036 "parse.ml" + : 'patternOrMultibinder)) +; (fun __caml_parser_env -> + let _2 = (Parsing.peek_val __caml_parser_env 5 : 'aqualifiedWithAttrs_lident_) in + let _3 = (Parsing.peek_val __caml_parser_env 4 : 'nonempty_list_aqualifiedWithAttrs_lident__) in + let _5 = (Parsing.peek_val __caml_parser_env 2 : 'simpleArrow) in + let _6 = (Parsing.peek_val __caml_parser_env 1 : 'refineOpt) in + Obj.repr( +# 1465 "parse.mly" + (let (_1, qual_id0, qual_ids, _4, t, r, _7) = ((), _2, _3, (), _5, _6, ()) in + ( + let pos = rhs2 parseState 1 7 in + let t_pos = rhs parseState 5 in + let qual_ids = qual_id0 :: qual_ids in + List.map (fun ((aq, attrs), x) -> mkRefinedPattern (mk_pattern (PatVar (x, aq, attrs)) pos) t false r t_pos pos) qual_ids + )) +# 9052 "parse.ml" + : 'patternOrMultibinder)) +; (fun __caml_parser_env -> + let _1 = (Parsing.peek_val __caml_parser_env 0 : 'aqualifiedWithAttrs_lidentOrUnderscore_) in + Obj.repr( +# 1475 "parse.mly" + (let aqualifiedWithAttrs_lid = _1 in + ( + let (q, attrs), lid = aqualifiedWithAttrs_lid in + mk_binder_with_attrs (Variable lid) (rhs parseState 1) Type_level q attrs + )) +# 9063 "parse.ml" + : 'binder)) +; (fun __caml_parser_env -> + let _1 = (Parsing.peek_val __caml_parser_env 0 : 'tvar) in + Obj.repr( +# 1481 "parse.mly" + (let tv = _1 in + ( mk_binder (TVariable tv) (rhs parseState 1) Kind None )) +# 9071 "parse.ml" + : 'binder)) +; (fun __caml_parser_env -> + let _2 = (Parsing.peek_val __caml_parser_env 3 : 'lidentOrUnderscore) in + let _4 = (Parsing.peek_val __caml_parser_env 1 : 'simpleArrow) in + Obj.repr( +# 1486 "parse.mly" + (let (_1, id, _3, t, _5) = ((), _2, (), _4, ()) in + ( let r = rhs2 parseState 1 5 in + [mk_binder (Annotated (id, t)) r Type_level (Some TypeClassArg)] + )) +# 9082 "parse.ml" + : 'multiBinder)) +; (fun __caml_parser_env -> + let _2 = (Parsing.peek_val __caml_parser_env 1 : 'simpleArrow) in + Obj.repr( +# 1491 "parse.mly" + (let (_1, t, _3) = ((), _2, ()) in + ( let r = rhs2 parseState 1 3 in + let id = gen r in + [mk_binder (Annotated (id, t)) r Type_level (Some TypeClassArg)] + )) +# 9093 "parse.ml" + : 'multiBinder)) +; (fun __caml_parser_env -> + let _2 = (Parsing.peek_val __caml_parser_env 4 : 'nonempty_list_aqualifiedWithAttrs_lidentOrUnderscore__) in + let _4 = (Parsing.peek_val __caml_parser_env 2 : 'simpleArrow) in + let _5 = (Parsing.peek_val __caml_parser_env 1 : 'refineOpt) in + Obj.repr( +# 1497 "parse.mly" + (let (_1, qual_ids, _3, t, r, _6) = ((), _2, (), _4, _5, ()) in + ( + let should_bind_var = match qual_ids with | [ _ ] -> true | _ -> false in + List.map (fun ((q, attrs), x) -> + mkRefinedBinder x t should_bind_var r (rhs2 parseState 1 6) q attrs) qual_ids + )) +# 9107 "parse.ml" + : 'multiBinder)) +; (fun __caml_parser_env -> + let _1 = (Parsing.peek_val __caml_parser_env 0 : 'list___anonymous_4_) in + Obj.repr( +# 1506 "parse.mly" + (let bss = _1 in + ( flatten bss )) +# 9115 "parse.ml" + : 'binders)) +; (fun __caml_parser_env -> + let _1 = (Parsing.peek_val __caml_parser_env 2 : 'aqual) in + let _2 = (Parsing.peek_val __caml_parser_env 1 : 'binderAttributes) in + let _3 = (Parsing.peek_val __caml_parser_env 0 : FStar_Ident.ident) in + Obj.repr( +# 1511 "parse.mly" + (let (aq, attrs, x) = (_1, _2, _3) in + ( (Some aq, attrs), x )) +# 9125 "parse.ml" + : 'aqualifiedWithAttrs_lident_)) +; (fun __caml_parser_env -> + let _1 = (Parsing.peek_val __caml_parser_env 1 : 'aqual) in + let _2 = (Parsing.peek_val __caml_parser_env 0 : FStar_Ident.ident) in + Obj.repr( +# 1514 "parse.mly" + (let (aq, x) = (_1, _2) in + ( (Some aq, []), x )) +# 9134 "parse.ml" + : 'aqualifiedWithAttrs_lident_)) +; (fun __caml_parser_env -> + let _1 = (Parsing.peek_val __caml_parser_env 1 : 'binderAttributes) in + let _2 = (Parsing.peek_val __caml_parser_env 0 : FStar_Ident.ident) in + Obj.repr( +# 1517 "parse.mly" + (let (attrs, x) = (_1, _2) in + ( (None, attrs), x )) +# 9143 "parse.ml" + : 'aqualifiedWithAttrs_lident_)) +; (fun __caml_parser_env -> + let _1 = (Parsing.peek_val __caml_parser_env 0 : FStar_Ident.ident) in + Obj.repr( +# 1520 "parse.mly" + (let x = _1 in + ( (None, []), x )) +# 9151 "parse.ml" + : 'aqualifiedWithAttrs_lident_)) +; (fun __caml_parser_env -> + let _1 = (Parsing.peek_val __caml_parser_env 2 : 'aqual) in + let _2 = (Parsing.peek_val __caml_parser_env 1 : 'binderAttributes) in + let _3 = (Parsing.peek_val __caml_parser_env 0 : FStar_Ident.ident) in + Obj.repr( +# 1525 "parse.mly" + (let (aq, attrs, id) = (_1, _2, _3) in +let x = ( id ) in + ( (Some aq, attrs), x )) +# 9162 "parse.ml" + : 'aqualifiedWithAttrs_lidentOrOperator_)) +; (fun __caml_parser_env -> + let _1 = (Parsing.peek_val __caml_parser_env 4 : 'aqual) in + let _2 = (Parsing.peek_val __caml_parser_env 3 : 'binderAttributes) in + let _4 = (Parsing.peek_val __caml_parser_env 1 : string) in + Obj.repr( +# 1529 "parse.mly" + (let (aq, attrs, _1, op, _3) = (_1, _2, (), _4, ()) in +let x = + let id = ( mk_ident (op, rhs parseState 1) ) in + ( mk_ident (compile_op' (string_of_id id) (range_of_id id), range_of_id id) ) +in + ( (Some aq, attrs), x )) +# 9176 "parse.ml" + : 'aqualifiedWithAttrs_lidentOrOperator_)) +; (fun __caml_parser_env -> + let _1 = (Parsing.peek_val __caml_parser_env 4 : 'aqual) in + let _2 = (Parsing.peek_val __caml_parser_env 3 : 'binderAttributes) in + let _4 = (Parsing.peek_val __caml_parser_env 1 : 'binop_name) in + Obj.repr( +# 1536 "parse.mly" + (let (aq, attrs, _1, op, _3) = (_1, _2, (), _4, ()) in +let x = + let id = ( op ) in + ( mk_ident (compile_op' (string_of_id id) (range_of_id id), range_of_id id) ) +in + ( (Some aq, attrs), x )) +# 9190 "parse.ml" + : 'aqualifiedWithAttrs_lidentOrOperator_)) +; (fun __caml_parser_env -> + let _1 = (Parsing.peek_val __caml_parser_env 4 : 'aqual) in + let _2 = (Parsing.peek_val __caml_parser_env 3 : 'binderAttributes) in + let _4 = (Parsing.peek_val __caml_parser_env 1 : string) in + Obj.repr( +# 1543 "parse.mly" + (let (aq, attrs, _1, op, _3) = (_1, _2, (), _4, ()) in +let x = + let id = ( mk_ident (op, rhs parseState 1) ) in + ( mk_ident (compile_op' (string_of_id id) (range_of_id id), range_of_id id) ) +in + ( (Some aq, attrs), x )) +# 9204 "parse.ml" + : 'aqualifiedWithAttrs_lidentOrOperator_)) +; (fun __caml_parser_env -> + let _1 = (Parsing.peek_val __caml_parser_env 4 : 'aqual) in + let _2 = (Parsing.peek_val __caml_parser_env 3 : 'binderAttributes) in + let _4 = (Parsing.peek_val __caml_parser_env 1 : string) in + Obj.repr( +# 1550 "parse.mly" + (let (aq, attrs, _1, op, _3) = (_1, _2, (), _4, ()) in +let x = + let id = + let op = ( mk_ident ("and" ^ op, rhs parseState 1) ) in + (op) + in + ( mk_ident (compile_op' (string_of_id id) (range_of_id id), range_of_id id) ) +in + ( (Some aq, attrs), x )) +# 9221 "parse.ml" + : 'aqualifiedWithAttrs_lidentOrOperator_)) +; (fun __caml_parser_env -> + let _1 = (Parsing.peek_val __caml_parser_env 4 : 'aqual) in + let _2 = (Parsing.peek_val __caml_parser_env 3 : 'binderAttributes) in + let _4 = (Parsing.peek_val __caml_parser_env 1 : string) in + Obj.repr( +# 1560 "parse.mly" + (let (aq, attrs, _1, op, _3) = (_1, _2, (), _4, ()) in +let x = + let id = + let op = ( mk_ident ("let" ^ op, rhs parseState 1) ) in + (op) + in + ( mk_ident (compile_op' (string_of_id id) (range_of_id id), range_of_id id) ) +in + ( (Some aq, attrs), x )) +# 9238 "parse.ml" + : 'aqualifiedWithAttrs_lidentOrOperator_)) +; (fun __caml_parser_env -> + let _1 = (Parsing.peek_val __caml_parser_env 1 : 'aqual) in + let _2 = (Parsing.peek_val __caml_parser_env 0 : FStar_Ident.ident) in + Obj.repr( +# 1570 "parse.mly" + (let (aq, id) = (_1, _2) in +let x = ( id ) in + ( (Some aq, []), x )) +# 9248 "parse.ml" + : 'aqualifiedWithAttrs_lidentOrOperator_)) +; (fun __caml_parser_env -> + let _1 = (Parsing.peek_val __caml_parser_env 3 : 'aqual) in + let _3 = (Parsing.peek_val __caml_parser_env 1 : string) in + Obj.repr( +# 1574 "parse.mly" + (let (aq, _1, op, _3) = (_1, (), _3, ()) in +let x = + let id = ( mk_ident (op, rhs parseState 1) ) in + ( mk_ident (compile_op' (string_of_id id) (range_of_id id), range_of_id id) ) +in + ( (Some aq, []), x )) +# 9261 "parse.ml" + : 'aqualifiedWithAttrs_lidentOrOperator_)) +; (fun __caml_parser_env -> + let _1 = (Parsing.peek_val __caml_parser_env 3 : 'aqual) in + let _3 = (Parsing.peek_val __caml_parser_env 1 : 'binop_name) in + Obj.repr( +# 1581 "parse.mly" + (let (aq, _1, op, _3) = (_1, (), _3, ()) in +let x = + let id = ( op ) in + ( mk_ident (compile_op' (string_of_id id) (range_of_id id), range_of_id id) ) +in + ( (Some aq, []), x )) +# 9274 "parse.ml" + : 'aqualifiedWithAttrs_lidentOrOperator_)) +; (fun __caml_parser_env -> + let _1 = (Parsing.peek_val __caml_parser_env 3 : 'aqual) in + let _3 = (Parsing.peek_val __caml_parser_env 1 : string) in + Obj.repr( +# 1588 "parse.mly" + (let (aq, _1, op, _3) = (_1, (), _3, ()) in +let x = + let id = ( mk_ident (op, rhs parseState 1) ) in + ( mk_ident (compile_op' (string_of_id id) (range_of_id id), range_of_id id) ) +in + ( (Some aq, []), x )) +# 9287 "parse.ml" + : 'aqualifiedWithAttrs_lidentOrOperator_)) +; (fun __caml_parser_env -> + let _1 = (Parsing.peek_val __caml_parser_env 3 : 'aqual) in + let _3 = (Parsing.peek_val __caml_parser_env 1 : string) in + Obj.repr( +# 1595 "parse.mly" + (let (aq, _1, op, _3) = (_1, (), _3, ()) in +let x = + let id = + let op = ( mk_ident ("and" ^ op, rhs parseState 1) ) in + (op) + in + ( mk_ident (compile_op' (string_of_id id) (range_of_id id), range_of_id id) ) +in + ( (Some aq, []), x )) +# 9303 "parse.ml" + : 'aqualifiedWithAttrs_lidentOrOperator_)) +; (fun __caml_parser_env -> + let _1 = (Parsing.peek_val __caml_parser_env 3 : 'aqual) in + let _3 = (Parsing.peek_val __caml_parser_env 1 : string) in + Obj.repr( +# 1605 "parse.mly" + (let (aq, _1, op, _3) = (_1, (), _3, ()) in +let x = + let id = + let op = ( mk_ident ("let" ^ op, rhs parseState 1) ) in + (op) + in + ( mk_ident (compile_op' (string_of_id id) (range_of_id id), range_of_id id) ) +in + ( (Some aq, []), x )) +# 9319 "parse.ml" + : 'aqualifiedWithAttrs_lidentOrOperator_)) +; (fun __caml_parser_env -> + let _1 = (Parsing.peek_val __caml_parser_env 1 : 'binderAttributes) in + let _2 = (Parsing.peek_val __caml_parser_env 0 : FStar_Ident.ident) in + Obj.repr( +# 1615 "parse.mly" + (let (attrs, id) = (_1, _2) in +let x = ( id ) in + ( (None, attrs), x )) +# 9329 "parse.ml" + : 'aqualifiedWithAttrs_lidentOrOperator_)) +; (fun __caml_parser_env -> + let _1 = (Parsing.peek_val __caml_parser_env 3 : 'binderAttributes) in + let _3 = (Parsing.peek_val __caml_parser_env 1 : string) in + Obj.repr( +# 1619 "parse.mly" + (let (attrs, _1, op, _3) = (_1, (), _3, ()) in +let x = + let id = ( mk_ident (op, rhs parseState 1) ) in + ( mk_ident (compile_op' (string_of_id id) (range_of_id id), range_of_id id) ) +in + ( (None, attrs), x )) +# 9342 "parse.ml" + : 'aqualifiedWithAttrs_lidentOrOperator_)) +; (fun __caml_parser_env -> + let _1 = (Parsing.peek_val __caml_parser_env 3 : 'binderAttributes) in + let _3 = (Parsing.peek_val __caml_parser_env 1 : 'binop_name) in + Obj.repr( +# 1626 "parse.mly" + (let (attrs, _1, op, _3) = (_1, (), _3, ()) in +let x = + let id = ( op ) in + ( mk_ident (compile_op' (string_of_id id) (range_of_id id), range_of_id id) ) +in + ( (None, attrs), x )) +# 9355 "parse.ml" + : 'aqualifiedWithAttrs_lidentOrOperator_)) +; (fun __caml_parser_env -> + let _1 = (Parsing.peek_val __caml_parser_env 3 : 'binderAttributes) in + let _3 = (Parsing.peek_val __caml_parser_env 1 : string) in + Obj.repr( +# 1633 "parse.mly" + (let (attrs, _1, op, _3) = (_1, (), _3, ()) in +let x = + let id = ( mk_ident (op, rhs parseState 1) ) in + ( mk_ident (compile_op' (string_of_id id) (range_of_id id), range_of_id id) ) +in + ( (None, attrs), x )) +# 9368 "parse.ml" + : 'aqualifiedWithAttrs_lidentOrOperator_)) +; (fun __caml_parser_env -> + let _1 = (Parsing.peek_val __caml_parser_env 3 : 'binderAttributes) in + let _3 = (Parsing.peek_val __caml_parser_env 1 : string) in + Obj.repr( +# 1640 "parse.mly" + (let (attrs, _1, op, _3) = (_1, (), _3, ()) in +let x = + let id = + let op = ( mk_ident ("and" ^ op, rhs parseState 1) ) in + (op) + in + ( mk_ident (compile_op' (string_of_id id) (range_of_id id), range_of_id id) ) +in + ( (None, attrs), x )) +# 9384 "parse.ml" + : 'aqualifiedWithAttrs_lidentOrOperator_)) +; (fun __caml_parser_env -> + let _1 = (Parsing.peek_val __caml_parser_env 3 : 'binderAttributes) in + let _3 = (Parsing.peek_val __caml_parser_env 1 : string) in + Obj.repr( +# 1650 "parse.mly" + (let (attrs, _1, op, _3) = (_1, (), _3, ()) in +let x = + let id = + let op = ( mk_ident ("let" ^ op, rhs parseState 1) ) in + (op) + in + ( mk_ident (compile_op' (string_of_id id) (range_of_id id), range_of_id id) ) +in + ( (None, attrs), x )) +# 9400 "parse.ml" + : 'aqualifiedWithAttrs_lidentOrOperator_)) +; (fun __caml_parser_env -> + let _1 = (Parsing.peek_val __caml_parser_env 0 : FStar_Ident.ident) in + Obj.repr( +# 1660 "parse.mly" + (let id = _1 in +let x = ( id ) in + ( (None, []), x )) +# 9409 "parse.ml" + : 'aqualifiedWithAttrs_lidentOrOperator_)) +; (fun __caml_parser_env -> + let _2 = (Parsing.peek_val __caml_parser_env 1 : string) in + Obj.repr( +# 1664 "parse.mly" + (let (_1, op, _3) = ((), _2, ()) in +let x = + let id = ( mk_ident (op, rhs parseState 1) ) in + ( mk_ident (compile_op' (string_of_id id) (range_of_id id), range_of_id id) ) +in + ( (None, []), x )) +# 9421 "parse.ml" + : 'aqualifiedWithAttrs_lidentOrOperator_)) +; (fun __caml_parser_env -> + let _2 = (Parsing.peek_val __caml_parser_env 1 : 'binop_name) in + Obj.repr( +# 1671 "parse.mly" + (let (_1, op, _3) = ((), _2, ()) in +let x = + let id = ( op ) in + ( mk_ident (compile_op' (string_of_id id) (range_of_id id), range_of_id id) ) +in + ( (None, []), x )) +# 9433 "parse.ml" + : 'aqualifiedWithAttrs_lidentOrOperator_)) +; (fun __caml_parser_env -> + let _2 = (Parsing.peek_val __caml_parser_env 1 : string) in + Obj.repr( +# 1678 "parse.mly" + (let (_1, op, _3) = ((), _2, ()) in +let x = + let id = ( mk_ident (op, rhs parseState 1) ) in + ( mk_ident (compile_op' (string_of_id id) (range_of_id id), range_of_id id) ) +in + ( (None, []), x )) +# 9445 "parse.ml" + : 'aqualifiedWithAttrs_lidentOrOperator_)) +; (fun __caml_parser_env -> + let _2 = (Parsing.peek_val __caml_parser_env 1 : string) in + Obj.repr( +# 1685 "parse.mly" + (let (_1, op, _3) = ((), _2, ()) in +let x = + let id = + let op = ( mk_ident ("and" ^ op, rhs parseState 1) ) in + (op) + in + ( mk_ident (compile_op' (string_of_id id) (range_of_id id), range_of_id id) ) +in + ( (None, []), x )) +# 9460 "parse.ml" + : 'aqualifiedWithAttrs_lidentOrOperator_)) +; (fun __caml_parser_env -> + let _2 = (Parsing.peek_val __caml_parser_env 1 : string) in + Obj.repr( +# 1695 "parse.mly" + (let (_1, op, _3) = ((), _2, ()) in +let x = + let id = + let op = ( mk_ident ("let" ^ op, rhs parseState 1) ) in + (op) + in + ( mk_ident (compile_op' (string_of_id id) (range_of_id id), range_of_id id) ) +in + ( (None, []), x )) +# 9475 "parse.ml" + : 'aqualifiedWithAttrs_lidentOrOperator_)) +; (fun __caml_parser_env -> + let _1 = (Parsing.peek_val __caml_parser_env 2 : 'aqual) in + let _2 = (Parsing.peek_val __caml_parser_env 1 : 'binderAttributes) in + let _3 = (Parsing.peek_val __caml_parser_env 0 : 'lidentOrUnderscore) in + Obj.repr( +# 1707 "parse.mly" + (let (aq, attrs, x) = (_1, _2, _3) in + ( (Some aq, attrs), x )) +# 9485 "parse.ml" + : 'aqualifiedWithAttrs_lidentOrUnderscore_)) +; (fun __caml_parser_env -> + let _1 = (Parsing.peek_val __caml_parser_env 1 : 'aqual) in + let _2 = (Parsing.peek_val __caml_parser_env 0 : 'lidentOrUnderscore) in + Obj.repr( +# 1710 "parse.mly" + (let (aq, x) = (_1, _2) in + ( (Some aq, []), x )) +# 9494 "parse.ml" + : 'aqualifiedWithAttrs_lidentOrUnderscore_)) +; (fun __caml_parser_env -> + let _1 = (Parsing.peek_val __caml_parser_env 1 : 'binderAttributes) in + let _2 = (Parsing.peek_val __caml_parser_env 0 : 'lidentOrUnderscore) in + Obj.repr( +# 1713 "parse.mly" + (let (attrs, x) = (_1, _2) in + ( (None, attrs), x )) +# 9503 "parse.ml" + : 'aqualifiedWithAttrs_lidentOrUnderscore_)) +; (fun __caml_parser_env -> + let _1 = (Parsing.peek_val __caml_parser_env 0 : 'lidentOrUnderscore) in + Obj.repr( +# 1716 "parse.mly" + (let x = _1 in + ( (None, []), x )) +# 9511 "parse.ml" + : 'aqualifiedWithAttrs_lidentOrUnderscore_)) +; (fun __caml_parser_env -> + let _1 = (Parsing.peek_val __caml_parser_env 0 : 'path_lident_) in + Obj.repr( +# 1721 "parse.mly" + (let ids = _1 in + ( lid_of_ids ids )) +# 9519 "parse.ml" + : 'qlident)) +; (fun __caml_parser_env -> + let _1 = (Parsing.peek_val __caml_parser_env 0 : 'path_uident_) in + Obj.repr( +# 1726 "parse.mly" + (let ids = _1 in + ( lid_of_ids ids )) +# 9527 "parse.ml" + : 'quident)) +; (fun __caml_parser_env -> + let _1 = (Parsing.peek_val __caml_parser_env 0 : FStar_Ident.ident) in + Obj.repr( +# 1731 "parse.mly" + (let id = _1 in + ( [id] )) +# 9535 "parse.ml" + : 'path_lident_)) +; (fun __caml_parser_env -> + let _1 = (Parsing.peek_val __caml_parser_env 2 : 'uident) in + let _3 = (Parsing.peek_val __caml_parser_env 0 : 'path_lident_) in + Obj.repr( +# 1734 "parse.mly" + (let (uid, _2, p) = (_1, (), _3) in + ( uid::p )) +# 9544 "parse.ml" + : 'path_lident_)) +; (fun __caml_parser_env -> + let _1 = (Parsing.peek_val __caml_parser_env 0 : 'uident) in + Obj.repr( +# 1739 "parse.mly" + (let id = _1 in + ( [id] )) +# 9552 "parse.ml" + : 'path_uident_)) +; (fun __caml_parser_env -> + let _1 = (Parsing.peek_val __caml_parser_env 2 : 'uident) in + let _3 = (Parsing.peek_val __caml_parser_env 0 : 'path_uident_) in + Obj.repr( +# 1742 "parse.mly" + (let (uid, _2, p) = (_1, (), _3) in + ( uid::p )) +# 9561 "parse.ml" + : 'path_uident_)) +; (fun __caml_parser_env -> + let _1 = (Parsing.peek_val __caml_parser_env 0 : FStar_Ident.ident) in + Obj.repr( +# 1747 "parse.mly" + (let x = _1 in + ( x )) +# 9569 "parse.ml" + : 'ident)) +; (fun __caml_parser_env -> + let _1 = (Parsing.peek_val __caml_parser_env 0 : 'uident) in + Obj.repr( +# 1750 "parse.mly" + (let x = _1 in + ( x )) +# 9577 "parse.ml" + : 'ident)) +; (fun __caml_parser_env -> + let _1 = (Parsing.peek_val __caml_parser_env 0 : 'qlident) in + Obj.repr( +# 1755 "parse.mly" + (let qid = _1 in + ( qid )) +# 9585 "parse.ml" + : 'qlidentOrOperator)) +; (fun __caml_parser_env -> + let _2 = (Parsing.peek_val __caml_parser_env 1 : string) in + Obj.repr( +# 1758 "parse.mly" + (let (_1, op, _3) = ((), _2, ()) in +let id = ( mk_ident (op, rhs parseState 1) ) in + ( lid_of_ns_and_id [] (id_of_text (compile_op' (string_of_id id) (range_of_id id))) )) +# 9594 "parse.ml" + : 'qlidentOrOperator)) +; (fun __caml_parser_env -> + let _2 = (Parsing.peek_val __caml_parser_env 1 : 'binop_name) in + Obj.repr( +# 1762 "parse.mly" + (let (_1, op, _3) = ((), _2, ()) in +let id = ( op ) in + ( lid_of_ns_and_id [] (id_of_text (compile_op' (string_of_id id) (range_of_id id))) )) +# 9603 "parse.ml" + : 'qlidentOrOperator)) +; (fun __caml_parser_env -> + let _2 = (Parsing.peek_val __caml_parser_env 1 : string) in + Obj.repr( +# 1766 "parse.mly" + (let (_1, op, _3) = ((), _2, ()) in +let id = ( mk_ident (op, rhs parseState 1) ) in + ( lid_of_ns_and_id [] (id_of_text (compile_op' (string_of_id id) (range_of_id id))) )) +# 9612 "parse.ml" + : 'qlidentOrOperator)) +; (fun __caml_parser_env -> + let _2 = (Parsing.peek_val __caml_parser_env 1 : string) in + Obj.repr( +# 1770 "parse.mly" + (let (_1, op, _3) = ((), _2, ()) in +let id = + let op = ( mk_ident ("and" ^ op, rhs parseState 1) ) in + (op) +in + ( lid_of_ns_and_id [] (id_of_text (compile_op' (string_of_id id) (range_of_id id))) )) +# 9624 "parse.ml" + : 'qlidentOrOperator)) +; (fun __caml_parser_env -> + let _2 = (Parsing.peek_val __caml_parser_env 1 : string) in + Obj.repr( +# 1777 "parse.mly" + (let (_1, op, _3) = ((), _2, ()) in +let id = + let op = ( mk_ident ("let" ^ op, rhs parseState 1) ) in + (op) +in + ( lid_of_ns_and_id [] (id_of_text (compile_op' (string_of_id id) (range_of_id id))) )) +# 9636 "parse.ml" + : 'qlidentOrOperator)) +; (fun __caml_parser_env -> + Obj.repr( +# 1786 "parse.mly" + (let _1 = () in + (None)) +# 9643 "parse.ml" + : 'matchMaybeOp)) +; (fun __caml_parser_env -> + let _1 = (Parsing.peek_val __caml_parser_env 0 : string) in + Obj.repr( +# 1789 "parse.mly" + (let op = _1 in + ( Some (mk_ident ("let" ^ op, rhs parseState 1)) )) +# 9651 "parse.ml" + : 'matchMaybeOp)) +; (fun __caml_parser_env -> + Obj.repr( +# 1794 "parse.mly" + (let _1 = () in + (None)) +# 9658 "parse.ml" + : 'ifMaybeOp)) +; (fun __caml_parser_env -> + let _1 = (Parsing.peek_val __caml_parser_env 0 : string) in + Obj.repr( +# 1797 "parse.mly" + (let op = _1 in + ( Some (mk_ident ("let" ^ op, rhs parseState 1)) )) +# 9666 "parse.ml" + : 'ifMaybeOp)) +; (fun __caml_parser_env -> + let _1 = (Parsing.peek_val __caml_parser_env 0 : string) in + Obj.repr( +# 1802 "parse.mly" + (let id = _1 in + ( mk_ident(id, rhs parseState 1))) +# 9674 "parse.ml" + : 'lidentOrUnderscore)) +; (fun __caml_parser_env -> + Obj.repr( +# 1805 "parse.mly" + (let _1 = () in + ( gen (rhs parseState 1) )) +# 9681 "parse.ml" + : 'lidentOrUnderscore)) +; (fun __caml_parser_env -> + let _1 = (Parsing.peek_val __caml_parser_env 0 : string) in + Obj.repr( +# 1810 "parse.mly" + (let id = _1 in + ( mk_ident(id, rhs parseState 1))) +# 9689 "parse.ml" + : FStar_Ident.ident)) +; (fun __caml_parser_env -> + let _1 = (Parsing.peek_val __caml_parser_env 0 : string) in + Obj.repr( +# 1815 "parse.mly" + (let id = _1 in + ( mk_ident(id, rhs parseState 1) )) +# 9697 "parse.ml" + : 'uident)) +; (fun __caml_parser_env -> + let _1 = (Parsing.peek_val __caml_parser_env 0 : string) in + Obj.repr( +# 1820 "parse.mly" + (let tv = _1 in + ( mk_ident(tv, rhs parseState 1) )) +# 9705 "parse.ml" + : 'tvar)) +; (fun __caml_parser_env -> + let _1 = (Parsing.peek_val __caml_parser_env 0 : 'atomicTerm) in + Obj.repr( +# 1825 "parse.mly" + (let t = _1 in + ( mk_term (Abs ([mk_pattern (PatWild (None, [])) (rhs parseState 3)], t)) (rhs parseState 3) Expr )) +# 9713 "parse.ml" + : 'thunk_atomicTerm_)) +; (fun __caml_parser_env -> + let _1 = (Parsing.peek_val __caml_parser_env 0 : 'tmNoEq) in + Obj.repr( +# 1830 "parse.mly" + (let t = _1 in + ( mk_term (Abs ([mk_pattern (PatWild (None, [])) (rhs parseState 3)], t)) (rhs parseState 3) Expr )) +# 9721 "parse.ml" + : 'thunk_tmNoEq_)) +; (fun __caml_parser_env -> + let _1 = (Parsing.peek_val __caml_parser_env 0 : 'typ) in + Obj.repr( +# 1835 "parse.mly" + (let t = _1 in + ( mk_term (Abs ([mk_pattern (PatWild (None, [])) (rhs parseState 3)], t)) (rhs parseState 3) Expr )) +# 9729 "parse.ml" + : 'thunk_typ_)) +; (fun __caml_parser_env -> + let _1 = (Parsing.peek_val __caml_parser_env 0 : 'typ) in + Obj.repr( +# 1840 "parse.mly" + (let t = _1 in + ( let u = mk_term (Const Const_unit) (rhs parseState 3) Expr in + let t = mk_term (Seq (u, t)) (rhs parseState 3) Expr in + mk_term (Abs ([mk_pattern (PatWild (None, [])) (rhs parseState 3)], t)) (rhs parseState 3) Expr )) +# 9739 "parse.ml" + : 'thunk2_typ_)) +; (fun __caml_parser_env -> + let _2 = (Parsing.peek_val __caml_parser_env 1 : 'tmArrow_tmNoEq_) in + let _3 = (Parsing.peek_val __caml_parser_env 0 : 'option___anonymous_5_) in + Obj.repr( +# 1847 "parse.mly" + (let (_1, t, tacopt) = ((), _2, _3) in + ( t, tacopt )) +# 9748 "parse.ml" + : 'ascribeTyp)) +; (fun __caml_parser_env -> + let _2 = (Parsing.peek_val __caml_parser_env 0 : 'kind) in + Obj.repr( +# 1852 "parse.mly" + (let (_1, k) = ((), _2) in + ( k )) +# 9756 "parse.ml" + : 'ascribeKind)) +; (fun __caml_parser_env -> + let _1 = (Parsing.peek_val __caml_parser_env 0 : 'tmArrow_tmNoEq_) in + Obj.repr( +# 1857 "parse.mly" + (let t = _1 in + ( {t with level=Kind} )) +# 9764 "parse.ml" + : 'kind)) +; (fun __caml_parser_env -> + let _1 = (Parsing.peek_val __caml_parser_env 0 : 'noSeqTerm) in + Obj.repr( +# 1862 "parse.mly" + (let e = _1 in + ( e )) +# 9772 "parse.ml" + : FStar_Parser_AST.term)) +; (fun __caml_parser_env -> + let _1 = (Parsing.peek_val __caml_parser_env 2 : 'noSeqTerm) in + let _3 = (Parsing.peek_val __caml_parser_env 0 : FStar_Parser_AST.term) in + Obj.repr( +# 1865 "parse.mly" + (let (e1, _2, e2) = (_1, (), _3) in + ( mk_term (Seq(e1, e2)) (rhs2 parseState 1 3) Expr )) +# 9781 "parse.ml" + : FStar_Parser_AST.term)) +; (fun __caml_parser_env -> + let _1 = (Parsing.peek_val __caml_parser_env 2 : 'noSeqTerm) in + let _2 = (Parsing.peek_val __caml_parser_env 1 : string option) in + let _3 = (Parsing.peek_val __caml_parser_env 0 : FStar_Parser_AST.term) in + Obj.repr( +# 1868 "parse.mly" + (let (e1, op, e2) = (_1, _2, _3) in + ( let t = match op with + | Some op -> + let op = mk_ident ("let" ^ op, rhs parseState 2) in + let pat = mk_pattern (PatWild(None, [])) (rhs parseState 2) in + LetOperator ([(op, pat, e1)], e2) + | None -> + log_issue (lhs parseState) (Warning_DeprecatedLightDoNotation, do_notation_deprecation_warning); + Bind(gen (rhs parseState 2), e1, e2) + in mk_term t (rhs2 parseState 1 3) Expr + )) +# 9800 "parse.ml" + : FStar_Parser_AST.term)) +; (fun __caml_parser_env -> + let _1 = (Parsing.peek_val __caml_parser_env 4 : 'lidentOrUnderscore) in + let _3 = (Parsing.peek_val __caml_parser_env 2 : 'noSeqTerm) in + let _5 = (Parsing.peek_val __caml_parser_env 0 : FStar_Parser_AST.term) in + Obj.repr( +# 1880 "parse.mly" + (let (x, _2, e1, _4, e2) = (_1, (), _3, (), _5) in + ( log_issue (lhs parseState) (Warning_DeprecatedLightDoNotation, do_notation_deprecation_warning); + mk_term (Bind(x, e1, e2)) (rhs2 parseState 1 5) Expr )) +# 9811 "parse.ml" + : FStar_Parser_AST.term)) +; (fun __caml_parser_env -> + let _1 = (Parsing.peek_val __caml_parser_env 2 : 'option___anonymous_6_) in + let _3 = (Parsing.peek_val __caml_parser_env 0 : 'tmIff) in + Obj.repr( +# 1886 "parse.mly" + (let (as_opt, _2, t) = (_1, (), _3) in + (as_opt,t,false)) +# 9820 "parse.ml" + : 'match_returning)) +; (fun __caml_parser_env -> + let _1 = (Parsing.peek_val __caml_parser_env 2 : 'option___anonymous_7_) in + let _3 = (Parsing.peek_val __caml_parser_env 0 : 'tmIff) in + Obj.repr( +# 1889 "parse.mly" + (let (as_opt, _2, t) = (_1, (), _3) in + (as_opt,t,true)) +# 9829 "parse.ml" + : 'match_returning)) +; (fun __caml_parser_env -> + let _1 = (Parsing.peek_val __caml_parser_env 0 : 'typ) in + Obj.repr( +# 1894 "parse.mly" + (let t = _1 in + ( t )) +# 9837 "parse.ml" + : 'noSeqTerm)) +; (fun __caml_parser_env -> + let _1 = (Parsing.peek_val __caml_parser_env 3 : 'tmIff) in + let _3 = (Parsing.peek_val __caml_parser_env 1 : 'tmIff) in + let _4 = (Parsing.peek_val __caml_parser_env 0 : 'option___anonymous_8_) in + Obj.repr( +# 1897 "parse.mly" + (let (e, _2, t, tactic_opt) = (_1, (), _3, _4) in + ( mk_term (Ascribed(e,{t with level=Expr},tactic_opt,false)) (rhs2 parseState 1 4) Expr )) +# 9847 "parse.ml" + : 'noSeqTerm)) +; (fun __caml_parser_env -> + let _1 = (Parsing.peek_val __caml_parser_env 3 : 'tmIff) in + let _3 = (Parsing.peek_val __caml_parser_env 1 : 'tmIff) in + let _4 = (Parsing.peek_val __caml_parser_env 0 : 'option___anonymous_9_) in + Obj.repr( +# 1900 "parse.mly" + (let (e, _2, t, tactic_opt) = (_1, (), _3, _4) in + ( + log_issue (lhs parseState) + (Warning_BleedingEdge_Feature, + "Equality type ascriptions is an experimental feature subject to redesign in the future"); + mk_term (Ascribed(e,{t with level=Expr},tactic_opt,true)) (rhs2 parseState 1 4) Expr + )) +# 9862 "parse.ml" + : 'noSeqTerm)) +; (fun __caml_parser_env -> + let _1 = (Parsing.peek_val __caml_parser_env 5 : 'atomicTermNotQUident) in + let _3 = (Parsing.peek_val __caml_parser_env 3 : FStar_Parser_AST.term) in + let _6 = (Parsing.peek_val __caml_parser_env 0 : 'noSeqTerm) in + Obj.repr( +# 1908 "parse.mly" + (let (e1, _1, e, _3_inlined1, _3, e3) = (_1, (), _3, (), (), _6) in +let op_expr = ( mk_ident (".()", rhs parseState 1), e, rhs2 parseState 1 3 ) in + ( + let (op, e2, _) = op_expr in + let opid = mk_ident (string_of_id op ^ "<-", range_of_id op) in + mk_term (Op(opid, [ e1; e2; e3 ])) (rhs2 parseState 1 4) Expr + )) +# 9877 "parse.ml" + : 'noSeqTerm)) +; (fun __caml_parser_env -> + let _1 = (Parsing.peek_val __caml_parser_env 5 : 'atomicTermNotQUident) in + let _3 = (Parsing.peek_val __caml_parser_env 3 : FStar_Parser_AST.term) in + let _6 = (Parsing.peek_val __caml_parser_env 0 : 'noSeqTerm) in + Obj.repr( +# 1916 "parse.mly" + (let (e1, _1, e, _3_inlined1, _3, e3) = (_1, (), _3, (), (), _6) in +let op_expr = ( mk_ident (".[]", rhs parseState 1), e, rhs2 parseState 1 3 ) in + ( + let (op, e2, _) = op_expr in + let opid = mk_ident (string_of_id op ^ "<-", range_of_id op) in + mk_term (Op(opid, [ e1; e2; e3 ])) (rhs2 parseState 1 4) Expr + )) +# 9892 "parse.ml" + : 'noSeqTerm)) +; (fun __caml_parser_env -> + let _1 = (Parsing.peek_val __caml_parser_env 5 : 'atomicTermNotQUident) in + let _3 = (Parsing.peek_val __caml_parser_env 3 : FStar_Parser_AST.term) in + let _6 = (Parsing.peek_val __caml_parser_env 0 : 'noSeqTerm) in + Obj.repr( +# 1924 "parse.mly" + (let (e1, _1, e, _3_inlined1, _3, e3) = (_1, (), _3, (), (), _6) in +let op_expr = ( mk_ident (".[||]", rhs parseState 1), e, rhs2 parseState 1 3 ) in + ( + let (op, e2, _) = op_expr in + let opid = mk_ident (string_of_id op ^ "<-", range_of_id op) in + mk_term (Op(opid, [ e1; e2; e3 ])) (rhs2 parseState 1 4) Expr + )) +# 9907 "parse.ml" + : 'noSeqTerm)) +; (fun __caml_parser_env -> + let _1 = (Parsing.peek_val __caml_parser_env 5 : 'atomicTermNotQUident) in + let _3 = (Parsing.peek_val __caml_parser_env 3 : FStar_Parser_AST.term) in + let _6 = (Parsing.peek_val __caml_parser_env 0 : 'noSeqTerm) in + Obj.repr( +# 1932 "parse.mly" + (let (e1, _1, e, _3_inlined1, _3, e3) = (_1, (), _3, (), (), _6) in +let op_expr = ( mk_ident (".(||)", rhs parseState 1), e, rhs2 parseState 1 3 ) in + ( + let (op, e2, _) = op_expr in + let opid = mk_ident (string_of_id op ^ "<-", range_of_id op) in + mk_term (Op(opid, [ e1; e2; e3 ])) (rhs2 parseState 1 4) Expr + )) +# 9922 "parse.ml" + : 'noSeqTerm)) +; (fun __caml_parser_env -> + let _2 = (Parsing.peek_val __caml_parser_env 0 : 'typ) in + Obj.repr( +# 1940 "parse.mly" + (let (_1, t) = ((), _2) in + ( mk_term (Requires(t, None)) (rhs2 parseState 1 2) Type_level )) +# 9930 "parse.ml" + : 'noSeqTerm)) +; (fun __caml_parser_env -> + let _2 = (Parsing.peek_val __caml_parser_env 0 : 'typ) in + Obj.repr( +# 1943 "parse.mly" + (let (_1, t) = ((), _2) in + ( mk_term (Ensures(t, None)) (rhs2 parseState 1 2) Type_level )) +# 9938 "parse.ml" + : 'noSeqTerm)) +; (fun __caml_parser_env -> + let _2 = (Parsing.peek_val __caml_parser_env 0 : 'typ) in + Obj.repr( +# 1946 "parse.mly" + (let (_1, t) = ((), _2) in + ( mk_term (Decreases (t, None)) (rhs2 parseState 1 2) Type_level )) +# 9946 "parse.ml" + : 'noSeqTerm)) +; (fun __caml_parser_env -> + let _3 = (Parsing.peek_val __caml_parser_env 1 : 'noSeqTerm) in + Obj.repr( +# 1949 "parse.mly" + (let (_1, _2, t, _4) = ((), (), _3, ()) in + ( match t.tm with + | App (t1, t2, _) -> + let ot = mk_term (WFOrder (t1, t2)) (rhs2 parseState 3 3) Type_level in + mk_term (Decreases (ot, None)) (rhs2 parseState 1 4) Type_level + | _ -> + raise_error (Fatal_SyntaxError, + "Syntax error: To use well-founded relations, write e1 e2") (rhs parseState 3) )) +# 9960 "parse.ml" + : 'noSeqTerm)) +; (fun __caml_parser_env -> + let _2 = (Parsing.peek_val __caml_parser_env 0 : 'nonempty_list_atomicTerm_) in + Obj.repr( +# 1958 "parse.mly" + (let (_1, es) = ((), _2) in + ( mk_term (Attributes es) (rhs2 parseState 1 2) Type_level )) +# 9968 "parse.ml" + : 'noSeqTerm)) +; (fun __caml_parser_env -> + let _1 = (Parsing.peek_val __caml_parser_env 6 : 'ifMaybeOp) in + let _2 = (Parsing.peek_val __caml_parser_env 5 : 'noSeqTerm) in + let _3 = (Parsing.peek_val __caml_parser_env 4 : 'option_match_returning_) in + let _5 = (Parsing.peek_val __caml_parser_env 2 : 'noSeqTerm) in + let _7 = (Parsing.peek_val __caml_parser_env 0 : 'noSeqTerm) in + Obj.repr( +# 1961 "parse.mly" + (let (op, e1, ret_opt, _4, e2, _6, e3) = (_1, _2, _3, (), _5, (), _7) in + ( mk_term (If(e1, op, ret_opt, e2, e3)) (rhs2 parseState 1 7) Expr )) +# 9980 "parse.ml" + : 'noSeqTerm)) +; (fun __caml_parser_env -> + let _1 = (Parsing.peek_val __caml_parser_env 4 : 'ifMaybeOp) in + let _2 = (Parsing.peek_val __caml_parser_env 3 : 'noSeqTerm) in + let _3 = (Parsing.peek_val __caml_parser_env 2 : 'option_match_returning_) in + let _5 = (Parsing.peek_val __caml_parser_env 0 : 'noSeqTerm) in + Obj.repr( +# 1964 "parse.mly" + (let (op, e1, ret_opt, _4, e2) = (_1, _2, _3, (), _5) in + ( + let e3 = mk_term (Const Const_unit) (rhs2 parseState 1 5) Expr in + mk_term (If(e1, op, ret_opt, e2, e3)) (rhs2 parseState 1 5) Expr + )) +# 9994 "parse.ml" + : 'noSeqTerm)) +; (fun __caml_parser_env -> + let _2 = (Parsing.peek_val __caml_parser_env 2 : FStar_Parser_AST.term) in + let _4 = (Parsing.peek_val __caml_parser_env 0 : 'reverse_left_flexible_nonempty_list_BAR_patternBranch_) in + Obj.repr( +# 1970 "parse.mly" + (let (_1, e1, _3, xs) = ((), _2, (), _4) in +let pbs = ( List.rev xs ) in + ( + let branches = focusBranches (pbs) (rhs2 parseState 1 4) in + mk_term (TryWith(e1, branches)) (rhs2 parseState 1 4) Expr + )) +# 10007 "parse.ml" + : 'noSeqTerm)) +; (fun __caml_parser_env -> + let _1 = (Parsing.peek_val __caml_parser_env 4 : 'matchMaybeOp) in + let _2 = (Parsing.peek_val __caml_parser_env 3 : FStar_Parser_AST.term) in + let _3 = (Parsing.peek_val __caml_parser_env 2 : 'option_match_returning_) in + let _5 = (Parsing.peek_val __caml_parser_env 0 : 'reverse_left_flexible_list_BAR___anonymous_10_) in + Obj.repr( +# 1977 "parse.mly" + (let (op, e, ret_opt, _4, xs) = (_1, _2, _3, (), _5) in +let pbs = ( List.rev xs ) in + ( + let branches = focusBranches pbs (rhs2 parseState 1 5) in + mk_term (Match(e, op, ret_opt, branches)) (rhs2 parseState 1 5) Expr + )) +# 10022 "parse.ml" + : 'noSeqTerm)) +; (fun __caml_parser_env -> + let _1 = (Parsing.peek_val __caml_parser_env 4 : bool) in + let _3 = (Parsing.peek_val __caml_parser_env 2 : FStar_Parser_AST.term) in + let _5 = (Parsing.peek_val __caml_parser_env 0 : FStar_Parser_AST.term) in + Obj.repr( +# 1984 "parse.mly" + (let (_1, _2, t, _4, e) = (_1, (), _3, (), _5) in + ( + match t.tm with + | Ascribed(r, rty, None, _) -> + mk_term (LetOpenRecord(r, rty, e)) (rhs2 parseState 1 5) Expr + + | Name uid -> + mk_term (LetOpen(uid, e)) (rhs2 parseState 1 5) Expr + + | _ -> + raise_error (Fatal_SyntaxError, "Syntax error: local opens expects either opening\n\ + a module or namespace using `let open T in e`\n\ + or, a record type with `let open e <: t in e'`") + (rhs parseState 3) + )) +# 10045 "parse.ml" + : 'noSeqTerm)) +; (fun __caml_parser_env -> + let _1 = (Parsing.peek_val __caml_parser_env 5 : bool) in + let _2 = (Parsing.peek_val __caml_parser_env 4 : 'letqualifier) in + let _3 = (Parsing.peek_val __caml_parser_env 3 : 'letbinding) in + let _4 = (Parsing.peek_val __caml_parser_env 2 : 'list_attr_letbinding_) in + let _6 = (Parsing.peek_val __caml_parser_env 0 : FStar_Parser_AST.term) in + Obj.repr( +# 2000 "parse.mly" + (let (_2, q, lb, lbs, _6, e) = (_1, _2, _3, _4, (), _6) in +let attrs = ( None ) in + ( + let lbs = (attrs, lb)::lbs in + let lbs = focusAttrLetBindings lbs (rhs2 parseState 2 3) in + mk_term (Let(q, lbs, e)) (rhs2 parseState 1 6) Expr + )) +# 10062 "parse.ml" + : 'noSeqTerm)) +; (fun __caml_parser_env -> + let _1 = (Parsing.peek_val __caml_parser_env 6 : 'attribute) in + let _2 = (Parsing.peek_val __caml_parser_env 5 : bool) in + let _3 = (Parsing.peek_val __caml_parser_env 4 : 'letqualifier) in + let _4 = (Parsing.peek_val __caml_parser_env 3 : 'letbinding) in + let _5 = (Parsing.peek_val __caml_parser_env 2 : 'list_attr_letbinding_) in + let _7 = (Parsing.peek_val __caml_parser_env 0 : FStar_Parser_AST.term) in + Obj.repr( +# 2008 "parse.mly" + (let (x, _2, q, lb, lbs, _6, e) = (_1, _2, _3, _4, _5, (), _7) in +let attrs = ( Some x ) in + ( + let lbs = (attrs, lb)::lbs in + let lbs = focusAttrLetBindings lbs (rhs2 parseState 2 3) in + mk_term (Let(q, lbs, e)) (rhs2 parseState 1 6) Expr + )) +# 10080 "parse.ml" + : 'noSeqTerm)) +; (fun __caml_parser_env -> + let _1 = (Parsing.peek_val __caml_parser_env 4 : string) in + let _2 = (Parsing.peek_val __caml_parser_env 3 : 'letoperatorbinding) in + let _3 = (Parsing.peek_val __caml_parser_env 2 : 'list___anonymous_11_) in + let _5 = (Parsing.peek_val __caml_parser_env 0 : FStar_Parser_AST.term) in + Obj.repr( +# 2016 "parse.mly" + (let (op, b, lbs, _4, e) = (_1, _2, _3, (), _5) in +let op = ( mk_ident ("let" ^ op, rhs parseState 1) ) in + ( let lbs = (op, b)::lbs in + mk_term (LetOperator ( List.map (fun (op, (pat, tm)) -> (op, pat, tm)) lbs + , e)) (rhs2 parseState 1 4) Expr + )) +# 10095 "parse.ml" + : 'noSeqTerm)) +; (fun __caml_parser_env -> + let _2 = (Parsing.peek_val __caml_parser_env 0 : 'reverse_left_flexible_nonempty_list_BAR_patternBranch_) in + Obj.repr( +# 2023 "parse.mly" + (let (_1, xs) = ((), _2) in +let pbs = ( List.rev xs ) in + ( + let branches = focusBranches pbs (rhs2 parseState 1 2) in + mk_function branches (lhs parseState) (rhs2 parseState 1 2) + )) +# 10107 "parse.ml" + : 'noSeqTerm)) +; (fun __caml_parser_env -> + let _2 = (Parsing.peek_val __caml_parser_env 0 : 'atomicTerm) in + Obj.repr( +# 2030 "parse.mly" + (let (_1, e) = ((), _2) in + ( let a = set_lid_range assume_lid (rhs parseState 1) in + mkExplicitApp (mk_term (Var a) (rhs parseState 1) Expr) [e] (rhs2 parseState 1 2) + )) +# 10117 "parse.ml" + : 'noSeqTerm)) +; (fun __caml_parser_env -> + let _2 = (Parsing.peek_val __caml_parser_env 1 : 'atomicTerm) in + let _3 = (Parsing.peek_val __caml_parser_env 0 : 'option___anonymous_12_) in + Obj.repr( +# 2035 "parse.mly" + (let (_1, e, tactic_opt) = ((), _2, _3) in + ( + match tactic_opt with + | None -> + let a = set_lid_range assert_lid (rhs parseState 1) in + mkExplicitApp (mk_term (Var a) (rhs parseState 1) Expr) [e] (rhs2 parseState 1 2) + | Some tac -> + let a = set_lid_range assert_by_tactic_lid (rhs parseState 1) in + mkExplicitApp (mk_term (Var a) (rhs parseState 1) Expr) [e; tac] (rhs2 parseState 1 4) + )) +# 10134 "parse.ml" + : 'noSeqTerm)) +; (fun __caml_parser_env -> + let _3 = (Parsing.peek_val __caml_parser_env 0 : 'thunk_atomicTerm_) in + Obj.repr( +# 2046 "parse.mly" + (let (_1, _2, tactic) = ((), (), _3) in + ( + let a = set_lid_range synth_lid (rhs parseState 1) in + mkExplicitApp (mk_term (Var a) (rhs parseState 1) Expr) [tactic] (rhs2 parseState 1 2) + )) +# 10145 "parse.ml" + : 'noSeqTerm)) +; (fun __caml_parser_env -> + let _2 = (Parsing.peek_val __caml_parser_env 0 : 'atomicTerm) in + Obj.repr( +# 2052 "parse.mly" + (let (_1, tactic) = ((), _2) in + ( + let a = set_lid_range synth_lid (rhs parseState 1) in + mkExplicitApp (mk_term (Var a) (rhs parseState 1) Expr) [tactic] (rhs2 parseState 1 2) + )) +# 10156 "parse.ml" + : 'noSeqTerm)) +; (fun __caml_parser_env -> + let _2 = (Parsing.peek_val __caml_parser_env 5 : 'atomicTerm) in + let _4 = (Parsing.peek_val __caml_parser_env 3 : 'noSeqTerm) in + let _6 = (Parsing.peek_val __caml_parser_env 1 : 'list_calcStep_) in + Obj.repr( +# 2058 "parse.mly" + (let (_1, rel, _3, init, _5, steps, _7) = ((), _2, (), _4, (), _6, ()) in + ( + mk_term (CalcProof (rel, init, steps)) (rhs2 parseState 1 7) Expr + )) +# 10168 "parse.ml" + : 'noSeqTerm)) +; (fun __caml_parser_env -> + let _3 = (Parsing.peek_val __caml_parser_env 4 : 'binders) in + let _5 = (Parsing.peek_val __caml_parser_env 2 : 'noSeqTerm) in + let _7 = (Parsing.peek_val __caml_parser_env 0 : 'noSeqTerm) in + Obj.repr( +# 2063 "parse.mly" + (let (_1, _2, bs, _4, p, _6, e) = ((), (), _3, (), _5, (), _7) in + ( + mk_term (IntroForall(bs, p, e)) (rhs2 parseState 1 7) Expr + )) +# 10180 "parse.ml" + : 'noSeqTerm)) +; (fun __caml_parser_env -> + let _3 = (Parsing.peek_val __caml_parser_env 6 : 'binders) in + let _5 = (Parsing.peek_val __caml_parser_env 4 : 'noSeqTerm) in + let _7 = (Parsing.peek_val __caml_parser_env 2 : 'list_atomicTerm_) in + let _9 = (Parsing.peek_val __caml_parser_env 0 : 'noSeqTerm) in + Obj.repr( +# 2068 "parse.mly" + (let (_1, _2, bs, _4, p, _6, vs, _8, e) = ((), (), _3, (), _5, (), _7, (), _9) in + ( + if List.length bs <> List.length vs + then raise_error (Fatal_SyntaxError, "Syntax error: expected instantiations for all binders") (rhs parseState 7) + else mk_term (IntroExists(bs, p, vs, e)) (rhs2 parseState 1 9) Expr + )) +# 10195 "parse.ml" + : 'noSeqTerm)) +; (fun __caml_parser_env -> + let _2 = (Parsing.peek_val __caml_parser_env 6 : 'tmFormula) in + let _4 = (Parsing.peek_val __caml_parser_env 4 : 'tmFormula) in + let _6 = (Parsing.peek_val __caml_parser_env 2 : 'singleBinder) in + let _8 = (Parsing.peek_val __caml_parser_env 0 : 'noSeqTerm) in + Obj.repr( +# 2075 "parse.mly" + (let (_1, p, _3, q, _5, y, _7, e) = ((), _2, (), _4, (), _6, (), _8) in + ( + mk_term (IntroImplies(p, q, y, e)) (rhs2 parseState 1 8) Expr + )) +# 10208 "parse.ml" + : 'noSeqTerm)) +; (fun __caml_parser_env -> + let _2 = (Parsing.peek_val __caml_parser_env 5 : 'tmFormula) in + let _4 = (Parsing.peek_val __caml_parser_env 3 : 'tmConjunction) in + let _6 = (Parsing.peek_val __caml_parser_env 1 : string) in + let _7 = (Parsing.peek_val __caml_parser_env 0 : 'noSeqTerm) in + Obj.repr( +# 2080 "parse.mly" + (let (_1, p, _3, q, _5, lr, e) = ((), _2, (), _4, (), _6, _7) in + ( + let b = + if lr = "Left" then true + else if lr = "Right" then false + else raise_error (Fatal_SyntaxError, "Syntax error: _intro_ \\/ expects either 'Left' or 'Right'") (rhs parseState 6) + in + mk_term (IntroOr(b, p, q, e)) (rhs2 parseState 1 7) Expr + )) +# 10226 "parse.ml" + : 'noSeqTerm)) +; (fun __caml_parser_env -> + let _2 = (Parsing.peek_val __caml_parser_env 6 : 'tmConjunction) in + let _4 = (Parsing.peek_val __caml_parser_env 4 : 'tmTuple) in + let _6 = (Parsing.peek_val __caml_parser_env 2 : 'noSeqTerm) in + let _8 = (Parsing.peek_val __caml_parser_env 0 : 'noSeqTerm) in + Obj.repr( +# 2090 "parse.mly" + (let (_1, p, _3, q, _5, e1, _7, e2) = ((), _2, (), _4, (), _6, (), _8) in + ( + mk_term (IntroAnd(p, q, e1, e2)) (rhs2 parseState 1 8) Expr + )) +# 10239 "parse.ml" + : 'noSeqTerm)) +; (fun __caml_parser_env -> + let _3 = (Parsing.peek_val __caml_parser_env 4 : 'binders) in + let _5 = (Parsing.peek_val __caml_parser_env 2 : 'noSeqTerm) in + let _7 = (Parsing.peek_val __caml_parser_env 0 : 'list_atomicTerm_) in + Obj.repr( +# 2095 "parse.mly" + (let (_1, _2, xs, _4, p, _6, vs) = ((), (), _3, (), _5, (), _7) in + ( + mk_term (ElimForall(xs, p, vs)) (rhs2 parseState 1 7) Expr + )) +# 10251 "parse.ml" + : 'noSeqTerm)) +; (fun __caml_parser_env -> + let _3 = (Parsing.peek_val __caml_parser_env 8 : 'binders) in + let _5 = (Parsing.peek_val __caml_parser_env 6 : 'noSeqTerm) in + let _7 = (Parsing.peek_val __caml_parser_env 4 : 'noSeqTerm) in + let _9 = (Parsing.peek_val __caml_parser_env 2 : 'singleBinder) in + let _11 = (Parsing.peek_val __caml_parser_env 0 : 'noSeqTerm) in + Obj.repr( +# 2100 "parse.mly" + (let (_1, _2, bs, _4, p, _6, q, _8, y, _10, e) = ((), (), _3, (), _5, (), _7, (), _9, (), _11) in + ( + mk_term (ElimExists(bs, p, q, y, e)) (rhs2 parseState 1 11) Expr + )) +# 10265 "parse.ml" + : 'noSeqTerm)) +; (fun __caml_parser_env -> + let _2 = (Parsing.peek_val __caml_parser_env 4 : 'tmFormula) in + let _4 = (Parsing.peek_val __caml_parser_env 2 : 'tmFormula) in + let _6 = (Parsing.peek_val __caml_parser_env 0 : 'noSeqTerm) in + Obj.repr( +# 2105 "parse.mly" + (let (_1, p, _3, q, _5, e) = ((), _2, (), _4, (), _6) in + ( + mk_term (ElimImplies(p, q, e)) (rhs2 parseState 1 6) Expr + )) +# 10277 "parse.ml" + : 'noSeqTerm)) +; (fun __caml_parser_env -> + let _2 = (Parsing.peek_val __caml_parser_env 12 : 'tmFormula) in + let _4 = (Parsing.peek_val __caml_parser_env 10 : 'tmConjunction) in + let _6 = (Parsing.peek_val __caml_parser_env 8 : 'noSeqTerm) in + let _8 = (Parsing.peek_val __caml_parser_env 6 : 'singleBinder) in + let _10 = (Parsing.peek_val __caml_parser_env 4 : 'noSeqTerm) in + let _12 = (Parsing.peek_val __caml_parser_env 2 : 'singleBinder) in + let _14 = (Parsing.peek_val __caml_parser_env 0 : 'noSeqTerm) in + Obj.repr( +# 2110 "parse.mly" + (let (_1, p, _3, q, _5, r, _7, x, _9, e1, _11, y, _13, e2) = ((), _2, (), _4, (), _6, (), _8, (), _10, (), _12, (), _14) in + ( + mk_term (ElimOr(p, q, r, x, e1, y, e2)) (rhs2 parseState 1 14) Expr + )) +# 10293 "parse.ml" + : 'noSeqTerm)) +; (fun __caml_parser_env -> + let _2 = (Parsing.peek_val __caml_parser_env 8 : 'tmConjunction) in + let _4 = (Parsing.peek_val __caml_parser_env 6 : 'tmTuple) in + let _6 = (Parsing.peek_val __caml_parser_env 4 : 'noSeqTerm) in + let _8 = (Parsing.peek_val __caml_parser_env 2 : 'binders) in + let _10 = (Parsing.peek_val __caml_parser_env 0 : 'noSeqTerm) in + Obj.repr( +# 2115 "parse.mly" + (let (_1, p, _3, q, _5, r, _7, xs, _9, e) = ((), _2, (), _4, (), _6, (), _8, (), _10) in + ( + match xs with + | [x;y] -> mk_term (ElimAnd(p, q, r, x, y, e)) (rhs2 parseState 1 10) Expr + )) +# 10308 "parse.ml" + : 'noSeqTerm)) +; (fun __caml_parser_env -> + let _1 = (Parsing.peek_val __caml_parser_env 0 : 'binders) in + Obj.repr( +# 2123 "parse.mly" + (let bs = _1 in + ( + match bs with + | [b] -> b + | _ -> raise_error (Fatal_SyntaxError, "Syntax error: expected a single binder") (rhs parseState 1) + )) +# 10320 "parse.ml" + : 'singleBinder)) +; (fun __caml_parser_env -> + let _1 = (Parsing.peek_val __caml_parser_env 0 : 'binop_name) in + Obj.repr( +# 2132 "parse.mly" + (let i = _1 in + ( mk_term (Op (i, [])) (rhs parseState 1) Expr )) +# 10328 "parse.ml" + : 'calcRel)) +; (fun __caml_parser_env -> + let _2 = (Parsing.peek_val __caml_parser_env 1 : 'qlident) in + Obj.repr( +# 2135 "parse.mly" + (let (_1, id, _3) = ((), _2, ()) in + ( mk_term (Var id) (rhs2 parseState 2 4) Un )) +# 10336 "parse.ml" + : 'calcRel)) +; (fun __caml_parser_env -> + let _1 = (Parsing.peek_val __caml_parser_env 0 : 'atomicTerm) in + Obj.repr( +# 2138 "parse.mly" + (let t = _1 in + ( t )) +# 10344 "parse.ml" + : 'calcRel)) +; (fun __caml_parser_env -> + let _1 = (Parsing.peek_val __caml_parser_env 5 : 'calcRel) in + let _3 = (Parsing.peek_val __caml_parser_env 3 : 'option_term_) in + let _5 = (Parsing.peek_val __caml_parser_env 1 : 'noSeqTerm) in + Obj.repr( +# 2143 "parse.mly" + (let (rel, _2, justif, _4, next, _6) = (_1, (), _3, (), _5, ()) in + ( + let justif = + match justif with + | Some t -> t + | None -> mk_term (Const Const_unit) (rhs2 parseState 2 4) Expr + in + CalcStep (rel, justif, next) + )) +# 10361 "parse.ml" + : 'calcStep)) +; (fun __caml_parser_env -> + let _1 = (Parsing.peek_val __caml_parser_env 0 : 'simpleTerm) in + Obj.repr( +# 2155 "parse.mly" + (let t = _1 in + ( t )) +# 10369 "parse.ml" + : 'typ)) +; (fun __caml_parser_env -> + let _2 = (Parsing.peek_val __caml_parser_env 3 : 'binders) in + let _4 = (Parsing.peek_val __caml_parser_env 1 : 'trigger) in + let _5 = (Parsing.peek_val __caml_parser_env 0 : 'noSeqTerm) in + Obj.repr( +# 2158 "parse.mly" + (let (_1, bs, _3, trigger, e) = ((), _2, (), _4, _5) in +let q = ( fun x -> QForall x ) in + ( + match bs with + | [] -> + raise_error (Fatal_MissingQuantifierBinder, "Missing binders for a quantifier") (rhs2 parseState 1 3) + | _ -> + let idents = idents_of_binders bs (rhs2 parseState 1 3) in + mk_term (q (bs, (idents, trigger), e)) (rhs2 parseState 1 5) Formula + )) +# 10387 "parse.ml" + : 'typ)) +; (fun __caml_parser_env -> + let _2 = (Parsing.peek_val __caml_parser_env 3 : 'binders) in + let _4 = (Parsing.peek_val __caml_parser_env 1 : 'trigger) in + let _5 = (Parsing.peek_val __caml_parser_env 0 : 'noSeqTerm) in + Obj.repr( +# 2169 "parse.mly" + (let (_1, bs, _3, trigger, e) = ((), _2, (), _4, _5) in +let q = ( fun x -> QExists x) in + ( + match bs with + | [] -> + raise_error (Fatal_MissingQuantifierBinder, "Missing binders for a quantifier") (rhs2 parseState 1 3) + | _ -> + let idents = idents_of_binders bs (rhs2 parseState 1 3) in + mk_term (q (bs, (idents, trigger), e)) (rhs2 parseState 1 5) Formula + )) +# 10405 "parse.ml" + : 'typ)) +; (fun __caml_parser_env -> + Obj.repr( +# 2182 "parse.mly" + ( ( [] )) +# 10411 "parse.ml" + : 'trigger)) +; (fun __caml_parser_env -> + let _2 = (Parsing.peek_val __caml_parser_env 1 : 'disjunctivePats) in + Obj.repr( +# 2184 "parse.mly" + (let (_1, pats, _3) = ((), _2, ()) in + ( pats )) +# 10419 "parse.ml" + : 'trigger)) +; (fun __caml_parser_env -> + let _1 = (Parsing.peek_val __caml_parser_env 0 : 'separated_nonempty_list_DISJUNCTION_conjunctivePat_) in + Obj.repr( +# 2189 "parse.mly" + (let pats = _1 in + ( pats )) +# 10427 "parse.ml" + : 'disjunctivePats)) +; (fun __caml_parser_env -> + let _1 = (Parsing.peek_val __caml_parser_env 0 : 'separated_nonempty_list_SEMICOLON_appTerm_) in + Obj.repr( +# 2194 "parse.mly" + (let pats = _1 in + ( pats )) +# 10435 "parse.ml" + : 'conjunctivePat)) +; (fun __caml_parser_env -> + let _1 = (Parsing.peek_val __caml_parser_env 0 : 'tmIff) in + Obj.repr( +# 2199 "parse.mly" + (let e = _1 in + ( e )) +# 10443 "parse.ml" + : 'simpleTerm)) +; (fun __caml_parser_env -> + let _2 = (Parsing.peek_val __caml_parser_env 2 : 'nonempty_list_patternOrMultibinder_) in + let _4 = (Parsing.peek_val __caml_parser_env 0 : FStar_Parser_AST.term) in + Obj.repr( +# 2202 "parse.mly" + (let (_1, pats, _3, e) = ((), _2, (), _4) in + ( mk_term (Abs(flatten pats, e)) (rhs2 parseState 1 4) Un )) +# 10452 "parse.ml" + : 'simpleTerm)) +; (fun __caml_parser_env -> + Obj.repr( +# 2207 "parse.mly" + (let _1 = () in + ( false )) +# 10459 "parse.ml" + : 'maybeFocusArrow)) +; (fun __caml_parser_env -> + Obj.repr( +# 2210 "parse.mly" + (let _1 = () in + ( true )) +# 10466 "parse.ml" + : 'maybeFocusArrow)) +; (fun __caml_parser_env -> + let _1 = (Parsing.peek_val __caml_parser_env 2 : 'disjunctivePattern) in + let _2 = (Parsing.peek_val __caml_parser_env 1 : 'maybeFocusArrow) in + let _3 = (Parsing.peek_val __caml_parser_env 0 : FStar_Parser_AST.term) in + Obj.repr( +# 2215 "parse.mly" + (let (pat, focus, e) = (_1, _2, _3) in +let when_opt = ( None ) in + ( + let pat = match pat with + | [p] -> p + | ps -> mk_pattern (PatOr ps) (rhs2 parseState 1 1) + in + (focus, (pat, when_opt, e)) + )) +# 10483 "parse.ml" + : 'patternBranch)) +; (fun __caml_parser_env -> + let _1 = (Parsing.peek_val __caml_parser_env 4 : 'disjunctivePattern) in + let _3 = (Parsing.peek_val __caml_parser_env 2 : 'tmFormula) in + let _4 = (Parsing.peek_val __caml_parser_env 1 : 'maybeFocusArrow) in + let _5 = (Parsing.peek_val __caml_parser_env 0 : FStar_Parser_AST.term) in + Obj.repr( +# 2225 "parse.mly" + (let (pat, _1, e_inlined1, focus, e) = (_1, (), _3, _4, _5) in +let when_opt = + let e = e_inlined1 in + ( Some e ) +in + ( + let pat = match pat with + | [p] -> p + | ps -> mk_pattern (PatOr ps) (rhs2 parseState 1 1) + in + (focus, (pat, when_opt, e)) + )) +# 10504 "parse.ml" + : 'patternBranch)) +; (fun __caml_parser_env -> + let _1 = (Parsing.peek_val __caml_parser_env 2 : 'tmImplies) in + let _3 = (Parsing.peek_val __caml_parser_env 0 : 'tmIff) in + Obj.repr( +# 2240 "parse.mly" + (let (e1, _2, e2) = (_1, (), _3) in + ( mk_term (Op(mk_ident("<==>", rhs parseState 2), [e1; e2])) (rhs2 parseState 1 3) Formula )) +# 10513 "parse.ml" + : 'tmIff)) +; (fun __caml_parser_env -> + let _1 = (Parsing.peek_val __caml_parser_env 0 : 'tmImplies) in + Obj.repr( +# 2243 "parse.mly" + (let e = _1 in + ( e )) +# 10521 "parse.ml" + : 'tmIff)) +; (fun __caml_parser_env -> + let _1 = (Parsing.peek_val __caml_parser_env 2 : 'tmArrow_tmFormula_) in + let _3 = (Parsing.peek_val __caml_parser_env 0 : 'tmImplies) in + Obj.repr( +# 2248 "parse.mly" + (let (e1, _2, e2) = (_1, (), _3) in + ( mk_term (Op(mk_ident("==>", rhs parseState 2), [e1; e2])) (rhs2 parseState 1 3) Formula )) +# 10530 "parse.ml" + : 'tmImplies)) +; (fun __caml_parser_env -> + let _1 = (Parsing.peek_val __caml_parser_env 0 : 'tmArrow_tmFormula_) in + Obj.repr( +# 2251 "parse.mly" + (let e = _1 in + ( e )) +# 10538 "parse.ml" + : 'tmImplies)) +; (fun __caml_parser_env -> + let _2 = (Parsing.peek_val __caml_parser_env 3 : 'tmFormula) in + let _5 = (Parsing.peek_val __caml_parser_env 0 : 'tmArrow_tmFormula_) in + Obj.repr( +# 2256 "parse.mly" + (let (_1, t, _3, _2, tgt) = ((), _2, (), (), _5) in +let dom = ( ((Some TypeClassArg, []), t) ) in + ( + let ((aq_opt, attrs), dom_tm) = dom in + let b = match extract_named_refinement dom_tm with + | None -> mk_binder_with_attrs (NoName dom_tm) (rhs parseState 1) Un aq_opt attrs + | Some (x, t, f) -> mkRefinedBinder x t true f (rhs2 parseState 1 1) aq_opt attrs + in + mk_term (Product([b], tgt)) (rhs2 parseState 1 3) Un + )) +# 10555 "parse.ml" + : 'tmArrow_tmFormula_)) +; (fun __caml_parser_env -> + let _2 = (Parsing.peek_val __caml_parser_env 4 : 'aqual) in + let _3 = (Parsing.peek_val __caml_parser_env 3 : 'tmFormula) in + let _6 = (Parsing.peek_val __caml_parser_env 0 : 'tmArrow_tmFormula_) in + Obj.repr( +# 2267 "parse.mly" + (let (_1, q, dom_tm, _5, _2, tgt) = ((), _2, _3, (), (), _6) in +let dom = + let attrs_opt = ( None ) in + ( (Some q, none_to_empty_list attrs_opt), dom_tm ) +in + ( + let ((aq_opt, attrs), dom_tm) = dom in + let b = match extract_named_refinement dom_tm with + | None -> mk_binder_with_attrs (NoName dom_tm) (rhs parseState 1) Un aq_opt attrs + | Some (x, t, f) -> mkRefinedBinder x t true f (rhs2 parseState 1 1) aq_opt attrs + in + mk_term (Product([b], tgt)) (rhs2 parseState 1 3) Un + )) +# 10576 "parse.ml" + : 'tmArrow_tmFormula_)) +; (fun __caml_parser_env -> + let _2 = (Parsing.peek_val __caml_parser_env 5 : 'aqual) in + let _3 = (Parsing.peek_val __caml_parser_env 4 : 'binderAttributes) in + let _4 = (Parsing.peek_val __caml_parser_env 3 : 'tmFormula) in + let _7 = (Parsing.peek_val __caml_parser_env 0 : 'tmArrow_tmFormula_) in + Obj.repr( +# 2281 "parse.mly" + (let (_1, q, x, dom_tm, _5, _2, tgt) = ((), _2, _3, _4, (), (), _7) in +let dom = + let attrs_opt = ( Some x ) in + ( (Some q, none_to_empty_list attrs_opt), dom_tm ) +in + ( + let ((aq_opt, attrs), dom_tm) = dom in + let b = match extract_named_refinement dom_tm with + | None -> mk_binder_with_attrs (NoName dom_tm) (rhs parseState 1) Un aq_opt attrs + | Some (x, t, f) -> mkRefinedBinder x t true f (rhs2 parseState 1 1) aq_opt attrs + in + mk_term (Product([b], tgt)) (rhs2 parseState 1 3) Un + )) +# 10598 "parse.ml" + : 'tmArrow_tmFormula_)) +; (fun __caml_parser_env -> + let _1 = (Parsing.peek_val __caml_parser_env 2 : 'tmFormula) in + let _3 = (Parsing.peek_val __caml_parser_env 0 : 'tmArrow_tmFormula_) in + Obj.repr( +# 2295 "parse.mly" + (let (dom_tm, _2, tgt) = (_1, (), _3) in +let dom = + let attrs_opt = ( None ) in + let aq_opt = ( None ) in + ( (aq_opt, none_to_empty_list attrs_opt), dom_tm ) +in + ( + let ((aq_opt, attrs), dom_tm) = dom in + let b = match extract_named_refinement dom_tm with + | None -> mk_binder_with_attrs (NoName dom_tm) (rhs parseState 1) Un aq_opt attrs + | Some (x, t, f) -> mkRefinedBinder x t true f (rhs2 parseState 1 1) aq_opt attrs + in + mk_term (Product([b], tgt)) (rhs2 parseState 1 3) Un + )) +# 10619 "parse.ml" + : 'tmArrow_tmFormula_)) +; (fun __caml_parser_env -> + let _1 = (Parsing.peek_val __caml_parser_env 3 : 'binderAttributes) in + let _2 = (Parsing.peek_val __caml_parser_env 2 : 'tmFormula) in + let _4 = (Parsing.peek_val __caml_parser_env 0 : 'tmArrow_tmFormula_) in + Obj.repr( +# 2310 "parse.mly" + (let (x, dom_tm, _2, tgt) = (_1, _2, (), _4) in +let dom = + let attrs_opt = ( Some x ) in + let aq_opt = ( None ) in + ( (aq_opt, none_to_empty_list attrs_opt), dom_tm ) +in + ( + let ((aq_opt, attrs), dom_tm) = dom in + let b = match extract_named_refinement dom_tm with + | None -> mk_binder_with_attrs (NoName dom_tm) (rhs parseState 1) Un aq_opt attrs + | Some (x, t, f) -> mkRefinedBinder x t true f (rhs2 parseState 1 1) aq_opt attrs + in + mk_term (Product([b], tgt)) (rhs2 parseState 1 3) Un + )) +# 10641 "parse.ml" + : 'tmArrow_tmFormula_)) +; (fun __caml_parser_env -> + let _1 = (Parsing.peek_val __caml_parser_env 3 : 'aqual) in + let _2 = (Parsing.peek_val __caml_parser_env 2 : 'tmFormula) in + let _4 = (Parsing.peek_val __caml_parser_env 0 : 'tmArrow_tmFormula_) in + Obj.repr( +# 2325 "parse.mly" + (let (x, dom_tm, _2, tgt) = (_1, _2, (), _4) in +let dom = + let attrs_opt = ( None ) in + let aq_opt = ( Some x ) in + ( (aq_opt, none_to_empty_list attrs_opt), dom_tm ) +in + ( + let ((aq_opt, attrs), dom_tm) = dom in + let b = match extract_named_refinement dom_tm with + | None -> mk_binder_with_attrs (NoName dom_tm) (rhs parseState 1) Un aq_opt attrs + | Some (x, t, f) -> mkRefinedBinder x t true f (rhs2 parseState 1 1) aq_opt attrs + in + mk_term (Product([b], tgt)) (rhs2 parseState 1 3) Un + )) +# 10663 "parse.ml" + : 'tmArrow_tmFormula_)) +; (fun __caml_parser_env -> + let _1 = (Parsing.peek_val __caml_parser_env 4 : 'aqual) in + let _2 = (Parsing.peek_val __caml_parser_env 3 : 'binderAttributes) in + let _3 = (Parsing.peek_val __caml_parser_env 2 : 'tmFormula) in + let _5 = (Parsing.peek_val __caml_parser_env 0 : 'tmArrow_tmFormula_) in + Obj.repr( +# 2340 "parse.mly" + (let (x, x_inlined1, dom_tm, _2, tgt) = (_1, _2, _3, (), _5) in +let dom = + let attrs_opt = + let x = x_inlined1 in + ( Some x ) + in + let aq_opt = ( Some x ) in + ( (aq_opt, none_to_empty_list attrs_opt), dom_tm ) +in + ( + let ((aq_opt, attrs), dom_tm) = dom in + let b = match extract_named_refinement dom_tm with + | None -> mk_binder_with_attrs (NoName dom_tm) (rhs parseState 1) Un aq_opt attrs + | Some (x, t, f) -> mkRefinedBinder x t true f (rhs2 parseState 1 1) aq_opt attrs + in + mk_term (Product([b], tgt)) (rhs2 parseState 1 3) Un + )) +# 10689 "parse.ml" + : 'tmArrow_tmFormula_)) +; (fun __caml_parser_env -> + let _1 = (Parsing.peek_val __caml_parser_env 0 : 'tmFormula) in + Obj.repr( +# 2358 "parse.mly" + (let e = _1 in + ( e )) +# 10697 "parse.ml" + : 'tmArrow_tmFormula_)) +; (fun __caml_parser_env -> + let _2 = (Parsing.peek_val __caml_parser_env 3 : 'tmNoEq) in + let _5 = (Parsing.peek_val __caml_parser_env 0 : 'tmArrow_tmNoEq_) in + Obj.repr( +# 2363 "parse.mly" + (let (_1, t, _3, _2, tgt) = ((), _2, (), (), _5) in +let dom = ( ((Some TypeClassArg, []), t) ) in + ( + let ((aq_opt, attrs), dom_tm) = dom in + let b = match extract_named_refinement dom_tm with + | None -> mk_binder_with_attrs (NoName dom_tm) (rhs parseState 1) Un aq_opt attrs + | Some (x, t, f) -> mkRefinedBinder x t true f (rhs2 parseState 1 1) aq_opt attrs + in + mk_term (Product([b], tgt)) (rhs2 parseState 1 3) Un + )) +# 10714 "parse.ml" + : 'tmArrow_tmNoEq_)) +; (fun __caml_parser_env -> + let _2 = (Parsing.peek_val __caml_parser_env 4 : 'aqual) in + let _3 = (Parsing.peek_val __caml_parser_env 3 : 'tmNoEq) in + let _6 = (Parsing.peek_val __caml_parser_env 0 : 'tmArrow_tmNoEq_) in + Obj.repr( +# 2374 "parse.mly" + (let (_1, q, dom_tm, _5, _2, tgt) = ((), _2, _3, (), (), _6) in +let dom = + let attrs_opt = ( None ) in + ( (Some q, none_to_empty_list attrs_opt), dom_tm ) +in + ( + let ((aq_opt, attrs), dom_tm) = dom in + let b = match extract_named_refinement dom_tm with + | None -> mk_binder_with_attrs (NoName dom_tm) (rhs parseState 1) Un aq_opt attrs + | Some (x, t, f) -> mkRefinedBinder x t true f (rhs2 parseState 1 1) aq_opt attrs + in + mk_term (Product([b], tgt)) (rhs2 parseState 1 3) Un + )) +# 10735 "parse.ml" + : 'tmArrow_tmNoEq_)) +; (fun __caml_parser_env -> + let _2 = (Parsing.peek_val __caml_parser_env 5 : 'aqual) in + let _3 = (Parsing.peek_val __caml_parser_env 4 : 'binderAttributes) in + let _4 = (Parsing.peek_val __caml_parser_env 3 : 'tmNoEq) in + let _7 = (Parsing.peek_val __caml_parser_env 0 : 'tmArrow_tmNoEq_) in + Obj.repr( +# 2388 "parse.mly" + (let (_1, q, x, dom_tm, _5, _2, tgt) = ((), _2, _3, _4, (), (), _7) in +let dom = + let attrs_opt = ( Some x ) in + ( (Some q, none_to_empty_list attrs_opt), dom_tm ) +in + ( + let ((aq_opt, attrs), dom_tm) = dom in + let b = match extract_named_refinement dom_tm with + | None -> mk_binder_with_attrs (NoName dom_tm) (rhs parseState 1) Un aq_opt attrs + | Some (x, t, f) -> mkRefinedBinder x t true f (rhs2 parseState 1 1) aq_opt attrs + in + mk_term (Product([b], tgt)) (rhs2 parseState 1 3) Un + )) +# 10757 "parse.ml" + : 'tmArrow_tmNoEq_)) +; (fun __caml_parser_env -> + let _1 = (Parsing.peek_val __caml_parser_env 2 : 'tmNoEq) in + let _3 = (Parsing.peek_val __caml_parser_env 0 : 'tmArrow_tmNoEq_) in + Obj.repr( +# 2402 "parse.mly" + (let (dom_tm, _2, tgt) = (_1, (), _3) in +let dom = + let attrs_opt = ( None ) in + let aq_opt = ( None ) in + ( (aq_opt, none_to_empty_list attrs_opt), dom_tm ) +in + ( + let ((aq_opt, attrs), dom_tm) = dom in + let b = match extract_named_refinement dom_tm with + | None -> mk_binder_with_attrs (NoName dom_tm) (rhs parseState 1) Un aq_opt attrs + | Some (x, t, f) -> mkRefinedBinder x t true f (rhs2 parseState 1 1) aq_opt attrs + in + mk_term (Product([b], tgt)) (rhs2 parseState 1 3) Un + )) +# 10778 "parse.ml" + : 'tmArrow_tmNoEq_)) +; (fun __caml_parser_env -> + let _1 = (Parsing.peek_val __caml_parser_env 3 : 'binderAttributes) in + let _2 = (Parsing.peek_val __caml_parser_env 2 : 'tmNoEq) in + let _4 = (Parsing.peek_val __caml_parser_env 0 : 'tmArrow_tmNoEq_) in + Obj.repr( +# 2417 "parse.mly" + (let (x, dom_tm, _2, tgt) = (_1, _2, (), _4) in +let dom = + let attrs_opt = ( Some x ) in + let aq_opt = ( None ) in + ( (aq_opt, none_to_empty_list attrs_opt), dom_tm ) +in + ( + let ((aq_opt, attrs), dom_tm) = dom in + let b = match extract_named_refinement dom_tm with + | None -> mk_binder_with_attrs (NoName dom_tm) (rhs parseState 1) Un aq_opt attrs + | Some (x, t, f) -> mkRefinedBinder x t true f (rhs2 parseState 1 1) aq_opt attrs + in + mk_term (Product([b], tgt)) (rhs2 parseState 1 3) Un + )) +# 10800 "parse.ml" + : 'tmArrow_tmNoEq_)) +; (fun __caml_parser_env -> + let _1 = (Parsing.peek_val __caml_parser_env 3 : 'aqual) in + let _2 = (Parsing.peek_val __caml_parser_env 2 : 'tmNoEq) in + let _4 = (Parsing.peek_val __caml_parser_env 0 : 'tmArrow_tmNoEq_) in + Obj.repr( +# 2432 "parse.mly" + (let (x, dom_tm, _2, tgt) = (_1, _2, (), _4) in +let dom = + let attrs_opt = ( None ) in + let aq_opt = ( Some x ) in + ( (aq_opt, none_to_empty_list attrs_opt), dom_tm ) +in + ( + let ((aq_opt, attrs), dom_tm) = dom in + let b = match extract_named_refinement dom_tm with + | None -> mk_binder_with_attrs (NoName dom_tm) (rhs parseState 1) Un aq_opt attrs + | Some (x, t, f) -> mkRefinedBinder x t true f (rhs2 parseState 1 1) aq_opt attrs + in + mk_term (Product([b], tgt)) (rhs2 parseState 1 3) Un + )) +# 10822 "parse.ml" + : 'tmArrow_tmNoEq_)) +; (fun __caml_parser_env -> + let _1 = (Parsing.peek_val __caml_parser_env 4 : 'aqual) in + let _2 = (Parsing.peek_val __caml_parser_env 3 : 'binderAttributes) in + let _3 = (Parsing.peek_val __caml_parser_env 2 : 'tmNoEq) in + let _5 = (Parsing.peek_val __caml_parser_env 0 : 'tmArrow_tmNoEq_) in + Obj.repr( +# 2447 "parse.mly" + (let (x, x_inlined1, dom_tm, _2, tgt) = (_1, _2, _3, (), _5) in +let dom = + let attrs_opt = + let x = x_inlined1 in + ( Some x ) + in + let aq_opt = ( Some x ) in + ( (aq_opt, none_to_empty_list attrs_opt), dom_tm ) +in + ( + let ((aq_opt, attrs), dom_tm) = dom in + let b = match extract_named_refinement dom_tm with + | None -> mk_binder_with_attrs (NoName dom_tm) (rhs parseState 1) Un aq_opt attrs + | Some (x, t, f) -> mkRefinedBinder x t true f (rhs2 parseState 1 1) aq_opt attrs + in + mk_term (Product([b], tgt)) (rhs2 parseState 1 3) Un + )) +# 10848 "parse.ml" + : 'tmArrow_tmNoEq_)) +; (fun __caml_parser_env -> + let _1 = (Parsing.peek_val __caml_parser_env 0 : 'tmNoEq) in + Obj.repr( +# 2465 "parse.mly" + (let e = _1 in + ( e )) +# 10856 "parse.ml" + : 'tmArrow_tmNoEq_)) +; (fun __caml_parser_env -> + let _1 = (Parsing.peek_val __caml_parser_env 2 : 'simpleArrowDomain) in + let _3 = (Parsing.peek_val __caml_parser_env 0 : 'simpleArrow) in + Obj.repr( +# 2470 "parse.mly" + (let (dom, _2, tgt) = (_1, (), _3) in + ( + let ((aq_opt, attrs), dom_tm) = dom in + let b = match extract_named_refinement dom_tm with + | None -> mk_binder_with_attrs (NoName dom_tm) (rhs parseState 1) Un aq_opt attrs + | Some (x, t, f) -> mkRefinedBinder x t true f (rhs2 parseState 1 1) aq_opt attrs + in + mk_term (Product([b], tgt)) (rhs2 parseState 1 3) Un + )) +# 10872 "parse.ml" + : 'simpleArrow)) +; (fun __caml_parser_env -> + let _1 = (Parsing.peek_val __caml_parser_env 0 : 'tmEqNoRefinement) in + Obj.repr( +# 2480 "parse.mly" + (let e = _1 in + ( e )) +# 10880 "parse.ml" + : 'simpleArrow)) +; (fun __caml_parser_env -> + let _2 = (Parsing.peek_val __caml_parser_env 1 : 'tmEqNoRefinement) in + Obj.repr( +# 2485 "parse.mly" + (let (_1, t, _3) = ((), _2, ()) in + ( ((Some TypeClassArg, []), t) )) +# 10888 "parse.ml" + : 'simpleArrowDomain)) +; (fun __caml_parser_env -> + let _1 = (Parsing.peek_val __caml_parser_env 0 : 'tmEqNoRefinement) in + Obj.repr( +# 2488 "parse.mly" + (let dom_tm = _1 in +let attrs_opt = ( None ) in +let aq_opt = ( None ) in + ( (aq_opt, none_to_empty_list attrs_opt), dom_tm )) +# 10898 "parse.ml" + : 'simpleArrowDomain)) +; (fun __caml_parser_env -> + let _1 = (Parsing.peek_val __caml_parser_env 1 : 'binderAttributes) in + let _2 = (Parsing.peek_val __caml_parser_env 0 : 'tmEqNoRefinement) in + Obj.repr( +# 2493 "parse.mly" + (let (x, dom_tm) = (_1, _2) in +let attrs_opt = ( Some x ) in +let aq_opt = ( None ) in + ( (aq_opt, none_to_empty_list attrs_opt), dom_tm )) +# 10909 "parse.ml" + : 'simpleArrowDomain)) +; (fun __caml_parser_env -> + let _1 = (Parsing.peek_val __caml_parser_env 1 : 'aqual) in + let _2 = (Parsing.peek_val __caml_parser_env 0 : 'tmEqNoRefinement) in + Obj.repr( +# 2498 "parse.mly" + (let (x, dom_tm) = (_1, _2) in +let attrs_opt = ( None ) in +let aq_opt = ( Some x ) in + ( (aq_opt, none_to_empty_list attrs_opt), dom_tm )) +# 10920 "parse.ml" + : 'simpleArrowDomain)) +; (fun __caml_parser_env -> + let _1 = (Parsing.peek_val __caml_parser_env 2 : 'aqual) in + let _2 = (Parsing.peek_val __caml_parser_env 1 : 'binderAttributes) in + let _3 = (Parsing.peek_val __caml_parser_env 0 : 'tmEqNoRefinement) in + Obj.repr( +# 2503 "parse.mly" + (let (x, x_inlined1, dom_tm) = (_1, _2, _3) in +let attrs_opt = + let x = x_inlined1 in + ( Some x ) +in +let aq_opt = ( Some x ) in + ( (aq_opt, none_to_empty_list attrs_opt), dom_tm )) +# 10935 "parse.ml" + : 'simpleArrowDomain)) +; (fun __caml_parser_env -> + let _1 = (Parsing.peek_val __caml_parser_env 2 : 'tmFormula) in + let _3 = (Parsing.peek_val __caml_parser_env 0 : 'tmConjunction) in + Obj.repr( +# 2513 "parse.mly" + (let (e1, _2, e2) = (_1, (), _3) in + ( mk_term (Op(mk_ident("\\/", rhs parseState 2), [e1;e2])) (rhs2 parseState 1 3) Formula )) +# 10944 "parse.ml" + : 'tmFormula)) +; (fun __caml_parser_env -> + let _1 = (Parsing.peek_val __caml_parser_env 0 : 'tmConjunction) in + Obj.repr( +# 2516 "parse.mly" + (let e = _1 in + ( e )) +# 10952 "parse.ml" + : 'tmFormula)) +; (fun __caml_parser_env -> + let _1 = (Parsing.peek_val __caml_parser_env 2 : 'tmConjunction) in + let _3 = (Parsing.peek_val __caml_parser_env 0 : 'tmTuple) in + Obj.repr( +# 2521 "parse.mly" + (let (e1, _2, e2) = (_1, (), _3) in + ( mk_term (Op(mk_ident("/\\", rhs parseState 2), [e1;e2])) (rhs2 parseState 1 3) Formula )) +# 10961 "parse.ml" + : 'tmConjunction)) +; (fun __caml_parser_env -> + let _1 = (Parsing.peek_val __caml_parser_env 0 : 'tmTuple) in + Obj.repr( +# 2524 "parse.mly" + (let e = _1 in + ( e )) +# 10969 "parse.ml" + : 'tmConjunction)) +; (fun __caml_parser_env -> + let _1 = (Parsing.peek_val __caml_parser_env 0 : 'separated_nonempty_list_COMMA_tmEq_) in + Obj.repr( +# 2529 "parse.mly" + (let el = _1 in + ( + match el with + | [x] -> x + | components -> mkTuple components (rhs2 parseState 1 1) + )) +# 10981 "parse.ml" + : 'tmTuple)) +; (fun __caml_parser_env -> + let _1 = (Parsing.peek_val __caml_parser_env 2 : 'tmEqWith_appTermNoRecordExp_) in + let _3 = (Parsing.peek_val __caml_parser_env 0 : 'tmEqWith_appTermNoRecordExp_) in + Obj.repr( +# 2538 "parse.mly" + (let (e1, _2, e2) = (_1, (), _3) in + ( mk_term (Op(mk_ident("=", rhs parseState 2), [e1; e2])) (rhs2 parseState 1 3) Un)) +# 10990 "parse.ml" + : 'tmEqWith_appTermNoRecordExp_)) +; (fun __caml_parser_env -> + let _1 = (Parsing.peek_val __caml_parser_env 2 : 'tmEqWith_appTermNoRecordExp_) in + let _3 = (Parsing.peek_val __caml_parser_env 0 : 'tmEqWith_appTermNoRecordExp_) in + Obj.repr( +# 2541 "parse.mly" + (let (e1, _2, e2) = (_1, (), _3) in + ( mk_term (Op(mk_ident(":=", rhs parseState 2), [e1; e2])) (rhs2 parseState 1 3) Un)) +# 10999 "parse.ml" + : 'tmEqWith_appTermNoRecordExp_)) +; (fun __caml_parser_env -> + let _1 = (Parsing.peek_val __caml_parser_env 2 : 'tmEqWith_appTermNoRecordExp_) in + let _3 = (Parsing.peek_val __caml_parser_env 0 : 'tmEqWith_appTermNoRecordExp_) in + Obj.repr( +# 2544 "parse.mly" + (let (e1, _2, e2) = (_1, (), _3) in + ( mk_term (Op(mk_ident("|>", rhs parseState 2), [e1; e2])) (rhs2 parseState 1 3) Un)) +# 11008 "parse.ml" + : 'tmEqWith_appTermNoRecordExp_)) +; (fun __caml_parser_env -> + let _1 = (Parsing.peek_val __caml_parser_env 2 : 'tmEqWith_appTermNoRecordExp_) in + let _2 = (Parsing.peek_val __caml_parser_env 1 : string) in + let _3 = (Parsing.peek_val __caml_parser_env 0 : 'tmEqWith_appTermNoRecordExp_) in + Obj.repr( +# 2547 "parse.mly" + (let (e1, op, e2) = (_1, _2, _3) in +let op = ( mk_ident (op, rhs parseState 1) ) in + ( mk_term (Op(op, [e1; e2])) (rhs2 parseState 1 3) Un)) +# 11019 "parse.ml" + : 'tmEqWith_appTermNoRecordExp_)) +; (fun __caml_parser_env -> + let _1 = (Parsing.peek_val __caml_parser_env 2 : 'tmEqWith_appTermNoRecordExp_) in + let _2 = (Parsing.peek_val __caml_parser_env 1 : string) in + let _3 = (Parsing.peek_val __caml_parser_env 0 : 'tmEqWith_appTermNoRecordExp_) in + Obj.repr( +# 2551 "parse.mly" + (let (e1, op, e2) = (_1, _2, _3) in +let op = ( mk_ident (op, rhs parseState 1) ) in + ( mk_term (Op(op, [e1; e2])) (rhs2 parseState 1 3) Un)) +# 11030 "parse.ml" + : 'tmEqWith_appTermNoRecordExp_)) +; (fun __caml_parser_env -> + let _1 = (Parsing.peek_val __caml_parser_env 2 : 'tmEqWith_appTermNoRecordExp_) in + let _2 = (Parsing.peek_val __caml_parser_env 1 : string) in + let _3 = (Parsing.peek_val __caml_parser_env 0 : 'tmEqWith_appTermNoRecordExp_) in + Obj.repr( +# 2555 "parse.mly" + (let (e1, op, e2) = (_1, _2, _3) in +let op = ( mk_ident (op, rhs parseState 1) ) in + ( mk_term (Op(op, [e1; e2])) (rhs2 parseState 1 3) Un)) +# 11041 "parse.ml" + : 'tmEqWith_appTermNoRecordExp_)) +; (fun __caml_parser_env -> + let _1 = (Parsing.peek_val __caml_parser_env 2 : 'tmEqWith_appTermNoRecordExp_) in + let _2 = (Parsing.peek_val __caml_parser_env 1 : string) in + let _3 = (Parsing.peek_val __caml_parser_env 0 : 'tmEqWith_appTermNoRecordExp_) in + Obj.repr( +# 2559 "parse.mly" + (let (e1, op, e2) = (_1, _2, _3) in +let op = ( mk_ident (op, rhs parseState 1) ) in + ( mk_term (Op(op, [e1; e2])) (rhs2 parseState 1 3) Un)) +# 11052 "parse.ml" + : 'tmEqWith_appTermNoRecordExp_)) +; (fun __caml_parser_env -> + let _1 = (Parsing.peek_val __caml_parser_env 2 : 'tmEqWith_appTermNoRecordExp_) in + let _2 = (Parsing.peek_val __caml_parser_env 1 : string) in + let _3 = (Parsing.peek_val __caml_parser_env 0 : 'tmEqWith_appTermNoRecordExp_) in + Obj.repr( +# 2563 "parse.mly" + (let (e1, op, e2) = (_1, _2, _3) in +let op = ( mk_ident (op, rhs parseState 1) ) in + ( mk_term (Op(op, [e1; e2])) (rhs2 parseState 1 3) Un)) +# 11063 "parse.ml" + : 'tmEqWith_appTermNoRecordExp_)) +; (fun __caml_parser_env -> + let _1 = (Parsing.peek_val __caml_parser_env 2 : 'tmEqWith_appTermNoRecordExp_) in + let _2 = (Parsing.peek_val __caml_parser_env 1 : string) in + let _3 = (Parsing.peek_val __caml_parser_env 0 : 'tmEqWith_appTermNoRecordExp_) in + Obj.repr( +# 2567 "parse.mly" + (let (e1, op, e2) = (_1, _2, _3) in +let op = ( mk_ident (op, rhs parseState 1) ) in + ( mk_term (Op(op, [e1; e2])) (rhs2 parseState 1 3) Un)) +# 11074 "parse.ml" + : 'tmEqWith_appTermNoRecordExp_)) +; (fun __caml_parser_env -> + let _1 = (Parsing.peek_val __caml_parser_env 2 : 'tmEqWith_appTermNoRecordExp_) in + let _3 = (Parsing.peek_val __caml_parser_env 0 : 'tmEqWith_appTermNoRecordExp_) in + Obj.repr( +# 2571 "parse.mly" + (let (e1, _2, e2) = (_1, (), _3) in + ( mk_term (Op(mk_ident("-", rhs parseState 2), [e1; e2])) (rhs2 parseState 1 3) Un)) +# 11083 "parse.ml" + : 'tmEqWith_appTermNoRecordExp_)) +; (fun __caml_parser_env -> + let _2 = (Parsing.peek_val __caml_parser_env 0 : 'tmEqWith_appTermNoRecordExp_) in + Obj.repr( +# 2574 "parse.mly" + (let (_1, e) = ((), _2) in + ( mk_uminus e (rhs parseState 1) (rhs2 parseState 1 2) Expr )) +# 11091 "parse.ml" + : 'tmEqWith_appTermNoRecordExp_)) +; (fun __caml_parser_env -> + let _2 = (Parsing.peek_val __caml_parser_env 0 : 'tmEqWith_appTermNoRecordExp_) in + Obj.repr( +# 2577 "parse.mly" + (let (_1, e) = ((), _2) in + ( mk_term (Quote (e, Dynamic)) (rhs2 parseState 1 3) Un )) +# 11099 "parse.ml" + : 'tmEqWith_appTermNoRecordExp_)) +; (fun __caml_parser_env -> + let _2 = (Parsing.peek_val __caml_parser_env 0 : 'tmEqWith_appTermNoRecordExp_) in + Obj.repr( +# 2580 "parse.mly" + (let (_1, e) = ((), _2) in + ( mk_term (Quote (e, Static)) (rhs2 parseState 1 3) Un )) +# 11107 "parse.ml" + : 'tmEqWith_appTermNoRecordExp_)) +; (fun __caml_parser_env -> + let _2 = (Parsing.peek_val __caml_parser_env 0 : 'atomicTerm) in + Obj.repr( +# 2583 "parse.mly" + (let (_1, e) = ((), _2) in + ( let q = mk_term (Quote (e, Dynamic)) (rhs2 parseState 1 3) Un in + mk_term (Antiquote q) (rhs2 parseState 1 3) Un )) +# 11116 "parse.ml" + : 'tmEqWith_appTermNoRecordExp_)) +; (fun __caml_parser_env -> + let _2 = (Parsing.peek_val __caml_parser_env 0 : 'atomicTerm) in + Obj.repr( +# 2587 "parse.mly" + (let (_1, e) = ((), _2) in + ( mk_term (Antiquote e) (rhs2 parseState 1 3) Un )) +# 11124 "parse.ml" + : 'tmEqWith_appTermNoRecordExp_)) +; (fun __caml_parser_env -> + let _1 = (Parsing.peek_val __caml_parser_env 0 : 'tmNoEqWith_appTermNoRecordExp_) in + Obj.repr( +# 2590 "parse.mly" + (let e = _1 in + ( e )) +# 11132 "parse.ml" + : 'tmEqWith_appTermNoRecordExp_)) +; (fun __caml_parser_env -> + let _1 = (Parsing.peek_val __caml_parser_env 2 : 'tmEqWith_tmRefinement_) in + let _3 = (Parsing.peek_val __caml_parser_env 0 : 'tmEqWith_tmRefinement_) in + Obj.repr( +# 2595 "parse.mly" + (let (e1, _2, e2) = (_1, (), _3) in + ( mk_term (Op(mk_ident("=", rhs parseState 2), [e1; e2])) (rhs2 parseState 1 3) Un)) +# 11141 "parse.ml" + : 'tmEqWith_tmRefinement_)) +; (fun __caml_parser_env -> + let _1 = (Parsing.peek_val __caml_parser_env 2 : 'tmEqWith_tmRefinement_) in + let _3 = (Parsing.peek_val __caml_parser_env 0 : 'tmEqWith_tmRefinement_) in + Obj.repr( +# 2598 "parse.mly" + (let (e1, _2, e2) = (_1, (), _3) in + ( mk_term (Op(mk_ident(":=", rhs parseState 2), [e1; e2])) (rhs2 parseState 1 3) Un)) +# 11150 "parse.ml" + : 'tmEqWith_tmRefinement_)) +; (fun __caml_parser_env -> + let _1 = (Parsing.peek_val __caml_parser_env 2 : 'tmEqWith_tmRefinement_) in + let _3 = (Parsing.peek_val __caml_parser_env 0 : 'tmEqWith_tmRefinement_) in + Obj.repr( +# 2601 "parse.mly" + (let (e1, _2, e2) = (_1, (), _3) in + ( mk_term (Op(mk_ident("|>", rhs parseState 2), [e1; e2])) (rhs2 parseState 1 3) Un)) +# 11159 "parse.ml" + : 'tmEqWith_tmRefinement_)) +; (fun __caml_parser_env -> + let _1 = (Parsing.peek_val __caml_parser_env 2 : 'tmEqWith_tmRefinement_) in + let _2 = (Parsing.peek_val __caml_parser_env 1 : string) in + let _3 = (Parsing.peek_val __caml_parser_env 0 : 'tmEqWith_tmRefinement_) in + Obj.repr( +# 2604 "parse.mly" + (let (e1, op, e2) = (_1, _2, _3) in +let op = ( mk_ident (op, rhs parseState 1) ) in + ( mk_term (Op(op, [e1; e2])) (rhs2 parseState 1 3) Un)) +# 11170 "parse.ml" + : 'tmEqWith_tmRefinement_)) +; (fun __caml_parser_env -> + let _1 = (Parsing.peek_val __caml_parser_env 2 : 'tmEqWith_tmRefinement_) in + let _2 = (Parsing.peek_val __caml_parser_env 1 : string) in + let _3 = (Parsing.peek_val __caml_parser_env 0 : 'tmEqWith_tmRefinement_) in + Obj.repr( +# 2608 "parse.mly" + (let (e1, op, e2) = (_1, _2, _3) in +let op = ( mk_ident (op, rhs parseState 1) ) in + ( mk_term (Op(op, [e1; e2])) (rhs2 parseState 1 3) Un)) +# 11181 "parse.ml" + : 'tmEqWith_tmRefinement_)) +; (fun __caml_parser_env -> + let _1 = (Parsing.peek_val __caml_parser_env 2 : 'tmEqWith_tmRefinement_) in + let _2 = (Parsing.peek_val __caml_parser_env 1 : string) in + let _3 = (Parsing.peek_val __caml_parser_env 0 : 'tmEqWith_tmRefinement_) in + Obj.repr( +# 2612 "parse.mly" + (let (e1, op, e2) = (_1, _2, _3) in +let op = ( mk_ident (op, rhs parseState 1) ) in + ( mk_term (Op(op, [e1; e2])) (rhs2 parseState 1 3) Un)) +# 11192 "parse.ml" + : 'tmEqWith_tmRefinement_)) +; (fun __caml_parser_env -> + let _1 = (Parsing.peek_val __caml_parser_env 2 : 'tmEqWith_tmRefinement_) in + let _2 = (Parsing.peek_val __caml_parser_env 1 : string) in + let _3 = (Parsing.peek_val __caml_parser_env 0 : 'tmEqWith_tmRefinement_) in + Obj.repr( +# 2616 "parse.mly" + (let (e1, op, e2) = (_1, _2, _3) in +let op = ( mk_ident (op, rhs parseState 1) ) in + ( mk_term (Op(op, [e1; e2])) (rhs2 parseState 1 3) Un)) +# 11203 "parse.ml" + : 'tmEqWith_tmRefinement_)) +; (fun __caml_parser_env -> + let _1 = (Parsing.peek_val __caml_parser_env 2 : 'tmEqWith_tmRefinement_) in + let _2 = (Parsing.peek_val __caml_parser_env 1 : string) in + let _3 = (Parsing.peek_val __caml_parser_env 0 : 'tmEqWith_tmRefinement_) in + Obj.repr( +# 2620 "parse.mly" + (let (e1, op, e2) = (_1, _2, _3) in +let op = ( mk_ident (op, rhs parseState 1) ) in + ( mk_term (Op(op, [e1; e2])) (rhs2 parseState 1 3) Un)) +# 11214 "parse.ml" + : 'tmEqWith_tmRefinement_)) +; (fun __caml_parser_env -> + let _1 = (Parsing.peek_val __caml_parser_env 2 : 'tmEqWith_tmRefinement_) in + let _2 = (Parsing.peek_val __caml_parser_env 1 : string) in + let _3 = (Parsing.peek_val __caml_parser_env 0 : 'tmEqWith_tmRefinement_) in + Obj.repr( +# 2624 "parse.mly" + (let (e1, op, e2) = (_1, _2, _3) in +let op = ( mk_ident (op, rhs parseState 1) ) in + ( mk_term (Op(op, [e1; e2])) (rhs2 parseState 1 3) Un)) +# 11225 "parse.ml" + : 'tmEqWith_tmRefinement_)) +; (fun __caml_parser_env -> + let _1 = (Parsing.peek_val __caml_parser_env 2 : 'tmEqWith_tmRefinement_) in + let _3 = (Parsing.peek_val __caml_parser_env 0 : 'tmEqWith_tmRefinement_) in + Obj.repr( +# 2628 "parse.mly" + (let (e1, _2, e2) = (_1, (), _3) in + ( mk_term (Op(mk_ident("-", rhs parseState 2), [e1; e2])) (rhs2 parseState 1 3) Un)) +# 11234 "parse.ml" + : 'tmEqWith_tmRefinement_)) +; (fun __caml_parser_env -> + let _2 = (Parsing.peek_val __caml_parser_env 0 : 'tmEqWith_tmRefinement_) in + Obj.repr( +# 2631 "parse.mly" + (let (_1, e) = ((), _2) in + ( mk_uminus e (rhs parseState 1) (rhs2 parseState 1 2) Expr )) +# 11242 "parse.ml" + : 'tmEqWith_tmRefinement_)) +; (fun __caml_parser_env -> + let _2 = (Parsing.peek_val __caml_parser_env 0 : 'tmEqWith_tmRefinement_) in + Obj.repr( +# 2634 "parse.mly" + (let (_1, e) = ((), _2) in + ( mk_term (Quote (e, Dynamic)) (rhs2 parseState 1 3) Un )) +# 11250 "parse.ml" + : 'tmEqWith_tmRefinement_)) +; (fun __caml_parser_env -> + let _2 = (Parsing.peek_val __caml_parser_env 0 : 'tmEqWith_tmRefinement_) in + Obj.repr( +# 2637 "parse.mly" + (let (_1, e) = ((), _2) in + ( mk_term (Quote (e, Static)) (rhs2 parseState 1 3) Un )) +# 11258 "parse.ml" + : 'tmEqWith_tmRefinement_)) +; (fun __caml_parser_env -> + let _2 = (Parsing.peek_val __caml_parser_env 0 : 'atomicTerm) in + Obj.repr( +# 2640 "parse.mly" + (let (_1, e) = ((), _2) in + ( let q = mk_term (Quote (e, Dynamic)) (rhs2 parseState 1 3) Un in + mk_term (Antiquote q) (rhs2 parseState 1 3) Un )) +# 11267 "parse.ml" + : 'tmEqWith_tmRefinement_)) +; (fun __caml_parser_env -> + let _2 = (Parsing.peek_val __caml_parser_env 0 : 'atomicTerm) in + Obj.repr( +# 2644 "parse.mly" + (let (_1, e) = ((), _2) in + ( mk_term (Antiquote e) (rhs2 parseState 1 3) Un )) +# 11275 "parse.ml" + : 'tmEqWith_tmRefinement_)) +; (fun __caml_parser_env -> + let _1 = (Parsing.peek_val __caml_parser_env 0 : 'tmNoEqWith_tmRefinement_) in + Obj.repr( +# 2647 "parse.mly" + (let e = _1 in + ( e )) +# 11283 "parse.ml" + : 'tmEqWith_tmRefinement_)) +; (fun __caml_parser_env -> + let _1 = (Parsing.peek_val __caml_parser_env 2 : 'tmNoEqWith_appTermNoRecordExp_) in + let _3 = (Parsing.peek_val __caml_parser_env 0 : 'tmNoEqWith_appTermNoRecordExp_) in + Obj.repr( +# 2652 "parse.mly" + (let (e1, _2, e2) = (_1, (), _3) in + ( consTerm (rhs parseState 2) e1 e2 )) +# 11292 "parse.ml" + : 'tmNoEqWith_appTermNoRecordExp_)) +; (fun __caml_parser_env -> + let _1 = (Parsing.peek_val __caml_parser_env 2 : 'tmNoEqWith_appTermNoRecordExp_) in + let _3 = (Parsing.peek_val __caml_parser_env 0 : 'tmNoEqWith_appTermNoRecordExp_) in + Obj.repr( +# 2655 "parse.mly" + (let (e1, _2, e2) = (_1, (), _3) in + ( + let dom = + match extract_named_refinement e1 with + | Some (x, t, f) -> + let dom = mkRefinedBinder x t true f (rhs parseState 1) None [] in + Inl dom + | _ -> + Inr e1 + in + let tail = e2 in + let dom, res = + match tail.tm with + | Sum(dom', res) -> dom::dom', res + | _ -> [dom], tail + in + mk_term (Sum(dom, res)) (rhs2 parseState 1 3) Type_level + )) +# 11317 "parse.ml" + : 'tmNoEqWith_appTermNoRecordExp_)) +; (fun __caml_parser_env -> + let _1 = (Parsing.peek_val __caml_parser_env 2 : 'tmNoEqWith_appTermNoRecordExp_) in + let _2 = (Parsing.peek_val __caml_parser_env 1 : string) in + let _3 = (Parsing.peek_val __caml_parser_env 0 : 'tmNoEqWith_appTermNoRecordExp_) in + Obj.repr( +# 2674 "parse.mly" + (let (e1, op, e2) = (_1, _2, _3) in + ( mk_term (Op(mk_ident(op, rhs parseState 2), [e1; e2])) (rhs2 parseState 1 3) Un)) +# 11327 "parse.ml" + : 'tmNoEqWith_appTermNoRecordExp_)) +; (fun __caml_parser_env -> + let _1 = (Parsing.peek_val __caml_parser_env 4 : 'tmNoEqWith_appTermNoRecordExp_) in + let _3 = (Parsing.peek_val __caml_parser_env 2 : 'tmNoEqWith_appTermNoRecordExp_) in + let _5 = (Parsing.peek_val __caml_parser_env 0 : 'tmNoEqWith_appTermNoRecordExp_) in + Obj.repr( +# 2677 "parse.mly" + (let (e1, _2, op, _4, e2) = (_1, (), _3, (), _5) in + ( mkApp op [ e1, Infix; e2, Nothing ] (rhs2 parseState 1 5) )) +# 11337 "parse.ml" + : 'tmNoEqWith_appTermNoRecordExp_)) +; (fun __caml_parser_env -> + let _1 = (Parsing.peek_val __caml_parser_env 2 : 'tmNoEqWith_appTermNoRecordExp_) in + let _2 = (Parsing.peek_val __caml_parser_env 1 : string) in + let _3 = (Parsing.peek_val __caml_parser_env 0 : 'tmNoEqWith_appTermNoRecordExp_) in + Obj.repr( +# 2680 "parse.mly" + (let (e1, op, e2) = (_1, _2, _3) in + ( mk_term (Op(mk_ident(op, rhs parseState 2), [e1; e2])) (rhs2 parseState 1 3) Un)) +# 11347 "parse.ml" + : 'tmNoEqWith_appTermNoRecordExp_)) +; (fun __caml_parser_env -> + let _2 = (Parsing.peek_val __caml_parser_env 1 : 'recordExp) in + Obj.repr( +# 2683 "parse.mly" + (let (_1, e, _3) = ((), _2, ()) in + ( e )) +# 11355 "parse.ml" + : 'tmNoEqWith_appTermNoRecordExp_)) +; (fun __caml_parser_env -> + let _2 = (Parsing.peek_val __caml_parser_env 0 : 'atomicTerm) in + Obj.repr( +# 2686 "parse.mly" + (let (_1, e) = ((), _2) in + ( mk_term (VQuote e) (rhs2 parseState 1 3) Un )) +# 11363 "parse.ml" + : 'tmNoEqWith_appTermNoRecordExp_)) +; (fun __caml_parser_env -> + let _1 = (Parsing.peek_val __caml_parser_env 1 : string) in + let _2 = (Parsing.peek_val __caml_parser_env 0 : 'atomicTerm) in + Obj.repr( +# 2689 "parse.mly" + (let (op, e) = (_1, _2) in + ( mk_term (Op(mk_ident (op, rhs parseState 1), [e])) (rhs2 parseState 1 2) Formula )) +# 11372 "parse.ml" + : 'tmNoEqWith_appTermNoRecordExp_)) +; (fun __caml_parser_env -> + let _1 = (Parsing.peek_val __caml_parser_env 0 : 'appTermNoRecordExp) in + Obj.repr( +# 2692 "parse.mly" + (let e = _1 in + ( e )) +# 11380 "parse.ml" + : 'tmNoEqWith_appTermNoRecordExp_)) +; (fun __caml_parser_env -> + let _1 = (Parsing.peek_val __caml_parser_env 2 : 'tmNoEqWith_tmRefinement_) in + let _3 = (Parsing.peek_val __caml_parser_env 0 : 'tmNoEqWith_tmRefinement_) in + Obj.repr( +# 2697 "parse.mly" + (let (e1, _2, e2) = (_1, (), _3) in + ( consTerm (rhs parseState 2) e1 e2 )) +# 11389 "parse.ml" + : 'tmNoEqWith_tmRefinement_)) +; (fun __caml_parser_env -> + let _1 = (Parsing.peek_val __caml_parser_env 2 : 'tmNoEqWith_tmRefinement_) in + let _3 = (Parsing.peek_val __caml_parser_env 0 : 'tmNoEqWith_tmRefinement_) in + Obj.repr( +# 2700 "parse.mly" + (let (e1, _2, e2) = (_1, (), _3) in + ( + let dom = + match extract_named_refinement e1 with + | Some (x, t, f) -> + let dom = mkRefinedBinder x t true f (rhs parseState 1) None [] in + Inl dom + | _ -> + Inr e1 + in + let tail = e2 in + let dom, res = + match tail.tm with + | Sum(dom', res) -> dom::dom', res + | _ -> [dom], tail + in + mk_term (Sum(dom, res)) (rhs2 parseState 1 3) Type_level + )) +# 11414 "parse.ml" + : 'tmNoEqWith_tmRefinement_)) +; (fun __caml_parser_env -> + let _1 = (Parsing.peek_val __caml_parser_env 2 : 'tmNoEqWith_tmRefinement_) in + let _2 = (Parsing.peek_val __caml_parser_env 1 : string) in + let _3 = (Parsing.peek_val __caml_parser_env 0 : 'tmNoEqWith_tmRefinement_) in + Obj.repr( +# 2719 "parse.mly" + (let (e1, op, e2) = (_1, _2, _3) in + ( mk_term (Op(mk_ident(op, rhs parseState 2), [e1; e2])) (rhs2 parseState 1 3) Un)) +# 11424 "parse.ml" + : 'tmNoEqWith_tmRefinement_)) +; (fun __caml_parser_env -> + let _1 = (Parsing.peek_val __caml_parser_env 4 : 'tmNoEqWith_tmRefinement_) in + let _3 = (Parsing.peek_val __caml_parser_env 2 : 'tmNoEqWith_tmRefinement_) in + let _5 = (Parsing.peek_val __caml_parser_env 0 : 'tmNoEqWith_tmRefinement_) in + Obj.repr( +# 2722 "parse.mly" + (let (e1, _2, op, _4, e2) = (_1, (), _3, (), _5) in + ( mkApp op [ e1, Infix; e2, Nothing ] (rhs2 parseState 1 5) )) +# 11434 "parse.ml" + : 'tmNoEqWith_tmRefinement_)) +; (fun __caml_parser_env -> + let _1 = (Parsing.peek_val __caml_parser_env 2 : 'tmNoEqWith_tmRefinement_) in + let _2 = (Parsing.peek_val __caml_parser_env 1 : string) in + let _3 = (Parsing.peek_val __caml_parser_env 0 : 'tmNoEqWith_tmRefinement_) in + Obj.repr( +# 2725 "parse.mly" + (let (e1, op, e2) = (_1, _2, _3) in + ( mk_term (Op(mk_ident(op, rhs parseState 2), [e1; e2])) (rhs2 parseState 1 3) Un)) +# 11444 "parse.ml" + : 'tmNoEqWith_tmRefinement_)) +; (fun __caml_parser_env -> + let _2 = (Parsing.peek_val __caml_parser_env 1 : 'recordExp) in + Obj.repr( +# 2728 "parse.mly" + (let (_1, e, _3) = ((), _2, ()) in + ( e )) +# 11452 "parse.ml" + : 'tmNoEqWith_tmRefinement_)) +; (fun __caml_parser_env -> + let _2 = (Parsing.peek_val __caml_parser_env 0 : 'atomicTerm) in + Obj.repr( +# 2731 "parse.mly" + (let (_1, e) = ((), _2) in + ( mk_term (VQuote e) (rhs2 parseState 1 3) Un )) +# 11460 "parse.ml" + : 'tmNoEqWith_tmRefinement_)) +; (fun __caml_parser_env -> + let _1 = (Parsing.peek_val __caml_parser_env 1 : string) in + let _2 = (Parsing.peek_val __caml_parser_env 0 : 'atomicTerm) in + Obj.repr( +# 2734 "parse.mly" + (let (op, e) = (_1, _2) in + ( mk_term (Op(mk_ident (op, rhs parseState 1), [e])) (rhs2 parseState 1 2) Formula )) +# 11469 "parse.ml" + : 'tmNoEqWith_tmRefinement_)) +; (fun __caml_parser_env -> + let _1 = (Parsing.peek_val __caml_parser_env 0 : 'tmRefinement) in + Obj.repr( +# 2737 "parse.mly" + (let e = _1 in + ( e )) +# 11477 "parse.ml" + : 'tmNoEqWith_tmRefinement_)) +; (fun __caml_parser_env -> + let _1 = (Parsing.peek_val __caml_parser_env 0 : string) in + Obj.repr( +# 2742 "parse.mly" + (let o = _1 in + ( mk_ident (o, rhs parseState 1) )) +# 11485 "parse.ml" + : 'binop_name)) +; (fun __caml_parser_env -> + let _1 = (Parsing.peek_val __caml_parser_env 0 : string) in + Obj.repr( +# 2745 "parse.mly" + (let o = _1 in + ( mk_ident (o, rhs parseState 1) )) +# 11493 "parse.ml" + : 'binop_name)) +; (fun __caml_parser_env -> + let _1 = (Parsing.peek_val __caml_parser_env 0 : string) in + Obj.repr( +# 2748 "parse.mly" + (let o = _1 in + ( mk_ident (o, rhs parseState 1) )) +# 11501 "parse.ml" + : 'binop_name)) +; (fun __caml_parser_env -> + Obj.repr( +# 2751 "parse.mly" + (let o = () in + ( mk_ident ("=", rhs parseState 1) )) +# 11508 "parse.ml" + : 'binop_name)) +; (fun __caml_parser_env -> + let _1 = (Parsing.peek_val __caml_parser_env 0 : string) in + Obj.repr( +# 2754 "parse.mly" + (let o = _1 in + ( mk_ident (o, rhs parseState 1) )) +# 11516 "parse.ml" + : 'binop_name)) +; (fun __caml_parser_env -> + let _1 = (Parsing.peek_val __caml_parser_env 0 : string) in + Obj.repr( +# 2757 "parse.mly" + (let o = _1 in + ( mk_ident (o, rhs parseState 1) )) +# 11524 "parse.ml" + : 'binop_name)) +; (fun __caml_parser_env -> + let _1 = (Parsing.peek_val __caml_parser_env 0 : string) in + Obj.repr( +# 2760 "parse.mly" + (let o = _1 in + ( mk_ident (o, rhs parseState 1) )) +# 11532 "parse.ml" + : 'binop_name)) +; (fun __caml_parser_env -> + let _1 = (Parsing.peek_val __caml_parser_env 0 : string) in + Obj.repr( +# 2763 "parse.mly" + (let o = _1 in + ( mk_ident (o, rhs parseState 1) )) +# 11540 "parse.ml" + : 'binop_name)) +; (fun __caml_parser_env -> + let _1 = (Parsing.peek_val __caml_parser_env 0 : string) in + Obj.repr( +# 2766 "parse.mly" + (let o = _1 in + ( mk_ident (o, rhs parseState 1) )) +# 11548 "parse.ml" + : 'binop_name)) +; (fun __caml_parser_env -> + Obj.repr( +# 2769 "parse.mly" + (let o = () in + ( mk_ident ("==>", rhs parseState 1) )) +# 11555 "parse.ml" + : 'binop_name)) +; (fun __caml_parser_env -> + Obj.repr( +# 2772 "parse.mly" + (let o = () in + ( mk_ident ("/\\", rhs parseState 1) )) +# 11562 "parse.ml" + : 'binop_name)) +; (fun __caml_parser_env -> + Obj.repr( +# 2775 "parse.mly" + (let o = () in + ( mk_ident ("\\/", rhs parseState 1) )) +# 11569 "parse.ml" + : 'binop_name)) +; (fun __caml_parser_env -> + Obj.repr( +# 2778 "parse.mly" + (let o = () in + ( mk_ident ("<==>", rhs parseState 1) )) +# 11576 "parse.ml" + : 'binop_name)) +; (fun __caml_parser_env -> + Obj.repr( +# 2781 "parse.mly" + (let o = () in + ( mk_ident ("|>", rhs parseState 1) )) +# 11583 "parse.ml" + : 'binop_name)) +; (fun __caml_parser_env -> + Obj.repr( +# 2784 "parse.mly" + (let o = () in + ( mk_ident (":=", rhs parseState 1) )) +# 11590 "parse.ml" + : 'binop_name)) +; (fun __caml_parser_env -> + Obj.repr( +# 2787 "parse.mly" + (let o = () in + ( mk_ident ("::", rhs parseState 1) )) +# 11597 "parse.ml" + : 'binop_name)) +; (fun __caml_parser_env -> + let _1 = (Parsing.peek_val __caml_parser_env 0 : string) in + Obj.repr( +# 2790 "parse.mly" + (let o = _1 in + ( mk_ident (o, rhs parseState 1) )) +# 11605 "parse.ml" + : 'binop_name)) +; (fun __caml_parser_env -> + let _1 = (Parsing.peek_val __caml_parser_env 0 : string) in + Obj.repr( +# 2793 "parse.mly" + (let o = _1 in + ( mk_ident (o, rhs parseState 1) )) +# 11613 "parse.ml" + : 'binop_name)) +; (fun __caml_parser_env -> + let _1 = (Parsing.peek_val __caml_parser_env 0 : 'tmEqWith_appTermNoRecordExp_) in + Obj.repr( +# 2798 "parse.mly" + (let e = _1 in + ( e )) +# 11621 "parse.ml" + : 'tmEqNoRefinement)) +; (fun __caml_parser_env -> + let _1 = (Parsing.peek_val __caml_parser_env 0 : 'tmEqWith_tmRefinement_) in + Obj.repr( +# 2803 "parse.mly" + (let e = _1 in + ( e )) +# 11629 "parse.ml" + : 'tmEq)) +; (fun __caml_parser_env -> + let _1 = (Parsing.peek_val __caml_parser_env 0 : 'tmNoEqWith_tmRefinement_) in + Obj.repr( +# 2808 "parse.mly" + (let e = _1 in + ( e )) +# 11637 "parse.ml" + : 'tmNoEq)) +; (fun __caml_parser_env -> + let _1 = (Parsing.peek_val __caml_parser_env 3 : 'lidentOrUnderscore) in + let _3 = (Parsing.peek_val __caml_parser_env 1 : 'appTermNoRecordExp) in + let _4 = (Parsing.peek_val __caml_parser_env 0 : 'refineOpt) in + Obj.repr( +# 2813 "parse.mly" + (let (id, _2, e, phi_opt) = (_1, (), _3, _4) in + ( + let t = match phi_opt with + | None -> NamedTyp(id, e) + | Some phi -> Refine(mk_binder (Annotated(id, e)) (rhs2 parseState 1 3) Type_level None, phi) + in mk_term t (rhs2 parseState 1 4) Type_level + )) +# 11652 "parse.ml" + : 'tmRefinement)) +; (fun __caml_parser_env -> + let _1 = (Parsing.peek_val __caml_parser_env 0 : 'appTerm) in + Obj.repr( +# 2821 "parse.mly" + (let e = _1 in + ( e )) +# 11660 "parse.ml" + : 'tmRefinement)) +; (fun __caml_parser_env -> + let _1 = (Parsing.peek_val __caml_parser_env 0 : 'option___anonymous_13_) in + Obj.repr( +# 2826 "parse.mly" + (let phi_opt = _1 in + (phi_opt)) +# 11668 "parse.ml" + : 'refineOpt)) +; (fun __caml_parser_env -> + let _1 = (Parsing.peek_val __caml_parser_env 0 : 'right_flexible_nonempty_list_SEMICOLON_simpleDef_) in + Obj.repr( +# 2831 "parse.mly" + (let record_fields = _1 in + ( mk_term (Record (None, record_fields)) (rhs parseState 1) Expr )) +# 11676 "parse.ml" + : 'recordExp)) +; (fun __caml_parser_env -> + let _1 = (Parsing.peek_val __caml_parser_env 2 : 'appTerm) in + let _3 = (Parsing.peek_val __caml_parser_env 0 : 'right_flexible_nonempty_list_SEMICOLON_simpleDef_) in + Obj.repr( +# 2834 "parse.mly" + (let (e, _2, record_fields) = (_1, (), _3) in + ( mk_term (Record (Some e, record_fields)) (rhs2 parseState 1 3) Expr )) +# 11685 "parse.ml" + : 'recordExp)) +; (fun __caml_parser_env -> + let _1 = (Parsing.peek_val __caml_parser_env 2 : 'qlidentOrOperator) in + let _3 = (Parsing.peek_val __caml_parser_env 0 : 'noSeqTerm) in + Obj.repr( +# 2839 "parse.mly" + (let (x, _2, y) = (_1, (), _3) in +let e = ( (x, y) ) in + ( e )) +# 11695 "parse.ml" + : 'simpleDef)) +; (fun __caml_parser_env -> + let _1 = (Parsing.peek_val __caml_parser_env 0 : 'qlidentOrOperator) in + Obj.repr( +# 2843 "parse.mly" + (let lid = _1 in + ( lid, mk_term (Name (lid_of_ids [ ident_of_lid lid ])) (rhs parseState 1) Un )) +# 11703 "parse.ml" + : 'simpleDef)) +; (fun __caml_parser_env -> + let _1 = (Parsing.peek_val __caml_parser_env 1 : 'indexingTerm) in + let _2 = (Parsing.peek_val __caml_parser_env 0 : 'list___anonymous_14_) in + Obj.repr( +# 2848 "parse.mly" + (let (head, args) = (_1, _2) in +let t = ( mkApp head (map (fun (x,y) -> (y,x)) args) (rhs2 parseState 1 2) ) in + (t)) +# 11713 "parse.ml" + : 'appTerm)) +; (fun __caml_parser_env -> + let _1 = (Parsing.peek_val __caml_parser_env 1 : 'indexingTerm) in + let _2 = (Parsing.peek_val __caml_parser_env 0 : 'list_argTerm_) in + Obj.repr( +# 2854 "parse.mly" + (let (head, args) = (_1, _2) in +let t = ( mkApp head (map (fun (x,y) -> (y,x)) args) (rhs2 parseState 1 2) ) in + (t)) +# 11723 "parse.ml" + : 'appTermNoRecordExp)) +; (fun __caml_parser_env -> + let _1 = (Parsing.peek_val __caml_parser_env 0 : 'indexingTerm) in + Obj.repr( +# 2860 "parse.mly" + (let y = _1 in +let x = + let x = ( Nothing ) in + ( (x, y) ) +in + ( x )) +# 11735 "parse.ml" + : 'argTerm)) +; (fun __caml_parser_env -> + let _2 = (Parsing.peek_val __caml_parser_env 0 : 'indexingTerm) in + Obj.repr( +# 2867 "parse.mly" + (let (_1, y) = ((), _2) in +let x = + let x = ( Hash ) in + ( (x, y) ) +in + ( x )) +# 11747 "parse.ml" + : 'argTerm)) +; (fun __caml_parser_env -> + let _1 = (Parsing.peek_val __caml_parser_env 0 : 'universe) in + Obj.repr( +# 2874 "parse.mly" + (let u = _1 in + ( u )) +# 11755 "parse.ml" + : 'argTerm)) +; (fun __caml_parser_env -> + let _1 = (Parsing.peek_val __caml_parser_env 1 : 'atomicTermNotQUident) in + let _2 = (Parsing.peek_val __caml_parser_env 0 : 'nonempty_list_dotOperator_) in + Obj.repr( +# 2879 "parse.mly" + (let (e1, op_exprs) = (_1, _2) in + ( + List.fold_left (fun e1 (op, e2, r) -> + mk_term (Op(op, [ e1; e2 ])) (union_ranges e1.range r) Expr) + e1 op_exprs + )) +# 11768 "parse.ml" + : 'indexingTerm)) +; (fun __caml_parser_env -> + let _1 = (Parsing.peek_val __caml_parser_env 0 : 'atomicTerm) in + Obj.repr( +# 2886 "parse.mly" + (let e = _1 in + ( e )) +# 11776 "parse.ml" + : 'indexingTerm)) +; (fun __caml_parser_env -> + let _1 = (Parsing.peek_val __caml_parser_env 0 : 'atomicTermNotQUident) in + Obj.repr( +# 2891 "parse.mly" + (let x = _1 in + ( x )) +# 11784 "parse.ml" + : 'atomicTerm)) +; (fun __caml_parser_env -> + let _1 = (Parsing.peek_val __caml_parser_env 0 : 'atomicTermQUident) in + Obj.repr( +# 2894 "parse.mly" + (let x = _1 in + ( x )) +# 11792 "parse.ml" + : 'atomicTerm)) +; (fun __caml_parser_env -> + let _1 = (Parsing.peek_val __caml_parser_env 0 : 'opPrefixTerm_atomicTermQUident_) in + Obj.repr( +# 2897 "parse.mly" + (let x = _1 in + ( x )) +# 11800 "parse.ml" + : 'atomicTerm)) +; (fun __caml_parser_env -> + let _1 = (Parsing.peek_val __caml_parser_env 0 : 'quident) in + Obj.repr( +# 2902 "parse.mly" + (let id = _1 in + ( + let t = Name id in + let e = mk_term t (rhs parseState 1) Un in + e + )) +# 11812 "parse.ml" + : 'atomicTermQUident)) +; (fun __caml_parser_env -> + let _1 = (Parsing.peek_val __caml_parser_env 3 : 'quident) in + let _3 = (Parsing.peek_val __caml_parser_env 1 : FStar_Parser_AST.term) in + Obj.repr( +# 2909 "parse.mly" + (let (id, _2, t, _4) = (_1, (), _3, ()) in + ( + mk_term (LetOpen (id, t)) (rhs2 parseState 1 4) Expr + )) +# 11823 "parse.ml" + : 'atomicTermQUident)) +; (fun __caml_parser_env -> + Obj.repr( +# 2916 "parse.mly" + (let _1 = () in + ( mk_term Wild (rhs parseState 1) Un )) +# 11830 "parse.ml" + : 'atomicTermNotQUident)) +; (fun __caml_parser_env -> + let _1 = (Parsing.peek_val __caml_parser_env 0 : 'tvar) in + Obj.repr( +# 2919 "parse.mly" + (let tv = _1 in + ( mk_term (Tvar tv) (rhs parseState 1) Type_level )) +# 11838 "parse.ml" + : 'atomicTermNotQUident)) +; (fun __caml_parser_env -> + let _1 = (Parsing.peek_val __caml_parser_env 0 : 'constant) in + Obj.repr( +# 2922 "parse.mly" + (let c = _1 in + ( mk_term (Const c) (rhs parseState 1) Expr )) +# 11846 "parse.ml" + : 'atomicTermNotQUident)) +; (fun __caml_parser_env -> + let _1 = (Parsing.peek_val __caml_parser_env 0 : 'opPrefixTerm_atomicTermNotQUident_) in + Obj.repr( +# 2925 "parse.mly" + (let x = _1 in + ( x )) +# 11854 "parse.ml" + : 'atomicTermNotQUident)) +; (fun __caml_parser_env -> + let _2 = (Parsing.peek_val __caml_parser_env 1 : string) in + Obj.repr( +# 2928 "parse.mly" + (let (_1, op, _3) = ((), _2, ()) in +let op = ( mk_ident (op, rhs parseState 1) ) in + ( mk_term (Op(op, [])) (rhs2 parseState 1 3) Un )) +# 11863 "parse.ml" + : 'atomicTermNotQUident)) +; (fun __caml_parser_env -> + let _2 = (Parsing.peek_val __caml_parser_env 1 : 'binop_name) in + Obj.repr( +# 2932 "parse.mly" + (let (_1, op, _3) = ((), _2, ()) in +let op = ( op ) in + ( mk_term (Op(op, [])) (rhs2 parseState 1 3) Un )) +# 11872 "parse.ml" + : 'atomicTermNotQUident)) +; (fun __caml_parser_env -> + let _2 = (Parsing.peek_val __caml_parser_env 1 : string) in + Obj.repr( +# 2936 "parse.mly" + (let (_1, op, _3) = ((), _2, ()) in +let op = ( mk_ident (op, rhs parseState 1) ) in + ( mk_term (Op(op, [])) (rhs2 parseState 1 3) Un )) +# 11881 "parse.ml" + : 'atomicTermNotQUident)) +; (fun __caml_parser_env -> + let _2 = (Parsing.peek_val __caml_parser_env 1 : string) in + Obj.repr( +# 2940 "parse.mly" + (let (_1, op, _3) = ((), _2, ()) in +let op = + let op = ( mk_ident ("and" ^ op, rhs parseState 1) ) in + (op) +in + ( mk_term (Op(op, [])) (rhs2 parseState 1 3) Un )) +# 11893 "parse.ml" + : 'atomicTermNotQUident)) +; (fun __caml_parser_env -> + let _2 = (Parsing.peek_val __caml_parser_env 1 : string) in + Obj.repr( +# 2947 "parse.mly" + (let (_1, op, _3) = ((), _2, ()) in +let op = + let op = ( mk_ident ("let" ^ op, rhs parseState 1) ) in + (op) +in + ( mk_term (Op(op, [])) (rhs2 parseState 1 3) Un )) +# 11905 "parse.ml" + : 'atomicTermNotQUident)) +; (fun __caml_parser_env -> + let _2 = (Parsing.peek_val __caml_parser_env 3 : 'tmEq) in + let _4 = (Parsing.peek_val __caml_parser_env 1 : 'separated_nonempty_list_COMMA_tmEq_) in + Obj.repr( +# 2954 "parse.mly" + (let (_1, e0, _3, el, _5) = ((), _2, (), _4, ()) in + ( mkDTuple (e0::el) (rhs2 parseState 1 5) )) +# 11914 "parse.ml" + : 'atomicTermNotQUident)) +; (fun __caml_parser_env -> + let _1 = (Parsing.peek_val __caml_parser_env 1 : 'projectionLHS) in + let _2 = (Parsing.peek_val __caml_parser_env 0 : 'list___anonymous_15_) in + Obj.repr( +# 2957 "parse.mly" + (let (e, field_projs) = (_1, _2) in + ( fold_left (fun e lid -> mk_term (Project(e, lid)) (rhs2 parseState 1 2) Expr ) e field_projs )) +# 11923 "parse.ml" + : 'atomicTermNotQUident)) +; (fun __caml_parser_env -> + let _2 = (Parsing.peek_val __caml_parser_env 1 : FStar_Parser_AST.term) in + Obj.repr( +# 2960 "parse.mly" + (let (_1, e, _3) = ((), _2, ()) in + ( e )) +# 11931 "parse.ml" + : 'atomicTermNotQUident)) +; (fun __caml_parser_env -> + let _1 = (Parsing.peek_val __caml_parser_env 1 : string) in + let _2 = (Parsing.peek_val __caml_parser_env 0 : 'atomicTermNotQUident) in + Obj.repr( +# 2965 "parse.mly" + (let (op, e) = (_1, _2) in + ( mk_term (Op(mk_ident(op, rhs parseState 1), [e])) (rhs2 parseState 1 2) Expr )) +# 11940 "parse.ml" + : 'opPrefixTerm_atomicTermNotQUident_)) +; (fun __caml_parser_env -> + let _1 = (Parsing.peek_val __caml_parser_env 1 : string) in + let _2 = (Parsing.peek_val __caml_parser_env 0 : 'atomicTermQUident) in + Obj.repr( +# 2970 "parse.mly" + (let (op, e) = (_1, _2) in + ( mk_term (Op(mk_ident(op, rhs parseState 1), [e])) (rhs2 parseState 1 2) Expr )) +# 11949 "parse.ml" + : 'opPrefixTerm_atomicTermQUident_)) +; (fun __caml_parser_env -> + let _1 = (Parsing.peek_val __caml_parser_env 0 : 'qidentWithTypeArgs_qlident_option_fsTypeArgs__) in + Obj.repr( +# 2975 "parse.mly" + (let e = _1 in + ( e )) +# 11957 "parse.ml" + : 'projectionLHS)) +; (fun __caml_parser_env -> + let _1 = (Parsing.peek_val __caml_parser_env 0 : 'qidentWithTypeArgs_quident_some_fsTypeArgs__) in + Obj.repr( +# 2978 "parse.mly" + (let e = _1 in + ( e )) +# 11965 "parse.ml" + : 'projectionLHS)) +; (fun __caml_parser_env -> + let _2 = (Parsing.peek_val __caml_parser_env 2 : FStar_Parser_AST.term) in + let _3 = (Parsing.peek_val __caml_parser_env 1 : 'option_pair_hasSort_simpleTerm__) in + Obj.repr( +# 2981 "parse.mly" + (let (_1, e, sort_opt, _4) = ((), _2, _3, ()) in + ( + (* Note: we have to keep the parentheses here. Consider t * u * v. This + * is parsed as Op2( *, Op2( *, t, u), v). The desugaring phase then looks + * up * and figures out that it hasn't been overridden, meaning that + * it's a tuple type, and proceeds to flatten out the whole tuple. Now + * consider (t * u) * v. We keep the Paren node, which prevents the + * flattening from happening, hence ensuring the proper type is + * generated. *) + let e1 = match sort_opt with + | None -> e + | Some (level, t) -> mk_term (Ascribed(e,{t with level=level},None,false)) (rhs2 parseState 1 4) level + in mk_term (Paren e1) (rhs2 parseState 1 4) (e.level) + )) +# 11986 "parse.ml" + : 'projectionLHS)) +; (fun __caml_parser_env -> + let _2 = (Parsing.peek_val __caml_parser_env 1 : 'right_flexible_list_SEMICOLON_noSeqTerm_) in + Obj.repr( +# 2996 "parse.mly" + (let (_1, l, _3) = ((), _2, ()) in +let es = ( l ) in + ( + let l = mkConsList (rhs2 parseState 1 3) es in + let pos = (rhs2 parseState 1 3) in + mkExplicitApp (mk_term (Var (array_of_list_lid)) pos Expr) [l] pos + )) +# 11999 "parse.ml" + : 'projectionLHS)) +; (fun __caml_parser_env -> + let _2 = (Parsing.peek_val __caml_parser_env 1 : 'right_flexible_list_SEMICOLON_noSeqTerm_) in + Obj.repr( +# 3004 "parse.mly" + (let (_1, l, _3) = ((), _2, ()) in +let es = ( l ) in + ( mkConsList (rhs2 parseState 1 3) es )) +# 12008 "parse.ml" + : 'projectionLHS)) +; (fun __caml_parser_env -> + let _2 = (Parsing.peek_val __caml_parser_env 1 : 'right_flexible_list_SEMICOLON_noSeqTerm_) in + Obj.repr( +# 3008 "parse.mly" + (let (_1, l, _3) = ((), _2, ()) in +let es = ( l ) in + ( mk_term (LexList es) (rhs2 parseState 1 3) Type_level )) +# 12017 "parse.ml" + : 'projectionLHS)) +; (fun __caml_parser_env -> + let _2 = (Parsing.peek_val __caml_parser_env 1 : 'loption_separated_nonempty_list_COMMA_appTerm__) in + Obj.repr( +# 3012 "parse.mly" + (let (_1, xs, _3) = ((), _2, ()) in +let es = ( xs ) in + ( mkRefSet (rhs2 parseState 1 3) es )) +# 12026 "parse.ml" + : 'projectionLHS)) +; (fun __caml_parser_env -> + let _1 = (Parsing.peek_val __caml_parser_env 2 : 'quident) in + let _3 = (Parsing.peek_val __caml_parser_env 0 : FStar_Ident.ident) in + Obj.repr( +# 3016 "parse.mly" + (let (ns, _2, id) = (_1, (), _3) in + ( mk_term (Projector (ns, id)) (rhs2 parseState 1 3) Expr )) +# 12035 "parse.ml" + : 'projectionLHS)) +; (fun __caml_parser_env -> + let _1 = (Parsing.peek_val __caml_parser_env 1 : 'quident) in + Obj.repr( +# 3019 "parse.mly" + (let (lid, _2) = (_1, ()) in + ( mk_term (Discrim lid) (rhs2 parseState 1 2) Un )) +# 12043 "parse.ml" + : 'projectionLHS)) +; (fun __caml_parser_env -> + let _2 = (Parsing.peek_val __caml_parser_env 1 : 'separated_nonempty_list_COMMA_atomicTerm_) in + Obj.repr( +# 3024 "parse.mly" + (let (_1, targs, _3) = ((), _2, ()) in + (targs)) +# 12051 "parse.ml" + : 'fsTypeArgs)) +; (fun __caml_parser_env -> + let _1 = (Parsing.peek_val __caml_parser_env 1 : 'qlident) in + let _2 = (Parsing.peek_val __caml_parser_env 0 : 'option_fsTypeArgs_) in + Obj.repr( +# 3029 "parse.mly" + (let (id, targs_opt) = (_1, _2) in + ( + let t = if is_name id then Name id else Var id in + let e = mk_term t (rhs parseState 1) Un in + match targs_opt with + | None -> e + | Some targs -> mkFsTypApp e targs (rhs2 parseState 1 2) + )) +# 12066 "parse.ml" + : 'qidentWithTypeArgs_qlident_option_fsTypeArgs__)) +; (fun __caml_parser_env -> + let _1 = (Parsing.peek_val __caml_parser_env 1 : 'quident) in + let _2 = (Parsing.peek_val __caml_parser_env 0 : 'some_fsTypeArgs_) in + Obj.repr( +# 3040 "parse.mly" + (let (id, targs_opt) = (_1, _2) in + ( + let t = if is_name id then Name id else Var id in + let e = mk_term t (rhs parseState 1) Un in + match targs_opt with + | None -> e + | Some targs -> mkFsTypApp e targs (rhs2 parseState 1 2) + )) +# 12081 "parse.ml" + : 'qidentWithTypeArgs_quident_some_fsTypeArgs__)) +; (fun __caml_parser_env -> + Obj.repr( +# 3051 "parse.mly" + (let _1 = () in + ( Type_level )) +# 12088 "parse.ml" + : 'hasSort)) +; (fun __caml_parser_env -> + Obj.repr( +# 3056 "parse.mly" + (let _1 = () in + ( Const_unit )) +# 12095 "parse.ml" + : 'constant)) +; (fun __caml_parser_env -> + let _1 = (Parsing.peek_val __caml_parser_env 0 : string * bool) in + Obj.repr( +# 3059 "parse.mly" + (let n = _1 in + ( + if snd n then + log_issue (lhs parseState) (Error_OutOfRange, "This number is outside the allowable range for representable integer constants"); + Const_int (fst n, None) + )) +# 12107 "parse.ml" + : 'constant)) +; (fun __caml_parser_env -> + let _1 = (Parsing.peek_val __caml_parser_env 0 : char) in + Obj.repr( +# 3066 "parse.mly" + (let c = _1 in + ( Const_char c )) +# 12115 "parse.ml" + : 'constant)) +; (fun __caml_parser_env -> + let _1 = (Parsing.peek_val __caml_parser_env 0 : string) in + Obj.repr( +# 3069 "parse.mly" + (let s = _1 in + ( Const_string (s,lhs(parseState)) )) +# 12123 "parse.ml" + : 'constant)) +; (fun __caml_parser_env -> + Obj.repr( +# 3072 "parse.mly" + (let _1 = () in + ( Const_bool true )) +# 12130 "parse.ml" + : 'constant)) +; (fun __caml_parser_env -> + Obj.repr( +# 3075 "parse.mly" + (let _1 = () in + ( Const_bool false )) +# 12137 "parse.ml" + : 'constant)) +; (fun __caml_parser_env -> + let _1 = (Parsing.peek_val __caml_parser_env 0 : string) in + Obj.repr( +# 3078 "parse.mly" + (let r = _1 in + ( Const_real r )) +# 12145 "parse.ml" + : 'constant)) +; (fun __caml_parser_env -> + let _1 = (Parsing.peek_val __caml_parser_env 0 : string) in + Obj.repr( +# 3081 "parse.mly" + (let n = _1 in + ( Const_int (n, Some (Unsigned, Int8)) )) +# 12153 "parse.ml" + : 'constant)) +; (fun __caml_parser_env -> + let _1 = (Parsing.peek_val __caml_parser_env 0 : string * bool) in + Obj.repr( +# 3084 "parse.mly" + (let n = _1 in + ( + if snd n then + log_issue (lhs(parseState)) (Error_OutOfRange, "This number is outside the allowable range for 8-bit signed integers"); + Const_int (fst n, Some (Signed, Int8)) + )) +# 12165 "parse.ml" + : 'constant)) +; (fun __caml_parser_env -> + let _1 = (Parsing.peek_val __caml_parser_env 0 : string) in + Obj.repr( +# 3091 "parse.mly" + (let n = _1 in + ( Const_int (n, Some (Unsigned, Int16)) )) +# 12173 "parse.ml" + : 'constant)) +; (fun __caml_parser_env -> + let _1 = (Parsing.peek_val __caml_parser_env 0 : string * bool) in + Obj.repr( +# 3094 "parse.mly" + (let n = _1 in + ( + if snd n then + log_issue (lhs(parseState)) (Error_OutOfRange, "This number is outside the allowable range for 16-bit signed integers"); + Const_int (fst n, Some (Signed, Int16)) + )) +# 12185 "parse.ml" + : 'constant)) +; (fun __caml_parser_env -> + let _1 = (Parsing.peek_val __caml_parser_env 0 : string) in + Obj.repr( +# 3101 "parse.mly" + (let n = _1 in + ( Const_int (n, Some (Unsigned, Int32)) )) +# 12193 "parse.ml" + : 'constant)) +; (fun __caml_parser_env -> + let _1 = (Parsing.peek_val __caml_parser_env 0 : string * bool) in + Obj.repr( +# 3104 "parse.mly" + (let n = _1 in + ( + if snd n then + log_issue (lhs(parseState)) (Error_OutOfRange, "This number is outside the allowable range for 32-bit signed integers"); + Const_int (fst n, Some (Signed, Int32)) + )) +# 12205 "parse.ml" + : 'constant)) +; (fun __caml_parser_env -> + let _1 = (Parsing.peek_val __caml_parser_env 0 : string) in + Obj.repr( +# 3111 "parse.mly" + (let n = _1 in + ( Const_int (n, Some (Unsigned, Int64)) )) +# 12213 "parse.ml" + : 'constant)) +; (fun __caml_parser_env -> + let _1 = (Parsing.peek_val __caml_parser_env 0 : string * bool) in + Obj.repr( +# 3114 "parse.mly" + (let n = _1 in + ( + if snd n then + log_issue (lhs(parseState)) (Error_OutOfRange, "This number is outside the allowable range for 64-bit signed integers"); + Const_int (fst n, Some (Signed, Int64)) + )) +# 12225 "parse.ml" + : 'constant)) +; (fun __caml_parser_env -> + let _1 = (Parsing.peek_val __caml_parser_env 0 : string) in + Obj.repr( +# 3121 "parse.mly" + (let n = _1 in + ( Const_int (n, Some (Unsigned, Sizet)) )) +# 12233 "parse.ml" + : 'constant)) +; (fun __caml_parser_env -> + Obj.repr( +# 3124 "parse.mly" + (let _1 = () in + ( Const_reify )) +# 12240 "parse.ml" + : 'constant)) +; (fun __caml_parser_env -> + Obj.repr( +# 3127 "parse.mly" + (let _1 = () in + ( Const_range_of )) +# 12247 "parse.ml" + : 'constant)) +; (fun __caml_parser_env -> + Obj.repr( +# 3130 "parse.mly" + (let _1 = () in + ( Const_set_range_of )) +# 12254 "parse.ml" + : 'constant)) +; (fun __caml_parser_env -> + let _2 = (Parsing.peek_val __caml_parser_env 0 : 'atomicUniverse) in + Obj.repr( +# 3135 "parse.mly" + (let (_1, ua) = ((), _2) in + ( (UnivApp, ua) )) +# 12262 "parse.ml" + : 'universe)) +; (fun __caml_parser_env -> + let _1 = (Parsing.peek_val __caml_parser_env 0 : 'atomicUniverse) in + Obj.repr( +# 3140 "parse.mly" + (let ua = _1 in + ( ua )) +# 12270 "parse.ml" + : 'universeFrom)) +; (fun __caml_parser_env -> + let _1 = (Parsing.peek_val __caml_parser_env 2 : 'universeFrom) in + let _2 = (Parsing.peek_val __caml_parser_env 1 : string) in + let _3 = (Parsing.peek_val __caml_parser_env 0 : 'universeFrom) in + Obj.repr( +# 3143 "parse.mly" + (let (u1, op_plus, u2) = (_1, _2, _3) in + ( + if op_plus <> "+" + then log_issue (rhs parseState 2) (Error_OpPlusInUniverse, ("The operator " ^ op_plus ^ " was found in universe context." + ^ "The only allowed operator in that context is +.")); + mk_term (Op(mk_ident (op_plus, rhs parseState 2), [u1 ; u2])) (rhs2 parseState 1 3) Expr + )) +# 12285 "parse.ml" + : 'universeFrom)) +; (fun __caml_parser_env -> + let _1 = (Parsing.peek_val __caml_parser_env 1 : 'ident) in + let _2 = (Parsing.peek_val __caml_parser_env 0 : 'nonempty_list_atomicUniverse_) in + Obj.repr( +# 3151 "parse.mly" + (let (max, us) = (_1, _2) in + ( + if string_of_id max <> string_of_lid max_lid + then log_issue (rhs parseState 1) (Error_InvalidUniverseVar, "A lower case ident " ^ string_of_id max ^ + " was found in a universe context. " ^ + "It should be either max or a universe variable 'usomething."); + let max = mk_term (Var (lid_of_ids [max])) (rhs parseState 1) Expr in + mkApp max (map (fun u -> u, Nothing) us) (rhs2 parseState 1 2) + )) +# 12301 "parse.ml" + : 'universeFrom)) +; (fun __caml_parser_env -> + Obj.repr( +# 3163 "parse.mly" + (let _1 = () in + ( mk_term Wild (rhs parseState 1) Expr )) +# 12308 "parse.ml" + : 'atomicUniverse)) +; (fun __caml_parser_env -> + let _1 = (Parsing.peek_val __caml_parser_env 0 : string * bool) in + Obj.repr( +# 3166 "parse.mly" + (let n = _1 in + ( + if snd n then + log_issue (lhs(parseState)) (Error_OutOfRange, "This number is outside the allowable range for representable integer constants"); + mk_term (Const (Const_int (fst n, None))) (rhs parseState 1) Expr + )) +# 12320 "parse.ml" + : 'atomicUniverse)) +; (fun __caml_parser_env -> + let _1 = (Parsing.peek_val __caml_parser_env 0 : FStar_Ident.ident) in + Obj.repr( +# 3173 "parse.mly" + (let u = _1 in + ( mk_term (Uvar u) (range_of_id u) Expr )) +# 12328 "parse.ml" + : 'atomicUniverse)) +; (fun __caml_parser_env -> + let _2 = (Parsing.peek_val __caml_parser_env 1 : 'universeFrom) in + Obj.repr( +# 3176 "parse.mly" + (let (_1, u, _3) = ((), _2, ()) in + ( u (*mk_term (Paren u) (rhs2 parseState 1 3) Expr*) )) +# 12336 "parse.ml" + : 'atomicUniverse)) +; (fun __caml_parser_env -> + let _1 = (Parsing.peek_val __caml_parser_env 1 : 'warn_error) in + Obj.repr( +# 3181 "parse.mly" + (let (e, _2) = (_1, ()) in + ( e )) +# 12344 "parse.ml" + : (FStar_Errors.flag * string) list)) +; (fun __caml_parser_env -> + let _1 = (Parsing.peek_val __caml_parser_env 1 : 'flag) in + let _2 = (Parsing.peek_val __caml_parser_env 0 : 'range) in + Obj.repr( +# 3186 "parse.mly" + (let (f, r) = (_1, _2) in + ( [(f, r)] )) +# 12353 "parse.ml" + : 'warn_error)) +; (fun __caml_parser_env -> + let _1 = (Parsing.peek_val __caml_parser_env 2 : 'flag) in + let _2 = (Parsing.peek_val __caml_parser_env 1 : 'range) in + let _3 = (Parsing.peek_val __caml_parser_env 0 : 'warn_error) in + Obj.repr( +# 3189 "parse.mly" + (let (f, r, e) = (_1, _2, _3) in + ( (f, r) :: e )) +# 12363 "parse.ml" + : 'warn_error)) +; (fun __caml_parser_env -> + let _1 = (Parsing.peek_val __caml_parser_env 0 : string) in + Obj.repr( +# 3194 "parse.mly" + (let op = _1 in + ( if op = "@" then CAlwaysError else failwith (format1 "unexpected token %s in warn-error list" op))) +# 12371 "parse.ml" + : 'flag)) +; (fun __caml_parser_env -> + let _1 = (Parsing.peek_val __caml_parser_env 0 : string) in + Obj.repr( +# 3197 "parse.mly" + (let op = _1 in + ( if op = "+" then CWarning else failwith (format1 "unexpected token %s in warn-error list" op))) +# 12379 "parse.ml" + : 'flag)) +; (fun __caml_parser_env -> + Obj.repr( +# 3200 "parse.mly" + (let _1 = () in + ( CSilent )) +# 12386 "parse.ml" + : 'flag)) +; (fun __caml_parser_env -> + let _1 = (Parsing.peek_val __caml_parser_env 0 : string * bool) in + Obj.repr( +# 3205 "parse.mly" + (let i = _1 in + ( format2 "%s..%s" (fst i) (fst i) )) +# 12394 "parse.ml" + : 'range)) +; (fun __caml_parser_env -> + let _1 = (Parsing.peek_val __caml_parser_env 0 : string) in + Obj.repr( +# 3208 "parse.mly" + (let r = _1 in + ( r )) +# 12402 "parse.ml" + : 'range)) +; (fun __caml_parser_env -> + let _1 = (Parsing.peek_val __caml_parser_env 0 : string) in + Obj.repr( +# 3213 "parse.mly" + (let s = _1 in + ( s )) +# 12410 "parse.ml" + : 'string)) +; (fun __caml_parser_env -> + let _1 = (Parsing.peek_val __caml_parser_env 0 : 'fsTypeArgs) in + Obj.repr( +# 3218 "parse.mly" + (let x = _1 in + ( Some x )) +# 12418 "parse.ml" + : 'some_fsTypeArgs_)) +; (fun __caml_parser_env -> + Obj.repr( +# 3223 "parse.mly" + ( ( [] )) +# 12424 "parse.ml" + : 'right_flexible_list_SEMICOLON_fieldPattern_)) +; (fun __caml_parser_env -> + let _1 = (Parsing.peek_val __caml_parser_env 0 : 'fieldPattern) in + Obj.repr( +# 3225 "parse.mly" + (let x = _1 in + ( [x] )) +# 12432 "parse.ml" + : 'right_flexible_list_SEMICOLON_fieldPattern_)) +; (fun __caml_parser_env -> + let _1 = (Parsing.peek_val __caml_parser_env 2 : 'fieldPattern) in + let _3 = (Parsing.peek_val __caml_parser_env 0 : 'right_flexible_list_SEMICOLON_fieldPattern_) in + Obj.repr( +# 3228 "parse.mly" + (let (x, _2, xs) = (_1, (), _3) in + ( x :: xs )) +# 12441 "parse.ml" + : 'right_flexible_list_SEMICOLON_fieldPattern_)) +; (fun __caml_parser_env -> + Obj.repr( +# 3233 "parse.mly" + ( ( [] )) +# 12447 "parse.ml" + : 'right_flexible_list_SEMICOLON_noSeqTerm_)) +; (fun __caml_parser_env -> + let _1 = (Parsing.peek_val __caml_parser_env 0 : 'noSeqTerm) in + Obj.repr( +# 3235 "parse.mly" + (let x = _1 in + ( [x] )) +# 12455 "parse.ml" + : 'right_flexible_list_SEMICOLON_noSeqTerm_)) +; (fun __caml_parser_env -> + let _1 = (Parsing.peek_val __caml_parser_env 2 : 'noSeqTerm) in + let _3 = (Parsing.peek_val __caml_parser_env 0 : 'right_flexible_list_SEMICOLON_noSeqTerm_) in + Obj.repr( +# 3238 "parse.mly" + (let (x, _2, xs) = (_1, (), _3) in + ( x :: xs )) +# 12464 "parse.ml" + : 'right_flexible_list_SEMICOLON_noSeqTerm_)) +; (fun __caml_parser_env -> + Obj.repr( +# 3243 "parse.mly" + ( ( [] )) +# 12470 "parse.ml" + : 'right_flexible_list_SEMICOLON_recordFieldDecl_)) +; (fun __caml_parser_env -> + let _1 = (Parsing.peek_val __caml_parser_env 0 : 'recordFieldDecl) in + Obj.repr( +# 3245 "parse.mly" + (let x = _1 in + ( [x] )) +# 12478 "parse.ml" + : 'right_flexible_list_SEMICOLON_recordFieldDecl_)) +; (fun __caml_parser_env -> + let _1 = (Parsing.peek_val __caml_parser_env 2 : 'recordFieldDecl) in + let _3 = (Parsing.peek_val __caml_parser_env 0 : 'right_flexible_list_SEMICOLON_recordFieldDecl_) in + Obj.repr( +# 3248 "parse.mly" + (let (x, _2, xs) = (_1, (), _3) in + ( x :: xs )) +# 12487 "parse.ml" + : 'right_flexible_list_SEMICOLON_recordFieldDecl_)) +; (fun __caml_parser_env -> + Obj.repr( +# 3253 "parse.mly" + ( ( [] )) +# 12493 "parse.ml" + : 'right_flexible_list_SEMICOLON_simpleDef_)) +; (fun __caml_parser_env -> + let _1 = (Parsing.peek_val __caml_parser_env 0 : 'simpleDef) in + Obj.repr( +# 3255 "parse.mly" + (let x = _1 in + ( [x] )) +# 12501 "parse.ml" + : 'right_flexible_list_SEMICOLON_simpleDef_)) +; (fun __caml_parser_env -> + let _1 = (Parsing.peek_val __caml_parser_env 2 : 'simpleDef) in + let _3 = (Parsing.peek_val __caml_parser_env 0 : 'right_flexible_list_SEMICOLON_simpleDef_) in + Obj.repr( +# 3258 "parse.mly" + (let (x, _2, xs) = (_1, (), _3) in + ( x :: xs )) +# 12510 "parse.ml" + : 'right_flexible_list_SEMICOLON_simpleDef_)) +; (fun __caml_parser_env -> + let _1 = (Parsing.peek_val __caml_parser_env 0 : 'fieldPattern) in + Obj.repr( +# 3263 "parse.mly" + (let x = _1 in + ( [x] )) +# 12518 "parse.ml" + : 'right_flexible_nonempty_list_SEMICOLON_fieldPattern_)) +; (fun __caml_parser_env -> + let _1 = (Parsing.peek_val __caml_parser_env 2 : 'fieldPattern) in + let _3 = (Parsing.peek_val __caml_parser_env 0 : 'right_flexible_list_SEMICOLON_fieldPattern_) in + Obj.repr( +# 3266 "parse.mly" + (let (x, _2, xs) = (_1, (), _3) in + ( x :: xs )) +# 12527 "parse.ml" + : 'right_flexible_nonempty_list_SEMICOLON_fieldPattern_)) +; (fun __caml_parser_env -> + let _1 = (Parsing.peek_val __caml_parser_env 0 : 'recordFieldDecl) in + Obj.repr( +# 3271 "parse.mly" + (let x = _1 in + ( [x] )) +# 12535 "parse.ml" + : 'right_flexible_nonempty_list_SEMICOLON_recordFieldDecl_)) +; (fun __caml_parser_env -> + let _1 = (Parsing.peek_val __caml_parser_env 2 : 'recordFieldDecl) in + let _3 = (Parsing.peek_val __caml_parser_env 0 : 'right_flexible_list_SEMICOLON_recordFieldDecl_) in + Obj.repr( +# 3274 "parse.mly" + (let (x, _2, xs) = (_1, (), _3) in + ( x :: xs )) +# 12544 "parse.ml" + : 'right_flexible_nonempty_list_SEMICOLON_recordFieldDecl_)) +; (fun __caml_parser_env -> + let _1 = (Parsing.peek_val __caml_parser_env 0 : 'simpleDef) in + Obj.repr( +# 3279 "parse.mly" + (let x = _1 in + ( [x] )) +# 12552 "parse.ml" + : 'right_flexible_nonempty_list_SEMICOLON_simpleDef_)) +; (fun __caml_parser_env -> + let _1 = (Parsing.peek_val __caml_parser_env 2 : 'simpleDef) in + let _3 = (Parsing.peek_val __caml_parser_env 0 : 'right_flexible_list_SEMICOLON_simpleDef_) in + Obj.repr( +# 3282 "parse.mly" + (let (x, _2, xs) = (_1, (), _3) in + ( x :: xs )) +# 12561 "parse.ml" + : 'right_flexible_nonempty_list_SEMICOLON_simpleDef_)) +; (fun __caml_parser_env -> + Obj.repr( +# 3287 "parse.mly" + ( ( [] )) +# 12567 "parse.ml" + : 'reverse_left_flexible_list_BAR___anonymous_10_)) +; (fun __caml_parser_env -> + let _1 = (Parsing.peek_val __caml_parser_env 0 : 'patternBranch) in + Obj.repr( +# 3289 "parse.mly" + (let pb = _1 in +let x = (pb) in + ( [x] )) +# 12576 "parse.ml" + : 'reverse_left_flexible_list_BAR___anonymous_10_)) +; (fun __caml_parser_env -> + let _1 = (Parsing.peek_val __caml_parser_env 2 : 'reverse_left_flexible_list_BAR___anonymous_10_) in + let _3 = (Parsing.peek_val __caml_parser_env 0 : 'patternBranch) in + Obj.repr( +# 3293 "parse.mly" + (let (xs, _2, pb) = (_1, (), _3) in +let x = (pb) in + ( x :: xs )) +# 12586 "parse.ml" + : 'reverse_left_flexible_list_BAR___anonymous_10_)) +; (fun __caml_parser_env -> + let _1 = (Parsing.peek_val __caml_parser_env 0 : 'patternBranch) in + Obj.repr( +# 3299 "parse.mly" + (let x = _1 in +let _1 = ( None ) in + ( [x] )) +# 12595 "parse.ml" + : 'reverse_left_flexible_nonempty_list_BAR_patternBranch_)) +; (fun __caml_parser_env -> + let _2 = (Parsing.peek_val __caml_parser_env 0 : 'patternBranch) in + Obj.repr( +# 3303 "parse.mly" + (let (x_inlined1, x) = ((), _2) in +let _1 = + let x = x_inlined1 in + ( Some x ) +in + ( [x] )) +# 12607 "parse.ml" + : 'reverse_left_flexible_nonempty_list_BAR_patternBranch_)) +; (fun __caml_parser_env -> + let _1 = (Parsing.peek_val __caml_parser_env 2 : 'reverse_left_flexible_nonempty_list_BAR_patternBranch_) in + let _3 = (Parsing.peek_val __caml_parser_env 0 : 'patternBranch) in + Obj.repr( +# 3310 "parse.mly" + (let (xs, _2, x) = (_1, (), _3) in + ( x :: xs )) +# 12616 "parse.ml" + : 'reverse_left_flexible_nonempty_list_BAR_patternBranch_)) +(* Entry inputFragment *) +; (fun __caml_parser_env -> raise (Parsing.YYexit (Parsing.peek_val __caml_parser_env 0))) +(* Entry term *) +; (fun __caml_parser_env -> raise (Parsing.YYexit (Parsing.peek_val __caml_parser_env 0))) +(* Entry warn_error_list *) +; (fun __caml_parser_env -> raise (Parsing.YYexit (Parsing.peek_val __caml_parser_env 0))) +|] +let yytables = + { Parsing.actions=yyact; + Parsing.transl_const=yytransl_const; + Parsing.transl_block=yytransl_block; + Parsing.lhs=yylhs; + Parsing.len=yylen; + Parsing.defred=yydefred; + Parsing.dgoto=yydgoto; + Parsing.sindex=yysindex; + Parsing.rindex=yyrindex; + Parsing.gindex=yygindex; + Parsing.tablesize=yytablesize; + Parsing.table=yytable; + Parsing.check=yycheck; + Parsing.error_function=parse_error; + Parsing.names_const=yynames_const; + Parsing.names_block=yynames_block } +let inputFragment (lexfun : Lexing.lexbuf -> token) (lexbuf : Lexing.lexbuf) = + (Parsing.yyparse yytables 1 lexfun lexbuf : FStar_Parser_AST.inputFragment) +let term (lexfun : Lexing.lexbuf -> token) (lexbuf : Lexing.lexbuf) = + (Parsing.yyparse yytables 2 lexfun lexbuf : FStar_Parser_AST.term) +let warn_error_list (lexfun : Lexing.lexbuf -> token) (lexbuf : Lexing.lexbuf) = + (Parsing.yyparse yytables 3 lexfun lexbuf : (FStar_Errors.flag * string) list) +;; diff --git a/src/ocaml-output/FStar_Parser_ToDocument.ml b/ocaml/fstar-lib/generated/FStar_Parser_ToDocument.ml similarity index 99% rename from src/ocaml-output/FStar_Parser_ToDocument.ml rename to ocaml/fstar-lib/generated/FStar_Parser_ToDocument.ml index 5e9ad3e1a66..8d38b4b08d3 100644 --- a/src/ocaml-output/FStar_Parser_ToDocument.ml +++ b/ocaml/fstar-lib/generated/FStar_Parser_ToDocument.ml @@ -4833,8 +4833,11 @@ and (p_atomicUniverse : FStar_Parser_AST.term -> FStar_Pprint.document) = failwith uu___1 let (term_to_document : FStar_Parser_AST.term -> FStar_Pprint.document) = fun e -> + let old_unfold_tuples = FStar_Compiler_Effect.op_Bang unfold_tuples in FStar_Compiler_Effect.op_Colon_Equals unfold_tuples false; - p_term false false e + (let res = p_term false false e in + FStar_Compiler_Effect.op_Colon_Equals unfold_tuples old_unfold_tuples; + res) let (signature_to_document : FStar_Parser_AST.decl -> FStar_Pprint.document) = fun e -> p_justSig e let (decl_to_document : FStar_Parser_AST.decl -> FStar_Pprint.document) = diff --git a/ocaml/fstar-lib/generated/FStar_PartialMap.ml b/ocaml/fstar-lib/generated/FStar_PartialMap.ml new file mode 100644 index 00000000000..e874ba53c4e --- /dev/null +++ b/ocaml/fstar-lib/generated/FStar_PartialMap.ml @@ -0,0 +1,28 @@ +open Prims +type ('k, 'v) t = + ('k, 'v FStar_Pervasives_Native.option) + FStar_FunctionalExtensionality.restricted_t +let empty : 'uuuuu 'uuuuu1 . unit -> ('uuuuu, 'uuuuu1) t = + fun uu___ -> + FStar_FunctionalExtensionality.on_domain + (fun uu___1 -> FStar_Pervasives_Native.None) +let literal : 'k 'v . ('k -> 'v FStar_Pervasives_Native.option) -> ('k, 'v) t + = fun f -> FStar_FunctionalExtensionality.on_domain (fun x -> f x) +let sel : 'k 'v . ('k, 'v) t -> 'k -> 'v FStar_Pervasives_Native.option = + fun m -> fun x -> m x +let upd : 'k 'v . ('k, 'v) t -> 'k -> 'v -> ('k, 'v) t = + fun m -> + fun x -> + fun y -> + FStar_FunctionalExtensionality.on_domain + (fun x1 -> if x1 = x then FStar_Pervasives_Native.Some y else m x1) +let remove : 'k 'v . ('k, 'v) t -> 'k -> ('k, 'v) t = + fun m -> + fun x -> + FStar_FunctionalExtensionality.on_domain + (fun x1 -> if x1 = x then FStar_Pervasives_Native.None else m x1) +let contains : 'k 'v . ('k, 'v) t -> 'k -> Prims.bool = + fun m -> fun x -> FStar_Pervasives_Native.uu___is_Some (sel m x) +let const : 'k 'v . 'v -> ('k, 'v) t = + fun y -> literal (fun x -> FStar_Pervasives_Native.Some y) +type ('k, 'v, 'm1, 'm2) equal = unit \ No newline at end of file diff --git a/src/ocaml-output/FStar_Pervasives.ml b/ocaml/fstar-lib/generated/FStar_Pervasives.ml similarity index 100% rename from src/ocaml-output/FStar_Pervasives.ml rename to ocaml/fstar-lib/generated/FStar_Pervasives.ml diff --git a/ocaml/fstar-lib/generated/FStar_PredicateExtensionality.ml b/ocaml/fstar-lib/generated/FStar_PredicateExtensionality.ml new file mode 100644 index 00000000000..d1654b038ef --- /dev/null +++ b/ocaml/fstar-lib/generated/FStar_PredicateExtensionality.ml @@ -0,0 +1,3 @@ +open Prims +type 'a predicate = unit +type ('a, 'p1, 'p2) peq = unit \ No newline at end of file diff --git a/ocaml/fstar-lib/generated/FStar_Preorder.ml b/ocaml/fstar-lib/generated/FStar_Preorder.ml new file mode 100644 index 00000000000..538b10ad377 --- /dev/null +++ b/ocaml/fstar-lib/generated/FStar_Preorder.ml @@ -0,0 +1,8 @@ +open Prims +type 'a relation = unit +type 'a predicate = unit +type ('a, 'rel) reflexive = unit +type ('a, 'rel) transitive = unit +type ('a, 'rel) preorder_rel = unit +type 'a preorder = unit +type ('a, 'p, 'rel) stable = unit \ No newline at end of file diff --git a/src/ocaml-output/FStar_Prettyprint.ml b/ocaml/fstar-lib/generated/FStar_Prettyprint.ml similarity index 100% rename from src/ocaml-output/FStar_Prettyprint.ml rename to ocaml/fstar-lib/generated/FStar_Prettyprint.ml diff --git a/src/ocaml-output/FStar_Profiling.ml b/ocaml/fstar-lib/generated/FStar_Profiling.ml similarity index 100% rename from src/ocaml-output/FStar_Profiling.ml rename to ocaml/fstar-lib/generated/FStar_Profiling.ml diff --git a/ocaml/fstar-lib/generated/FStar_PropositionalExtensionality.ml b/ocaml/fstar-lib/generated/FStar_PropositionalExtensionality.ml new file mode 100644 index 00000000000..e8306abedb2 --- /dev/null +++ b/ocaml/fstar-lib/generated/FStar_PropositionalExtensionality.ml @@ -0,0 +1 @@ +open Prims \ No newline at end of file diff --git a/ocaml/fstar-lib/generated/FStar_PtrdiffT.ml b/ocaml/fstar-lib/generated/FStar_PtrdiffT.ml new file mode 100644 index 00000000000..922174eee30 --- /dev/null +++ b/ocaml/fstar-lib/generated/FStar_PtrdiffT.ml @@ -0,0 +1,19 @@ +open Prims +type t = FStar_Int64.t +type 'x fits = unit +let (v : t -> Prims.int) = fun x -> FStar_Int64.v x +let (int_to_t : Prims.int -> t) = fun x -> FStar_Int64.int_to_t x +let (ptrdifft_to_sizet : t -> FStar_SizeT.t) = + fun x -> FStar_Int_Cast.int64_to_uint64 x +let (add : t -> t -> t) = fun x -> fun y -> FStar_Int64.add x y +let (div : t -> t -> t) = fun x -> fun y -> FStar_Int64.div x y +let (rem : t -> t -> t) = fun x -> fun y -> FStar_Int64.rem x y +let (gt : t -> t -> Prims.bool) = fun x -> fun y -> FStar_Int64.gt x y +let (gte : t -> t -> Prims.bool) = fun x -> fun y -> FStar_Int64.gte x y +let (lt : t -> t -> Prims.bool) = fun x -> fun y -> FStar_Int64.lt x y +let (lte : t -> t -> Prims.bool) = fun x -> fun y -> FStar_Int64.lte x y +let (op_Plus_Hat : t -> t -> t) = add +let (op_Greater_Hat : t -> t -> Prims.bool) = gt +let (op_Greater_Equals_Hat : t -> t -> Prims.bool) = gte +let (op_Less_Hat : t -> t -> Prims.bool) = lt +let (op_Less_Equals_Hat : t -> t -> Prims.bool) = lte \ No newline at end of file diff --git a/ocaml/fstar-lib/generated/FStar_Ref.ml b/ocaml/fstar-lib/generated/FStar_Ref.ml new file mode 100644 index 00000000000..662a4eb82e7 --- /dev/null +++ b/ocaml/fstar-lib/generated/FStar_Ref.ml @@ -0,0 +1,16 @@ +open Prims +type ('a, 'h, 'r) contains = + ('a, unit, unit, unit) FStar_Monotonic_Heap.contains +type ('a, 'r, 'h) unused_in = + ('a, unit, unit, unit) FStar_Monotonic_Heap.unused_in +type ('a, 'r, 'h0, 'h1) fresh = unit +let recall : 'uuuuu . 'uuuuu FStar_ST.ref -> unit = + fun r -> FStar_ST.recall r +let alloc : 'uuuuu . 'uuuuu -> 'uuuuu FStar_ST.ref = + fun init -> FStar_ST.alloc init +let read : 'uuuuu . 'uuuuu FStar_ST.ref -> 'uuuuu = fun r -> FStar_ST.read r +let write : 'uuuuu . 'uuuuu FStar_ST.ref -> 'uuuuu -> unit = + fun r -> fun v -> FStar_ST.write r v +let op_Bang : 'uuuuu . 'uuuuu FStar_ST.ref -> 'uuuuu = fun r -> read r +let op_Colon_Equals : 'uuuuu . 'uuuuu FStar_ST.ref -> 'uuuuu -> unit = + fun r -> fun v -> write r v \ No newline at end of file diff --git a/ocaml/fstar-lib/generated/FStar_Reflection.ml b/ocaml/fstar-lib/generated/FStar_Reflection.ml new file mode 100644 index 00000000000..e8306abedb2 --- /dev/null +++ b/ocaml/fstar-lib/generated/FStar_Reflection.ml @@ -0,0 +1 @@ +open Prims \ No newline at end of file diff --git a/ocaml/fstar-lib/generated/FStar_Reflection_Arith.ml b/ocaml/fstar-lib/generated/FStar_Reflection_Arith.ml new file mode 100644 index 00000000000..676313743b5 --- /dev/null +++ b/ocaml/fstar-lib/generated/FStar_Reflection_Arith.ml @@ -0,0 +1,642 @@ +open Prims +type expr = + | Lit of Prims.int + | Atom of Prims.nat * FStar_Reflection_Types.term + | Plus of expr * expr + | Mult of expr * expr + | Minus of expr * expr + | Land of expr * expr + | Lxor of expr * expr + | Lor of expr * expr + | Ladd of expr * expr + | Lsub of expr * expr + | Shl of expr * expr + | Shr of expr * expr + | Neg of expr + | Udiv of expr * expr + | Umod of expr * expr + | MulMod of expr * expr + | NatToBv of expr +let (uu___is_Lit : expr -> Prims.bool) = + fun projectee -> match projectee with | Lit _0 -> true | uu___ -> false +let (__proj__Lit__item___0 : expr -> Prims.int) = + fun projectee -> match projectee with | Lit _0 -> _0 +let (uu___is_Atom : expr -> Prims.bool) = + fun projectee -> + match projectee with | Atom (_0, _1) -> true | uu___ -> false +let (__proj__Atom__item___0 : expr -> Prims.nat) = + fun projectee -> match projectee with | Atom (_0, _1) -> _0 +let (__proj__Atom__item___1 : expr -> FStar_Reflection_Types.term) = + fun projectee -> match projectee with | Atom (_0, _1) -> _1 +let (uu___is_Plus : expr -> Prims.bool) = + fun projectee -> + match projectee with | Plus (_0, _1) -> true | uu___ -> false +let (__proj__Plus__item___0 : expr -> expr) = + fun projectee -> match projectee with | Plus (_0, _1) -> _0 +let (__proj__Plus__item___1 : expr -> expr) = + fun projectee -> match projectee with | Plus (_0, _1) -> _1 +let (uu___is_Mult : expr -> Prims.bool) = + fun projectee -> + match projectee with | Mult (_0, _1) -> true | uu___ -> false +let (__proj__Mult__item___0 : expr -> expr) = + fun projectee -> match projectee with | Mult (_0, _1) -> _0 +let (__proj__Mult__item___1 : expr -> expr) = + fun projectee -> match projectee with | Mult (_0, _1) -> _1 +let (uu___is_Minus : expr -> Prims.bool) = + fun projectee -> + match projectee with | Minus (_0, _1) -> true | uu___ -> false +let (__proj__Minus__item___0 : expr -> expr) = + fun projectee -> match projectee with | Minus (_0, _1) -> _0 +let (__proj__Minus__item___1 : expr -> expr) = + fun projectee -> match projectee with | Minus (_0, _1) -> _1 +let (uu___is_Land : expr -> Prims.bool) = + fun projectee -> + match projectee with | Land (_0, _1) -> true | uu___ -> false +let (__proj__Land__item___0 : expr -> expr) = + fun projectee -> match projectee with | Land (_0, _1) -> _0 +let (__proj__Land__item___1 : expr -> expr) = + fun projectee -> match projectee with | Land (_0, _1) -> _1 +let (uu___is_Lxor : expr -> Prims.bool) = + fun projectee -> + match projectee with | Lxor (_0, _1) -> true | uu___ -> false +let (__proj__Lxor__item___0 : expr -> expr) = + fun projectee -> match projectee with | Lxor (_0, _1) -> _0 +let (__proj__Lxor__item___1 : expr -> expr) = + fun projectee -> match projectee with | Lxor (_0, _1) -> _1 +let (uu___is_Lor : expr -> Prims.bool) = + fun projectee -> + match projectee with | Lor (_0, _1) -> true | uu___ -> false +let (__proj__Lor__item___0 : expr -> expr) = + fun projectee -> match projectee with | Lor (_0, _1) -> _0 +let (__proj__Lor__item___1 : expr -> expr) = + fun projectee -> match projectee with | Lor (_0, _1) -> _1 +let (uu___is_Ladd : expr -> Prims.bool) = + fun projectee -> + match projectee with | Ladd (_0, _1) -> true | uu___ -> false +let (__proj__Ladd__item___0 : expr -> expr) = + fun projectee -> match projectee with | Ladd (_0, _1) -> _0 +let (__proj__Ladd__item___1 : expr -> expr) = + fun projectee -> match projectee with | Ladd (_0, _1) -> _1 +let (uu___is_Lsub : expr -> Prims.bool) = + fun projectee -> + match projectee with | Lsub (_0, _1) -> true | uu___ -> false +let (__proj__Lsub__item___0 : expr -> expr) = + fun projectee -> match projectee with | Lsub (_0, _1) -> _0 +let (__proj__Lsub__item___1 : expr -> expr) = + fun projectee -> match projectee with | Lsub (_0, _1) -> _1 +let (uu___is_Shl : expr -> Prims.bool) = + fun projectee -> + match projectee with | Shl (_0, _1) -> true | uu___ -> false +let (__proj__Shl__item___0 : expr -> expr) = + fun projectee -> match projectee with | Shl (_0, _1) -> _0 +let (__proj__Shl__item___1 : expr -> expr) = + fun projectee -> match projectee with | Shl (_0, _1) -> _1 +let (uu___is_Shr : expr -> Prims.bool) = + fun projectee -> + match projectee with | Shr (_0, _1) -> true | uu___ -> false +let (__proj__Shr__item___0 : expr -> expr) = + fun projectee -> match projectee with | Shr (_0, _1) -> _0 +let (__proj__Shr__item___1 : expr -> expr) = + fun projectee -> match projectee with | Shr (_0, _1) -> _1 +let (uu___is_Neg : expr -> Prims.bool) = + fun projectee -> match projectee with | Neg _0 -> true | uu___ -> false +let (__proj__Neg__item___0 : expr -> expr) = + fun projectee -> match projectee with | Neg _0 -> _0 +let (uu___is_Udiv : expr -> Prims.bool) = + fun projectee -> + match projectee with | Udiv (_0, _1) -> true | uu___ -> false +let (__proj__Udiv__item___0 : expr -> expr) = + fun projectee -> match projectee with | Udiv (_0, _1) -> _0 +let (__proj__Udiv__item___1 : expr -> expr) = + fun projectee -> match projectee with | Udiv (_0, _1) -> _1 +let (uu___is_Umod : expr -> Prims.bool) = + fun projectee -> + match projectee with | Umod (_0, _1) -> true | uu___ -> false +let (__proj__Umod__item___0 : expr -> expr) = + fun projectee -> match projectee with | Umod (_0, _1) -> _0 +let (__proj__Umod__item___1 : expr -> expr) = + fun projectee -> match projectee with | Umod (_0, _1) -> _1 +let (uu___is_MulMod : expr -> Prims.bool) = + fun projectee -> + match projectee with | MulMod (_0, _1) -> true | uu___ -> false +let (__proj__MulMod__item___0 : expr -> expr) = + fun projectee -> match projectee with | MulMod (_0, _1) -> _0 +let (__proj__MulMod__item___1 : expr -> expr) = + fun projectee -> match projectee with | MulMod (_0, _1) -> _1 +let (uu___is_NatToBv : expr -> Prims.bool) = + fun projectee -> match projectee with | NatToBv _0 -> true | uu___ -> false +let (__proj__NatToBv__item___0 : expr -> expr) = + fun projectee -> match projectee with | NatToBv _0 -> _0 +type connective = + | C_Lt + | C_Eq + | C_Gt + | C_Ne +let (uu___is_C_Lt : connective -> Prims.bool) = + fun projectee -> match projectee with | C_Lt -> true | uu___ -> false +let (uu___is_C_Eq : connective -> Prims.bool) = + fun projectee -> match projectee with | C_Eq -> true | uu___ -> false +let (uu___is_C_Gt : connective -> Prims.bool) = + fun projectee -> match projectee with | C_Gt -> true | uu___ -> false +let (uu___is_C_Ne : connective -> Prims.bool) = + fun projectee -> match projectee with | C_Ne -> true | uu___ -> false +type prop = + | CompProp of expr * connective * expr + | AndProp of prop * prop + | OrProp of prop * prop + | NotProp of prop +let (uu___is_CompProp : prop -> Prims.bool) = + fun projectee -> + match projectee with | CompProp (_0, _1, _2) -> true | uu___ -> false +let (__proj__CompProp__item___0 : prop -> expr) = + fun projectee -> match projectee with | CompProp (_0, _1, _2) -> _0 +let (__proj__CompProp__item___1 : prop -> connective) = + fun projectee -> match projectee with | CompProp (_0, _1, _2) -> _1 +let (__proj__CompProp__item___2 : prop -> expr) = + fun projectee -> match projectee with | CompProp (_0, _1, _2) -> _2 +let (uu___is_AndProp : prop -> Prims.bool) = + fun projectee -> + match projectee with | AndProp (_0, _1) -> true | uu___ -> false +let (__proj__AndProp__item___0 : prop -> prop) = + fun projectee -> match projectee with | AndProp (_0, _1) -> _0 +let (__proj__AndProp__item___1 : prop -> prop) = + fun projectee -> match projectee with | AndProp (_0, _1) -> _1 +let (uu___is_OrProp : prop -> Prims.bool) = + fun projectee -> + match projectee with | OrProp (_0, _1) -> true | uu___ -> false +let (__proj__OrProp__item___0 : prop -> prop) = + fun projectee -> match projectee with | OrProp (_0, _1) -> _0 +let (__proj__OrProp__item___1 : prop -> prop) = + fun projectee -> match projectee with | OrProp (_0, _1) -> _1 +let (uu___is_NotProp : prop -> Prims.bool) = + fun projectee -> match projectee with | NotProp _0 -> true | uu___ -> false +let (__proj__NotProp__item___0 : prop -> prop) = + fun projectee -> match projectee with | NotProp _0 -> _0 +let (lt : expr -> expr -> prop) = fun e1 -> fun e2 -> CompProp (e1, C_Lt, e2) +let (le : expr -> expr -> prop) = + fun e1 -> fun e2 -> CompProp (e1, C_Lt, (Plus ((Lit Prims.int_one), e2))) +let (eq : expr -> expr -> prop) = fun e1 -> fun e2 -> CompProp (e1, C_Eq, e2) +let (ne : expr -> expr -> prop) = fun e1 -> fun e2 -> CompProp (e1, C_Ne, e2) +let (gt : expr -> expr -> prop) = fun e1 -> fun e2 -> CompProp (e1, C_Gt, e2) +let (ge : expr -> expr -> prop) = + fun e1 -> fun e2 -> CompProp ((Plus ((Lit Prims.int_one), e1)), C_Gt, e2) +type st = (Prims.nat * FStar_Reflection_Types.term Prims.list) +type 'a tm = + st -> + ((Prims.string, ('a * st)) FStar_Pervasives.either, unit) + FStar_Tactics_Effect.tac_repr +let return : 'a . 'a -> 'a tm = + fun uu___ -> + (fun x -> + Obj.magic + (fun i -> + FStar_Tactics_Effect.lift_div_tac + (fun uu___ -> FStar_Pervasives.Inr (x, i)))) uu___ +let op_let_Bang : 'a 'b . 'a tm -> ('a -> 'b tm) -> 'b tm = + fun m -> + fun f -> + fun i -> + FStar_Tactics_Effect.tac_bind + (Prims.mk_range "FStar.Reflection.Arith.fst" (Prims.of_int (77)) + (Prims.of_int (19)) (Prims.of_int (77)) (Prims.of_int (22))) + (Prims.mk_range "FStar.Reflection.Arith.fst" (Prims.of_int (77)) + (Prims.of_int (13)) (Prims.of_int (79)) (Prims.of_int (34))) + (Obj.magic (m i)) + (fun uu___ -> + (fun uu___ -> + match uu___ with + | FStar_Pervasives.Inr (x, j) -> Obj.magic (Obj.repr (f x j)) + | s -> + Obj.magic + (Obj.repr + (FStar_Tactics_Effect.lift_div_tac + (fun uu___1 -> + FStar_Pervasives.Inl + (FStar_Pervasives.__proj__Inl__item__v s))))) + uu___) +let lift : + 'a 'b . ('a -> ('b, unit) FStar_Tactics_Effect.tac_repr) -> 'a -> 'b tm = + fun f -> + fun x -> + fun st1 -> + FStar_Tactics_Effect.tac_bind + (Prims.mk_range "FStar.Reflection.Arith.fst" (Prims.of_int (83)) + (Prims.of_int (8)) (Prims.of_int (83)) (Prims.of_int (17))) + (Prims.mk_range "FStar.Reflection.Arith.fst" (Prims.of_int (83)) + (Prims.of_int (4)) (Prims.of_int (83)) (Prims.of_int (17))) + (Obj.magic + (FStar_Tactics_Effect.tac_bind + (Prims.mk_range "FStar.Reflection.Arith.fst" + (Prims.of_int (83)) (Prims.of_int (9)) (Prims.of_int (83)) + (Prims.of_int (12))) + (Prims.mk_range "FStar.Reflection.Arith.fst" + (Prims.of_int (83)) (Prims.of_int (8)) (Prims.of_int (83)) + (Prims.of_int (17))) (Obj.magic (f x)) + (fun uu___ -> + FStar_Tactics_Effect.lift_div_tac + (fun uu___1 -> (uu___, st1))))) + (fun uu___ -> + FStar_Tactics_Effect.lift_div_tac + (fun uu___1 -> FStar_Pervasives.Inr uu___)) +let liftM : 'a 'b . ('a -> 'b) -> 'a tm -> 'b tm = + fun f -> fun x -> op_let_Bang x (fun xx -> return (f xx)) +let liftM2 : 'a 'b 'c . ('a -> 'b -> 'c) -> 'a tm -> 'b tm -> 'c tm = + fun f -> + fun x -> + fun y -> + op_let_Bang x (fun xx -> op_let_Bang y (fun yy -> return (f xx yy))) +let liftM3 : + 'a 'b 'c 'd . ('a -> 'b -> 'c -> 'd) -> 'a tm -> 'b tm -> 'c tm -> 'd tm = + fun f -> + fun x -> + fun y -> + fun z -> + op_let_Bang x + (fun xx -> + op_let_Bang y + (fun yy -> op_let_Bang z (fun zz -> return (f xx yy zz)))) +let rec find_idx : + 'a . + ('a -> (Prims.bool, unit) FStar_Tactics_Effect.tac_repr) -> + 'a Prims.list -> + ((Prims.nat * 'a) FStar_Pervasives_Native.option, unit) + FStar_Tactics_Effect.tac_repr + = + fun uu___1 -> + fun uu___ -> + (fun f -> + fun l -> + match l with + | [] -> + Obj.magic + (Obj.repr + (FStar_Tactics_Effect.lift_div_tac + (fun uu___ -> FStar_Pervasives_Native.None))) + | x::xs -> + Obj.magic + (Obj.repr + (FStar_Tactics_Effect.tac_bind + (Prims.mk_range "FStar.Reflection.Arith.fst" + (Prims.of_int (108)) (Prims.of_int (11)) + (Prims.of_int (108)) (Prims.of_int (14))) + (Prims.mk_range "FStar.Reflection.Arith.fst" + (Prims.of_int (108)) (Prims.of_int (8)) + (Prims.of_int (113)) (Prims.of_int (16))) + (Obj.magic (f x)) + (fun uu___ -> + (fun uu___ -> + if uu___ + then + Obj.magic + (Obj.repr + (FStar_Tactics_Effect.lift_div_tac + (fun uu___1 -> + FStar_Pervasives_Native.Some + (Prims.int_zero, x)))) + else + Obj.magic + (Obj.repr + (FStar_Tactics_Effect.tac_bind + (Prims.mk_range + "FStar.Reflection.Arith.fst" + (Prims.of_int (110)) + (Prims.of_int (25)) + (Prims.of_int (110)) + (Prims.of_int (38))) + (Prims.mk_range + "FStar.Reflection.Arith.fst" + (Prims.of_int (110)) + (Prims.of_int (19)) + (Prims.of_int (112)) + (Prims.of_int (43))) + (Obj.magic (find_idx f xs)) + (fun uu___2 -> + FStar_Tactics_Effect.lift_div_tac + (fun uu___3 -> + match uu___2 with + | FStar_Pervasives_Native.None + -> + FStar_Pervasives_Native.None + | FStar_Pervasives_Native.Some + (i, x1) -> + FStar_Pervasives_Native.Some + ((i + Prims.int_one), + x1)))))) uu___)))) + uu___1 uu___ +let (atom : FStar_Reflection_Types.term -> expr tm) = + fun t -> + fun uu___ -> + match uu___ with + | (n, atoms) -> + FStar_Tactics_Effect.tac_bind + (Prims.mk_range "FStar.Reflection.Arith.fst" (Prims.of_int (116)) + (Prims.of_int (10)) (Prims.of_int (116)) (Prims.of_int (40))) + (Prims.mk_range "FStar.Reflection.Arith.fst" (Prims.of_int (116)) + (Prims.of_int (4)) (Prims.of_int (118)) (Prims.of_int (57))) + (Obj.magic + (find_idx (FStar_Tactics_Builtins.term_eq_old t) atoms)) + (fun uu___1 -> + FStar_Tactics_Effect.lift_div_tac + (fun uu___2 -> + match uu___1 with + | FStar_Pervasives_Native.None -> + FStar_Pervasives.Inr + ((Atom (n, t)), + ((n + Prims.int_one), (t :: atoms))) + | FStar_Pervasives_Native.Some (i, t1) -> + FStar_Pervasives.Inr + ((Atom (((n - Prims.int_one) - i), t1)), + (n, atoms)))) +let fail : 'a . Prims.string -> 'a tm = + fun uu___ -> + (fun s -> + Obj.magic + (fun i -> + FStar_Tactics_Effect.lift_div_tac + (fun uu___ -> FStar_Pervasives.Inl s))) uu___ +let rec (as_arith_expr : FStar_Reflection_Types.term -> expr tm) = + fun t -> + let uu___ = FStar_Reflection_Derived.collect_app t in + match uu___ with + | (hd, tl) -> + (match ((FStar_Reflection_Builtins.inspect_ln hd), tl) with + | (FStar_Reflection_Data.Tv_FVar fv, + (e1, FStar_Reflection_Data.Q_Implicit)::(e2, + FStar_Reflection_Data.Q_Explicit):: + (e3, FStar_Reflection_Data.Q_Explicit)::[]) -> + let qn = FStar_Reflection_Builtins.inspect_fv fv in + let e2' = as_arith_expr e2 in + let e3' = as_arith_expr e3 in + if qn = FStar_Reflection_Const.land_qn + then + liftM2 (fun uu___1 -> fun uu___2 -> Land (uu___1, uu___2)) e2' + e3' + else + if qn = FStar_Reflection_Const.lxor_qn + then + liftM2 (fun uu___2 -> fun uu___3 -> Lxor (uu___2, uu___3)) + e2' e3' + else + if qn = FStar_Reflection_Const.lor_qn + then + liftM2 (fun uu___3 -> fun uu___4 -> Lor (uu___3, uu___4)) + e2' e3' + else + if qn = FStar_Reflection_Const.shiftr_qn + then + liftM2 + (fun uu___4 -> fun uu___5 -> Shr (uu___4, uu___5)) e2' + e3' + else + if qn = FStar_Reflection_Const.shiftl_qn + then + liftM2 + (fun uu___5 -> fun uu___6 -> Shl (uu___5, uu___6)) + e2' e3' + else + if qn = FStar_Reflection_Const.udiv_qn + then + liftM2 + (fun uu___6 -> fun uu___7 -> Udiv (uu___6, uu___7)) + e2' e3' + else + if qn = FStar_Reflection_Const.umod_qn + then + liftM2 + (fun uu___7 -> + fun uu___8 -> Umod (uu___7, uu___8)) e2' e3' + else + if qn = FStar_Reflection_Const.mul_mod_qn + then + liftM2 + (fun uu___8 -> + fun uu___9 -> MulMod (uu___8, uu___9)) e2' + e3' + else + if qn = FStar_Reflection_Const.ladd_qn + then + liftM2 + (fun uu___9 -> + fun uu___10 -> Ladd (uu___9, uu___10)) + e2' e3' + else + if qn = FStar_Reflection_Const.lsub_qn + then + liftM2 + (fun uu___10 -> + fun uu___11 -> Lsub (uu___10, uu___11)) + e2' e3' + else atom t + | (FStar_Reflection_Data.Tv_FVar fv, + (l, FStar_Reflection_Data.Q_Explicit)::(r, + FStar_Reflection_Data.Q_Explicit)::[]) + -> + let qn = FStar_Reflection_Builtins.inspect_fv fv in + let ll = as_arith_expr l in + let rr = as_arith_expr r in + if qn = FStar_Reflection_Const.add_qn + then + liftM2 (fun uu___1 -> fun uu___2 -> Plus (uu___1, uu___2)) ll + rr + else + if qn = FStar_Reflection_Const.minus_qn + then + liftM2 (fun uu___2 -> fun uu___3 -> Minus (uu___2, uu___3)) + ll rr + else + if qn = FStar_Reflection_Const.mult_qn + then + liftM2 (fun uu___3 -> fun uu___4 -> Mult (uu___3, uu___4)) + ll rr + else + if qn = FStar_Reflection_Const.mult'_qn + then + liftM2 + (fun uu___4 -> fun uu___5 -> Mult (uu___4, uu___5)) ll + rr + else atom t + | (FStar_Reflection_Data.Tv_FVar fv, + (l, FStar_Reflection_Data.Q_Implicit)::(r, + FStar_Reflection_Data.Q_Explicit)::[]) + -> + let qn = FStar_Reflection_Builtins.inspect_fv fv in + let ll = as_arith_expr l in + let rr = as_arith_expr r in + if qn = FStar_Reflection_Const.nat_bv_qn + then liftM (fun uu___1 -> NatToBv uu___1) rr + else atom t + | (FStar_Reflection_Data.Tv_FVar fv, + (a, FStar_Reflection_Data.Q_Explicit)::[]) -> + let qn = FStar_Reflection_Builtins.inspect_fv fv in + let aa = as_arith_expr a in + if qn = FStar_Reflection_Const.neg_qn + then liftM (fun uu___1 -> Neg uu___1) aa + else atom t + | (FStar_Reflection_Data.Tv_Const (FStar_Reflection_Data.C_Int i), + uu___1) -> return (Lit i) + | uu___1 -> atom t) +let (is_arith_expr : FStar_Reflection_Types.term -> expr tm) = + fun t -> + op_let_Bang (as_arith_expr t) + (fun a -> + match a with + | Atom (uu___, t1) -> + let uu___1 = FStar_Reflection_Derived_Lemmas.collect_app_ref t1 in + (match uu___1 with + | (hd, tl) -> + (match ((FStar_Reflection_Builtins.inspect_ln hd), tl) with + | (FStar_Reflection_Data.Tv_FVar uu___2, []) -> return a + | (FStar_Reflection_Data.Tv_BVar uu___2, []) -> return a + | (FStar_Reflection_Data.Tv_Var uu___2, []) -> return a + | uu___2 -> + op_let_Bang + (lift FStar_Tactics_Builtins.term_to_string t1) + (fun s -> + fail + (Prims.strcat "not an arithmetic expression: (" + (Prims.strcat s ")"))))) + | uu___ -> return a) +let rec (is_arith_prop : + FStar_Reflection_Types.term -> + st -> + ((Prims.string, (prop * st)) FStar_Pervasives.either, unit) + FStar_Tactics_Effect.tac_repr) + = + fun t -> + fun i -> + op_let_Bang (lift FStar_Reflection_Formula.term_as_formula t) + (fun f -> + match f with + | FStar_Reflection_Formula.Comp + (FStar_Reflection_Formula.Eq uu___, l, r) -> + liftM2 eq (is_arith_expr l) (is_arith_expr r) + | FStar_Reflection_Formula.Comp + (FStar_Reflection_Formula.BoolEq uu___, l, r) -> + liftM2 eq (is_arith_expr l) (is_arith_expr r) + | FStar_Reflection_Formula.Comp + (FStar_Reflection_Formula.Lt, l, r) -> + liftM2 lt (is_arith_expr l) (is_arith_expr r) + | FStar_Reflection_Formula.Comp + (FStar_Reflection_Formula.Le, l, r) -> + liftM2 le (is_arith_expr l) (is_arith_expr r) + | FStar_Reflection_Formula.And (l, r) -> + liftM2 (fun uu___ -> fun uu___1 -> AndProp (uu___, uu___1)) + (is_arith_prop l) (is_arith_prop r) + | FStar_Reflection_Formula.Or (l, r) -> + liftM2 (fun uu___ -> fun uu___1 -> OrProp (uu___, uu___1)) + (is_arith_prop l) (is_arith_prop r) + | uu___ -> + op_let_Bang (lift FStar_Tactics_Builtins.term_to_string t) + (fun s -> + fail (Prims.strcat "connector (" (Prims.strcat s ")")))) + i +let run_tm : + 'a . + 'a tm -> + ((Prims.string, 'a) FStar_Pervasives.either, unit) + FStar_Tactics_Effect.tac_repr + = + fun m -> + FStar_Tactics_Effect.tac_bind + (Prims.mk_range "FStar.Reflection.Arith.fst" (Prims.of_int (212)) + (Prims.of_int (10)) (Prims.of_int (212)) (Prims.of_int (19))) + (Prims.mk_range "FStar.Reflection.Arith.fst" (Prims.of_int (212)) + (Prims.of_int (4)) (Prims.of_int (214)) (Prims.of_int (25))) + (Obj.magic (m (Prims.int_zero, []))) + (fun uu___ -> + FStar_Tactics_Effect.lift_div_tac + (fun uu___1 -> + match uu___ with + | FStar_Pervasives.Inr (x, uu___2) -> FStar_Pervasives.Inr x + | s -> + FStar_Pervasives.Inl + (FStar_Pervasives.__proj__Inl__item__v s))) +let rec (expr_to_string : expr -> Prims.string) = + fun e -> + match e with + | Atom (i, uu___) -> Prims.strcat "a" (Prims.string_of_int i) + | Lit i -> Prims.string_of_int i + | Plus (l, r) -> + Prims.strcat "(" + (Prims.strcat (expr_to_string l) + (Prims.strcat " + " (Prims.strcat (expr_to_string r) ")"))) + | Minus (l, r) -> + Prims.strcat "(" + (Prims.strcat (expr_to_string l) + (Prims.strcat " - " (Prims.strcat (expr_to_string r) ")"))) + | Mult (l, r) -> + Prims.strcat "(" + (Prims.strcat (expr_to_string l) + (Prims.strcat " * " (Prims.strcat (expr_to_string r) ")"))) + | Neg l -> Prims.strcat "(- " (Prims.strcat (expr_to_string l) ")") + | Land (l, r) -> + Prims.strcat "(" + (Prims.strcat (expr_to_string l) + (Prims.strcat " & " (Prims.strcat (expr_to_string r) ")"))) + | Lor (l, r) -> + Prims.strcat "(" + (Prims.strcat (expr_to_string l) + (Prims.strcat " | " (Prims.strcat (expr_to_string r) ")"))) + | Lxor (l, r) -> + Prims.strcat "(" + (Prims.strcat (expr_to_string l) + (Prims.strcat " ^ " (Prims.strcat (expr_to_string r) ")"))) + | Ladd (l, r) -> + Prims.strcat "(" + (Prims.strcat (expr_to_string l) + (Prims.strcat " >> " (Prims.strcat (expr_to_string r) ")"))) + | Lsub (l, r) -> + Prims.strcat "(" + (Prims.strcat (expr_to_string l) + (Prims.strcat " >> " (Prims.strcat (expr_to_string r) ")"))) + | Shl (l, r) -> + Prims.strcat "(" + (Prims.strcat (expr_to_string l) + (Prims.strcat " << " (Prims.strcat (expr_to_string r) ")"))) + | Shr (l, r) -> + Prims.strcat "(" + (Prims.strcat (expr_to_string l) + (Prims.strcat " >> " (Prims.strcat (expr_to_string r) ")"))) + | NatToBv l -> + Prims.strcat "(" + (Prims.strcat "to_vec " (Prims.strcat (expr_to_string l) ")")) + | Udiv (l, r) -> + Prims.strcat "(" + (Prims.strcat (expr_to_string l) + (Prims.strcat " / " (Prims.strcat (expr_to_string r) ")"))) + | Umod (l, r) -> + Prims.strcat "(" + (Prims.strcat (expr_to_string l) + (Prims.strcat " % " (Prims.strcat (expr_to_string r) ")"))) + | MulMod (l, r) -> + Prims.strcat "(" + (Prims.strcat (expr_to_string l) + (Prims.strcat " ** " (Prims.strcat (expr_to_string r) ")"))) +let rec (compare_expr : expr -> expr -> FStar_Order.order) = + fun e1 -> + fun e2 -> + match (e1, e2) with + | (Lit i, Lit j) -> FStar_Order.compare_int i j + | (Atom (uu___, t), Atom (uu___1, s)) -> + FStar_Reflection_Compare.compare_term t s + | (Plus (l1, l2), Plus (r1, r2)) -> + FStar_Order.lex (compare_expr l1 r1) + (fun uu___ -> compare_expr l2 r2) + | (Minus (l1, l2), Minus (r1, r2)) -> + FStar_Order.lex (compare_expr l1 r1) + (fun uu___ -> compare_expr l2 r2) + | (Mult (l1, l2), Mult (r1, r2)) -> + FStar_Order.lex (compare_expr l1 r1) + (fun uu___ -> compare_expr l2 r2) + | (Neg e11, Neg e21) -> compare_expr e11 e21 + | (Lit uu___, uu___1) -> FStar_Order.Lt + | (uu___, Lit uu___1) -> FStar_Order.Gt + | (Atom (uu___, uu___1), uu___2) -> FStar_Order.Lt + | (uu___, Atom (uu___1, uu___2)) -> FStar_Order.Gt + | (Plus (uu___, uu___1), uu___2) -> FStar_Order.Lt + | (uu___, Plus (uu___1, uu___2)) -> FStar_Order.Gt + | (Mult (uu___, uu___1), uu___2) -> FStar_Order.Lt + | (uu___, Mult (uu___1, uu___2)) -> FStar_Order.Gt + | (Neg uu___, uu___1) -> FStar_Order.Lt + | (uu___, Neg uu___1) -> FStar_Order.Gt + | uu___ -> FStar_Order.Gt \ No newline at end of file diff --git a/src/ocaml-output/FStar_Reflection_Basic.ml b/ocaml/fstar-lib/generated/FStar_Reflection_Basic.ml similarity index 100% rename from src/ocaml-output/FStar_Reflection_Basic.ml rename to ocaml/fstar-lib/generated/FStar_Reflection_Basic.ml diff --git a/ocaml/fstar-lib/generated/FStar_Reflection_Compare.ml b/ocaml/fstar-lib/generated/FStar_Reflection_Compare.ml new file mode 100644 index 00000000000..8021e7acc4f --- /dev/null +++ b/ocaml/fstar-lib/generated/FStar_Reflection_Compare.ml @@ -0,0 +1,324 @@ +open Prims +let (compare_name : + FStar_Reflection_Types.name -> + FStar_Reflection_Types.name -> FStar_Order.order) + = + fun n1 -> + fun n2 -> + FStar_Order.compare_list n1 n2 + (fun s1 -> + fun s2 -> + FStar_Order.order_from_int + (FStar_Reflection_Builtins.compare_string s1 s2)) +let (compare_fv : + FStar_Reflection_Types.fv -> FStar_Reflection_Types.fv -> FStar_Order.order) + = + fun f1 -> + fun f2 -> + compare_name (FStar_Reflection_Builtins.inspect_fv f1) + (FStar_Reflection_Builtins.inspect_fv f2) +let (compare_const : + FStar_Reflection_Data.vconst -> + FStar_Reflection_Data.vconst -> FStar_Order.order) + = + fun c1 -> + fun c2 -> + match (c1, c2) with + | (FStar_Reflection_Data.C_Unit, FStar_Reflection_Data.C_Unit) -> + FStar_Order.Eq + | (FStar_Reflection_Data.C_Int i, FStar_Reflection_Data.C_Int j) -> + FStar_Order.order_from_int (i - j) + | (FStar_Reflection_Data.C_True, FStar_Reflection_Data.C_True) -> + FStar_Order.Eq + | (FStar_Reflection_Data.C_False, FStar_Reflection_Data.C_False) -> + FStar_Order.Eq + | (FStar_Reflection_Data.C_String s1, FStar_Reflection_Data.C_String + s2) -> + FStar_Order.order_from_int + (FStar_Reflection_Builtins.compare_string s1 s2) + | (FStar_Reflection_Data.C_Range r1, FStar_Reflection_Data.C_Range r2) + -> FStar_Order.Eq + | (FStar_Reflection_Data.C_Reify, FStar_Reflection_Data.C_Reify) -> + FStar_Order.Eq + | (FStar_Reflection_Data.C_Reflect l1, FStar_Reflection_Data.C_Reflect + l2) -> compare_name l1 l2 + | (FStar_Reflection_Data.C_Unit, uu___) -> FStar_Order.Lt + | (uu___, FStar_Reflection_Data.C_Unit) -> FStar_Order.Gt + | (FStar_Reflection_Data.C_Int uu___, uu___1) -> FStar_Order.Lt + | (uu___, FStar_Reflection_Data.C_Int uu___1) -> FStar_Order.Gt + | (FStar_Reflection_Data.C_True, uu___) -> FStar_Order.Lt + | (uu___, FStar_Reflection_Data.C_True) -> FStar_Order.Gt + | (FStar_Reflection_Data.C_False, uu___) -> FStar_Order.Lt + | (uu___, FStar_Reflection_Data.C_False) -> FStar_Order.Gt + | (FStar_Reflection_Data.C_String uu___, uu___1) -> FStar_Order.Lt + | (uu___, FStar_Reflection_Data.C_String uu___1) -> FStar_Order.Gt + | (FStar_Reflection_Data.C_Range uu___, uu___1) -> FStar_Order.Lt + | (uu___, FStar_Reflection_Data.C_Range uu___1) -> FStar_Order.Gt + | (FStar_Reflection_Data.C_Reify, uu___) -> FStar_Order.Lt + | (uu___, FStar_Reflection_Data.C_Reify) -> FStar_Order.Gt + | (FStar_Reflection_Data.C_Reflect uu___, uu___1) -> FStar_Order.Lt + | (uu___, FStar_Reflection_Data.C_Reflect uu___1) -> FStar_Order.Gt +let (compare_binder : + FStar_Reflection_Types.binder -> + FStar_Reflection_Types.binder -> FStar_Order.order) + = + fun b1 -> + fun b2 -> + let uu___ = FStar_Reflection_Builtins.inspect_binder b1 in + match uu___ with + | (bv1, uu___1) -> + let uu___2 = FStar_Reflection_Builtins.inspect_binder b2 in + (match uu___2 with + | (bv2, uu___3) -> FStar_Reflection_Builtins.compare_bv bv1 bv2) +let (compare_ident : + FStar_Reflection_Types.ident -> + FStar_Reflection_Types.ident -> FStar_Order.order) + = + fun i1 -> + fun i2 -> + FStar_Order.order_from_int + (FStar_Reflection_Builtins.compare_string + (FStar_Pervasives_Native.fst i1) (FStar_Pervasives_Native.fst i2)) +let rec (compare_universe : + FStar_Reflection_Types.universe -> + FStar_Reflection_Types.universe -> FStar_Order.order) + = + fun u1 -> + fun u2 -> + match ((FStar_Reflection_Builtins.inspect_universe u1), + (FStar_Reflection_Builtins.inspect_universe u2)) + with + | (FStar_Reflection_Data.Uv_Zero, FStar_Reflection_Data.Uv_Zero) -> + FStar_Order.Eq + | (FStar_Reflection_Data.Uv_Succ u11, FStar_Reflection_Data.Uv_Succ + u21) -> compare_universe u11 u21 + | (FStar_Reflection_Data.Uv_Max us1, FStar_Reflection_Data.Uv_Max us2) + -> + FStar_Order.compare_list us1 us2 + (fun x -> fun y -> compare_universe x y) + | (FStar_Reflection_Data.Uv_BVar n1, FStar_Reflection_Data.Uv_BVar n2) + -> FStar_Order.compare_int n1 n2 + | (FStar_Reflection_Data.Uv_Name i1, FStar_Reflection_Data.Uv_Name i2) + -> compare_ident i1 i2 + | (FStar_Reflection_Data.Uv_Unif u11, FStar_Reflection_Data.Uv_Unif + u21) -> FStar_Order.Eq + | (FStar_Reflection_Data.Uv_Unk, FStar_Reflection_Data.Uv_Unk) -> + FStar_Order.Eq + | (FStar_Reflection_Data.Uv_Zero, uu___) -> FStar_Order.Lt + | (uu___, FStar_Reflection_Data.Uv_Zero) -> FStar_Order.Gt + | (FStar_Reflection_Data.Uv_Succ uu___, uu___1) -> FStar_Order.Lt + | (uu___, FStar_Reflection_Data.Uv_Succ uu___1) -> FStar_Order.Gt + | (FStar_Reflection_Data.Uv_Max uu___, uu___1) -> FStar_Order.Lt + | (uu___, FStar_Reflection_Data.Uv_Max uu___1) -> FStar_Order.Gt + | (FStar_Reflection_Data.Uv_BVar uu___, uu___1) -> FStar_Order.Lt + | (uu___, FStar_Reflection_Data.Uv_BVar uu___1) -> FStar_Order.Gt + | (FStar_Reflection_Data.Uv_Name uu___, uu___1) -> FStar_Order.Lt + | (uu___, FStar_Reflection_Data.Uv_Name uu___1) -> FStar_Order.Gt + | (FStar_Reflection_Data.Uv_Unif uu___, uu___1) -> FStar_Order.Lt + | (uu___, FStar_Reflection_Data.Uv_Unif uu___1) -> FStar_Order.Gt + | (FStar_Reflection_Data.Uv_Unk, uu___) -> FStar_Order.Lt +let (compare_universes : + FStar_Reflection_Data.universes -> + FStar_Reflection_Data.universes -> FStar_Order.order) + = fun us1 -> fun us2 -> FStar_Order.compare_list us1 us2 compare_universe +let rec (compare_term : + FStar_Reflection_Types.term -> + FStar_Reflection_Types.term -> FStar_Order.order) + = + fun s -> + fun t -> + match ((FStar_Reflection_Builtins.inspect_ln s), + (FStar_Reflection_Builtins.inspect_ln t)) + with + | (FStar_Reflection_Data.Tv_Var sv, FStar_Reflection_Data.Tv_Var tv) -> + FStar_Reflection_Builtins.compare_bv sv tv + | (FStar_Reflection_Data.Tv_BVar sv, FStar_Reflection_Data.Tv_BVar tv) + -> FStar_Reflection_Builtins.compare_bv sv tv + | (FStar_Reflection_Data.Tv_FVar sv, FStar_Reflection_Data.Tv_FVar tv) + -> compare_fv sv tv + | (FStar_Reflection_Data.Tv_UInst (sv, sus), + FStar_Reflection_Data.Tv_UInst (tv, tus)) -> + FStar_Order.lex (compare_fv sv tv) + (fun uu___ -> compare_universes sus tus) + | (FStar_Reflection_Data.Tv_App (h1, a1), FStar_Reflection_Data.Tv_App + (h2, a2)) -> + FStar_Order.lex (compare_term h1 h2) + (fun uu___ -> compare_argv a1 a2) + | (FStar_Reflection_Data.Tv_Abs (b1, e1), FStar_Reflection_Data.Tv_Abs + (b2, e2)) -> + FStar_Order.lex (compare_binder b1 b2) + (fun uu___ -> compare_term e1 e2) + | (FStar_Reflection_Data.Tv_Refine (bv1, e1), + FStar_Reflection_Data.Tv_Refine (bv2, e2)) -> + FStar_Order.lex (FStar_Reflection_Builtins.compare_bv bv1 bv2) + (fun uu___ -> compare_term e1 e2) + | (FStar_Reflection_Data.Tv_Arrow (b1, e1), + FStar_Reflection_Data.Tv_Arrow (b2, e2)) -> + FStar_Order.lex (compare_binder b1 b2) + (fun uu___ -> compare_comp e1 e2) + | (FStar_Reflection_Data.Tv_Type su, FStar_Reflection_Data.Tv_Type tu) + -> compare_universe su tu + | (FStar_Reflection_Data.Tv_Const c1, FStar_Reflection_Data.Tv_Const + c2) -> compare_const c1 c2 + | (FStar_Reflection_Data.Tv_Uvar (u1, uu___), + FStar_Reflection_Data.Tv_Uvar (u2, uu___1)) -> + FStar_Order.compare_int u1 u2 + | (FStar_Reflection_Data.Tv_Let (_r1, _attrs1, bv1, t1, t1'), + FStar_Reflection_Data.Tv_Let (_r2, _attrs2, bv2, t2, t2')) -> + FStar_Order.lex (FStar_Reflection_Builtins.compare_bv bv1 bv2) + (fun uu___ -> + FStar_Order.lex (compare_term t1 t2) + (fun uu___1 -> compare_term t1' t2')) + | (FStar_Reflection_Data.Tv_Match (uu___, uu___1, uu___2), + FStar_Reflection_Data.Tv_Match (uu___3, uu___4, uu___5)) -> + FStar_Order.Eq + | (FStar_Reflection_Data.Tv_AscribedT (e1, t1, tac1, uu___), + FStar_Reflection_Data.Tv_AscribedT (e2, t2, tac2, uu___1)) -> + FStar_Order.lex (compare_term e1 e2) + (fun uu___2 -> + FStar_Order.lex (compare_term t1 t2) + (fun uu___3 -> + match (tac1, tac2) with + | (FStar_Pervasives_Native.None, + FStar_Pervasives_Native.None) -> FStar_Order.Eq + | (FStar_Pervasives_Native.None, uu___4) -> + FStar_Order.Lt + | (uu___4, FStar_Pervasives_Native.None) -> + FStar_Order.Gt + | (FStar_Pervasives_Native.Some e11, + FStar_Pervasives_Native.Some e21) -> + compare_term e11 e21)) + | (FStar_Reflection_Data.Tv_AscribedC (e1, c1, tac1, uu___), + FStar_Reflection_Data.Tv_AscribedC (e2, c2, tac2, uu___1)) -> + FStar_Order.lex (compare_term e1 e2) + (fun uu___2 -> + FStar_Order.lex (compare_comp c1 c2) + (fun uu___3 -> + match (tac1, tac2) with + | (FStar_Pervasives_Native.None, + FStar_Pervasives_Native.None) -> FStar_Order.Eq + | (FStar_Pervasives_Native.None, uu___4) -> + FStar_Order.Lt + | (uu___4, FStar_Pervasives_Native.None) -> + FStar_Order.Gt + | (FStar_Pervasives_Native.Some e11, + FStar_Pervasives_Native.Some e21) -> + compare_term e11 e21)) + | (FStar_Reflection_Data.Tv_Unknown, FStar_Reflection_Data.Tv_Unknown) + -> FStar_Order.Eq + | (FStar_Reflection_Data.Tv_Var uu___, uu___1) -> FStar_Order.Lt + | (uu___, FStar_Reflection_Data.Tv_Var uu___1) -> FStar_Order.Gt + | (FStar_Reflection_Data.Tv_BVar uu___, uu___1) -> FStar_Order.Lt + | (uu___, FStar_Reflection_Data.Tv_BVar uu___1) -> FStar_Order.Gt + | (FStar_Reflection_Data.Tv_FVar uu___, uu___1) -> FStar_Order.Lt + | (uu___, FStar_Reflection_Data.Tv_FVar uu___1) -> FStar_Order.Gt + | (FStar_Reflection_Data.Tv_UInst (uu___, uu___1), uu___2) -> + FStar_Order.Lt + | (uu___, FStar_Reflection_Data.Tv_UInst (uu___1, uu___2)) -> + FStar_Order.Gt + | (FStar_Reflection_Data.Tv_App (uu___, uu___1), uu___2) -> + FStar_Order.Lt + | (uu___, FStar_Reflection_Data.Tv_App (uu___1, uu___2)) -> + FStar_Order.Gt + | (FStar_Reflection_Data.Tv_Abs (uu___, uu___1), uu___2) -> + FStar_Order.Lt + | (uu___, FStar_Reflection_Data.Tv_Abs (uu___1, uu___2)) -> + FStar_Order.Gt + | (FStar_Reflection_Data.Tv_Arrow (uu___, uu___1), uu___2) -> + FStar_Order.Lt + | (uu___, FStar_Reflection_Data.Tv_Arrow (uu___1, uu___2)) -> + FStar_Order.Gt + | (FStar_Reflection_Data.Tv_Type uu___, uu___1) -> FStar_Order.Lt + | (uu___, FStar_Reflection_Data.Tv_Type uu___1) -> FStar_Order.Gt + | (FStar_Reflection_Data.Tv_Refine (uu___, uu___1), uu___2) -> + FStar_Order.Lt + | (uu___, FStar_Reflection_Data.Tv_Refine (uu___1, uu___2)) -> + FStar_Order.Gt + | (FStar_Reflection_Data.Tv_Const uu___, uu___1) -> FStar_Order.Lt + | (uu___, FStar_Reflection_Data.Tv_Const uu___1) -> FStar_Order.Gt + | (FStar_Reflection_Data.Tv_Uvar (uu___, uu___1), uu___2) -> + FStar_Order.Lt + | (uu___, FStar_Reflection_Data.Tv_Uvar (uu___1, uu___2)) -> + FStar_Order.Gt + | (FStar_Reflection_Data.Tv_Match (uu___, uu___1, uu___2), uu___3) -> + FStar_Order.Lt + | (uu___, FStar_Reflection_Data.Tv_Match (uu___1, uu___2, uu___3)) -> + FStar_Order.Gt + | (FStar_Reflection_Data.Tv_AscribedT (uu___, uu___1, uu___2, uu___3), + uu___4) -> FStar_Order.Lt + | (uu___, FStar_Reflection_Data.Tv_AscribedT + (uu___1, uu___2, uu___3, uu___4)) -> FStar_Order.Gt + | (FStar_Reflection_Data.Tv_AscribedC (uu___, uu___1, uu___2, uu___3), + uu___4) -> FStar_Order.Lt + | (uu___, FStar_Reflection_Data.Tv_AscribedC + (uu___1, uu___2, uu___3, uu___4)) -> FStar_Order.Gt + | (FStar_Reflection_Data.Tv_Unknown, uu___) -> FStar_Order.Lt + | (uu___, FStar_Reflection_Data.Tv_Unknown) -> FStar_Order.Gt +and (compare_term_list : + FStar_Reflection_Types.term Prims.list -> + FStar_Reflection_Types.term Prims.list -> FStar_Order.order) + = + fun l1 -> + fun l2 -> + match (l1, l2) with + | ([], []) -> FStar_Order.Eq + | ([], uu___) -> FStar_Order.Lt + | (uu___, []) -> FStar_Order.Gt + | (hd1::tl1, hd2::tl2) -> + FStar_Order.lex (compare_term hd1 hd2) + (fun uu___ -> compare_term_list tl1 tl2) +and (compare_argv : + FStar_Reflection_Data.argv -> + FStar_Reflection_Data.argv -> FStar_Order.order) + = + fun a1 -> + fun a2 -> + let uu___ = a1 in + match uu___ with + | (a11, q1) -> + let uu___1 = a2 in + (match uu___1 with + | (a21, q2) -> + (match (q1, q2) with + | (FStar_Reflection_Data.Q_Implicit, + FStar_Reflection_Data.Q_Explicit) -> FStar_Order.Lt + | (FStar_Reflection_Data.Q_Explicit, + FStar_Reflection_Data.Q_Implicit) -> FStar_Order.Gt + | (uu___2, uu___3) -> compare_term a11 a21)) +and (compare_comp : + FStar_Reflection_Types.comp -> + FStar_Reflection_Types.comp -> FStar_Order.order) + = + fun c1 -> + fun c2 -> + let cv1 = FStar_Reflection_Builtins.inspect_comp c1 in + let cv2 = FStar_Reflection_Builtins.inspect_comp c2 in + match (cv1, cv2) with + | (FStar_Reflection_Data.C_Total t1, FStar_Reflection_Data.C_Total t2) + -> compare_term t1 t2 + | (FStar_Reflection_Data.C_GTotal t1, FStar_Reflection_Data.C_GTotal + t2) -> compare_term t1 t2 + | (FStar_Reflection_Data.C_Lemma (p1, q1, s1), + FStar_Reflection_Data.C_Lemma (p2, q2, s2)) -> + FStar_Order.lex (compare_term p1 p2) + (fun uu___ -> + FStar_Order.lex (compare_term q1 q2) + (fun uu___1 -> compare_term s1 s2)) + | (FStar_Reflection_Data.C_Eff (us1, eff1, res1, args1, _decrs1), + FStar_Reflection_Data.C_Eff (us2, eff2, res2, args2, _decrs2)) -> + FStar_Order.lex (compare_universes us1 us2) + (fun uu___ -> + FStar_Order.lex (compare_name eff1 eff2) + (fun uu___1 -> compare_term res1 res2)) + | (FStar_Reflection_Data.C_Total uu___, uu___1) -> FStar_Order.Lt + | (uu___, FStar_Reflection_Data.C_Total uu___1) -> FStar_Order.Gt + | (FStar_Reflection_Data.C_GTotal uu___, uu___1) -> FStar_Order.Lt + | (uu___, FStar_Reflection_Data.C_GTotal uu___1) -> FStar_Order.Gt + | (FStar_Reflection_Data.C_Lemma (uu___, uu___1, uu___2), uu___3) -> + FStar_Order.Lt + | (uu___, FStar_Reflection_Data.C_Lemma (uu___1, uu___2, uu___3)) -> + FStar_Order.Gt + | (FStar_Reflection_Data.C_Eff (uu___, uu___1, uu___2, uu___3, uu___4), + uu___5) -> FStar_Order.Lt + | (uu___, FStar_Reflection_Data.C_Eff + (uu___1, uu___2, uu___3, uu___4, uu___5)) -> FStar_Order.Gt \ No newline at end of file diff --git a/ocaml/fstar-lib/generated/FStar_Reflection_Const.ml b/ocaml/fstar-lib/generated/FStar_Reflection_Const.ml new file mode 100644 index 00000000000..7f2f83b9713 --- /dev/null +++ b/ocaml/fstar-lib/generated/FStar_Reflection_Const.ml @@ -0,0 +1,58 @@ +open Prims +let (imp_qn : Prims.string Prims.list) = ["Prims"; "l_imp"] +let (and_qn : Prims.string Prims.list) = ["Prims"; "l_and"] +let (or_qn : Prims.string Prims.list) = ["Prims"; "l_or"] +let (not_qn : Prims.string Prims.list) = ["Prims"; "l_not"] +let (iff_qn : Prims.string Prims.list) = ["Prims"; "l_iff"] +let (eq2_qn : Prims.string Prims.list) = ["Prims"; "eq2"] +let (eq1_qn : Prims.string Prims.list) = ["Prims"; "eq"] +let (true_qn : Prims.string Prims.list) = ["Prims"; "l_True"] +let (false_qn : Prims.string Prims.list) = ["Prims"; "l_False"] +let (b2t_qn : Prims.string Prims.list) = ["Prims"; "b2t"] +let (forall_qn : Prims.string Prims.list) = ["Prims"; "l_Forall"] +let (exists_qn : Prims.string Prims.list) = ["Prims"; "l_Exists"] +let (squash_qn : Prims.string Prims.list) = ["Prims"; "squash"] +let (bool_true_qn : Prims.string Prims.list) = ["Prims"; "true"] +let (bool_false_qn : Prims.string Prims.list) = ["Prims"; "false"] +let (int_lid : Prims.string Prims.list) = ["Prims"; "int"] +let (bool_lid : Prims.string Prims.list) = ["Prims"; "bool"] +let (unit_lid : Prims.string Prims.list) = ["Prims"; "unit"] +let (string_lid : Prims.string Prims.list) = ["Prims"; "string"] +let (add_qn : Prims.string Prims.list) = ["Prims"; "op_Addition"] +let (neg_qn : Prims.string Prims.list) = ["Prims"; "op_Minus"] +let (minus_qn : Prims.string Prims.list) = ["Prims"; "op_Subtraction"] +let (mult_qn : Prims.string Prims.list) = ["Prims"; "op_Multiply"] +let (mult'_qn : Prims.string Prims.list) = ["FStar"; "Mul"; "op_Star"] +let (div_qn : Prims.string Prims.list) = ["Prims"; "op_Division"] +let (lt_qn : Prims.string Prims.list) = ["Prims"; "op_LessThan"] +let (lte_qn : Prims.string Prims.list) = ["Prims"; "op_LessThanOrEqual"] +let (gt_qn : Prims.string Prims.list) = ["Prims"; "op_GreaterThan"] +let (gte_qn : Prims.string Prims.list) = ["Prims"; "op_GreaterThanOrEqual"] +let (mod_qn : Prims.string Prims.list) = ["Prims"; "op_Modulus"] +let (nil_qn : Prims.string Prims.list) = ["Prims"; "Nil"] +let (cons_qn : Prims.string Prims.list) = ["Prims"; "Cons"] +let (mktuple2_qn : Prims.string Prims.list) = + ["FStar"; "Pervasives"; "Native"; "Mktuple2"] +let (mktuple3_qn : Prims.string Prims.list) = + ["FStar"; "Pervasives"; "Native"; "Mktuple3"] +let (mktuple4_qn : Prims.string Prims.list) = + ["FStar"; "Pervasives"; "Native"; "Mktuple4"] +let (mktuple5_qn : Prims.string Prims.list) = + ["FStar"; "Pervasives"; "Native"; "Mktuple5"] +let (mktuple6_qn : Prims.string Prims.list) = + ["FStar"; "Pervasives"; "Native"; "Mktuple6"] +let (mktuple7_qn : Prims.string Prims.list) = + ["FStar"; "Pervasives"; "Native"; "Mktuple7"] +let (mktuple8_qn : Prims.string Prims.list) = + ["FStar"; "Pervasives"; "Native"; "Mktuple8"] +let (land_qn : Prims.string Prims.list) = ["FStar"; "UInt"; "logand"] +let (lxor_qn : Prims.string Prims.list) = ["FStar"; "UInt"; "logxor"] +let (lor_qn : Prims.string Prims.list) = ["FStar"; "UInt"; "logor"] +let (ladd_qn : Prims.string Prims.list) = ["FStar"; "UInt"; "add_mod"] +let (lsub_qn : Prims.string Prims.list) = ["FStar"; "UInt"; "sub_mod"] +let (shiftl_qn : Prims.string Prims.list) = ["FStar"; "UInt"; "shift_left"] +let (shiftr_qn : Prims.string Prims.list) = ["FStar"; "UInt"; "shift_right"] +let (udiv_qn : Prims.string Prims.list) = ["FStar"; "UInt"; "udiv"] +let (umod_qn : Prims.string Prims.list) = ["FStar"; "UInt"; "mod"] +let (mul_mod_qn : Prims.string Prims.list) = ["FStar"; "UInt"; "mul_mod"] +let (nat_bv_qn : Prims.string Prims.list) = ["FStar"; "BV"; "int2bv"] \ No newline at end of file diff --git a/src/ocaml-output/FStar_Reflection_Constants.ml b/ocaml/fstar-lib/generated/FStar_Reflection_Constants.ml similarity index 100% rename from src/ocaml-output/FStar_Reflection_Constants.ml rename to ocaml/fstar-lib/generated/FStar_Reflection_Constants.ml diff --git a/src/ocaml-output/FStar_Reflection_Data.ml b/ocaml/fstar-lib/generated/FStar_Reflection_Data.ml similarity index 100% rename from src/ocaml-output/FStar_Reflection_Data.ml rename to ocaml/fstar-lib/generated/FStar_Reflection_Data.ml diff --git a/ocaml/fstar-lib/generated/FStar_Reflection_Derived.ml b/ocaml/fstar-lib/generated/FStar_Reflection_Derived.ml new file mode 100644 index 00000000000..1625918066f --- /dev/null +++ b/ocaml/fstar-lib/generated/FStar_Reflection_Derived.ml @@ -0,0 +1,383 @@ +open Prims +let (name_of_bv : FStar_Reflection_Types.bv -> Prims.string) = + fun bv -> + (FStar_Reflection_Builtins.inspect_bv bv).FStar_Reflection_Data.bv_ppname +let (type_of_bv : FStar_Reflection_Types.bv -> FStar_Reflection_Types.typ) = + fun bv -> + (FStar_Reflection_Builtins.inspect_bv bv).FStar_Reflection_Data.bv_sort +let (bv_to_string : FStar_Reflection_Types.bv -> Prims.string) = + fun bv -> + let bvv = FStar_Reflection_Builtins.inspect_bv bv in + bvv.FStar_Reflection_Data.bv_ppname +let (bv_of_binder : + FStar_Reflection_Types.binder -> FStar_Reflection_Types.bv) = + fun b -> + let uu___ = FStar_Reflection_Builtins.inspect_binder b in + match uu___ with | (bv, uu___1) -> bv +let rec (inspect_ln_unascribe : + FStar_Reflection_Types.term -> FStar_Reflection_Data.term_view) = + fun t -> + match FStar_Reflection_Builtins.inspect_ln t with + | FStar_Reflection_Data.Tv_AscribedT (t', uu___, uu___1, uu___2) -> + inspect_ln_unascribe t' + | FStar_Reflection_Data.Tv_AscribedC (t', uu___, uu___1, uu___2) -> + inspect_ln_unascribe t' + | tv -> tv +let (mk_binder : FStar_Reflection_Types.bv -> FStar_Reflection_Types.binder) + = + fun bv -> + FStar_Reflection_Builtins.pack_binder bv FStar_Reflection_Data.Q_Explicit + [] +let (mk_implicit_binder : + FStar_Reflection_Types.bv -> FStar_Reflection_Types.binder) = + fun bv -> + FStar_Reflection_Builtins.pack_binder bv FStar_Reflection_Data.Q_Implicit + [] +let (name_of_binder : FStar_Reflection_Types.binder -> Prims.string) = + fun b -> name_of_bv (bv_of_binder b) +let (type_of_binder : + FStar_Reflection_Types.binder -> FStar_Reflection_Types.typ) = + fun b -> type_of_bv (bv_of_binder b) +let (binder_to_string : FStar_Reflection_Types.binder -> Prims.string) = + fun b -> bv_to_string (bv_of_binder b) +let rec (flatten_name : FStar_Reflection_Types.name -> Prims.string) = + fun ns -> + match ns with + | [] -> "" + | n::[] -> n + | n::ns1 -> Prims.strcat n (Prims.strcat "." (flatten_name ns1)) +let rec (collect_app' : + FStar_Reflection_Data.argv Prims.list -> + FStar_Reflection_Types.term -> + (FStar_Reflection_Types.term * FStar_Reflection_Data.argv Prims.list)) + = + fun args -> + fun t -> + match inspect_ln_unascribe t with + | FStar_Reflection_Data.Tv_App (l, r) -> collect_app' (r :: args) l + | uu___ -> (t, args) +let (collect_app : + FStar_Reflection_Types.term -> + (FStar_Reflection_Types.term * FStar_Reflection_Data.argv Prims.list)) + = collect_app' [] +let rec (mk_app : + FStar_Reflection_Types.term -> + FStar_Reflection_Data.argv Prims.list -> FStar_Reflection_Types.term) + = + fun t -> + fun args -> + match args with + | [] -> t + | x::xs -> + mk_app + (FStar_Reflection_Builtins.pack_ln + (FStar_Reflection_Data.Tv_App (t, x))) xs +let (mk_e_app : + FStar_Reflection_Types.term -> + FStar_Reflection_Types.term Prims.list -> FStar_Reflection_Types.term) + = + fun t -> + fun args -> + let e t1 = (t1, FStar_Reflection_Data.Q_Explicit) in + mk_app t (FStar_List_Tot_Base.map e args) +let (u_unk : FStar_Reflection_Types.universe) = + FStar_Reflection_Builtins.pack_universe FStar_Reflection_Data.Uv_Unk +let rec (mk_tot_arr_ln : + FStar_Reflection_Types.binder Prims.list -> + FStar_Reflection_Types.term -> FStar_Reflection_Types.term) + = + fun bs -> + fun cod -> + match bs with + | [] -> cod + | b::bs1 -> + FStar_Reflection_Builtins.pack_ln + (FStar_Reflection_Data.Tv_Arrow + (b, + (FStar_Reflection_Builtins.pack_comp + (FStar_Reflection_Data.C_Total (mk_tot_arr_ln bs1 cod))))) +let rec (collect_arr' : + FStar_Reflection_Types.binder Prims.list -> + FStar_Reflection_Types.comp -> + (FStar_Reflection_Types.binder Prims.list * + FStar_Reflection_Types.comp)) + = + fun bs -> + fun c -> + match FStar_Reflection_Builtins.inspect_comp c with + | FStar_Reflection_Data.C_Total t -> + (match inspect_ln_unascribe t with + | FStar_Reflection_Data.Tv_Arrow (b, c1) -> + collect_arr' (b :: bs) c1 + | uu___ -> (bs, c)) + | uu___ -> (bs, c) +let (collect_arr_ln_bs : + FStar_Reflection_Types.typ -> + (FStar_Reflection_Types.binder Prims.list * FStar_Reflection_Types.comp)) + = + fun t -> + let uu___ = + collect_arr' [] + (FStar_Reflection_Builtins.pack_comp + (FStar_Reflection_Data.C_Total t)) in + match uu___ with | (bs, c) -> ((FStar_List_Tot_Base.rev bs), c) +let (collect_arr_ln : + FStar_Reflection_Types.typ -> + (FStar_Reflection_Types.typ Prims.list * FStar_Reflection_Types.comp)) + = + fun t -> + let uu___ = collect_arr_ln_bs t in + match uu___ with + | (bs, c) -> ((FStar_List_Tot_Base.map type_of_binder bs), c) +let rec (collect_abs' : + FStar_Reflection_Types.binder Prims.list -> + FStar_Reflection_Types.term -> + (FStar_Reflection_Types.binder Prims.list * + FStar_Reflection_Types.term)) + = + fun bs -> + fun t -> + match inspect_ln_unascribe t with + | FStar_Reflection_Data.Tv_Abs (b, t') -> collect_abs' (b :: bs) t' + | uu___ -> (bs, t) +let (collect_abs_ln : + FStar_Reflection_Types.term -> + (FStar_Reflection_Types.binder Prims.list * FStar_Reflection_Types.term)) + = + fun t -> + let uu___ = collect_abs' [] t in + match uu___ with | (bs, t') -> ((FStar_List_Tot_Base.rev bs), t') +let (fv_to_string : FStar_Reflection_Types.fv -> Prims.string) = + fun fv -> + FStar_Reflection_Builtins.implode_qn + (FStar_Reflection_Builtins.inspect_fv fv) +let (mk_stringlit : Prims.string -> FStar_Reflection_Types.term) = + fun s -> + FStar_Reflection_Builtins.pack_ln + (FStar_Reflection_Data.Tv_Const (FStar_Reflection_Data.C_String s)) +let (mk_strcat : + FStar_Reflection_Types.term -> + FStar_Reflection_Types.term -> FStar_Reflection_Types.term) + = + fun t1 -> + fun t2 -> + mk_e_app + (FStar_Reflection_Builtins.pack_ln + (FStar_Reflection_Data.Tv_FVar + (FStar_Reflection_Builtins.pack_fv ["Prims"; "strcat"]))) + [t1; t2] +let (mk_cons : + FStar_Reflection_Types.term -> + FStar_Reflection_Types.term -> FStar_Reflection_Types.term) + = + fun h -> + fun t -> + mk_e_app + (FStar_Reflection_Builtins.pack_ln + (FStar_Reflection_Data.Tv_FVar + (FStar_Reflection_Builtins.pack_fv + FStar_Reflection_Const.cons_qn))) [h; t] +let (mk_cons_t : + FStar_Reflection_Types.term -> + FStar_Reflection_Types.term -> + FStar_Reflection_Types.term -> FStar_Reflection_Types.term) + = + fun ty -> + fun h -> + fun t -> + mk_app + (FStar_Reflection_Builtins.pack_ln + (FStar_Reflection_Data.Tv_FVar + (FStar_Reflection_Builtins.pack_fv + FStar_Reflection_Const.cons_qn))) + [(ty, FStar_Reflection_Data.Q_Implicit); + (h, FStar_Reflection_Data.Q_Explicit); + (t, FStar_Reflection_Data.Q_Explicit)] +let rec (mk_list : + FStar_Reflection_Types.term Prims.list -> FStar_Reflection_Types.term) = + fun ts -> + match ts with + | [] -> + FStar_Reflection_Builtins.pack_ln + (FStar_Reflection_Data.Tv_FVar + (FStar_Reflection_Builtins.pack_fv FStar_Reflection_Const.nil_qn)) + | t::ts1 -> mk_cons t (mk_list ts1) +let (mktuple_n : + FStar_Reflection_Types.term Prims.list -> FStar_Reflection_Types.term) = + fun ts -> + match FStar_List_Tot_Base.length ts with + | uu___ when uu___ = Prims.int_zero -> + FStar_Reflection_Builtins.pack_ln + (FStar_Reflection_Data.Tv_Const FStar_Reflection_Data.C_Unit) + | uu___ when uu___ = Prims.int_one -> + let uu___1 = ts in (match uu___1 with | x::[] -> x) + | n -> + let qn = + match n with + | uu___ when uu___ = (Prims.of_int (2)) -> + FStar_Reflection_Const.mktuple2_qn + | uu___ when uu___ = (Prims.of_int (3)) -> + FStar_Reflection_Const.mktuple3_qn + | uu___ when uu___ = (Prims.of_int (4)) -> + FStar_Reflection_Const.mktuple4_qn + | uu___ when uu___ = (Prims.of_int (5)) -> + FStar_Reflection_Const.mktuple5_qn + | uu___ when uu___ = (Prims.of_int (6)) -> + FStar_Reflection_Const.mktuple6_qn + | uu___ when uu___ = (Prims.of_int (7)) -> + FStar_Reflection_Const.mktuple7_qn + | uu___ when uu___ = (Prims.of_int (8)) -> + FStar_Reflection_Const.mktuple8_qn in + mk_e_app + (FStar_Reflection_Builtins.pack_ln + (FStar_Reflection_Data.Tv_FVar + (FStar_Reflection_Builtins.pack_fv qn))) ts +let (destruct_tuple : + FStar_Reflection_Types.term -> + FStar_Reflection_Types.term Prims.list FStar_Pervasives_Native.option) + = + fun t -> + let uu___ = collect_app t in + match uu___ with + | (head, args) -> + (match FStar_Reflection_Builtins.inspect_ln head with + | FStar_Reflection_Data.Tv_FVar fv -> + if + FStar_List_Tot_Base.mem + (FStar_Reflection_Builtins.inspect_fv fv) + [FStar_Reflection_Const.mktuple2_qn; + FStar_Reflection_Const.mktuple3_qn; + FStar_Reflection_Const.mktuple4_qn; + FStar_Reflection_Const.mktuple5_qn; + FStar_Reflection_Const.mktuple6_qn; + FStar_Reflection_Const.mktuple7_qn; + FStar_Reflection_Const.mktuple8_qn] + then + FStar_Pervasives_Native.Some + (FStar_List_Tot_Base.concatMap + (fun uu___1 -> + match uu___1 with + | (t1, q) -> + (match q with + | FStar_Reflection_Data.Q_Explicit -> [t1] + | uu___2 -> [])) args) + else FStar_Pervasives_Native.None + | uu___1 -> FStar_Pervasives_Native.None) +let (mkpair : + FStar_Reflection_Types.term -> + FStar_Reflection_Types.term -> FStar_Reflection_Types.term) + = fun t1 -> fun t2 -> mktuple_n [t1; t2] +let rec (head : FStar_Reflection_Types.term -> FStar_Reflection_Types.term) = + fun t -> + match FStar_Reflection_Builtins.inspect_ln t with + | FStar_Reflection_Data.Tv_Match (t1, uu___, uu___1) -> head t1 + | FStar_Reflection_Data.Tv_Let (uu___, uu___1, uu___2, t1, uu___3) -> + head t1 + | FStar_Reflection_Data.Tv_Abs (uu___, t1) -> head t1 + | FStar_Reflection_Data.Tv_Refine (uu___, t1) -> head t1 + | FStar_Reflection_Data.Tv_App (t1, uu___) -> head t1 + | FStar_Reflection_Data.Tv_AscribedT (t1, uu___, uu___1, uu___2) -> + head t1 + | FStar_Reflection_Data.Tv_AscribedC (t1, uu___, uu___1, uu___2) -> + head t1 + | FStar_Reflection_Data.Tv_Unknown -> t + | FStar_Reflection_Data.Tv_Uvar (uu___, uu___1) -> t + | FStar_Reflection_Data.Tv_Const uu___ -> t + | FStar_Reflection_Data.Tv_Type uu___ -> t + | FStar_Reflection_Data.Tv_Var uu___ -> t + | FStar_Reflection_Data.Tv_BVar uu___ -> t + | FStar_Reflection_Data.Tv_FVar uu___ -> t + | FStar_Reflection_Data.Tv_UInst (uu___, uu___1) -> t + | FStar_Reflection_Data.Tv_Arrow (uu___, uu___1) -> t +let (is_fvar : FStar_Reflection_Types.term -> Prims.string -> Prims.bool) = + fun t -> + fun nm -> + match inspect_ln_unascribe t with + | FStar_Reflection_Data.Tv_FVar fv -> + (FStar_Reflection_Builtins.implode_qn + (FStar_Reflection_Builtins.inspect_fv fv)) + = nm + | FStar_Reflection_Data.Tv_UInst (fv, uu___) -> + (FStar_Reflection_Builtins.implode_qn + (FStar_Reflection_Builtins.inspect_fv fv)) + = nm + | uu___ -> false +let rec (is_any_fvar : + FStar_Reflection_Types.term -> Prims.string Prims.list -> Prims.bool) = + fun t -> + fun nms -> + match nms with + | [] -> false + | v::vs -> (is_fvar t v) || (is_any_fvar t vs) +let (is_uvar : FStar_Reflection_Types.term -> Prims.bool) = + fun t -> + match FStar_Reflection_Builtins.inspect_ln (head t) with + | FStar_Reflection_Data.Tv_Uvar (uu___, uu___1) -> true + | uu___ -> false +let (binder_set_qual : + FStar_Reflection_Data.aqualv -> + FStar_Reflection_Types.binder -> FStar_Reflection_Types.binder) + = + fun q -> + fun b -> + let uu___ = FStar_Reflection_Builtins.inspect_binder b in + match uu___ with + | (bv, (uu___1, attrs)) -> + FStar_Reflection_Builtins.pack_binder bv q attrs +let (add_check_with : + FStar_VConfig.vconfig -> + FStar_Reflection_Types.sigelt -> FStar_Reflection_Types.sigelt) + = + fun vcfg -> + fun se -> + let attrs = FStar_Reflection_Builtins.sigelt_attrs se in + let vcfg_t = FStar_Reflection_Builtins.embed_vconfig vcfg in + let t = + FStar_Reflection_Builtins.pack_ln + (FStar_Reflection_Data.Tv_App + ((FStar_Reflection_Builtins.pack_ln + (FStar_Reflection_Data.Tv_FVar + (FStar_Reflection_Builtins.pack_fv + ["FStar"; "Reflection"; "Builtins"; "check_with"]))), + (vcfg_t, FStar_Reflection_Data.Q_Explicit))) in + FStar_Reflection_Builtins.set_sigelt_attrs (t :: attrs) se +let (un_uinst : FStar_Reflection_Types.term -> FStar_Reflection_Types.term) = + fun t -> + match FStar_Reflection_Builtins.inspect_ln t with + | FStar_Reflection_Data.Tv_UInst (fv, uu___) -> + FStar_Reflection_Builtins.pack_ln (FStar_Reflection_Data.Tv_FVar fv) + | uu___ -> t +let rec (is_name_imp : + FStar_Reflection_Types.name -> FStar_Reflection_Types.term -> Prims.bool) = + fun nm -> + fun t -> + match inspect_ln_unascribe t with + | FStar_Reflection_Data.Tv_FVar fv -> + if (FStar_Reflection_Builtins.inspect_fv fv) = nm + then true + else false + | FStar_Reflection_Data.Tv_UInst (fv, uu___) -> + if (FStar_Reflection_Builtins.inspect_fv fv) = nm + then true + else false + | FStar_Reflection_Data.Tv_App + (l, (uu___, FStar_Reflection_Data.Q_Implicit)) -> is_name_imp nm l + | uu___ -> false +let (unsquash_term : + FStar_Reflection_Types.term -> + FStar_Reflection_Types.term FStar_Pervasives_Native.option) + = + fun t -> + match inspect_ln_unascribe t with + | FStar_Reflection_Data.Tv_App (l, (r, FStar_Reflection_Data.Q_Explicit)) + -> + if is_name_imp FStar_Reflection_Const.squash_qn l + then FStar_Pervasives_Native.Some r + else FStar_Pervasives_Native.None + | uu___ -> FStar_Pervasives_Native.None +let (maybe_unsquash_term : + FStar_Reflection_Types.term -> FStar_Reflection_Types.term) = + fun t -> + match unsquash_term t with + | FStar_Pervasives_Native.Some t' -> t' + | FStar_Pervasives_Native.None -> t \ No newline at end of file diff --git a/ocaml/fstar-lib/generated/FStar_Reflection_Derived_Lemmas.ml b/ocaml/fstar-lib/generated/FStar_Reflection_Derived_Lemmas.ml new file mode 100644 index 00000000000..65029464258 --- /dev/null +++ b/ocaml/fstar-lib/generated/FStar_Reflection_Derived_Lemmas.ml @@ -0,0 +1,27 @@ +open Prims +type ('a, 'p, 'l) forall_list = Obj.t +type ('a, 'p, 'l) forallP = unit +type ('a, 'r, 'l, 'r1) op_Less_Less_Colon = unit +let rec list_ref : 'a 'p . 'a Prims.list -> 'a Prims.list = + fun l -> match l with | [] -> [] | x::xs -> x :: (list_ref xs) +let (collect_app_ref : + FStar_Reflection_Types.term -> + (FStar_Reflection_Types.term * FStar_Reflection_Data.argv Prims.list)) + = + fun t -> + let uu___ = FStar_Reflection_Derived.collect_app t in + match uu___ with | (h, a) -> (h, (list_ref a)) +let (collect_abs_ln_ref : + FStar_Reflection_Types.term -> + (FStar_Reflection_Types.binder Prims.list * FStar_Reflection_Types.term)) + = + fun t -> + let uu___ = FStar_Reflection_Derived.collect_abs_ln t in + match uu___ with | (bds, body) -> ((list_ref bds), body) +let (collect_arr_ln_bs_ref : + FStar_Reflection_Types.term -> + (FStar_Reflection_Types.binder Prims.list * FStar_Reflection_Types.comp)) + = + fun t -> + let uu___ = FStar_Reflection_Derived.collect_arr_ln_bs t in + match uu___ with | (bds, c) -> ((list_ref bds), c) \ No newline at end of file diff --git a/src/ocaml-output/FStar_Reflection_Embeddings.ml b/ocaml/fstar-lib/generated/FStar_Reflection_Embeddings.ml similarity index 100% rename from src/ocaml-output/FStar_Reflection_Embeddings.ml rename to ocaml/fstar-lib/generated/FStar_Reflection_Embeddings.ml diff --git a/ocaml/fstar-lib/generated/FStar_Reflection_Formula.ml b/ocaml/fstar-lib/generated/FStar_Reflection_Formula.ml new file mode 100644 index 00000000000..2a6c396143e --- /dev/null +++ b/ocaml/fstar-lib/generated/FStar_Reflection_Formula.ml @@ -0,0 +1,1874 @@ +open Prims +let (fresh_bv : + FStar_Reflection_Types.typ -> + (FStar_Reflection_Types.bv, unit) FStar_Tactics_Effect.tac_repr) + = FStar_Tactics_Builtins.fresh_bv_named "x" +type comparison = + | Eq of FStar_Reflection_Types.typ FStar_Pervasives_Native.option + | BoolEq of FStar_Reflection_Types.typ FStar_Pervasives_Native.option + | Lt + | Le + | Gt + | Ge +let (uu___is_Eq : comparison -> Prims.bool) = + fun projectee -> match projectee with | Eq _0 -> true | uu___ -> false +let (__proj__Eq__item___0 : + comparison -> FStar_Reflection_Types.typ FStar_Pervasives_Native.option) = + fun projectee -> match projectee with | Eq _0 -> _0 +let (uu___is_BoolEq : comparison -> Prims.bool) = + fun projectee -> match projectee with | BoolEq _0 -> true | uu___ -> false +let (__proj__BoolEq__item___0 : + comparison -> FStar_Reflection_Types.typ FStar_Pervasives_Native.option) = + fun projectee -> match projectee with | BoolEq _0 -> _0 +let (uu___is_Lt : comparison -> Prims.bool) = + fun projectee -> match projectee with | Lt -> true | uu___ -> false +let (uu___is_Le : comparison -> Prims.bool) = + fun projectee -> match projectee with | Le -> true | uu___ -> false +let (uu___is_Gt : comparison -> Prims.bool) = + fun projectee -> match projectee with | Gt -> true | uu___ -> false +let (uu___is_Ge : comparison -> Prims.bool) = + fun projectee -> match projectee with | Ge -> true | uu___ -> false +type formula = + | True_ + | False_ + | Comp of comparison * FStar_Reflection_Types.term * + FStar_Reflection_Types.term + | And of FStar_Reflection_Types.term * FStar_Reflection_Types.term + | Or of FStar_Reflection_Types.term * FStar_Reflection_Types.term + | Not of FStar_Reflection_Types.term + | Implies of FStar_Reflection_Types.term * FStar_Reflection_Types.term + | Iff of FStar_Reflection_Types.term * FStar_Reflection_Types.term + | Forall of FStar_Reflection_Types.bv * FStar_Reflection_Types.term + | Exists of FStar_Reflection_Types.bv * FStar_Reflection_Types.term + | App of FStar_Reflection_Types.term * FStar_Reflection_Types.term + | Name of FStar_Reflection_Types.bv + | FV of FStar_Reflection_Types.fv + | IntLit of Prims.int + | F_Unknown +let (uu___is_True_ : formula -> Prims.bool) = + fun projectee -> match projectee with | True_ -> true | uu___ -> false +let (uu___is_False_ : formula -> Prims.bool) = + fun projectee -> match projectee with | False_ -> true | uu___ -> false +let (uu___is_Comp : formula -> Prims.bool) = + fun projectee -> + match projectee with | Comp (_0, _1, _2) -> true | uu___ -> false +let (__proj__Comp__item___0 : formula -> comparison) = + fun projectee -> match projectee with | Comp (_0, _1, _2) -> _0 +let (__proj__Comp__item___1 : formula -> FStar_Reflection_Types.term) = + fun projectee -> match projectee with | Comp (_0, _1, _2) -> _1 +let (__proj__Comp__item___2 : formula -> FStar_Reflection_Types.term) = + fun projectee -> match projectee with | Comp (_0, _1, _2) -> _2 +let (uu___is_And : formula -> Prims.bool) = + fun projectee -> + match projectee with | And (_0, _1) -> true | uu___ -> false +let (__proj__And__item___0 : formula -> FStar_Reflection_Types.term) = + fun projectee -> match projectee with | And (_0, _1) -> _0 +let (__proj__And__item___1 : formula -> FStar_Reflection_Types.term) = + fun projectee -> match projectee with | And (_0, _1) -> _1 +let (uu___is_Or : formula -> Prims.bool) = + fun projectee -> + match projectee with | Or (_0, _1) -> true | uu___ -> false +let (__proj__Or__item___0 : formula -> FStar_Reflection_Types.term) = + fun projectee -> match projectee with | Or (_0, _1) -> _0 +let (__proj__Or__item___1 : formula -> FStar_Reflection_Types.term) = + fun projectee -> match projectee with | Or (_0, _1) -> _1 +let (uu___is_Not : formula -> Prims.bool) = + fun projectee -> match projectee with | Not _0 -> true | uu___ -> false +let (__proj__Not__item___0 : formula -> FStar_Reflection_Types.term) = + fun projectee -> match projectee with | Not _0 -> _0 +let (uu___is_Implies : formula -> Prims.bool) = + fun projectee -> + match projectee with | Implies (_0, _1) -> true | uu___ -> false +let (__proj__Implies__item___0 : formula -> FStar_Reflection_Types.term) = + fun projectee -> match projectee with | Implies (_0, _1) -> _0 +let (__proj__Implies__item___1 : formula -> FStar_Reflection_Types.term) = + fun projectee -> match projectee with | Implies (_0, _1) -> _1 +let (uu___is_Iff : formula -> Prims.bool) = + fun projectee -> + match projectee with | Iff (_0, _1) -> true | uu___ -> false +let (__proj__Iff__item___0 : formula -> FStar_Reflection_Types.term) = + fun projectee -> match projectee with | Iff (_0, _1) -> _0 +let (__proj__Iff__item___1 : formula -> FStar_Reflection_Types.term) = + fun projectee -> match projectee with | Iff (_0, _1) -> _1 +let (uu___is_Forall : formula -> Prims.bool) = + fun projectee -> + match projectee with | Forall (_0, _1) -> true | uu___ -> false +let (__proj__Forall__item___0 : formula -> FStar_Reflection_Types.bv) = + fun projectee -> match projectee with | Forall (_0, _1) -> _0 +let (__proj__Forall__item___1 : formula -> FStar_Reflection_Types.term) = + fun projectee -> match projectee with | Forall (_0, _1) -> _1 +let (uu___is_Exists : formula -> Prims.bool) = + fun projectee -> + match projectee with | Exists (_0, _1) -> true | uu___ -> false +let (__proj__Exists__item___0 : formula -> FStar_Reflection_Types.bv) = + fun projectee -> match projectee with | Exists (_0, _1) -> _0 +let (__proj__Exists__item___1 : formula -> FStar_Reflection_Types.term) = + fun projectee -> match projectee with | Exists (_0, _1) -> _1 +let (uu___is_App : formula -> Prims.bool) = + fun projectee -> + match projectee with | App (_0, _1) -> true | uu___ -> false +let (__proj__App__item___0 : formula -> FStar_Reflection_Types.term) = + fun projectee -> match projectee with | App (_0, _1) -> _0 +let (__proj__App__item___1 : formula -> FStar_Reflection_Types.term) = + fun projectee -> match projectee with | App (_0, _1) -> _1 +let (uu___is_Name : formula -> Prims.bool) = + fun projectee -> match projectee with | Name _0 -> true | uu___ -> false +let (__proj__Name__item___0 : formula -> FStar_Reflection_Types.bv) = + fun projectee -> match projectee with | Name _0 -> _0 +let (uu___is_FV : formula -> Prims.bool) = + fun projectee -> match projectee with | FV _0 -> true | uu___ -> false +let (__proj__FV__item___0 : formula -> FStar_Reflection_Types.fv) = + fun projectee -> match projectee with | FV _0 -> _0 +let (uu___is_IntLit : formula -> Prims.bool) = + fun projectee -> match projectee with | IntLit _0 -> true | uu___ -> false +let (__proj__IntLit__item___0 : formula -> Prims.int) = + fun projectee -> match projectee with | IntLit _0 -> _0 +let (uu___is_F_Unknown : formula -> Prims.bool) = + fun projectee -> match projectee with | F_Unknown -> true | uu___ -> false +let (mk_Forall : + FStar_Reflection_Types.term -> + FStar_Reflection_Types.term -> + (formula, unit) FStar_Tactics_Effect.tac_repr) + = + fun uu___1 -> + fun uu___ -> + (fun typ -> + fun pred -> + Obj.magic + (FStar_Tactics_Effect.lift_div_tac + (fun uu___ -> + Forall + ((FStar_Reflection_Builtins.pack_bv + { + FStar_Reflection_Data.bv_ppname = "x"; + FStar_Reflection_Data.bv_index = Prims.int_zero; + FStar_Reflection_Data.bv_sort = typ + }), + (FStar_Reflection_Builtins.pack_ln + (FStar_Reflection_Data.Tv_App + (pred, + ((FStar_Reflection_Builtins.pack_ln + (FStar_Reflection_Data.Tv_BVar + (FStar_Reflection_Builtins.pack_bv + { + FStar_Reflection_Data.bv_ppname = + "x"; + FStar_Reflection_Data.bv_index = + Prims.int_zero; + FStar_Reflection_Data.bv_sort = + typ + }))), + FStar_Reflection_Data.Q_Explicit)))))))) + uu___1 uu___ +let (mk_Exists : + FStar_Reflection_Types.term -> + FStar_Reflection_Types.term -> + (formula, unit) FStar_Tactics_Effect.tac_repr) + = + fun uu___1 -> + fun uu___ -> + (fun typ -> + fun pred -> + Obj.magic + (FStar_Tactics_Effect.lift_div_tac + (fun uu___ -> + Exists + ((FStar_Reflection_Builtins.pack_bv + { + FStar_Reflection_Data.bv_ppname = "x"; + FStar_Reflection_Data.bv_index = Prims.int_zero; + FStar_Reflection_Data.bv_sort = typ + }), + (FStar_Reflection_Builtins.pack_ln + (FStar_Reflection_Data.Tv_App + (pred, + ((FStar_Reflection_Builtins.pack_ln + (FStar_Reflection_Data.Tv_BVar + (FStar_Reflection_Builtins.pack_bv + { + FStar_Reflection_Data.bv_ppname = + "x"; + FStar_Reflection_Data.bv_index = + Prims.int_zero; + FStar_Reflection_Data.bv_sort = + typ + }))), + FStar_Reflection_Data.Q_Explicit)))))))) + uu___1 uu___ +let (term_as_formula' : + FStar_Reflection_Types.term -> + (formula, unit) FStar_Tactics_Effect.tac_repr) + = + fun uu___ -> + (fun t -> + match FStar_Reflection_Derived.inspect_ln_unascribe t with + | FStar_Reflection_Data.Tv_Var n -> + Obj.magic + (Obj.repr + (FStar_Tactics_Effect.lift_div_tac (fun uu___ -> Name n))) + | FStar_Reflection_Data.Tv_FVar fv -> + Obj.magic + (Obj.repr + (FStar_Tactics_Effect.lift_div_tac + (fun uu___ -> + if + (FStar_Reflection_Builtins.inspect_fv fv) = + FStar_Reflection_Const.true_qn + then True_ + else + if + (FStar_Reflection_Builtins.inspect_fv fv) = + FStar_Reflection_Const.false_qn + then False_ + else FV fv))) + | FStar_Reflection_Data.Tv_UInst (fv, uu___) -> + Obj.magic + (Obj.repr + (FStar_Tactics_Effect.lift_div_tac + (fun uu___1 -> + if + (FStar_Reflection_Builtins.inspect_fv fv) = + FStar_Reflection_Const.true_qn + then True_ + else + if + (FStar_Reflection_Builtins.inspect_fv fv) = + FStar_Reflection_Const.false_qn + then False_ + else FV fv))) + | FStar_Reflection_Data.Tv_App (h0, t1) -> + Obj.magic + (Obj.repr + (FStar_Tactics_Effect.tac_bind + (Prims.mk_range "FStar.Reflection.Formula.fst" + (Prims.of_int (80)) (Prims.of_int (22)) + (Prims.of_int (80)) (Prims.of_int (36))) + (Prims.mk_range "FStar.Reflection.Formula.fst" + (Prims.of_int (80)) (Prims.of_int (8)) + (Prims.of_int (113)) (Prims.of_int (26))) + (FStar_Tactics_Effect.lift_div_tac + (fun uu___ -> FStar_Reflection_Derived.collect_app h0)) + (fun uu___ -> + (fun uu___ -> + match uu___ with + | (h, ts) -> + Obj.magic + (FStar_Tactics_Effect.tac_bind + (Prims.mk_range + "FStar.Reflection.Formula.fst" + (Prims.of_int (81)) (Prims.of_int (16)) + (Prims.of_int (81)) (Prims.of_int (26))) + (Prims.mk_range + "FStar.Reflection.Formula.fst" + (Prims.of_int (82)) (Prims.of_int (8)) + (Prims.of_int (113)) (Prims.of_int (26))) + (FStar_Tactics_Effect.lift_div_tac + (fun uu___1 -> + FStar_Reflection_Derived.un_uinst h)) + (fun uu___1 -> + (fun h1 -> + match ((FStar_Reflection_Builtins.inspect_ln + h1), + (FStar_List_Tot_Base.op_At ts + [t1])) + with + | (FStar_Reflection_Data.Tv_FVar fv, + (a1, + FStar_Reflection_Data.Q_Implicit):: + (a2, + FStar_Reflection_Data.Q_Explicit):: + (a3, + FStar_Reflection_Data.Q_Explicit)::[]) + -> + Obj.magic + (Obj.repr + (FStar_Tactics_Effect.lift_div_tac + (fun uu___1 -> + if + (FStar_Reflection_Builtins.inspect_fv + fv) + = + FStar_Reflection_Const.eq2_qn + then + Comp + ((Eq + (FStar_Pervasives_Native.Some + a1)), a2, + a3) + else + if + (FStar_Reflection_Builtins.inspect_fv + fv) + = + FStar_Reflection_Const.eq1_qn + then + Comp + ((BoolEq + (FStar_Pervasives_Native.Some + a1)), a2, + a3) + else + if + (FStar_Reflection_Builtins.inspect_fv + fv) + = + FStar_Reflection_Const.lt_qn + then + Comp + (Lt, a2, a3) + else + if + (FStar_Reflection_Builtins.inspect_fv + fv) + = + FStar_Reflection_Const.lte_qn + then + Comp + (Le, a2, a3) + else + if + (FStar_Reflection_Builtins.inspect_fv + fv) + = + FStar_Reflection_Const.gt_qn + then + Comp + (Gt, a2, + a3) + else + if + (FStar_Reflection_Builtins.inspect_fv + fv) = + FStar_Reflection_Const.gte_qn + then + Comp + (Ge, a2, + a3) + else + App + (h0, + (FStar_Pervasives_Native.fst + t1))))) + | (FStar_Reflection_Data.Tv_FVar fv, + (a1, + FStar_Reflection_Data.Q_Explicit):: + (a2, + FStar_Reflection_Data.Q_Explicit)::[]) + -> + Obj.magic + (Obj.repr + (FStar_Tactics_Effect.lift_div_tac + (fun uu___1 -> + if + (FStar_Reflection_Builtins.inspect_fv + fv) + = + FStar_Reflection_Const.imp_qn + then Implies (a1, a2) + else + if + (FStar_Reflection_Builtins.inspect_fv + fv) + = + FStar_Reflection_Const.and_qn + then And (a1, a2) + else + if + (FStar_Reflection_Builtins.inspect_fv + fv) + = + FStar_Reflection_Const.iff_qn + then Iff (a1, a2) + else + if + (FStar_Reflection_Builtins.inspect_fv + fv) + = + FStar_Reflection_Const.or_qn + then Or (a1, a2) + else + if + (FStar_Reflection_Builtins.inspect_fv + fv) + = + FStar_Reflection_Const.eq2_qn + then + Comp + ((Eq + FStar_Pervasives_Native.None), + a1, a2) + else + if + (FStar_Reflection_Builtins.inspect_fv + fv) = + FStar_Reflection_Const.eq1_qn + then + Comp + ((BoolEq + FStar_Pervasives_Native.None), + a1, a2) + else + App + (h0, + (FStar_Pervasives_Native.fst + t1))))) + | (FStar_Reflection_Data.Tv_FVar fv, + (a1, + FStar_Reflection_Data.Q_Implicit):: + (a2, + FStar_Reflection_Data.Q_Explicit)::[]) + -> + Obj.magic + (Obj.repr + (FStar_Tactics_Effect.tac_bind + (Prims.mk_range + "FStar.Reflection.Formula.fst" + (Prims.of_int (104)) + (Prims.of_int (21)) + (Prims.of_int (104)) + (Prims.of_int (34))) + (Prims.mk_range + "FStar.Reflection.Formula.fst" + (Prims.of_int (105)) + (Prims.of_int (17)) + (Prims.of_int (107)) + (Prims.of_int (31))) + (FStar_Tactics_Effect.lift_div_tac + (fun uu___1 -> + FStar_Reflection_Builtins.inspect_fv + fv)) + (fun uu___1 -> + (fun qn -> + if + qn = + FStar_Reflection_Const.forall_qn + then + Obj.magic + (Obj.repr + (mk_Forall + a1 a2)) + else + Obj.magic + (Obj.repr + (if + qn = + FStar_Reflection_Const.exists_qn + then + Obj.repr + (mk_Exists + a1 a2) + else + Obj.repr + (FStar_Tactics_Effect.lift_div_tac + (fun + uu___3 -> + App + (h0, + (FStar_Pervasives_Native.fst + t1))))))) + uu___1))) + | (FStar_Reflection_Data.Tv_FVar fv, + (a, + FStar_Reflection_Data.Q_Explicit)::[]) + -> + Obj.magic + (Obj.repr + (FStar_Tactics_Effect.lift_div_tac + (fun uu___1 -> + if + (FStar_Reflection_Builtins.inspect_fv + fv) + = + FStar_Reflection_Const.not_qn + then Not a + else + App + (h0, + (FStar_Pervasives_Native.fst + t1))))) + | uu___1 -> + Obj.magic + (Obj.repr + (FStar_Tactics_Effect.lift_div_tac + (fun uu___2 -> + App + (h0, + (FStar_Pervasives_Native.fst + t1)))))) uu___1))) + uu___))) + | FStar_Reflection_Data.Tv_Const (FStar_Reflection_Data.C_Int i) -> + Obj.magic + (Obj.repr + (FStar_Tactics_Effect.lift_div_tac (fun uu___ -> IntLit i))) + | FStar_Reflection_Data.Tv_Let (uu___, uu___1, uu___2, uu___3, uu___4) + -> + Obj.magic + (Obj.repr + (FStar_Tactics_Effect.lift_div_tac (fun uu___5 -> F_Unknown))) + | FStar_Reflection_Data.Tv_Match (uu___, uu___1, uu___2) -> + Obj.magic + (Obj.repr + (FStar_Tactics_Effect.lift_div_tac (fun uu___3 -> F_Unknown))) + | FStar_Reflection_Data.Tv_Type uu___ -> + Obj.magic + (Obj.repr + (FStar_Tactics_Effect.lift_div_tac (fun uu___1 -> F_Unknown))) + | FStar_Reflection_Data.Tv_Abs (uu___, uu___1) -> + Obj.magic + (Obj.repr + (FStar_Tactics_Effect.lift_div_tac (fun uu___2 -> F_Unknown))) + | FStar_Reflection_Data.Tv_Arrow (uu___, uu___1) -> + Obj.magic + (Obj.repr + (FStar_Tactics_Effect.lift_div_tac (fun uu___2 -> F_Unknown))) + | FStar_Reflection_Data.Tv_Uvar (uu___, uu___1) -> + Obj.magic + (Obj.repr + (FStar_Tactics_Effect.lift_div_tac (fun uu___2 -> F_Unknown))) + | FStar_Reflection_Data.Tv_Unknown -> + Obj.magic + (Obj.repr + (FStar_Tactics_Effect.lift_div_tac (fun uu___ -> F_Unknown))) + | FStar_Reflection_Data.Tv_Refine (uu___, uu___1) -> + Obj.magic + (Obj.repr + (FStar_Tactics_Effect.lift_div_tac (fun uu___2 -> F_Unknown))) + | FStar_Reflection_Data.Tv_Const uu___ -> + Obj.magic + (Obj.repr + (FStar_Tactics_Effect.lift_div_tac (fun uu___1 -> F_Unknown))) + | FStar_Reflection_Data.Tv_BVar uu___ -> + Obj.magic + (Obj.repr + (FStar_Tactics_Effect.lift_div_tac (fun uu___1 -> F_Unknown)))) + uu___ +let (term_as_formula : + FStar_Reflection_Types.term -> + (formula, unit) FStar_Tactics_Effect.tac_repr) + = + fun uu___ -> + (fun t -> + match FStar_Reflection_Derived.unsquash_term t with + | FStar_Pervasives_Native.None -> + Obj.magic + (Obj.repr + (FStar_Tactics_Effect.lift_div_tac (fun uu___ -> F_Unknown))) + | FStar_Pervasives_Native.Some t1 -> + Obj.magic (Obj.repr (term_as_formula' t1))) uu___ +let (term_as_formula_total : + FStar_Reflection_Types.term -> + (formula, unit) FStar_Tactics_Effect.tac_repr) + = + fun t -> term_as_formula' (FStar_Reflection_Derived.maybe_unsquash_term t) +let (formula_as_term_view : formula -> FStar_Reflection_Data.term_view) = + fun f -> + let mk_app' tv args = + FStar_List_Tot_Base.fold_left + (fun tv1 -> + fun a -> + FStar_Reflection_Data.Tv_App + ((FStar_Reflection_Builtins.pack_ln tv1), a)) tv args in + let e = FStar_Reflection_Data.Q_Explicit in + let i = FStar_Reflection_Data.Q_Implicit in + match f with + | True_ -> + FStar_Reflection_Data.Tv_FVar + (FStar_Reflection_Builtins.pack_fv FStar_Reflection_Const.true_qn) + | False_ -> + FStar_Reflection_Data.Tv_FVar + (FStar_Reflection_Builtins.pack_fv FStar_Reflection_Const.false_qn) + | Comp (Eq (FStar_Pervasives_Native.None), l, r) -> + mk_app' + (FStar_Reflection_Data.Tv_FVar + (FStar_Reflection_Builtins.pack_fv FStar_Reflection_Const.eq2_qn)) + [(l, e); (r, e)] + | Comp (Eq (FStar_Pervasives_Native.Some t), l, r) -> + mk_app' + (FStar_Reflection_Data.Tv_FVar + (FStar_Reflection_Builtins.pack_fv FStar_Reflection_Const.eq2_qn)) + [(t, i); (l, e); (r, e)] + | Comp (BoolEq (FStar_Pervasives_Native.None), l, r) -> + mk_app' + (FStar_Reflection_Data.Tv_FVar + (FStar_Reflection_Builtins.pack_fv FStar_Reflection_Const.eq1_qn)) + [(l, e); (r, e)] + | Comp (BoolEq (FStar_Pervasives_Native.Some t), l, r) -> + mk_app' + (FStar_Reflection_Data.Tv_FVar + (FStar_Reflection_Builtins.pack_fv FStar_Reflection_Const.eq1_qn)) + [(t, i); (l, e); (r, e)] + | Comp (Lt, l, r) -> + mk_app' + (FStar_Reflection_Data.Tv_FVar + (FStar_Reflection_Builtins.pack_fv FStar_Reflection_Const.lt_qn)) + [(l, e); (r, e)] + | Comp (Le, l, r) -> + mk_app' + (FStar_Reflection_Data.Tv_FVar + (FStar_Reflection_Builtins.pack_fv FStar_Reflection_Const.lte_qn)) + [(l, e); (r, e)] + | Comp (Gt, l, r) -> + mk_app' + (FStar_Reflection_Data.Tv_FVar + (FStar_Reflection_Builtins.pack_fv FStar_Reflection_Const.gt_qn)) + [(l, e); (r, e)] + | Comp (Ge, l, r) -> + mk_app' + (FStar_Reflection_Data.Tv_FVar + (FStar_Reflection_Builtins.pack_fv FStar_Reflection_Const.gte_qn)) + [(l, e); (r, e)] + | And (p, q) -> + mk_app' + (FStar_Reflection_Data.Tv_FVar + (FStar_Reflection_Builtins.pack_fv FStar_Reflection_Const.and_qn)) + [(p, e); (q, e)] + | Or (p, q) -> + mk_app' + (FStar_Reflection_Data.Tv_FVar + (FStar_Reflection_Builtins.pack_fv FStar_Reflection_Const.or_qn)) + [(p, e); (q, e)] + | Implies (p, q) -> + mk_app' + (FStar_Reflection_Data.Tv_FVar + (FStar_Reflection_Builtins.pack_fv FStar_Reflection_Const.imp_qn)) + [(p, e); (q, e)] + | Not p -> + mk_app' + (FStar_Reflection_Data.Tv_FVar + (FStar_Reflection_Builtins.pack_fv FStar_Reflection_Const.not_qn)) + [(p, e)] + | Iff (p, q) -> + mk_app' + (FStar_Reflection_Data.Tv_FVar + (FStar_Reflection_Builtins.pack_fv FStar_Reflection_Const.iff_qn)) + [(p, e); (q, e)] + | Forall (b, t) -> FStar_Reflection_Data.Tv_Unknown + | Exists (b, t) -> FStar_Reflection_Data.Tv_Unknown + | App (p, q) -> + FStar_Reflection_Data.Tv_App + (p, (q, FStar_Reflection_Data.Q_Explicit)) + | Name b -> FStar_Reflection_Data.Tv_Var b + | FV fv -> FStar_Reflection_Data.Tv_FVar fv + | IntLit i1 -> + FStar_Reflection_Data.Tv_Const (FStar_Reflection_Data.C_Int i1) + | F_Unknown -> FStar_Reflection_Data.Tv_Unknown +let (formula_as_term : formula -> FStar_Reflection_Types.term) = + fun f -> FStar_Reflection_Builtins.pack_ln (formula_as_term_view f) +let (formula_to_string : + formula -> (Prims.string, unit) FStar_Tactics_Effect.tac_repr) = + fun uu___ -> + (fun f -> + match f with + | True_ -> + Obj.magic + (Obj.repr + (FStar_Tactics_Effect.lift_div_tac (fun uu___ -> "True_"))) + | False_ -> + Obj.magic + (Obj.repr + (FStar_Tactics_Effect.lift_div_tac (fun uu___ -> "False_"))) + | Comp (Eq mt, l, r) -> + Obj.magic + (Obj.repr + (FStar_Tactics_Effect.tac_bind + (Prims.mk_range "FStar.Reflection.Formula.fst" + (Prims.of_int (191)) (Prims.of_int (24)) + (Prims.of_int (194)) (Prims.of_int (80))) + (Prims.mk_range "prims.fst" (Prims.of_int (606)) + (Prims.of_int (19)) (Prims.of_int (606)) + (Prims.of_int (31))) + (Obj.magic + (FStar_Tactics_Effect.tac_bind + (Prims.mk_range "FStar.Reflection.Formula.fst" + (Prims.of_int (191)) (Prims.of_int (24)) + (Prims.of_int (193)) (Prims.of_int (67))) + (Prims.mk_range "FStar.Reflection.Formula.fst" + (Prims.of_int (191)) (Prims.of_int (24)) + (Prims.of_int (194)) (Prims.of_int (80))) + (match mt with + | FStar_Pervasives_Native.None -> + Obj.magic + (Obj.repr + (FStar_Tactics_Effect.lift_div_tac + (fun uu___ -> ""))) + | FStar_Pervasives_Native.Some t -> + Obj.magic + (Obj.repr + (FStar_Tactics_Effect.tac_bind + (Prims.mk_range + "FStar.Reflection.Formula.fst" + (Prims.of_int (193)) + (Prims.of_int (44)) + (Prims.of_int (193)) + (Prims.of_int (66))) + (Prims.mk_range "prims.fst" + (Prims.of_int (606)) + (Prims.of_int (19)) + (Prims.of_int (606)) + (Prims.of_int (31))) + (Obj.magic + (FStar_Tactics_Effect.tac_bind + (Prims.mk_range + "FStar.Reflection.Formula.fst" + (Prims.of_int (193)) + (Prims.of_int (44)) + (Prims.of_int (193)) + (Prims.of_int (60))) + (Prims.mk_range "prims.fst" + (Prims.of_int (606)) + (Prims.of_int (19)) + (Prims.of_int (606)) + (Prims.of_int (31))) + (Obj.magic + (FStar_Tactics_Builtins.term_to_string + t)) + (fun uu___ -> + FStar_Tactics_Effect.lift_div_tac + (fun uu___1 -> + Prims.strcat uu___ ")")))) + (fun uu___ -> + FStar_Tactics_Effect.lift_div_tac + (fun uu___1 -> + Prims.strcat " (" uu___))))) + (fun uu___ -> + (fun uu___ -> + Obj.magic + (FStar_Tactics_Effect.tac_bind + (Prims.mk_range + "FStar.Reflection.Formula.fst" + (Prims.of_int (194)) + (Prims.of_int (24)) + (Prims.of_int (194)) + (Prims.of_int (80))) + (Prims.mk_range "prims.fst" + (Prims.of_int (606)) + (Prims.of_int (19)) + (Prims.of_int (606)) + (Prims.of_int (31))) + (Obj.magic + (FStar_Tactics_Effect.tac_bind + (Prims.mk_range + "FStar.Reflection.Formula.fst" + (Prims.of_int (194)) + (Prims.of_int (31)) + (Prims.of_int (194)) + (Prims.of_int (80))) + (Prims.mk_range "prims.fst" + (Prims.of_int (606)) + (Prims.of_int (19)) + (Prims.of_int (606)) + (Prims.of_int (31))) + (Obj.magic + (FStar_Tactics_Effect.tac_bind + (Prims.mk_range + "FStar.Reflection.Formula.fst" + (Prims.of_int (194)) + (Prims.of_int (31)) + (Prims.of_int (194)) + (Prims.of_int (47))) + (Prims.mk_range + "FStar.Reflection.Formula.fst" + (Prims.of_int (194)) + (Prims.of_int (31)) + (Prims.of_int (194)) + (Prims.of_int (80))) + (Obj.magic + (FStar_Tactics_Builtins.term_to_string + l)) + (fun uu___1 -> + (fun uu___1 -> + Obj.magic + (FStar_Tactics_Effect.tac_bind + (Prims.mk_range + "FStar.Reflection.Formula.fst" + (Prims.of_int (194)) + (Prims.of_int (50)) + (Prims.of_int (194)) + (Prims.of_int (80))) + (Prims.mk_range + "prims.fst" + (Prims.of_int (606)) + (Prims.of_int (19)) + (Prims.of_int (606)) + (Prims.of_int (31))) + (Obj.magic + (FStar_Tactics_Effect.tac_bind + (Prims.mk_range + "FStar.Reflection.Formula.fst" + (Prims.of_int (194)) + (Prims.of_int (58)) + (Prims.of_int (194)) + (Prims.of_int (80))) + (Prims.mk_range + "prims.fst" + (Prims.of_int (606)) + (Prims.of_int (19)) + (Prims.of_int (606)) + (Prims.of_int (31))) + (Obj.magic + ( + FStar_Tactics_Effect.tac_bind + (Prims.mk_range + "FStar.Reflection.Formula.fst" + (Prims.of_int (194)) + (Prims.of_int (58)) + (Prims.of_int (194)) + (Prims.of_int (74))) + (Prims.mk_range + "prims.fst" + (Prims.of_int (606)) + (Prims.of_int (19)) + (Prims.of_int (606)) + (Prims.of_int (31))) + (Obj.magic + (FStar_Tactics_Builtins.term_to_string + r)) + (fun + uu___2 -> + FStar_Tactics_Effect.lift_div_tac + (fun + uu___3 -> + Prims.strcat + uu___2 + ")")))) + (fun uu___2 + -> + FStar_Tactics_Effect.lift_div_tac + (fun + uu___3 -> + Prims.strcat + ") (" + uu___2)))) + (fun uu___2 -> + FStar_Tactics_Effect.lift_div_tac + (fun uu___3 + -> + Prims.strcat + uu___1 + uu___2)))) + uu___1))) + (fun uu___1 -> + FStar_Tactics_Effect.lift_div_tac + (fun uu___2 -> + Prims.strcat " (" uu___1)))) + (fun uu___1 -> + FStar_Tactics_Effect.lift_div_tac + (fun uu___2 -> + Prims.strcat uu___ uu___1)))) + uu___))) + (fun uu___ -> + FStar_Tactics_Effect.lift_div_tac + (fun uu___1 -> Prims.strcat "Eq" uu___)))) + | Comp (BoolEq mt, l, r) -> + Obj.magic + (Obj.repr + (FStar_Tactics_Effect.tac_bind + (Prims.mk_range "FStar.Reflection.Formula.fst" + (Prims.of_int (196)) (Prims.of_int (24)) + (Prims.of_int (199)) (Prims.of_int (80))) + (Prims.mk_range "prims.fst" (Prims.of_int (606)) + (Prims.of_int (19)) (Prims.of_int (606)) + (Prims.of_int (31))) + (Obj.magic + (FStar_Tactics_Effect.tac_bind + (Prims.mk_range "FStar.Reflection.Formula.fst" + (Prims.of_int (196)) (Prims.of_int (24)) + (Prims.of_int (198)) (Prims.of_int (67))) + (Prims.mk_range "FStar.Reflection.Formula.fst" + (Prims.of_int (196)) (Prims.of_int (24)) + (Prims.of_int (199)) (Prims.of_int (80))) + (match mt with + | FStar_Pervasives_Native.None -> + Obj.magic + (Obj.repr + (FStar_Tactics_Effect.lift_div_tac + (fun uu___ -> ""))) + | FStar_Pervasives_Native.Some t -> + Obj.magic + (Obj.repr + (FStar_Tactics_Effect.tac_bind + (Prims.mk_range + "FStar.Reflection.Formula.fst" + (Prims.of_int (198)) + (Prims.of_int (44)) + (Prims.of_int (198)) + (Prims.of_int (66))) + (Prims.mk_range "prims.fst" + (Prims.of_int (606)) + (Prims.of_int (19)) + (Prims.of_int (606)) + (Prims.of_int (31))) + (Obj.magic + (FStar_Tactics_Effect.tac_bind + (Prims.mk_range + "FStar.Reflection.Formula.fst" + (Prims.of_int (198)) + (Prims.of_int (44)) + (Prims.of_int (198)) + (Prims.of_int (60))) + (Prims.mk_range "prims.fst" + (Prims.of_int (606)) + (Prims.of_int (19)) + (Prims.of_int (606)) + (Prims.of_int (31))) + (Obj.magic + (FStar_Tactics_Builtins.term_to_string + t)) + (fun uu___ -> + FStar_Tactics_Effect.lift_div_tac + (fun uu___1 -> + Prims.strcat uu___ ")")))) + (fun uu___ -> + FStar_Tactics_Effect.lift_div_tac + (fun uu___1 -> + Prims.strcat " (" uu___))))) + (fun uu___ -> + (fun uu___ -> + Obj.magic + (FStar_Tactics_Effect.tac_bind + (Prims.mk_range + "FStar.Reflection.Formula.fst" + (Prims.of_int (199)) + (Prims.of_int (24)) + (Prims.of_int (199)) + (Prims.of_int (80))) + (Prims.mk_range "prims.fst" + (Prims.of_int (606)) + (Prims.of_int (19)) + (Prims.of_int (606)) + (Prims.of_int (31))) + (Obj.magic + (FStar_Tactics_Effect.tac_bind + (Prims.mk_range + "FStar.Reflection.Formula.fst" + (Prims.of_int (199)) + (Prims.of_int (31)) + (Prims.of_int (199)) + (Prims.of_int (80))) + (Prims.mk_range "prims.fst" + (Prims.of_int (606)) + (Prims.of_int (19)) + (Prims.of_int (606)) + (Prims.of_int (31))) + (Obj.magic + (FStar_Tactics_Effect.tac_bind + (Prims.mk_range + "FStar.Reflection.Formula.fst" + (Prims.of_int (199)) + (Prims.of_int (31)) + (Prims.of_int (199)) + (Prims.of_int (47))) + (Prims.mk_range + "FStar.Reflection.Formula.fst" + (Prims.of_int (199)) + (Prims.of_int (31)) + (Prims.of_int (199)) + (Prims.of_int (80))) + (Obj.magic + (FStar_Tactics_Builtins.term_to_string + l)) + (fun uu___1 -> + (fun uu___1 -> + Obj.magic + (FStar_Tactics_Effect.tac_bind + (Prims.mk_range + "FStar.Reflection.Formula.fst" + (Prims.of_int (199)) + (Prims.of_int (50)) + (Prims.of_int (199)) + (Prims.of_int (80))) + (Prims.mk_range + "prims.fst" + (Prims.of_int (606)) + (Prims.of_int (19)) + (Prims.of_int (606)) + (Prims.of_int (31))) + (Obj.magic + (FStar_Tactics_Effect.tac_bind + (Prims.mk_range + "FStar.Reflection.Formula.fst" + (Prims.of_int (199)) + (Prims.of_int (58)) + (Prims.of_int (199)) + (Prims.of_int (80))) + (Prims.mk_range + "prims.fst" + (Prims.of_int (606)) + (Prims.of_int (19)) + (Prims.of_int (606)) + (Prims.of_int (31))) + (Obj.magic + ( + FStar_Tactics_Effect.tac_bind + (Prims.mk_range + "FStar.Reflection.Formula.fst" + (Prims.of_int (199)) + (Prims.of_int (58)) + (Prims.of_int (199)) + (Prims.of_int (74))) + (Prims.mk_range + "prims.fst" + (Prims.of_int (606)) + (Prims.of_int (19)) + (Prims.of_int (606)) + (Prims.of_int (31))) + (Obj.magic + (FStar_Tactics_Builtins.term_to_string + r)) + (fun + uu___2 -> + FStar_Tactics_Effect.lift_div_tac + (fun + uu___3 -> + Prims.strcat + uu___2 + ")")))) + (fun uu___2 + -> + FStar_Tactics_Effect.lift_div_tac + (fun + uu___3 -> + Prims.strcat + ") (" + uu___2)))) + (fun uu___2 -> + FStar_Tactics_Effect.lift_div_tac + (fun uu___3 + -> + Prims.strcat + uu___1 + uu___2)))) + uu___1))) + (fun uu___1 -> + FStar_Tactics_Effect.lift_div_tac + (fun uu___2 -> + Prims.strcat " (" uu___1)))) + (fun uu___1 -> + FStar_Tactics_Effect.lift_div_tac + (fun uu___2 -> + Prims.strcat uu___ uu___1)))) + uu___))) + (fun uu___ -> + FStar_Tactics_Effect.lift_div_tac + (fun uu___1 -> Prims.strcat "BoolEq" uu___)))) + | Comp (Lt, l, r) -> + Obj.magic + (Obj.repr + (FStar_Tactics_Effect.tac_bind + (Prims.mk_range "FStar.Reflection.Formula.fst" + (Prims.of_int (200)) (Prims.of_int (30)) + (Prims.of_int (200)) (Prims.of_int (79))) + (Prims.mk_range "prims.fst" (Prims.of_int (606)) + (Prims.of_int (19)) (Prims.of_int (606)) + (Prims.of_int (31))) + (Obj.magic + (FStar_Tactics_Effect.tac_bind + (Prims.mk_range "FStar.Reflection.Formula.fst" + (Prims.of_int (200)) (Prims.of_int (30)) + (Prims.of_int (200)) (Prims.of_int (46))) + (Prims.mk_range "FStar.Reflection.Formula.fst" + (Prims.of_int (200)) (Prims.of_int (30)) + (Prims.of_int (200)) (Prims.of_int (79))) + (Obj.magic (FStar_Tactics_Builtins.term_to_string l)) + (fun uu___ -> + (fun uu___ -> + Obj.magic + (FStar_Tactics_Effect.tac_bind + (Prims.mk_range + "FStar.Reflection.Formula.fst" + (Prims.of_int (200)) + (Prims.of_int (49)) + (Prims.of_int (200)) + (Prims.of_int (79))) + (Prims.mk_range "prims.fst" + (Prims.of_int (606)) + (Prims.of_int (19)) + (Prims.of_int (606)) + (Prims.of_int (31))) + (Obj.magic + (FStar_Tactics_Effect.tac_bind + (Prims.mk_range + "FStar.Reflection.Formula.fst" + (Prims.of_int (200)) + (Prims.of_int (57)) + (Prims.of_int (200)) + (Prims.of_int (79))) + (Prims.mk_range "prims.fst" + (Prims.of_int (606)) + (Prims.of_int (19)) + (Prims.of_int (606)) + (Prims.of_int (31))) + (Obj.magic + (FStar_Tactics_Effect.tac_bind + (Prims.mk_range + "FStar.Reflection.Formula.fst" + (Prims.of_int (200)) + (Prims.of_int (57)) + (Prims.of_int (200)) + (Prims.of_int (73))) + (Prims.mk_range "prims.fst" + (Prims.of_int (606)) + (Prims.of_int (19)) + (Prims.of_int (606)) + (Prims.of_int (31))) + (Obj.magic + (FStar_Tactics_Builtins.term_to_string + r)) + (fun uu___1 -> + FStar_Tactics_Effect.lift_div_tac + (fun uu___2 -> + Prims.strcat uu___1 + ")")))) + (fun uu___1 -> + FStar_Tactics_Effect.lift_div_tac + (fun uu___2 -> + Prims.strcat ") (" uu___1)))) + (fun uu___1 -> + FStar_Tactics_Effect.lift_div_tac + (fun uu___2 -> + Prims.strcat uu___ uu___1)))) + uu___))) + (fun uu___ -> + FStar_Tactics_Effect.lift_div_tac + (fun uu___1 -> Prims.strcat "Lt (" uu___)))) + | Comp (Le, l, r) -> + Obj.magic + (Obj.repr + (FStar_Tactics_Effect.tac_bind + (Prims.mk_range "FStar.Reflection.Formula.fst" + (Prims.of_int (201)) (Prims.of_int (30)) + (Prims.of_int (201)) (Prims.of_int (79))) + (Prims.mk_range "prims.fst" (Prims.of_int (606)) + (Prims.of_int (19)) (Prims.of_int (606)) + (Prims.of_int (31))) + (Obj.magic + (FStar_Tactics_Effect.tac_bind + (Prims.mk_range "FStar.Reflection.Formula.fst" + (Prims.of_int (201)) (Prims.of_int (30)) + (Prims.of_int (201)) (Prims.of_int (46))) + (Prims.mk_range "FStar.Reflection.Formula.fst" + (Prims.of_int (201)) (Prims.of_int (30)) + (Prims.of_int (201)) (Prims.of_int (79))) + (Obj.magic (FStar_Tactics_Builtins.term_to_string l)) + (fun uu___ -> + (fun uu___ -> + Obj.magic + (FStar_Tactics_Effect.tac_bind + (Prims.mk_range + "FStar.Reflection.Formula.fst" + (Prims.of_int (201)) + (Prims.of_int (49)) + (Prims.of_int (201)) + (Prims.of_int (79))) + (Prims.mk_range "prims.fst" + (Prims.of_int (606)) + (Prims.of_int (19)) + (Prims.of_int (606)) + (Prims.of_int (31))) + (Obj.magic + (FStar_Tactics_Effect.tac_bind + (Prims.mk_range + "FStar.Reflection.Formula.fst" + (Prims.of_int (201)) + (Prims.of_int (57)) + (Prims.of_int (201)) + (Prims.of_int (79))) + (Prims.mk_range "prims.fst" + (Prims.of_int (606)) + (Prims.of_int (19)) + (Prims.of_int (606)) + (Prims.of_int (31))) + (Obj.magic + (FStar_Tactics_Effect.tac_bind + (Prims.mk_range + "FStar.Reflection.Formula.fst" + (Prims.of_int (201)) + (Prims.of_int (57)) + (Prims.of_int (201)) + (Prims.of_int (73))) + (Prims.mk_range "prims.fst" + (Prims.of_int (606)) + (Prims.of_int (19)) + (Prims.of_int (606)) + (Prims.of_int (31))) + (Obj.magic + (FStar_Tactics_Builtins.term_to_string + r)) + (fun uu___1 -> + FStar_Tactics_Effect.lift_div_tac + (fun uu___2 -> + Prims.strcat uu___1 + ")")))) + (fun uu___1 -> + FStar_Tactics_Effect.lift_div_tac + (fun uu___2 -> + Prims.strcat ") (" uu___1)))) + (fun uu___1 -> + FStar_Tactics_Effect.lift_div_tac + (fun uu___2 -> + Prims.strcat uu___ uu___1)))) + uu___))) + (fun uu___ -> + FStar_Tactics_Effect.lift_div_tac + (fun uu___1 -> Prims.strcat "Le (" uu___)))) + | Comp (Gt, l, r) -> + Obj.magic + (Obj.repr + (FStar_Tactics_Effect.tac_bind + (Prims.mk_range "FStar.Reflection.Formula.fst" + (Prims.of_int (202)) (Prims.of_int (30)) + (Prims.of_int (202)) (Prims.of_int (79))) + (Prims.mk_range "prims.fst" (Prims.of_int (606)) + (Prims.of_int (19)) (Prims.of_int (606)) + (Prims.of_int (31))) + (Obj.magic + (FStar_Tactics_Effect.tac_bind + (Prims.mk_range "FStar.Reflection.Formula.fst" + (Prims.of_int (202)) (Prims.of_int (30)) + (Prims.of_int (202)) (Prims.of_int (46))) + (Prims.mk_range "FStar.Reflection.Formula.fst" + (Prims.of_int (202)) (Prims.of_int (30)) + (Prims.of_int (202)) (Prims.of_int (79))) + (Obj.magic (FStar_Tactics_Builtins.term_to_string l)) + (fun uu___ -> + (fun uu___ -> + Obj.magic + (FStar_Tactics_Effect.tac_bind + (Prims.mk_range + "FStar.Reflection.Formula.fst" + (Prims.of_int (202)) + (Prims.of_int (49)) + (Prims.of_int (202)) + (Prims.of_int (79))) + (Prims.mk_range "prims.fst" + (Prims.of_int (606)) + (Prims.of_int (19)) + (Prims.of_int (606)) + (Prims.of_int (31))) + (Obj.magic + (FStar_Tactics_Effect.tac_bind + (Prims.mk_range + "FStar.Reflection.Formula.fst" + (Prims.of_int (202)) + (Prims.of_int (57)) + (Prims.of_int (202)) + (Prims.of_int (79))) + (Prims.mk_range "prims.fst" + (Prims.of_int (606)) + (Prims.of_int (19)) + (Prims.of_int (606)) + (Prims.of_int (31))) + (Obj.magic + (FStar_Tactics_Effect.tac_bind + (Prims.mk_range + "FStar.Reflection.Formula.fst" + (Prims.of_int (202)) + (Prims.of_int (57)) + (Prims.of_int (202)) + (Prims.of_int (73))) + (Prims.mk_range "prims.fst" + (Prims.of_int (606)) + (Prims.of_int (19)) + (Prims.of_int (606)) + (Prims.of_int (31))) + (Obj.magic + (FStar_Tactics_Builtins.term_to_string + r)) + (fun uu___1 -> + FStar_Tactics_Effect.lift_div_tac + (fun uu___2 -> + Prims.strcat uu___1 + ")")))) + (fun uu___1 -> + FStar_Tactics_Effect.lift_div_tac + (fun uu___2 -> + Prims.strcat ") (" uu___1)))) + (fun uu___1 -> + FStar_Tactics_Effect.lift_div_tac + (fun uu___2 -> + Prims.strcat uu___ uu___1)))) + uu___))) + (fun uu___ -> + FStar_Tactics_Effect.lift_div_tac + (fun uu___1 -> Prims.strcat "Gt (" uu___)))) + | Comp (Ge, l, r) -> + Obj.magic + (Obj.repr + (FStar_Tactics_Effect.tac_bind + (Prims.mk_range "FStar.Reflection.Formula.fst" + (Prims.of_int (203)) (Prims.of_int (30)) + (Prims.of_int (203)) (Prims.of_int (79))) + (Prims.mk_range "prims.fst" (Prims.of_int (606)) + (Prims.of_int (19)) (Prims.of_int (606)) + (Prims.of_int (31))) + (Obj.magic + (FStar_Tactics_Effect.tac_bind + (Prims.mk_range "FStar.Reflection.Formula.fst" + (Prims.of_int (203)) (Prims.of_int (30)) + (Prims.of_int (203)) (Prims.of_int (46))) + (Prims.mk_range "FStar.Reflection.Formula.fst" + (Prims.of_int (203)) (Prims.of_int (30)) + (Prims.of_int (203)) (Prims.of_int (79))) + (Obj.magic (FStar_Tactics_Builtins.term_to_string l)) + (fun uu___ -> + (fun uu___ -> + Obj.magic + (FStar_Tactics_Effect.tac_bind + (Prims.mk_range + "FStar.Reflection.Formula.fst" + (Prims.of_int (203)) + (Prims.of_int (49)) + (Prims.of_int (203)) + (Prims.of_int (79))) + (Prims.mk_range "prims.fst" + (Prims.of_int (606)) + (Prims.of_int (19)) + (Prims.of_int (606)) + (Prims.of_int (31))) + (Obj.magic + (FStar_Tactics_Effect.tac_bind + (Prims.mk_range + "FStar.Reflection.Formula.fst" + (Prims.of_int (203)) + (Prims.of_int (57)) + (Prims.of_int (203)) + (Prims.of_int (79))) + (Prims.mk_range "prims.fst" + (Prims.of_int (606)) + (Prims.of_int (19)) + (Prims.of_int (606)) + (Prims.of_int (31))) + (Obj.magic + (FStar_Tactics_Effect.tac_bind + (Prims.mk_range + "FStar.Reflection.Formula.fst" + (Prims.of_int (203)) + (Prims.of_int (57)) + (Prims.of_int (203)) + (Prims.of_int (73))) + (Prims.mk_range "prims.fst" + (Prims.of_int (606)) + (Prims.of_int (19)) + (Prims.of_int (606)) + (Prims.of_int (31))) + (Obj.magic + (FStar_Tactics_Builtins.term_to_string + r)) + (fun uu___1 -> + FStar_Tactics_Effect.lift_div_tac + (fun uu___2 -> + Prims.strcat uu___1 + ")")))) + (fun uu___1 -> + FStar_Tactics_Effect.lift_div_tac + (fun uu___2 -> + Prims.strcat ") (" uu___1)))) + (fun uu___1 -> + FStar_Tactics_Effect.lift_div_tac + (fun uu___2 -> + Prims.strcat uu___ uu___1)))) + uu___))) + (fun uu___ -> + FStar_Tactics_Effect.lift_div_tac + (fun uu___1 -> Prims.strcat "Ge (" uu___)))) + | And (p, q) -> + Obj.magic + (Obj.repr + (FStar_Tactics_Effect.tac_bind + (Prims.mk_range "FStar.Reflection.Formula.fst" + (Prims.of_int (204)) (Prims.of_int (27)) + (Prims.of_int (204)) (Prims.of_int (76))) + (Prims.mk_range "prims.fst" (Prims.of_int (606)) + (Prims.of_int (19)) (Prims.of_int (606)) + (Prims.of_int (31))) + (Obj.magic + (FStar_Tactics_Effect.tac_bind + (Prims.mk_range "FStar.Reflection.Formula.fst" + (Prims.of_int (204)) (Prims.of_int (27)) + (Prims.of_int (204)) (Prims.of_int (43))) + (Prims.mk_range "FStar.Reflection.Formula.fst" + (Prims.of_int (204)) (Prims.of_int (27)) + (Prims.of_int (204)) (Prims.of_int (76))) + (Obj.magic (FStar_Tactics_Builtins.term_to_string p)) + (fun uu___ -> + (fun uu___ -> + Obj.magic + (FStar_Tactics_Effect.tac_bind + (Prims.mk_range + "FStar.Reflection.Formula.fst" + (Prims.of_int (204)) + (Prims.of_int (46)) + (Prims.of_int (204)) + (Prims.of_int (76))) + (Prims.mk_range "prims.fst" + (Prims.of_int (606)) + (Prims.of_int (19)) + (Prims.of_int (606)) + (Prims.of_int (31))) + (Obj.magic + (FStar_Tactics_Effect.tac_bind + (Prims.mk_range + "FStar.Reflection.Formula.fst" + (Prims.of_int (204)) + (Prims.of_int (54)) + (Prims.of_int (204)) + (Prims.of_int (76))) + (Prims.mk_range "prims.fst" + (Prims.of_int (606)) + (Prims.of_int (19)) + (Prims.of_int (606)) + (Prims.of_int (31))) + (Obj.magic + (FStar_Tactics_Effect.tac_bind + (Prims.mk_range + "FStar.Reflection.Formula.fst" + (Prims.of_int (204)) + (Prims.of_int (54)) + (Prims.of_int (204)) + (Prims.of_int (70))) + (Prims.mk_range "prims.fst" + (Prims.of_int (606)) + (Prims.of_int (19)) + (Prims.of_int (606)) + (Prims.of_int (31))) + (Obj.magic + (FStar_Tactics_Builtins.term_to_string + q)) + (fun uu___1 -> + FStar_Tactics_Effect.lift_div_tac + (fun uu___2 -> + Prims.strcat uu___1 + ")")))) + (fun uu___1 -> + FStar_Tactics_Effect.lift_div_tac + (fun uu___2 -> + Prims.strcat ") (" uu___1)))) + (fun uu___1 -> + FStar_Tactics_Effect.lift_div_tac + (fun uu___2 -> + Prims.strcat uu___ uu___1)))) + uu___))) + (fun uu___ -> + FStar_Tactics_Effect.lift_div_tac + (fun uu___1 -> Prims.strcat "And (" uu___)))) + | Or (p, q) -> + Obj.magic + (Obj.repr + (FStar_Tactics_Effect.tac_bind + (Prims.mk_range "FStar.Reflection.Formula.fst" + (Prims.of_int (205)) (Prims.of_int (27)) + (Prims.of_int (205)) (Prims.of_int (76))) + (Prims.mk_range "prims.fst" (Prims.of_int (606)) + (Prims.of_int (19)) (Prims.of_int (606)) + (Prims.of_int (31))) + (Obj.magic + (FStar_Tactics_Effect.tac_bind + (Prims.mk_range "FStar.Reflection.Formula.fst" + (Prims.of_int (205)) (Prims.of_int (27)) + (Prims.of_int (205)) (Prims.of_int (43))) + (Prims.mk_range "FStar.Reflection.Formula.fst" + (Prims.of_int (205)) (Prims.of_int (27)) + (Prims.of_int (205)) (Prims.of_int (76))) + (Obj.magic (FStar_Tactics_Builtins.term_to_string p)) + (fun uu___ -> + (fun uu___ -> + Obj.magic + (FStar_Tactics_Effect.tac_bind + (Prims.mk_range + "FStar.Reflection.Formula.fst" + (Prims.of_int (205)) + (Prims.of_int (46)) + (Prims.of_int (205)) + (Prims.of_int (76))) + (Prims.mk_range "prims.fst" + (Prims.of_int (606)) + (Prims.of_int (19)) + (Prims.of_int (606)) + (Prims.of_int (31))) + (Obj.magic + (FStar_Tactics_Effect.tac_bind + (Prims.mk_range + "FStar.Reflection.Formula.fst" + (Prims.of_int (205)) + (Prims.of_int (54)) + (Prims.of_int (205)) + (Prims.of_int (76))) + (Prims.mk_range "prims.fst" + (Prims.of_int (606)) + (Prims.of_int (19)) + (Prims.of_int (606)) + (Prims.of_int (31))) + (Obj.magic + (FStar_Tactics_Effect.tac_bind + (Prims.mk_range + "FStar.Reflection.Formula.fst" + (Prims.of_int (205)) + (Prims.of_int (54)) + (Prims.of_int (205)) + (Prims.of_int (70))) + (Prims.mk_range "prims.fst" + (Prims.of_int (606)) + (Prims.of_int (19)) + (Prims.of_int (606)) + (Prims.of_int (31))) + (Obj.magic + (FStar_Tactics_Builtins.term_to_string + q)) + (fun uu___1 -> + FStar_Tactics_Effect.lift_div_tac + (fun uu___2 -> + Prims.strcat uu___1 + ")")))) + (fun uu___1 -> + FStar_Tactics_Effect.lift_div_tac + (fun uu___2 -> + Prims.strcat ") (" uu___1)))) + (fun uu___1 -> + FStar_Tactics_Effect.lift_div_tac + (fun uu___2 -> + Prims.strcat uu___ uu___1)))) + uu___))) + (fun uu___ -> + FStar_Tactics_Effect.lift_div_tac + (fun uu___1 -> Prims.strcat "Or (" uu___)))) + | Implies (p, q) -> + Obj.magic + (Obj.repr + (FStar_Tactics_Effect.tac_bind + (Prims.mk_range "FStar.Reflection.Formula.fst" + (Prims.of_int (206)) (Prims.of_int (36)) + (Prims.of_int (206)) (Prims.of_int (85))) + (Prims.mk_range "prims.fst" (Prims.of_int (606)) + (Prims.of_int (19)) (Prims.of_int (606)) + (Prims.of_int (31))) + (Obj.magic + (FStar_Tactics_Effect.tac_bind + (Prims.mk_range "FStar.Reflection.Formula.fst" + (Prims.of_int (206)) (Prims.of_int (36)) + (Prims.of_int (206)) (Prims.of_int (52))) + (Prims.mk_range "FStar.Reflection.Formula.fst" + (Prims.of_int (206)) (Prims.of_int (36)) + (Prims.of_int (206)) (Prims.of_int (85))) + (Obj.magic (FStar_Tactics_Builtins.term_to_string p)) + (fun uu___ -> + (fun uu___ -> + Obj.magic + (FStar_Tactics_Effect.tac_bind + (Prims.mk_range + "FStar.Reflection.Formula.fst" + (Prims.of_int (206)) + (Prims.of_int (55)) + (Prims.of_int (206)) + (Prims.of_int (85))) + (Prims.mk_range "prims.fst" + (Prims.of_int (606)) + (Prims.of_int (19)) + (Prims.of_int (606)) + (Prims.of_int (31))) + (Obj.magic + (FStar_Tactics_Effect.tac_bind + (Prims.mk_range + "FStar.Reflection.Formula.fst" + (Prims.of_int (206)) + (Prims.of_int (63)) + (Prims.of_int (206)) + (Prims.of_int (85))) + (Prims.mk_range "prims.fst" + (Prims.of_int (606)) + (Prims.of_int (19)) + (Prims.of_int (606)) + (Prims.of_int (31))) + (Obj.magic + (FStar_Tactics_Effect.tac_bind + (Prims.mk_range + "FStar.Reflection.Formula.fst" + (Prims.of_int (206)) + (Prims.of_int (63)) + (Prims.of_int (206)) + (Prims.of_int (79))) + (Prims.mk_range "prims.fst" + (Prims.of_int (606)) + (Prims.of_int (19)) + (Prims.of_int (606)) + (Prims.of_int (31))) + (Obj.magic + (FStar_Tactics_Builtins.term_to_string + q)) + (fun uu___1 -> + FStar_Tactics_Effect.lift_div_tac + (fun uu___2 -> + Prims.strcat uu___1 + ")")))) + (fun uu___1 -> + FStar_Tactics_Effect.lift_div_tac + (fun uu___2 -> + Prims.strcat ") (" uu___1)))) + (fun uu___1 -> + FStar_Tactics_Effect.lift_div_tac + (fun uu___2 -> + Prims.strcat uu___ uu___1)))) + uu___))) + (fun uu___ -> + FStar_Tactics_Effect.lift_div_tac + (fun uu___1 -> Prims.strcat "Implies (" uu___)))) + | Not p -> + Obj.magic + (Obj.repr + (FStar_Tactics_Effect.tac_bind + (Prims.mk_range "FStar.Reflection.Formula.fst" + (Prims.of_int (207)) (Prims.of_int (26)) + (Prims.of_int (207)) (Prims.of_int (48))) + (Prims.mk_range "prims.fst" (Prims.of_int (606)) + (Prims.of_int (19)) (Prims.of_int (606)) + (Prims.of_int (31))) + (Obj.magic + (FStar_Tactics_Effect.tac_bind + (Prims.mk_range "FStar.Reflection.Formula.fst" + (Prims.of_int (207)) (Prims.of_int (26)) + (Prims.of_int (207)) (Prims.of_int (42))) + (Prims.mk_range "prims.fst" (Prims.of_int (606)) + (Prims.of_int (19)) (Prims.of_int (606)) + (Prims.of_int (31))) + (Obj.magic (FStar_Tactics_Builtins.term_to_string p)) + (fun uu___ -> + FStar_Tactics_Effect.lift_div_tac + (fun uu___1 -> Prims.strcat uu___ ")")))) + (fun uu___ -> + FStar_Tactics_Effect.lift_div_tac + (fun uu___1 -> Prims.strcat "Not (" uu___)))) + | Iff (p, q) -> + Obj.magic + (Obj.repr + (FStar_Tactics_Effect.tac_bind + (Prims.mk_range "FStar.Reflection.Formula.fst" + (Prims.of_int (208)) (Prims.of_int (28)) + (Prims.of_int (208)) (Prims.of_int (77))) + (Prims.mk_range "prims.fst" (Prims.of_int (606)) + (Prims.of_int (19)) (Prims.of_int (606)) + (Prims.of_int (31))) + (Obj.magic + (FStar_Tactics_Effect.tac_bind + (Prims.mk_range "FStar.Reflection.Formula.fst" + (Prims.of_int (208)) (Prims.of_int (28)) + (Prims.of_int (208)) (Prims.of_int (44))) + (Prims.mk_range "FStar.Reflection.Formula.fst" + (Prims.of_int (208)) (Prims.of_int (28)) + (Prims.of_int (208)) (Prims.of_int (77))) + (Obj.magic (FStar_Tactics_Builtins.term_to_string p)) + (fun uu___ -> + (fun uu___ -> + Obj.magic + (FStar_Tactics_Effect.tac_bind + (Prims.mk_range + "FStar.Reflection.Formula.fst" + (Prims.of_int (208)) + (Prims.of_int (47)) + (Prims.of_int (208)) + (Prims.of_int (77))) + (Prims.mk_range "prims.fst" + (Prims.of_int (606)) + (Prims.of_int (19)) + (Prims.of_int (606)) + (Prims.of_int (31))) + (Obj.magic + (FStar_Tactics_Effect.tac_bind + (Prims.mk_range + "FStar.Reflection.Formula.fst" + (Prims.of_int (208)) + (Prims.of_int (55)) + (Prims.of_int (208)) + (Prims.of_int (77))) + (Prims.mk_range "prims.fst" + (Prims.of_int (606)) + (Prims.of_int (19)) + (Prims.of_int (606)) + (Prims.of_int (31))) + (Obj.magic + (FStar_Tactics_Effect.tac_bind + (Prims.mk_range + "FStar.Reflection.Formula.fst" + (Prims.of_int (208)) + (Prims.of_int (55)) + (Prims.of_int (208)) + (Prims.of_int (71))) + (Prims.mk_range "prims.fst" + (Prims.of_int (606)) + (Prims.of_int (19)) + (Prims.of_int (606)) + (Prims.of_int (31))) + (Obj.magic + (FStar_Tactics_Builtins.term_to_string + q)) + (fun uu___1 -> + FStar_Tactics_Effect.lift_div_tac + (fun uu___2 -> + Prims.strcat uu___1 + ")")))) + (fun uu___1 -> + FStar_Tactics_Effect.lift_div_tac + (fun uu___2 -> + Prims.strcat ") (" uu___1)))) + (fun uu___1 -> + FStar_Tactics_Effect.lift_div_tac + (fun uu___2 -> + Prims.strcat uu___ uu___1)))) + uu___))) + (fun uu___ -> + FStar_Tactics_Effect.lift_div_tac + (fun uu___1 -> Prims.strcat "Iff (" uu___)))) + | Forall (bs, t) -> + Obj.magic + (Obj.repr + (FStar_Tactics_Effect.tac_bind + (Prims.mk_range "FStar.Reflection.Formula.fst" + (Prims.of_int (209)) (Prims.of_int (39)) + (Prims.of_int (209)) (Prims.of_int (61))) + (Prims.mk_range "prims.fst" (Prims.of_int (606)) + (Prims.of_int (19)) (Prims.of_int (606)) + (Prims.of_int (31))) + (Obj.magic + (FStar_Tactics_Effect.tac_bind + (Prims.mk_range "FStar.Reflection.Formula.fst" + (Prims.of_int (209)) (Prims.of_int (39)) + (Prims.of_int (209)) (Prims.of_int (55))) + (Prims.mk_range "prims.fst" (Prims.of_int (606)) + (Prims.of_int (19)) (Prims.of_int (606)) + (Prims.of_int (31))) + (Obj.magic (FStar_Tactics_Builtins.term_to_string t)) + (fun uu___ -> + FStar_Tactics_Effect.lift_div_tac + (fun uu___1 -> Prims.strcat uu___ ")")))) + (fun uu___ -> + FStar_Tactics_Effect.lift_div_tac + (fun uu___1 -> Prims.strcat "Forall (" uu___)))) + | Exists (bs, t) -> + Obj.magic + (Obj.repr + (FStar_Tactics_Effect.tac_bind + (Prims.mk_range "FStar.Reflection.Formula.fst" + (Prims.of_int (210)) (Prims.of_int (39)) + (Prims.of_int (210)) (Prims.of_int (61))) + (Prims.mk_range "prims.fst" (Prims.of_int (606)) + (Prims.of_int (19)) (Prims.of_int (606)) + (Prims.of_int (31))) + (Obj.magic + (FStar_Tactics_Effect.tac_bind + (Prims.mk_range "FStar.Reflection.Formula.fst" + (Prims.of_int (210)) (Prims.of_int (39)) + (Prims.of_int (210)) (Prims.of_int (55))) + (Prims.mk_range "prims.fst" (Prims.of_int (606)) + (Prims.of_int (19)) (Prims.of_int (606)) + (Prims.of_int (31))) + (Obj.magic (FStar_Tactics_Builtins.term_to_string t)) + (fun uu___ -> + FStar_Tactics_Effect.lift_div_tac + (fun uu___1 -> Prims.strcat uu___ ")")))) + (fun uu___ -> + FStar_Tactics_Effect.lift_div_tac + (fun uu___1 -> Prims.strcat "Exists (" uu___)))) + | App (p, q) -> + Obj.magic + (Obj.repr + (FStar_Tactics_Effect.tac_bind + (Prims.mk_range "FStar.Reflection.Formula.fst" + (Prims.of_int (211)) (Prims.of_int (28)) + (Prims.of_int (211)) (Prims.of_int (77))) + (Prims.mk_range "prims.fst" (Prims.of_int (606)) + (Prims.of_int (19)) (Prims.of_int (606)) + (Prims.of_int (31))) + (Obj.magic + (FStar_Tactics_Effect.tac_bind + (Prims.mk_range "FStar.Reflection.Formula.fst" + (Prims.of_int (211)) (Prims.of_int (28)) + (Prims.of_int (211)) (Prims.of_int (44))) + (Prims.mk_range "FStar.Reflection.Formula.fst" + (Prims.of_int (211)) (Prims.of_int (28)) + (Prims.of_int (211)) (Prims.of_int (77))) + (Obj.magic (FStar_Tactics_Builtins.term_to_string p)) + (fun uu___ -> + (fun uu___ -> + Obj.magic + (FStar_Tactics_Effect.tac_bind + (Prims.mk_range + "FStar.Reflection.Formula.fst" + (Prims.of_int (211)) + (Prims.of_int (47)) + (Prims.of_int (211)) + (Prims.of_int (77))) + (Prims.mk_range "prims.fst" + (Prims.of_int (606)) + (Prims.of_int (19)) + (Prims.of_int (606)) + (Prims.of_int (31))) + (Obj.magic + (FStar_Tactics_Effect.tac_bind + (Prims.mk_range + "FStar.Reflection.Formula.fst" + (Prims.of_int (211)) + (Prims.of_int (55)) + (Prims.of_int (211)) + (Prims.of_int (77))) + (Prims.mk_range "prims.fst" + (Prims.of_int (606)) + (Prims.of_int (19)) + (Prims.of_int (606)) + (Prims.of_int (31))) + (Obj.magic + (FStar_Tactics_Effect.tac_bind + (Prims.mk_range + "FStar.Reflection.Formula.fst" + (Prims.of_int (211)) + (Prims.of_int (55)) + (Prims.of_int (211)) + (Prims.of_int (71))) + (Prims.mk_range "prims.fst" + (Prims.of_int (606)) + (Prims.of_int (19)) + (Prims.of_int (606)) + (Prims.of_int (31))) + (Obj.magic + (FStar_Tactics_Builtins.term_to_string + q)) + (fun uu___1 -> + FStar_Tactics_Effect.lift_div_tac + (fun uu___2 -> + Prims.strcat uu___1 + ")")))) + (fun uu___1 -> + FStar_Tactics_Effect.lift_div_tac + (fun uu___2 -> + Prims.strcat ") (" uu___1)))) + (fun uu___1 -> + FStar_Tactics_Effect.lift_div_tac + (fun uu___2 -> + Prims.strcat uu___ uu___1)))) + uu___))) + (fun uu___ -> + FStar_Tactics_Effect.lift_div_tac + (fun uu___1 -> Prims.strcat "App (" uu___)))) + | Name bv -> + Obj.magic + (Obj.repr + (FStar_Tactics_Effect.lift_div_tac + (fun uu___ -> + Prims.strcat "Name (" + (Prims.strcat + (FStar_Reflection_Derived.bv_to_string bv) ")")))) + | FV fv -> + Obj.magic + (Obj.repr + (FStar_Tactics_Effect.lift_div_tac + (fun uu___ -> + Prims.strcat "FV (" + (Prims.strcat + (FStar_Reflection_Derived.flatten_name + (FStar_Reflection_Builtins.inspect_fv fv)) ")")))) + | IntLit i -> + Obj.magic + (Obj.repr + (FStar_Tactics_Effect.lift_div_tac + (fun uu___ -> Prims.strcat "Int " (Prims.string_of_int i)))) + | F_Unknown -> + Obj.magic + (Obj.repr (FStar_Tactics_Effect.lift_div_tac (fun uu___ -> "?")))) + uu___ \ No newline at end of file diff --git a/src/ocaml-output/FStar_Reflection_Interpreter.ml b/ocaml/fstar-lib/generated/FStar_Reflection_Interpreter.ml similarity index 100% rename from src/ocaml-output/FStar_Reflection_Interpreter.ml rename to ocaml/fstar-lib/generated/FStar_Reflection_Interpreter.ml diff --git a/src/ocaml-output/FStar_Reflection_NBEEmbeddings.ml b/ocaml/fstar-lib/generated/FStar_Reflection_NBEEmbeddings.ml similarity index 100% rename from src/ocaml-output/FStar_Reflection_NBEEmbeddings.ml rename to ocaml/fstar-lib/generated/FStar_Reflection_NBEEmbeddings.ml diff --git a/ocaml/fstar-lib/generated/FStar_ReflexiveTransitiveClosure.ml b/ocaml/fstar-lib/generated/FStar_ReflexiveTransitiveClosure.ml new file mode 100644 index 00000000000..aad2f3b148b --- /dev/null +++ b/ocaml/fstar-lib/generated/FStar_ReflexiveTransitiveClosure.ml @@ -0,0 +1,115 @@ +open Prims +type 'a binrel = unit +type 'a predicate = unit +type ('a, 'rel) reflexive = unit +type ('a, 'rel) transitive = unit +type ('a, 'rel) preorder_rel = unit +type 'a preorder = unit +type ('a, 'p, 'rel) stable = unit +type ('a, 'r, 'dummyV0, 'dummyV1) _closure = + | Refl of 'a + | Step of 'a * 'a * unit + | Closure of 'a * 'a * 'a * ('a, 'r, unit, unit) _closure * ('a, 'r, + unit, unit) _closure +let uu___is_Refl : + 'a 'r . 'a -> 'a -> ('a, 'r, unit, unit) _closure -> Prims.bool = + fun uu___ -> + fun uu___1 -> + fun projectee -> + match projectee with | Refl x -> true | uu___2 -> false +let __proj__Refl__item__x : + 'a 'r . 'a -> 'a -> ('a, 'r, unit, unit) _closure -> 'a = + fun uu___ -> + fun uu___1 -> fun projectee -> match projectee with | Refl x -> x +let uu___is_Step : + 'a 'r . 'a -> 'a -> ('a, 'r, unit, unit) _closure -> Prims.bool = + fun uu___ -> + fun uu___1 -> + fun projectee -> + match projectee with | Step (x, y, _2) -> true | uu___2 -> false +let __proj__Step__item__x : + 'a 'r . 'a -> 'a -> ('a, 'r, unit, unit) _closure -> 'a = + fun uu___ -> + fun uu___1 -> + fun projectee -> match projectee with | Step (x, y, _2) -> x +let __proj__Step__item__y : + 'a 'r . 'a -> 'a -> ('a, 'r, unit, unit) _closure -> 'a = + fun uu___ -> + fun uu___1 -> + fun projectee -> match projectee with | Step (x, y, _2) -> y +let uu___is_Closure : + 'a 'r . 'a -> 'a -> ('a, 'r, unit, unit) _closure -> Prims.bool = + fun uu___ -> + fun uu___1 -> + fun projectee -> + match projectee with + | Closure (x, y, z, _3, _4) -> true + | uu___2 -> false +let __proj__Closure__item__x : + 'a 'r . 'a -> 'a -> ('a, 'r, unit, unit) _closure -> 'a = + fun uu___ -> + fun uu___1 -> + fun projectee -> match projectee with | Closure (x, y, z, _3, _4) -> x +let __proj__Closure__item__y : + 'a 'r . 'a -> 'a -> ('a, 'r, unit, unit) _closure -> 'a = + fun uu___ -> + fun uu___1 -> + fun projectee -> match projectee with | Closure (x, y, z, _3, _4) -> y +let __proj__Closure__item__z : + 'a 'r . 'a -> 'a -> ('a, 'r, unit, unit) _closure -> 'a = + fun uu___ -> + fun uu___1 -> + fun projectee -> match projectee with | Closure (x, y, z, _3, _4) -> z +let __proj__Closure__item___3 : + 'a 'r . + 'a -> + 'a -> ('a, 'r, unit, unit) _closure -> ('a, 'r, unit, unit) _closure + = + fun uu___ -> + fun uu___1 -> + fun projectee -> match projectee with | Closure (x, y, z, _3, _4) -> _3 +let __proj__Closure__item___4 : + 'a 'r . + 'a -> + 'a -> ('a, 'r, unit, unit) _closure -> ('a, 'r, unit, unit) _closure + = + fun uu___ -> + fun uu___1 -> + fun projectee -> match projectee with | Closure (x, y, z, _3, _4) -> _4 +type ('a, 'r, 'x, 'y) _closure0 = unit +type ('a, 'r, 'uuuuu, 'uuuuu1) closure = unit +let rec closure_one_aux : + 'a 'r . + 'a -> + 'a -> + ('a, 'r, unit, unit) _closure -> + (unit, + ('a, unit, ('a, 'r, unit, unit) _closure) + FStar_Pervasives.dtuple3) + FStar_Pervasives.either + = + fun x -> + fun y -> + fun xy -> + match xy with + | Refl uu___ -> FStar_Pervasives.Inl () + | Step (uu___, uu___1, pr) -> + FStar_Pervasives.Inr + (FStar_Pervasives.Mkdtuple3 (y, (), (Refl y))) + | Closure (x1, i, y1, xi, iy) -> + (match closure_one_aux i y1 iy with + | FStar_Pervasives.Inl uu___ -> closure_one_aux x1 y1 xi + | FStar_Pervasives.Inr (FStar_Pervasives.Mkdtuple3 + (z, r_i_z, c_z_y)) -> + let c_z_y1 = c_z_y in + (match closure_one_aux x1 i xi with + | FStar_Pervasives.Inl uu___ -> + FStar_Pervasives.Inr + (FStar_Pervasives.Mkdtuple3 (z, (), c_z_y1)) + | FStar_Pervasives.Inr (FStar_Pervasives.Mkdtuple3 + (w, r_x_w, c_w_i)) -> + let step = Step (i, z, ()) in + let c_i_y = Closure (i, z, y1, step, c_z_y1) in + let c_w_y = Closure (w, i, y1, c_w_i, c_i_y) in + FStar_Pervasives.Inr + (FStar_Pervasives.Mkdtuple3 (w, (), c_w_y)))) \ No newline at end of file diff --git a/src/ocaml-output/FStar_SMTEncoding_Encode.ml b/ocaml/fstar-lib/generated/FStar_SMTEncoding_Encode.ml similarity index 100% rename from src/ocaml-output/FStar_SMTEncoding_Encode.ml rename to ocaml/fstar-lib/generated/FStar_SMTEncoding_Encode.ml diff --git a/src/ocaml-output/FStar_SMTEncoding_EncodeTerm.ml b/ocaml/fstar-lib/generated/FStar_SMTEncoding_EncodeTerm.ml similarity index 100% rename from src/ocaml-output/FStar_SMTEncoding_EncodeTerm.ml rename to ocaml/fstar-lib/generated/FStar_SMTEncoding_EncodeTerm.ml diff --git a/src/ocaml-output/FStar_SMTEncoding_Env.ml b/ocaml/fstar-lib/generated/FStar_SMTEncoding_Env.ml similarity index 100% rename from src/ocaml-output/FStar_SMTEncoding_Env.ml rename to ocaml/fstar-lib/generated/FStar_SMTEncoding_Env.ml diff --git a/src/ocaml-output/FStar_SMTEncoding_ErrorReporting.ml b/ocaml/fstar-lib/generated/FStar_SMTEncoding_ErrorReporting.ml similarity index 100% rename from src/ocaml-output/FStar_SMTEncoding_ErrorReporting.ml rename to ocaml/fstar-lib/generated/FStar_SMTEncoding_ErrorReporting.ml diff --git a/src/ocaml-output/FStar_SMTEncoding_Solver.ml b/ocaml/fstar-lib/generated/FStar_SMTEncoding_Solver.ml similarity index 100% rename from src/ocaml-output/FStar_SMTEncoding_Solver.ml rename to ocaml/fstar-lib/generated/FStar_SMTEncoding_Solver.ml diff --git a/src/ocaml-output/FStar_SMTEncoding_Term.ml b/ocaml/fstar-lib/generated/FStar_SMTEncoding_Term.ml similarity index 100% rename from src/ocaml-output/FStar_SMTEncoding_Term.ml rename to ocaml/fstar-lib/generated/FStar_SMTEncoding_Term.ml diff --git a/src/ocaml-output/FStar_SMTEncoding_Util.ml b/ocaml/fstar-lib/generated/FStar_SMTEncoding_Util.ml similarity index 100% rename from src/ocaml-output/FStar_SMTEncoding_Util.ml rename to ocaml/fstar-lib/generated/FStar_SMTEncoding_Util.ml diff --git a/src/ocaml-output/FStar_SMTEncoding_Z3.ml b/ocaml/fstar-lib/generated/FStar_SMTEncoding_Z3.ml similarity index 100% rename from src/ocaml-output/FStar_SMTEncoding_Z3.ml rename to ocaml/fstar-lib/generated/FStar_SMTEncoding_Z3.ml diff --git a/ocaml/fstar-lib/generated/FStar_Seq.ml b/ocaml/fstar-lib/generated/FStar_Seq.ml new file mode 100644 index 00000000000..e8306abedb2 --- /dev/null +++ b/ocaml/fstar-lib/generated/FStar_Seq.ml @@ -0,0 +1 @@ +open Prims \ No newline at end of file diff --git a/ocaml/fstar-lib/generated/FStar_Seq_Base.ml b/ocaml/fstar-lib/generated/FStar_Seq_Base.ml new file mode 100644 index 00000000000..19f181cad7a --- /dev/null +++ b/ocaml/fstar-lib/generated/FStar_Seq_Base.ml @@ -0,0 +1,83 @@ +open Prims +type 'a seq = + | MkSeq of 'a Prims.list +let uu___is_MkSeq : 'a . 'a seq -> Prims.bool = fun projectee -> true +let __proj__MkSeq__item__l : 'a . 'a seq -> 'a Prims.list = + fun projectee -> match projectee with | MkSeq l -> l +let length : 'uuuuu . 'uuuuu seq -> Prims.nat = + fun s -> FStar_List_Tot_Base.length (__proj__MkSeq__item__l s) +let index : 'uuuuu . 'uuuuu seq -> Prims.nat -> 'uuuuu = + fun s -> fun i -> FStar_List_Tot_Base.index (__proj__MkSeq__item__l s) i +let cons : 'a . 'a -> 'a seq -> 'a seq = + fun x -> fun s -> MkSeq (x :: (__proj__MkSeq__item__l s)) +let hd : 'a . 'a seq -> 'a = + fun s -> FStar_List_Tot_Base.hd (__proj__MkSeq__item__l s) +let tl : 'a . 'a seq -> 'a seq = + fun s -> MkSeq (FStar_List_Tot_Base.tl (__proj__MkSeq__item__l s)) +let rec create : 'uuuuu . Prims.nat -> 'uuuuu -> 'uuuuu seq = + fun len -> + fun v -> + if len = Prims.int_zero + then MkSeq [] + else cons v (create (len - Prims.int_one) v) +let rec init_aux' : + 'a . Prims.nat -> Prims.nat -> (Prims.nat -> 'a) -> 'a seq = + fun len -> + fun k -> + fun contents -> + if (k + Prims.int_one) = len + then MkSeq [contents k] + else cons (contents k) (init_aux' len (k + Prims.int_one) contents) +let init_aux : 'a . Prims.nat -> Prims.nat -> (Prims.nat -> 'a) -> 'a seq = + init_aux' +let init : 'uuuuu . Prims.nat -> (Prims.nat -> 'uuuuu) -> 'uuuuu seq = + fun len -> + fun contents -> + if len = Prims.int_zero + then MkSeq [] + else init_aux len Prims.int_zero contents +let empty : 'uuuuu . unit -> 'uuuuu seq = fun uu___ -> MkSeq [] +let createEmpty : 'a . unit -> 'a seq = fun uu___ -> empty () +let rec upd' : 'a . 'a seq -> Prims.nat -> 'a -> 'a seq = + fun s -> + fun n -> + fun v -> + if n = Prims.int_zero + then cons v (tl s) + else cons (hd s) (upd' (tl s) (n - Prims.int_one) v) +let upd : 'a . 'a seq -> Prims.nat -> 'a -> 'a seq = upd' +let append : 'uuuuu . 'uuuuu seq -> 'uuuuu seq -> 'uuuuu seq = + fun s1 -> + fun s2 -> + MkSeq + (FStar_List_Tot_Base.append (__proj__MkSeq__item__l s1) + (__proj__MkSeq__item__l s2)) +let op_At_Bar : 'a . 'a seq -> 'a seq -> 'a seq = + fun s1 -> fun s2 -> append s1 s2 +let rec slice' : 'a . 'a seq -> Prims.nat -> Prims.nat -> 'a seq = + fun s -> + fun i -> + fun j -> + if i > Prims.int_zero + then slice' (tl s) (i - Prims.int_one) (j - Prims.int_one) + else + if j = Prims.int_zero + then MkSeq [] + else cons (hd s) (slice' (tl s) i (j - Prims.int_one)) +let slice : 'a . 'a seq -> Prims.nat -> Prims.nat -> 'a seq = slice' +type ('a, 's1, 's2) equal = unit +let rec eq_i' : 'a . 'a seq -> 'a seq -> Prims.nat -> Prims.bool = + fun s1 -> + fun s2 -> + fun i -> + if i = (length s1) + then true + else + if (index s1 i) = (index s2 i) + then eq_i' s1 s2 (i + Prims.int_one) + else false +let eq_i : 'a . 'a seq -> 'a seq -> Prims.nat -> Prims.bool = eq_i' +let eq : 'uuuuu . 'uuuuu seq -> 'uuuuu seq -> Prims.bool = + fun s1 -> + fun s2 -> + if (length s1) = (length s2) then eq_i s1 s2 Prims.int_zero else false \ No newline at end of file diff --git a/ocaml/fstar-lib/generated/FStar_Seq_Equiv.ml b/ocaml/fstar-lib/generated/FStar_Seq_Equiv.ml new file mode 100644 index 00000000000..9491e556421 --- /dev/null +++ b/ocaml/fstar-lib/generated/FStar_Seq_Equiv.ml @@ -0,0 +1,7 @@ +open Prims +type ('c, 'eq, 's1, 's2) eq_of_seq = Obj.t +let seq_equiv : + 'c . + 'c FStar_Algebra_CommMonoid_Equiv.equiv -> + 'c FStar_Seq_Base.seq FStar_Algebra_CommMonoid_Equiv.equiv + = fun eq -> FStar_Algebra_CommMonoid_Equiv.EQ ((), (), (), ()) \ No newline at end of file diff --git a/ocaml/fstar-lib/generated/FStar_Seq_Permutation.ml b/ocaml/fstar-lib/generated/FStar_Seq_Permutation.ml new file mode 100644 index 00000000000..4d4ab5be64d --- /dev/null +++ b/ocaml/fstar-lib/generated/FStar_Seq_Permutation.ml @@ -0,0 +1,121 @@ +open Prims +type ('a, 's) index_fun = + unit FStar_IntegerIntervals.under -> unit FStar_IntegerIntervals.under +type ('a, 's0, 's1, 'f) is_permutation = unit +type ('a, 's0, 's1) seqperm = ('a, unit) index_fun +let rec find : + 'a . + 'a -> + 'a FStar_Seq_Base.seq -> + ('a FStar_Seq_Base.seq * 'a FStar_Seq_Base.seq) + = + fun x -> + fun s -> + if (FStar_Seq_Properties.head s) = x + then ((FStar_Seq_Base.empty ()), (FStar_Seq_Properties.tail s)) + else + (let uu___1 = find x (FStar_Seq_Properties.tail s) in + match uu___1 with + | (pfx, sfx) -> + ((FStar_Seq_Properties.cons (FStar_Seq_Properties.head s) pfx), + sfx)) +let adapt_index_fun : + 'a . + 'a FStar_Seq_Base.seq -> + ('a, unit) index_fun -> Prims.nat -> ('a, unit) index_fun + = + fun s -> + fun f -> + fun n -> + fun i -> + if i = Prims.int_zero + then n + else + if (f (i - Prims.int_one)) < n + then f (i - Prims.int_one) + else (f (i - Prims.int_one)) + Prims.int_one +let rec permutation_from_equal_counts : + 'a . + 'a FStar_Seq_Base.seq -> + 'a FStar_Seq_Base.seq -> ('a, unit, unit) seqperm + = + fun s0 -> + fun s1 -> + if (FStar_Seq_Base.length s0) = Prims.int_zero + then let f i = i in f + else + (let uu___1 = find (FStar_Seq_Properties.head s0) s1 in + match uu___1 with + | (pfx, sfx) -> + let s1' = FStar_Seq_Base.append pfx sfx in + let f' = + permutation_from_equal_counts (FStar_Seq_Properties.tail s0) + s1' in + let n = FStar_Seq_Base.length pfx in + let f = adapt_index_fun s0 f' n in f) +let foldm_snoc : + 'a . + 'a FStar_Algebra_CommMonoid_Equiv.equiv -> + ('a, unit) FStar_Algebra_CommMonoid_Equiv.cm -> + 'a FStar_Seq_Base.seq -> 'a + = + fun eq -> + fun m -> + fun s -> + FStar_Seq_Properties.foldr_snoc + (FStar_Algebra_CommMonoid_Equiv.__proj__CM__item__mult eq m) s + (FStar_Algebra_CommMonoid_Equiv.__proj__CM__item__unit eq m) +let remove_i : + 'a . 'a FStar_Seq_Base.seq -> Prims.nat -> ('a * 'a FStar_Seq_Base.seq) = + fun s -> + fun i -> + let uu___ = FStar_Seq_Properties.split s i in + match uu___ with + | (s0, s1) -> + ((FStar_Seq_Properties.head s1), + (FStar_Seq_Base.append s0 (FStar_Seq_Properties.tail s1))) +let shift_perm' : + 'a . + 'a FStar_Seq_Base.seq -> + 'a FStar_Seq_Base.seq -> + unit -> ('a, unit, unit) seqperm -> ('a, unit, unit) seqperm + = + fun s0 -> + fun s1 -> + fun uu___ -> + fun p -> + let uu___1 = FStar_Seq_Properties.un_snoc s0 in + match uu___1 with + | (s0', last) -> + let n = FStar_Seq_Base.length s0' in + let p' i = if (p i) < (p n) then p i else (p i) - Prims.int_one in + let uu___2 = remove_i s1 (p n) in + (match uu___2 with | (uu___3, s1') -> p') +let shift_perm : + 'a . + 'a FStar_Seq_Base.seq -> + 'a FStar_Seq_Base.seq -> + unit -> ('a, unit, unit) seqperm -> ('a, unit, unit) seqperm + = fun s0 -> fun s1 -> fun uu___ -> fun p -> shift_perm' s0 s1 () p +let init_func_from_expr : + 'c . + Prims.int -> + unit FStar_IntegerIntervals.not_less_than -> + ((unit, unit) FStar_IntegerIntervals.ifrom_ito -> 'c) -> + (unit, unit) FStar_IntegerIntervals.ifrom_ito -> + (unit, unit) FStar_IntegerIntervals.ifrom_ito -> + unit FStar_IntegerIntervals.under -> 'c + = fun n0 -> fun nk -> fun expr -> fun a -> fun b -> fun i -> expr (n0 + i) +let func_sum : + 'a 'c . + 'c FStar_Algebra_CommMonoid_Equiv.equiv -> + ('c, unit) FStar_Algebra_CommMonoid_Equiv.cm -> + ('a -> 'c) -> ('a -> 'c) -> 'a -> 'c + = + fun eq -> + fun cm -> + fun f -> + fun g -> + fun x -> + FStar_Algebra_CommMonoid_Equiv.__proj__CM__item__mult eq cm ( + f x) (g x) \ No newline at end of file diff --git a/ocaml/fstar-lib/generated/FStar_Seq_Properties.ml b/ocaml/fstar-lib/generated/FStar_Seq_Properties.ml new file mode 100644 index 00000000000..2a99a9da3c0 --- /dev/null +++ b/ocaml/fstar-lib/generated/FStar_Seq_Properties.ml @@ -0,0 +1,239 @@ +open Prims +type ('a, 'l) lseq = 'a FStar_Seq_Base.seq +type ('a, 's, 'j) indexable = unit +let head : 'a . 'a FStar_Seq_Base.seq -> 'a = + fun s -> FStar_Seq_Base.index s Prims.int_zero +let tail : 'a . 'a FStar_Seq_Base.seq -> 'a FStar_Seq_Base.seq = + fun s -> FStar_Seq_Base.slice s Prims.int_one (FStar_Seq_Base.length s) +let last : 'a . 'a FStar_Seq_Base.seq -> 'a = + fun s -> FStar_Seq_Base.index s ((FStar_Seq_Base.length s) - Prims.int_one) +let cons : 'a . 'a -> 'a FStar_Seq_Base.seq -> 'a FStar_Seq_Base.seq = + fun x -> + fun s -> FStar_Seq_Base.append (FStar_Seq_Base.create Prims.int_one x) s +let split : + 'a . + 'a FStar_Seq_Base.seq -> + Prims.nat -> ('a FStar_Seq_Base.seq * 'a FStar_Seq_Base.seq) + = + fun s -> + fun i -> + ((FStar_Seq_Base.slice s Prims.int_zero i), + (FStar_Seq_Base.slice s i (FStar_Seq_Base.length s))) +let split_eq : + 'a . + 'a FStar_Seq_Base.seq -> + Prims.nat -> ('a FStar_Seq_Base.seq * 'a FStar_Seq_Base.seq) + = fun s -> fun i -> let x = split s i in x +let rec count : 'a . 'a -> 'a FStar_Seq_Base.seq -> Prims.nat = + fun x -> + fun s -> + if (FStar_Seq_Base.length s) = Prims.int_zero + then Prims.int_zero + else + if (head s) = x + then Prims.int_one + (count x (tail s)) + else count x (tail s) +let mem : 'a . 'a -> 'a FStar_Seq_Base.seq -> Prims.bool = + fun x -> fun l -> (count x l) > Prims.int_zero +let rec index_mem : 'a . 'a -> 'a FStar_Seq_Base.seq -> Prims.nat = + fun x -> + fun s -> + if (head s) = x + then Prims.int_zero + else Prims.int_one + (index_mem x (tail s)) +let swap : + 'a . + 'a FStar_Seq_Base.seq -> Prims.nat -> Prims.nat -> 'a FStar_Seq_Base.seq + = + fun s -> + fun i -> + fun j -> + FStar_Seq_Base.upd + (FStar_Seq_Base.upd s j (FStar_Seq_Base.index s i)) i + (FStar_Seq_Base.index s j) +let rec sorted : + 'a . ('a -> 'a -> Prims.bool) -> 'a FStar_Seq_Base.seq -> Prims.bool = + fun f -> + fun s -> + if (FStar_Seq_Base.length s) <= Prims.int_one + then true + else + (let hd = head s in + (f hd (FStar_Seq_Base.index s Prims.int_one)) && (sorted f (tail s))) +type ('a, 'f) total_order = unit +type 'a tot_ord = 'a -> 'a -> Prims.bool +let split_5 : + 'a . + 'a FStar_Seq_Base.seq -> + Prims.nat -> Prims.nat -> 'a FStar_Seq_Base.seq FStar_Seq_Base.seq + = + fun s -> + fun i -> + fun j -> + let frag_lo = FStar_Seq_Base.slice s Prims.int_zero i in + let frag_i = FStar_Seq_Base.slice s i (i + Prims.int_one) in + let frag_mid = FStar_Seq_Base.slice s (i + Prims.int_one) j in + let frag_j = FStar_Seq_Base.slice s j (j + Prims.int_one) in + let frag_hi = + FStar_Seq_Base.slice s (j + Prims.int_one) + (FStar_Seq_Base.length s) in + FStar_Seq_Base.upd + (FStar_Seq_Base.upd + (FStar_Seq_Base.upd + (FStar_Seq_Base.upd + (FStar_Seq_Base.create (Prims.of_int (5)) frag_lo) + Prims.int_one frag_i) (Prims.of_int (2)) frag_mid) + (Prims.of_int (3)) frag_j) (Prims.of_int (4)) frag_hi +type ('a, 's1, 's2) permutation = unit +let splice : + 'a . + 'a FStar_Seq_Base.seq -> + Prims.nat -> + 'a FStar_Seq_Base.seq -> Prims.nat -> 'a FStar_Seq_Base.seq + = + fun s1 -> + fun i -> + fun s2 -> + fun j -> + FStar_Seq_Base.append (FStar_Seq_Base.slice s1 Prims.int_zero i) + (FStar_Seq_Base.append (FStar_Seq_Base.slice s2 i j) + (FStar_Seq_Base.slice s1 j (FStar_Seq_Base.length s1))) +let replace_subseq : + 'a . + 'a FStar_Seq_Base.seq -> + Prims.nat -> + Prims.nat -> 'a FStar_Seq_Base.seq -> 'a FStar_Seq_Base.seq + = + fun s -> + fun i -> + fun j -> + fun sub -> + FStar_Seq_Base.append (FStar_Seq_Base.slice s Prims.int_zero i) + (FStar_Seq_Base.append sub + (FStar_Seq_Base.slice s j (FStar_Seq_Base.length s))) +let snoc : 'a . 'a FStar_Seq_Base.seq -> 'a -> 'a FStar_Seq_Base.seq = + fun s -> + fun x -> FStar_Seq_Base.append s (FStar_Seq_Base.create Prims.int_one x) +let rec find_l : + 'a . + ('a -> Prims.bool) -> + 'a FStar_Seq_Base.seq -> 'a FStar_Pervasives_Native.option + = + fun f -> + fun l -> + if (FStar_Seq_Base.length l) = Prims.int_zero + then FStar_Pervasives_Native.None + else + if f (head l) + then FStar_Pervasives_Native.Some (head l) + else find_l f (tail l) +let un_snoc : 'a . 'a FStar_Seq_Base.seq -> ('a FStar_Seq_Base.seq * 'a) = + fun s -> + let uu___ = split s ((FStar_Seq_Base.length s) - Prims.int_one) in + match uu___ with + | (s', a1) -> (s', (FStar_Seq_Base.index a1 Prims.int_zero)) +let rec find_r : + 'a . + ('a -> Prims.bool) -> + 'a FStar_Seq_Base.seq -> 'a FStar_Pervasives_Native.option + = + fun f -> + fun l -> + if (FStar_Seq_Base.length l) = Prims.int_zero + then FStar_Pervasives_Native.None + else + (let uu___1 = un_snoc l in + match uu___1 with + | (prefix, last1) -> + if f last1 + then FStar_Pervasives_Native.Some last1 + else find_r f prefix) +type 'i found = unit +let rec seq_find_aux : + 'a . + ('a -> Prims.bool) -> + 'a FStar_Seq_Base.seq -> Prims.nat -> 'a FStar_Pervasives_Native.option + = + fun f -> + fun l -> + fun ctr -> + match ctr with + | uu___ when uu___ = Prims.int_zero -> FStar_Pervasives_Native.None + | uu___ -> + let i = ctr - Prims.int_one in + if f (FStar_Seq_Base.index l i) + then FStar_Pervasives_Native.Some (FStar_Seq_Base.index l i) + else seq_find_aux f l i +let seq_find : + 'a . + ('a -> Prims.bool) -> + 'a FStar_Seq_Base.seq -> 'a FStar_Pervasives_Native.option + = fun f -> fun l -> seq_find_aux f l (FStar_Seq_Base.length l) +let for_all : 'a . ('a -> Prims.bool) -> 'a FStar_Seq_Base.seq -> Prims.bool + = + fun f -> + fun l -> + FStar_Pervasives_Native.uu___is_None + (seq_find (fun i -> Prims.op_Negation (f i)) l) +let rec seq_to_list : 'a . 'a FStar_Seq_Base.seq -> 'a Prims.list = + fun s -> + if (FStar_Seq_Base.length s) = Prims.int_zero + then [] + else (FStar_Seq_Base.index s Prims.int_zero) :: + (seq_to_list + (FStar_Seq_Base.slice s Prims.int_one (FStar_Seq_Base.length s))) +let rec seq_of_list : 'a . 'a Prims.list -> 'a FStar_Seq_Base.seq = + fun l -> + match l with + | [] -> FStar_Seq_Base.empty () + | hd::tl -> + FStar_Seq_Base.op_At_Bar (FStar_Seq_Base.create Prims.int_one hd) + (seq_of_list tl) +type ('a, 'l, 's) createL_post = unit +let createL : 'a . 'a Prims.list -> 'a FStar_Seq_Base.seq = + fun l -> let s = seq_of_list l in s +type ('a, 's, 'x) contains = unit +type ('a, 'susuff, 's) suffix_of = unit +let of_list : 'a . 'a Prims.list -> 'a FStar_Seq_Base.seq = + fun l -> seq_of_list l +type ('a, 'i, 's, 'l) explode_and = Obj.t +type ('uuuuu, 's, 'l) pointwise_and = Obj.t +let sortWith : + 'a . + ('a -> 'a -> Prims.int) -> 'a FStar_Seq_Base.seq -> 'a FStar_Seq_Base.seq + = + fun f -> + fun s -> seq_of_list (FStar_List_Tot_Base.sortWith f (seq_to_list s)) +let sort_lseq : + 'a . Prims.nat -> 'a tot_ord -> ('a, unit) lseq -> ('a, unit) lseq = + fun n -> + fun f -> + fun s -> + let s' = sortWith (FStar_List_Tot_Base.compare_of_bool f) s in s' +let rec foldr : 'a 'b . ('b -> 'a -> 'a) -> 'b FStar_Seq_Base.seq -> 'a -> 'a + = + fun f -> + fun s -> + fun init -> + if (FStar_Seq_Base.length s) = Prims.int_zero + then init + else f (head s) (foldr f (tail s) init) +let rec foldr_snoc : + 'a 'b . ('b -> 'a -> 'a) -> 'b FStar_Seq_Base.seq -> 'a -> 'a = + fun f -> + fun s -> + fun init -> + if (FStar_Seq_Base.length s) = Prims.int_zero + then init + else + (let uu___1 = un_snoc s in + match uu___1 with | (s1, last1) -> f last1 (foldr_snoc f s1 init)) +let rec map_seq : + 'a 'b . ('a -> 'b) -> 'a FStar_Seq_Base.seq -> 'b FStar_Seq_Base.seq = + fun f -> + fun s -> + if (FStar_Seq_Base.length s) = Prims.int_zero + then FStar_Seq_Base.empty () + else + (let uu___1 = ((head s), (tail s)) in + match uu___1 with | (hd, tl) -> cons (f hd) (map_seq f tl)) \ No newline at end of file diff --git a/ocaml/fstar-lib/generated/FStar_Seq_Sorted.ml b/ocaml/fstar-lib/generated/FStar_Seq_Sorted.ml new file mode 100644 index 00000000000..2777fba5300 --- /dev/null +++ b/ocaml/fstar-lib/generated/FStar_Seq_Sorted.ml @@ -0,0 +1,2 @@ +open Prims +type ('a, 'f, 's) sorted_pred = unit \ No newline at end of file diff --git a/ocaml/fstar-lib/generated/FStar_Set.ml b/ocaml/fstar-lib/generated/FStar_Set.ml new file mode 100644 index 00000000000..843939084b7 --- /dev/null +++ b/ocaml/fstar-lib/generated/FStar_Set.ml @@ -0,0 +1,36 @@ +open Prims +type 'a set = ('a, Prims.bool) FStar_FunctionalExtensionality.restricted_t +type ('a, 's1, 's2) equal = unit +let mem : 'a . 'a -> 'a set -> Prims.bool = fun x -> fun s -> s x +let empty : 'a . unit -> 'a set = + fun uu___ -> FStar_FunctionalExtensionality.on_domain (fun x -> false) +let singleton : 'a . 'a -> 'a set = + fun x -> FStar_FunctionalExtensionality.on_domain (fun y -> y = x) +let union : 'a . 'a set -> 'a set -> 'a set = + fun s1 -> + fun s2 -> + FStar_FunctionalExtensionality.on_domain (fun x -> (s1 x) || (s2 x)) +let intersect : 'a . 'a set -> 'a set -> 'a set = + fun s1 -> + fun s2 -> + FStar_FunctionalExtensionality.on_domain (fun x -> (s1 x) && (s2 x)) +let complement : 'a . 'a set -> 'a set = + fun s -> + FStar_FunctionalExtensionality.on_domain + (fun x -> Prims.op_Negation (s x)) +type ('a, 's1, 's2) disjoint = unit +type ('a, 's1, 's2) subset = unit +let add : 'a . 'a -> 'a set -> 'a set = + fun x -> fun s -> union s (singleton x) +let remove : 'a . 'a -> 'a set -> 'a set = + fun x -> fun s -> intersect s (complement (singleton x)) +let rec as_set' : 'a . 'a Prims.list -> 'a set = + fun l -> + match l with + | [] -> empty () + | hd::tl -> union (singleton hd) (as_set' tl) +let as_set : 'a . 'a Prims.list -> 'a set = + fun l -> + match l with + | [] -> empty () + | hd::tl -> union (singleton hd) (as_set' tl) \ No newline at end of file diff --git a/ocaml/fstar-lib/generated/FStar_SizeT.ml b/ocaml/fstar-lib/generated/FStar_SizeT.ml new file mode 100644 index 00000000000..4ff294e6f2b --- /dev/null +++ b/ocaml/fstar-lib/generated/FStar_SizeT.ml @@ -0,0 +1,34 @@ +open Prims +type t = FStar_UInt64.t +type 'x fits = unit +let (v : t -> Prims.nat) = fun x -> FStar_UInt64.v x +let (uint_to_t : Prims.nat -> t) = fun x -> FStar_UInt64.uint_to_t x +type fits_u32 = unit +type fits_u64 = unit +let (uint16_to_sizet : FStar_UInt16.t -> t) = + fun x -> uint_to_t (FStar_UInt16.v x) +let (uint32_to_sizet : FStar_UInt32.t -> t) = + fun x -> uint_to_t (FStar_UInt32.v x) +let (uint64_to_sizet : FStar_UInt64.t -> t) = + fun x -> uint_to_t (FStar_UInt64.v x) +let (sizet_to_uint32 : t -> FStar_UInt32.t) = + fun x -> FStar_Int_Cast.uint64_to_uint32 x +let (add : t -> t -> t) = fun x -> fun y -> FStar_UInt64.add x y +let (sub : t -> t -> t) = fun x -> fun y -> FStar_UInt64.sub x y +let (mul : t -> t -> t) = fun x -> fun y -> FStar_UInt64.mul x y +let (div : t -> t -> t) = + fun x -> fun y -> let res = FStar_UInt64.div x y in res +let (rem : t -> t -> t) = fun x -> fun y -> FStar_UInt64.rem x y +let (gt : t -> t -> Prims.bool) = fun x -> fun y -> FStar_UInt64.gt x y +let (gte : t -> t -> Prims.bool) = fun x -> fun y -> FStar_UInt64.gte x y +let (lt : t -> t -> Prims.bool) = fun x -> fun y -> FStar_UInt64.lt x y +let (lte : t -> t -> Prims.bool) = fun x -> fun y -> FStar_UInt64.lte x y +let (op_Plus_Hat : t -> t -> t) = add +let (op_Subtraction_Hat : t -> t -> t) = sub +let (op_Star_Hat : t -> t -> t) = mul +let (op_Percent_Hat : t -> t -> t) = rem +let (op_Greater_Hat : t -> t -> Prims.bool) = gt +let (op_Greater_Equals_Hat : t -> t -> Prims.bool) = gte +let (op_Less_Hat : t -> t -> Prims.bool) = lt +let (op_Less_Equals_Hat : t -> t -> Prims.bool) = lte +let (__uint_to_t : Prims.int -> t) = fun x -> uint_to_t x \ No newline at end of file diff --git a/ocaml/fstar-lib/generated/FStar_Squash.ml b/ocaml/fstar-lib/generated/FStar_Squash.ml new file mode 100644 index 00000000000..e8306abedb2 --- /dev/null +++ b/ocaml/fstar-lib/generated/FStar_Squash.ml @@ -0,0 +1 @@ +open Prims \ No newline at end of file diff --git a/ocaml/fstar-lib/generated/FStar_SquashProperties.ml b/ocaml/fstar-lib/generated/FStar_SquashProperties.ml new file mode 100644 index 00000000000..3675bae54de --- /dev/null +++ b/ocaml/fstar-lib/generated/FStar_SquashProperties.ml @@ -0,0 +1,16 @@ +open Prims +let bool_of_or : 'p 'q . ('p, 'q) Prims.sum -> Prims.bool = + fun t -> + match t with | Prims.Left uu___ -> true | Prims.Right uu___ -> false +type 'p pow = unit +type ('a, 'b) retract = + | MkR of unit * unit * unit +let uu___is_MkR : 'a 'b . ('a, 'b) retract -> Prims.bool = + fun projectee -> true +type ('a, 'b) retract_cond = + | MkC of unit * unit * unit +let uu___is_MkC : 'a 'b . ('a, 'b) retract_cond -> Prims.bool = + fun projectee -> true +let false_elim : 'a . Prims.l_False -> 'a = + fun uu___ -> (fun f -> Obj.magic (failwith "unreachable")) uu___ +type u = unit \ No newline at end of file diff --git a/ocaml/fstar-lib/generated/FStar_StrongExcludedMiddle.ml b/ocaml/fstar-lib/generated/FStar_StrongExcludedMiddle.ml new file mode 100644 index 00000000000..e8306abedb2 --- /dev/null +++ b/ocaml/fstar-lib/generated/FStar_StrongExcludedMiddle.ml @@ -0,0 +1 @@ +open Prims \ No newline at end of file diff --git a/src/ocaml-output/FStar_Syntax_DsEnv.ml b/ocaml/fstar-lib/generated/FStar_Syntax_DsEnv.ml similarity index 100% rename from src/ocaml-output/FStar_Syntax_DsEnv.ml rename to ocaml/fstar-lib/generated/FStar_Syntax_DsEnv.ml diff --git a/src/ocaml-output/FStar_Syntax_Embeddings.ml b/ocaml/fstar-lib/generated/FStar_Syntax_Embeddings.ml similarity index 100% rename from src/ocaml-output/FStar_Syntax_Embeddings.ml rename to ocaml/fstar-lib/generated/FStar_Syntax_Embeddings.ml diff --git a/src/ocaml-output/FStar_Syntax_Free.ml b/ocaml/fstar-lib/generated/FStar_Syntax_Free.ml similarity index 100% rename from src/ocaml-output/FStar_Syntax_Free.ml rename to ocaml/fstar-lib/generated/FStar_Syntax_Free.ml diff --git a/src/ocaml-output/FStar_Syntax_Hash.ml b/ocaml/fstar-lib/generated/FStar_Syntax_Hash.ml similarity index 100% rename from src/ocaml-output/FStar_Syntax_Hash.ml rename to ocaml/fstar-lib/generated/FStar_Syntax_Hash.ml diff --git a/src/ocaml-output/FStar_Syntax_InstFV.ml b/ocaml/fstar-lib/generated/FStar_Syntax_InstFV.ml similarity index 100% rename from src/ocaml-output/FStar_Syntax_InstFV.ml rename to ocaml/fstar-lib/generated/FStar_Syntax_InstFV.ml diff --git a/src/ocaml-output/FStar_Syntax_MutRecTy.ml b/ocaml/fstar-lib/generated/FStar_Syntax_MutRecTy.ml similarity index 100% rename from src/ocaml-output/FStar_Syntax_MutRecTy.ml rename to ocaml/fstar-lib/generated/FStar_Syntax_MutRecTy.ml diff --git a/src/ocaml-output/FStar_Syntax_Print.ml b/ocaml/fstar-lib/generated/FStar_Syntax_Print.ml similarity index 100% rename from src/ocaml-output/FStar_Syntax_Print.ml rename to ocaml/fstar-lib/generated/FStar_Syntax_Print.ml diff --git a/src/ocaml-output/FStar_Syntax_Print_Pretty.ml b/ocaml/fstar-lib/generated/FStar_Syntax_Print_Pretty.ml similarity index 100% rename from src/ocaml-output/FStar_Syntax_Print_Pretty.ml rename to ocaml/fstar-lib/generated/FStar_Syntax_Print_Pretty.ml diff --git a/src/ocaml-output/FStar_Syntax_Resugar.ml b/ocaml/fstar-lib/generated/FStar_Syntax_Resugar.ml similarity index 100% rename from src/ocaml-output/FStar_Syntax_Resugar.ml rename to ocaml/fstar-lib/generated/FStar_Syntax_Resugar.ml diff --git a/src/ocaml-output/FStar_Syntax_Subst.ml b/ocaml/fstar-lib/generated/FStar_Syntax_Subst.ml similarity index 100% rename from src/ocaml-output/FStar_Syntax_Subst.ml rename to ocaml/fstar-lib/generated/FStar_Syntax_Subst.ml diff --git a/src/ocaml-output/FStar_Syntax_Syntax.ml b/ocaml/fstar-lib/generated/FStar_Syntax_Syntax.ml similarity index 100% rename from src/ocaml-output/FStar_Syntax_Syntax.ml rename to ocaml/fstar-lib/generated/FStar_Syntax_Syntax.ml diff --git a/src/ocaml-output/FStar_Syntax_Unionfind.ml b/ocaml/fstar-lib/generated/FStar_Syntax_Unionfind.ml similarity index 100% rename from src/ocaml-output/FStar_Syntax_Unionfind.ml rename to ocaml/fstar-lib/generated/FStar_Syntax_Unionfind.ml diff --git a/src/ocaml-output/FStar_Syntax_Util.ml b/ocaml/fstar-lib/generated/FStar_Syntax_Util.ml similarity index 100% rename from src/ocaml-output/FStar_Syntax_Util.ml rename to ocaml/fstar-lib/generated/FStar_Syntax_Util.ml diff --git a/ocaml/fstar-lib/generated/FStar_Tactics.ml b/ocaml/fstar-lib/generated/FStar_Tactics.ml new file mode 100644 index 00000000000..e8306abedb2 --- /dev/null +++ b/ocaml/fstar-lib/generated/FStar_Tactics.ml @@ -0,0 +1 @@ +open Prims \ No newline at end of file diff --git a/ocaml/fstar-lib/generated/FStar_Tactics_Arith.ml b/ocaml/fstar-lib/generated/FStar_Tactics_Arith.ml new file mode 100644 index 00000000000..0a14427a1f7 --- /dev/null +++ b/ocaml/fstar-lib/generated/FStar_Tactics_Arith.ml @@ -0,0 +1,163 @@ +open Prims +let (is_arith_goal : + unit -> (Prims.bool, unit) FStar_Tactics_Effect.tac_repr) = + fun uu___ -> + FStar_Tactics_Effect.tac_bind + (Prims.mk_range "FStar.Tactics.Arith.fst" (Prims.of_int (24)) + (Prims.of_int (12)) (Prims.of_int (24)) (Prims.of_int (23))) + (Prims.mk_range "FStar.Tactics.Arith.fst" (Prims.of_int (25)) + (Prims.of_int (4)) (Prims.of_int (27)) (Prims.of_int (16))) + (Obj.magic (FStar_Tactics_Derived.cur_goal ())) + (fun uu___1 -> + (fun g -> + Obj.magic + (FStar_Tactics_Effect.tac_bind + (Prims.mk_range "FStar.Tactics.Arith.fst" + (Prims.of_int (25)) (Prims.of_int (10)) + (Prims.of_int (25)) (Prims.of_int (34))) + (Prims.mk_range "FStar.Tactics.Arith.fst" + (Prims.of_int (25)) (Prims.of_int (4)) + (Prims.of_int (27)) (Prims.of_int (16))) + (Obj.magic + (FStar_Reflection_Arith.run_tm + (FStar_Reflection_Arith.is_arith_prop g))) + (fun uu___1 -> + FStar_Tactics_Effect.lift_div_tac + (fun uu___2 -> + match uu___1 with + | FStar_Pervasives.Inr uu___3 -> true + | uu___3 -> false)))) uu___1) +let rec (split_arith : unit -> (unit, unit) FStar_Tactics_Effect.tac_repr) = + fun uu___ -> + FStar_Tactics_Effect.tac_bind + (Prims.mk_range "FStar.Tactics.Arith.fst" (Prims.of_int (31)) + (Prims.of_int (7)) (Prims.of_int (31)) (Prims.of_int (23))) + (Prims.mk_range "FStar.Tactics.Arith.fst" (Prims.of_int (31)) + (Prims.of_int (4)) (Prims.of_int (52)) (Prims.of_int (7))) + (Obj.magic (is_arith_goal ())) + (fun uu___1 -> + (fun uu___1 -> + if uu___1 + then + Obj.magic + (FStar_Tactics_Effect.tac_bind + (Prims.mk_range "FStar.Tactics.Arith.fst" + (Prims.of_int (33)) (Prims.of_int (8)) + (Prims.of_int (33)) (Prims.of_int (16))) + (Prims.mk_range "FStar.Tactics.Arith.fst" + (Prims.of_int (34)) (Prims.of_int (8)) + (Prims.of_int (35)) (Prims.of_int (14))) + (Obj.magic (FStar_Tactics_Builtins.prune "")) + (fun uu___2 -> + (fun uu___2 -> + Obj.magic + (FStar_Tactics_Effect.tac_bind + (Prims.mk_range "FStar.Tactics.Arith.fst" + (Prims.of_int (34)) (Prims.of_int (8)) + (Prims.of_int (34)) (Prims.of_int (21))) + (Prims.mk_range "FStar.Tactics.Arith.fst" + (Prims.of_int (35)) (Prims.of_int (8)) + (Prims.of_int (35)) (Prims.of_int (14))) + (Obj.magic + (FStar_Tactics_Builtins.addns "Prims")) + (fun uu___3 -> + (fun uu___3 -> + Obj.magic (FStar_Tactics_Derived.smt ())) + uu___3))) uu___2)) + else + Obj.magic + (FStar_Tactics_Effect.tac_bind + (Prims.mk_range "FStar.Tactics.Arith.fst" + (Prims.of_int (38)) (Prims.of_int (16)) + (Prims.of_int (38)) (Prims.of_int (27))) + (Prims.mk_range "FStar.Tactics.Arith.fst" + (Prims.of_int (39)) (Prims.of_int (8)) + (Prims.of_int (51)) (Prims.of_int (14))) + (Obj.magic (FStar_Tactics_Derived.cur_goal ())) + (fun uu___3 -> + (fun g -> + Obj.magic + (FStar_Tactics_Effect.tac_bind + (Prims.mk_range "FStar.Tactics.Arith.fst" + (Prims.of_int (39)) (Prims.of_int (14)) + (Prims.of_int (39)) (Prims.of_int (31))) + (Prims.mk_range "FStar.Tactics.Arith.fst" + (Prims.of_int (39)) (Prims.of_int (8)) + (Prims.of_int (51)) (Prims.of_int (14))) + (Obj.magic + (FStar_Reflection_Formula.term_as_formula g)) + (fun uu___3 -> + (fun uu___3 -> + match uu___3 with + | FStar_Reflection_Formula.True_ -> + Obj.magic + (Obj.repr + (FStar_Tactics_Derived.trivial + ())) + | FStar_Reflection_Formula.And (l, r) -> + Obj.magic + (Obj.repr + (FStar_Tactics_Derived.seq + FStar_Tactics_Logic.split + split_arith)) + | FStar_Reflection_Formula.Implies + (p, q) -> + Obj.magic + (Obj.repr + (FStar_Tactics_Effect.tac_bind + (Prims.mk_range + "FStar.Tactics.Arith.fst" + (Prims.of_int (45)) + (Prims.of_int (20)) + (Prims.of_int (45)) + (Prims.of_int (36))) + (Prims.mk_range + "FStar.Tactics.Arith.fst" + (Prims.of_int (46)) + (Prims.of_int (12)) + (Prims.of_int (46)) + (Prims.of_int (36))) + (Obj.magic + (FStar_Tactics_Logic.implies_intro + ())) + (fun uu___4 -> + (fun uu___4 -> + Obj.magic + (FStar_Tactics_Derived.seq + split_arith + FStar_Tactics_Logic.l_revert)) + uu___4))) + | FStar_Reflection_Formula.Forall + (x, p) -> + Obj.magic + (Obj.repr + (FStar_Tactics_Effect.tac_bind + (Prims.mk_range + "FStar.Tactics.Arith.fst" + (Prims.of_int (48)) + (Prims.of_int (21)) + (Prims.of_int (48)) + (Prims.of_int (37))) + (Prims.mk_range + "FStar.Tactics.Arith.fst" + (Prims.of_int (49)) + (Prims.of_int (12)) + (Prims.of_int (49)) + (Prims.of_int (55))) + (Obj.magic + (FStar_Tactics_Logic.forall_intros + ())) + (fun uu___4 -> + (fun bs -> + Obj.magic + (FStar_Tactics_Derived.seq + split_arith + (fun uu___4 -> + FStar_Tactics_Logic.l_revert_all + bs))) uu___4))) + | uu___4 -> + Obj.magic + (Obj.repr + (FStar_Tactics_Effect.lift_div_tac + (fun uu___5 -> ())))) uu___3))) + uu___3))) uu___1) \ No newline at end of file diff --git a/ocaml/fstar-lib/generated/FStar_Tactics_BV.ml b/ocaml/fstar-lib/generated/FStar_Tactics_BV.ml new file mode 100644 index 00000000000..cc7174ea77a --- /dev/null +++ b/ocaml/fstar-lib/generated/FStar_Tactics_BV.ml @@ -0,0 +1,1163 @@ +open Prims +let rec (arith_expr_to_bv : + FStar_Reflection_Arith.expr -> (unit, unit) FStar_Tactics_Effect.tac_repr) + = + fun e -> + match e with + | FStar_Reflection_Arith.NatToBv (FStar_Reflection_Arith.MulMod + (e1, uu___)) -> + FStar_Tactics_Effect.tac_bind + (Prims.mk_range "FStar.Tactics.BV.fst" (Prims.of_int (113)) + (Prims.of_int (8)) (Prims.of_int (113)) (Prims.of_int (33))) + (Prims.mk_range "FStar.Tactics.BV.fst" (Prims.of_int (114)) + (Prims.of_int (8)) (Prims.of_int (115)) (Prims.of_int (27))) + (Obj.magic + (FStar_Tactics_Derived.apply_lemma + (FStar_Reflection_Builtins.pack_ln + (FStar_Reflection_Data.Tv_FVar + (FStar_Reflection_Builtins.pack_fv + ["FStar"; "BV"; "int2bv_mul"]))))) + (fun uu___1 -> + (fun uu___1 -> + Obj.magic + (FStar_Tactics_Effect.tac_bind + (Prims.mk_range "FStar.Tactics.BV.fst" + (Prims.of_int (114)) (Prims.of_int (8)) + (Prims.of_int (114)) (Prims.of_int (33))) + (Prims.mk_range "FStar.Tactics.BV.fst" + (Prims.of_int (115)) (Prims.of_int (8)) + (Prims.of_int (115)) (Prims.of_int (27))) + (Obj.magic + (FStar_Tactics_Derived.apply_lemma + (FStar_Reflection_Builtins.pack_ln + (FStar_Reflection_Data.Tv_FVar + (FStar_Reflection_Builtins.pack_fv + ["FStar"; "Tactics"; "BV"; "cong_bvmul"]))))) + (fun uu___2 -> + (fun uu___2 -> Obj.magic (arith_expr_to_bv e1)) + uu___2))) uu___1) + | FStar_Reflection_Arith.MulMod (e1, uu___) -> + FStar_Tactics_Effect.tac_bind + (Prims.mk_range "FStar.Tactics.BV.fst" (Prims.of_int (113)) + (Prims.of_int (8)) (Prims.of_int (113)) (Prims.of_int (33))) + (Prims.mk_range "FStar.Tactics.BV.fst" (Prims.of_int (114)) + (Prims.of_int (8)) (Prims.of_int (115)) (Prims.of_int (27))) + (Obj.magic + (FStar_Tactics_Derived.apply_lemma + (FStar_Reflection_Builtins.pack_ln + (FStar_Reflection_Data.Tv_FVar + (FStar_Reflection_Builtins.pack_fv + ["FStar"; "BV"; "int2bv_mul"]))))) + (fun uu___1 -> + (fun uu___1 -> + Obj.magic + (FStar_Tactics_Effect.tac_bind + (Prims.mk_range "FStar.Tactics.BV.fst" + (Prims.of_int (114)) (Prims.of_int (8)) + (Prims.of_int (114)) (Prims.of_int (33))) + (Prims.mk_range "FStar.Tactics.BV.fst" + (Prims.of_int (115)) (Prims.of_int (8)) + (Prims.of_int (115)) (Prims.of_int (27))) + (Obj.magic + (FStar_Tactics_Derived.apply_lemma + (FStar_Reflection_Builtins.pack_ln + (FStar_Reflection_Data.Tv_FVar + (FStar_Reflection_Builtins.pack_fv + ["FStar"; "Tactics"; "BV"; "cong_bvmul"]))))) + (fun uu___2 -> + (fun uu___2 -> Obj.magic (arith_expr_to_bv e1)) + uu___2))) uu___1) + | FStar_Reflection_Arith.NatToBv (FStar_Reflection_Arith.Umod + (e1, uu___)) -> + FStar_Tactics_Effect.tac_bind + (Prims.mk_range "FStar.Tactics.BV.fst" (Prims.of_int (117)) + (Prims.of_int (8)) (Prims.of_int (117)) (Prims.of_int (33))) + (Prims.mk_range "FStar.Tactics.BV.fst" (Prims.of_int (118)) + (Prims.of_int (8)) (Prims.of_int (119)) (Prims.of_int (27))) + (Obj.magic + (FStar_Tactics_Derived.apply_lemma + (FStar_Reflection_Builtins.pack_ln + (FStar_Reflection_Data.Tv_FVar + (FStar_Reflection_Builtins.pack_fv + ["FStar"; "BV"; "int2bv_mod"]))))) + (fun uu___1 -> + (fun uu___1 -> + Obj.magic + (FStar_Tactics_Effect.tac_bind + (Prims.mk_range "FStar.Tactics.BV.fst" + (Prims.of_int (118)) (Prims.of_int (8)) + (Prims.of_int (118)) (Prims.of_int (33))) + (Prims.mk_range "FStar.Tactics.BV.fst" + (Prims.of_int (119)) (Prims.of_int (8)) + (Prims.of_int (119)) (Prims.of_int (27))) + (Obj.magic + (FStar_Tactics_Derived.apply_lemma + (FStar_Reflection_Builtins.pack_ln + (FStar_Reflection_Data.Tv_FVar + (FStar_Reflection_Builtins.pack_fv + ["FStar"; "Tactics"; "BV"; "cong_bvmod"]))))) + (fun uu___2 -> + (fun uu___2 -> Obj.magic (arith_expr_to_bv e1)) + uu___2))) uu___1) + | FStar_Reflection_Arith.Umod (e1, uu___) -> + FStar_Tactics_Effect.tac_bind + (Prims.mk_range "FStar.Tactics.BV.fst" (Prims.of_int (117)) + (Prims.of_int (8)) (Prims.of_int (117)) (Prims.of_int (33))) + (Prims.mk_range "FStar.Tactics.BV.fst" (Prims.of_int (118)) + (Prims.of_int (8)) (Prims.of_int (119)) (Prims.of_int (27))) + (Obj.magic + (FStar_Tactics_Derived.apply_lemma + (FStar_Reflection_Builtins.pack_ln + (FStar_Reflection_Data.Tv_FVar + (FStar_Reflection_Builtins.pack_fv + ["FStar"; "BV"; "int2bv_mod"]))))) + (fun uu___1 -> + (fun uu___1 -> + Obj.magic + (FStar_Tactics_Effect.tac_bind + (Prims.mk_range "FStar.Tactics.BV.fst" + (Prims.of_int (118)) (Prims.of_int (8)) + (Prims.of_int (118)) (Prims.of_int (33))) + (Prims.mk_range "FStar.Tactics.BV.fst" + (Prims.of_int (119)) (Prims.of_int (8)) + (Prims.of_int (119)) (Prims.of_int (27))) + (Obj.magic + (FStar_Tactics_Derived.apply_lemma + (FStar_Reflection_Builtins.pack_ln + (FStar_Reflection_Data.Tv_FVar + (FStar_Reflection_Builtins.pack_fv + ["FStar"; "Tactics"; "BV"; "cong_bvmod"]))))) + (fun uu___2 -> + (fun uu___2 -> Obj.magic (arith_expr_to_bv e1)) + uu___2))) uu___1) + | FStar_Reflection_Arith.NatToBv (FStar_Reflection_Arith.Udiv + (e1, uu___)) -> + FStar_Tactics_Effect.tac_bind + (Prims.mk_range "FStar.Tactics.BV.fst" (Prims.of_int (121)) + (Prims.of_int (8)) (Prims.of_int (121)) (Prims.of_int (33))) + (Prims.mk_range "FStar.Tactics.BV.fst" (Prims.of_int (122)) + (Prims.of_int (8)) (Prims.of_int (123)) (Prims.of_int (27))) + (Obj.magic + (FStar_Tactics_Derived.apply_lemma + (FStar_Reflection_Builtins.pack_ln + (FStar_Reflection_Data.Tv_FVar + (FStar_Reflection_Builtins.pack_fv + ["FStar"; "BV"; "int2bv_div"]))))) + (fun uu___1 -> + (fun uu___1 -> + Obj.magic + (FStar_Tactics_Effect.tac_bind + (Prims.mk_range "FStar.Tactics.BV.fst" + (Prims.of_int (122)) (Prims.of_int (8)) + (Prims.of_int (122)) (Prims.of_int (33))) + (Prims.mk_range "FStar.Tactics.BV.fst" + (Prims.of_int (123)) (Prims.of_int (8)) + (Prims.of_int (123)) (Prims.of_int (27))) + (Obj.magic + (FStar_Tactics_Derived.apply_lemma + (FStar_Reflection_Builtins.pack_ln + (FStar_Reflection_Data.Tv_FVar + (FStar_Reflection_Builtins.pack_fv + ["FStar"; "Tactics"; "BV"; "cong_bvdiv"]))))) + (fun uu___2 -> + (fun uu___2 -> Obj.magic (arith_expr_to_bv e1)) + uu___2))) uu___1) + | FStar_Reflection_Arith.Udiv (e1, uu___) -> + FStar_Tactics_Effect.tac_bind + (Prims.mk_range "FStar.Tactics.BV.fst" (Prims.of_int (121)) + (Prims.of_int (8)) (Prims.of_int (121)) (Prims.of_int (33))) + (Prims.mk_range "FStar.Tactics.BV.fst" (Prims.of_int (122)) + (Prims.of_int (8)) (Prims.of_int (123)) (Prims.of_int (27))) + (Obj.magic + (FStar_Tactics_Derived.apply_lemma + (FStar_Reflection_Builtins.pack_ln + (FStar_Reflection_Data.Tv_FVar + (FStar_Reflection_Builtins.pack_fv + ["FStar"; "BV"; "int2bv_div"]))))) + (fun uu___1 -> + (fun uu___1 -> + Obj.magic + (FStar_Tactics_Effect.tac_bind + (Prims.mk_range "FStar.Tactics.BV.fst" + (Prims.of_int (122)) (Prims.of_int (8)) + (Prims.of_int (122)) (Prims.of_int (33))) + (Prims.mk_range "FStar.Tactics.BV.fst" + (Prims.of_int (123)) (Prims.of_int (8)) + (Prims.of_int (123)) (Prims.of_int (27))) + (Obj.magic + (FStar_Tactics_Derived.apply_lemma + (FStar_Reflection_Builtins.pack_ln + (FStar_Reflection_Data.Tv_FVar + (FStar_Reflection_Builtins.pack_fv + ["FStar"; "Tactics"; "BV"; "cong_bvdiv"]))))) + (fun uu___2 -> + (fun uu___2 -> Obj.magic (arith_expr_to_bv e1)) + uu___2))) uu___1) + | FStar_Reflection_Arith.NatToBv (FStar_Reflection_Arith.Shl (e1, uu___)) + -> + FStar_Tactics_Effect.tac_bind + (Prims.mk_range "FStar.Tactics.BV.fst" (Prims.of_int (125)) + (Prims.of_int (8)) (Prims.of_int (125)) (Prims.of_int (33))) + (Prims.mk_range "FStar.Tactics.BV.fst" (Prims.of_int (126)) + (Prims.of_int (8)) (Prims.of_int (127)) (Prims.of_int (27))) + (Obj.magic + (FStar_Tactics_Derived.apply_lemma + (FStar_Reflection_Builtins.pack_ln + (FStar_Reflection_Data.Tv_FVar + (FStar_Reflection_Builtins.pack_fv + ["FStar"; "BV"; "int2bv_shl"]))))) + (fun uu___1 -> + (fun uu___1 -> + Obj.magic + (FStar_Tactics_Effect.tac_bind + (Prims.mk_range "FStar.Tactics.BV.fst" + (Prims.of_int (126)) (Prims.of_int (8)) + (Prims.of_int (126)) (Prims.of_int (33))) + (Prims.mk_range "FStar.Tactics.BV.fst" + (Prims.of_int (127)) (Prims.of_int (8)) + (Prims.of_int (127)) (Prims.of_int (27))) + (Obj.magic + (FStar_Tactics_Derived.apply_lemma + (FStar_Reflection_Builtins.pack_ln + (FStar_Reflection_Data.Tv_FVar + (FStar_Reflection_Builtins.pack_fv + ["FStar"; "Tactics"; "BV"; "cong_bvshl"]))))) + (fun uu___2 -> + (fun uu___2 -> Obj.magic (arith_expr_to_bv e1)) + uu___2))) uu___1) + | FStar_Reflection_Arith.Shl (e1, uu___) -> + FStar_Tactics_Effect.tac_bind + (Prims.mk_range "FStar.Tactics.BV.fst" (Prims.of_int (125)) + (Prims.of_int (8)) (Prims.of_int (125)) (Prims.of_int (33))) + (Prims.mk_range "FStar.Tactics.BV.fst" (Prims.of_int (126)) + (Prims.of_int (8)) (Prims.of_int (127)) (Prims.of_int (27))) + (Obj.magic + (FStar_Tactics_Derived.apply_lemma + (FStar_Reflection_Builtins.pack_ln + (FStar_Reflection_Data.Tv_FVar + (FStar_Reflection_Builtins.pack_fv + ["FStar"; "BV"; "int2bv_shl"]))))) + (fun uu___1 -> + (fun uu___1 -> + Obj.magic + (FStar_Tactics_Effect.tac_bind + (Prims.mk_range "FStar.Tactics.BV.fst" + (Prims.of_int (126)) (Prims.of_int (8)) + (Prims.of_int (126)) (Prims.of_int (33))) + (Prims.mk_range "FStar.Tactics.BV.fst" + (Prims.of_int (127)) (Prims.of_int (8)) + (Prims.of_int (127)) (Prims.of_int (27))) + (Obj.magic + (FStar_Tactics_Derived.apply_lemma + (FStar_Reflection_Builtins.pack_ln + (FStar_Reflection_Data.Tv_FVar + (FStar_Reflection_Builtins.pack_fv + ["FStar"; "Tactics"; "BV"; "cong_bvshl"]))))) + (fun uu___2 -> + (fun uu___2 -> Obj.magic (arith_expr_to_bv e1)) + uu___2))) uu___1) + | FStar_Reflection_Arith.NatToBv (FStar_Reflection_Arith.Shr (e1, uu___)) + -> + FStar_Tactics_Effect.tac_bind + (Prims.mk_range "FStar.Tactics.BV.fst" (Prims.of_int (129)) + (Prims.of_int (8)) (Prims.of_int (129)) (Prims.of_int (33))) + (Prims.mk_range "FStar.Tactics.BV.fst" (Prims.of_int (130)) + (Prims.of_int (8)) (Prims.of_int (131)) (Prims.of_int (27))) + (Obj.magic + (FStar_Tactics_Derived.apply_lemma + (FStar_Reflection_Builtins.pack_ln + (FStar_Reflection_Data.Tv_FVar + (FStar_Reflection_Builtins.pack_fv + ["FStar"; "BV"; "int2bv_shr"]))))) + (fun uu___1 -> + (fun uu___1 -> + Obj.magic + (FStar_Tactics_Effect.tac_bind + (Prims.mk_range "FStar.Tactics.BV.fst" + (Prims.of_int (130)) (Prims.of_int (8)) + (Prims.of_int (130)) (Prims.of_int (33))) + (Prims.mk_range "FStar.Tactics.BV.fst" + (Prims.of_int (131)) (Prims.of_int (8)) + (Prims.of_int (131)) (Prims.of_int (27))) + (Obj.magic + (FStar_Tactics_Derived.apply_lemma + (FStar_Reflection_Builtins.pack_ln + (FStar_Reflection_Data.Tv_FVar + (FStar_Reflection_Builtins.pack_fv + ["FStar"; "Tactics"; "BV"; "cong_bvshr"]))))) + (fun uu___2 -> + (fun uu___2 -> Obj.magic (arith_expr_to_bv e1)) + uu___2))) uu___1) + | FStar_Reflection_Arith.Shr (e1, uu___) -> + FStar_Tactics_Effect.tac_bind + (Prims.mk_range "FStar.Tactics.BV.fst" (Prims.of_int (129)) + (Prims.of_int (8)) (Prims.of_int (129)) (Prims.of_int (33))) + (Prims.mk_range "FStar.Tactics.BV.fst" (Prims.of_int (130)) + (Prims.of_int (8)) (Prims.of_int (131)) (Prims.of_int (27))) + (Obj.magic + (FStar_Tactics_Derived.apply_lemma + (FStar_Reflection_Builtins.pack_ln + (FStar_Reflection_Data.Tv_FVar + (FStar_Reflection_Builtins.pack_fv + ["FStar"; "BV"; "int2bv_shr"]))))) + (fun uu___1 -> + (fun uu___1 -> + Obj.magic + (FStar_Tactics_Effect.tac_bind + (Prims.mk_range "FStar.Tactics.BV.fst" + (Prims.of_int (130)) (Prims.of_int (8)) + (Prims.of_int (130)) (Prims.of_int (33))) + (Prims.mk_range "FStar.Tactics.BV.fst" + (Prims.of_int (131)) (Prims.of_int (8)) + (Prims.of_int (131)) (Prims.of_int (27))) + (Obj.magic + (FStar_Tactics_Derived.apply_lemma + (FStar_Reflection_Builtins.pack_ln + (FStar_Reflection_Data.Tv_FVar + (FStar_Reflection_Builtins.pack_fv + ["FStar"; "Tactics"; "BV"; "cong_bvshr"]))))) + (fun uu___2 -> + (fun uu___2 -> Obj.magic (arith_expr_to_bv e1)) + uu___2))) uu___1) + | FStar_Reflection_Arith.NatToBv (FStar_Reflection_Arith.Land (e1, e2)) + -> + FStar_Tactics_Effect.tac_bind + (Prims.mk_range "FStar.Tactics.BV.fst" (Prims.of_int (133)) + (Prims.of_int (8)) (Prims.of_int (133)) (Prims.of_int (36))) + (Prims.mk_range "FStar.Tactics.BV.fst" (Prims.of_int (134)) + (Prims.of_int (8)) (Prims.of_int (136)) (Prims.of_int (27))) + (Obj.magic + (FStar_Tactics_Derived.apply_lemma + (FStar_Reflection_Builtins.pack_ln + (FStar_Reflection_Data.Tv_FVar + (FStar_Reflection_Builtins.pack_fv + ["FStar"; "BV"; "int2bv_logand"]))))) + (fun uu___ -> + (fun uu___ -> + Obj.magic + (FStar_Tactics_Effect.tac_bind + (Prims.mk_range "FStar.Tactics.BV.fst" + (Prims.of_int (134)) (Prims.of_int (8)) + (Prims.of_int (134)) (Prims.of_int (33))) + (Prims.mk_range "FStar.Tactics.BV.fst" + (Prims.of_int (135)) (Prims.of_int (8)) + (Prims.of_int (136)) (Prims.of_int (27))) + (Obj.magic + (FStar_Tactics_Derived.apply_lemma + (FStar_Reflection_Builtins.pack_ln + (FStar_Reflection_Data.Tv_FVar + (FStar_Reflection_Builtins.pack_fv + ["FStar"; "Tactics"; "BV"; "cong_bvand"]))))) + (fun uu___1 -> + (fun uu___1 -> + Obj.magic + (FStar_Tactics_Effect.tac_bind + (Prims.mk_range "FStar.Tactics.BV.fst" + (Prims.of_int (135)) (Prims.of_int (8)) + (Prims.of_int (135)) (Prims.of_int (27))) + (Prims.mk_range "FStar.Tactics.BV.fst" + (Prims.of_int (136)) (Prims.of_int (8)) + (Prims.of_int (136)) (Prims.of_int (27))) + (Obj.magic (arith_expr_to_bv e1)) + (fun uu___2 -> + (fun uu___2 -> + Obj.magic (arith_expr_to_bv e2)) uu___2))) + uu___1))) uu___) + | FStar_Reflection_Arith.Land (e1, e2) -> + FStar_Tactics_Effect.tac_bind + (Prims.mk_range "FStar.Tactics.BV.fst" (Prims.of_int (133)) + (Prims.of_int (8)) (Prims.of_int (133)) (Prims.of_int (36))) + (Prims.mk_range "FStar.Tactics.BV.fst" (Prims.of_int (134)) + (Prims.of_int (8)) (Prims.of_int (136)) (Prims.of_int (27))) + (Obj.magic + (FStar_Tactics_Derived.apply_lemma + (FStar_Reflection_Builtins.pack_ln + (FStar_Reflection_Data.Tv_FVar + (FStar_Reflection_Builtins.pack_fv + ["FStar"; "BV"; "int2bv_logand"]))))) + (fun uu___ -> + (fun uu___ -> + Obj.magic + (FStar_Tactics_Effect.tac_bind + (Prims.mk_range "FStar.Tactics.BV.fst" + (Prims.of_int (134)) (Prims.of_int (8)) + (Prims.of_int (134)) (Prims.of_int (33))) + (Prims.mk_range "FStar.Tactics.BV.fst" + (Prims.of_int (135)) (Prims.of_int (8)) + (Prims.of_int (136)) (Prims.of_int (27))) + (Obj.magic + (FStar_Tactics_Derived.apply_lemma + (FStar_Reflection_Builtins.pack_ln + (FStar_Reflection_Data.Tv_FVar + (FStar_Reflection_Builtins.pack_fv + ["FStar"; "Tactics"; "BV"; "cong_bvand"]))))) + (fun uu___1 -> + (fun uu___1 -> + Obj.magic + (FStar_Tactics_Effect.tac_bind + (Prims.mk_range "FStar.Tactics.BV.fst" + (Prims.of_int (135)) (Prims.of_int (8)) + (Prims.of_int (135)) (Prims.of_int (27))) + (Prims.mk_range "FStar.Tactics.BV.fst" + (Prims.of_int (136)) (Prims.of_int (8)) + (Prims.of_int (136)) (Prims.of_int (27))) + (Obj.magic (arith_expr_to_bv e1)) + (fun uu___2 -> + (fun uu___2 -> + Obj.magic (arith_expr_to_bv e2)) uu___2))) + uu___1))) uu___) + | FStar_Reflection_Arith.NatToBv (FStar_Reflection_Arith.Lxor (e1, e2)) + -> + FStar_Tactics_Effect.tac_bind + (Prims.mk_range "FStar.Tactics.BV.fst" (Prims.of_int (138)) + (Prims.of_int (8)) (Prims.of_int (138)) (Prims.of_int (36))) + (Prims.mk_range "FStar.Tactics.BV.fst" (Prims.of_int (139)) + (Prims.of_int (8)) (Prims.of_int (141)) (Prims.of_int (27))) + (Obj.magic + (FStar_Tactics_Derived.apply_lemma + (FStar_Reflection_Builtins.pack_ln + (FStar_Reflection_Data.Tv_FVar + (FStar_Reflection_Builtins.pack_fv + ["FStar"; "BV"; "int2bv_logxor"]))))) + (fun uu___ -> + (fun uu___ -> + Obj.magic + (FStar_Tactics_Effect.tac_bind + (Prims.mk_range "FStar.Tactics.BV.fst" + (Prims.of_int (139)) (Prims.of_int (8)) + (Prims.of_int (139)) (Prims.of_int (33))) + (Prims.mk_range "FStar.Tactics.BV.fst" + (Prims.of_int (140)) (Prims.of_int (8)) + (Prims.of_int (141)) (Prims.of_int (27))) + (Obj.magic + (FStar_Tactics_Derived.apply_lemma + (FStar_Reflection_Builtins.pack_ln + (FStar_Reflection_Data.Tv_FVar + (FStar_Reflection_Builtins.pack_fv + ["FStar"; "Tactics"; "BV"; "cong_bvxor"]))))) + (fun uu___1 -> + (fun uu___1 -> + Obj.magic + (FStar_Tactics_Effect.tac_bind + (Prims.mk_range "FStar.Tactics.BV.fst" + (Prims.of_int (140)) (Prims.of_int (8)) + (Prims.of_int (140)) (Prims.of_int (27))) + (Prims.mk_range "FStar.Tactics.BV.fst" + (Prims.of_int (141)) (Prims.of_int (8)) + (Prims.of_int (141)) (Prims.of_int (27))) + (Obj.magic (arith_expr_to_bv e1)) + (fun uu___2 -> + (fun uu___2 -> + Obj.magic (arith_expr_to_bv e2)) uu___2))) + uu___1))) uu___) + | FStar_Reflection_Arith.Lxor (e1, e2) -> + FStar_Tactics_Effect.tac_bind + (Prims.mk_range "FStar.Tactics.BV.fst" (Prims.of_int (138)) + (Prims.of_int (8)) (Prims.of_int (138)) (Prims.of_int (36))) + (Prims.mk_range "FStar.Tactics.BV.fst" (Prims.of_int (139)) + (Prims.of_int (8)) (Prims.of_int (141)) (Prims.of_int (27))) + (Obj.magic + (FStar_Tactics_Derived.apply_lemma + (FStar_Reflection_Builtins.pack_ln + (FStar_Reflection_Data.Tv_FVar + (FStar_Reflection_Builtins.pack_fv + ["FStar"; "BV"; "int2bv_logxor"]))))) + (fun uu___ -> + (fun uu___ -> + Obj.magic + (FStar_Tactics_Effect.tac_bind + (Prims.mk_range "FStar.Tactics.BV.fst" + (Prims.of_int (139)) (Prims.of_int (8)) + (Prims.of_int (139)) (Prims.of_int (33))) + (Prims.mk_range "FStar.Tactics.BV.fst" + (Prims.of_int (140)) (Prims.of_int (8)) + (Prims.of_int (141)) (Prims.of_int (27))) + (Obj.magic + (FStar_Tactics_Derived.apply_lemma + (FStar_Reflection_Builtins.pack_ln + (FStar_Reflection_Data.Tv_FVar + (FStar_Reflection_Builtins.pack_fv + ["FStar"; "Tactics"; "BV"; "cong_bvxor"]))))) + (fun uu___1 -> + (fun uu___1 -> + Obj.magic + (FStar_Tactics_Effect.tac_bind + (Prims.mk_range "FStar.Tactics.BV.fst" + (Prims.of_int (140)) (Prims.of_int (8)) + (Prims.of_int (140)) (Prims.of_int (27))) + (Prims.mk_range "FStar.Tactics.BV.fst" + (Prims.of_int (141)) (Prims.of_int (8)) + (Prims.of_int (141)) (Prims.of_int (27))) + (Obj.magic (arith_expr_to_bv e1)) + (fun uu___2 -> + (fun uu___2 -> + Obj.magic (arith_expr_to_bv e2)) uu___2))) + uu___1))) uu___) + | FStar_Reflection_Arith.NatToBv (FStar_Reflection_Arith.Lor (e1, e2)) -> + FStar_Tactics_Effect.tac_bind + (Prims.mk_range "FStar.Tactics.BV.fst" (Prims.of_int (143)) + (Prims.of_int (8)) (Prims.of_int (143)) (Prims.of_int (35))) + (Prims.mk_range "FStar.Tactics.BV.fst" (Prims.of_int (144)) + (Prims.of_int (8)) (Prims.of_int (146)) (Prims.of_int (27))) + (Obj.magic + (FStar_Tactics_Derived.apply_lemma + (FStar_Reflection_Builtins.pack_ln + (FStar_Reflection_Data.Tv_FVar + (FStar_Reflection_Builtins.pack_fv + ["FStar"; "BV"; "int2bv_logor"]))))) + (fun uu___ -> + (fun uu___ -> + Obj.magic + (FStar_Tactics_Effect.tac_bind + (Prims.mk_range "FStar.Tactics.BV.fst" + (Prims.of_int (144)) (Prims.of_int (8)) + (Prims.of_int (144)) (Prims.of_int (32))) + (Prims.mk_range "FStar.Tactics.BV.fst" + (Prims.of_int (145)) (Prims.of_int (8)) + (Prims.of_int (146)) (Prims.of_int (27))) + (Obj.magic + (FStar_Tactics_Derived.apply_lemma + (FStar_Reflection_Builtins.pack_ln + (FStar_Reflection_Data.Tv_FVar + (FStar_Reflection_Builtins.pack_fv + ["FStar"; "Tactics"; "BV"; "cong_bvor"]))))) + (fun uu___1 -> + (fun uu___1 -> + Obj.magic + (FStar_Tactics_Effect.tac_bind + (Prims.mk_range "FStar.Tactics.BV.fst" + (Prims.of_int (145)) (Prims.of_int (8)) + (Prims.of_int (145)) (Prims.of_int (27))) + (Prims.mk_range "FStar.Tactics.BV.fst" + (Prims.of_int (146)) (Prims.of_int (8)) + (Prims.of_int (146)) (Prims.of_int (27))) + (Obj.magic (arith_expr_to_bv e1)) + (fun uu___2 -> + (fun uu___2 -> + Obj.magic (arith_expr_to_bv e2)) uu___2))) + uu___1))) uu___) + | FStar_Reflection_Arith.Lor (e1, e2) -> + FStar_Tactics_Effect.tac_bind + (Prims.mk_range "FStar.Tactics.BV.fst" (Prims.of_int (143)) + (Prims.of_int (8)) (Prims.of_int (143)) (Prims.of_int (35))) + (Prims.mk_range "FStar.Tactics.BV.fst" (Prims.of_int (144)) + (Prims.of_int (8)) (Prims.of_int (146)) (Prims.of_int (27))) + (Obj.magic + (FStar_Tactics_Derived.apply_lemma + (FStar_Reflection_Builtins.pack_ln + (FStar_Reflection_Data.Tv_FVar + (FStar_Reflection_Builtins.pack_fv + ["FStar"; "BV"; "int2bv_logor"]))))) + (fun uu___ -> + (fun uu___ -> + Obj.magic + (FStar_Tactics_Effect.tac_bind + (Prims.mk_range "FStar.Tactics.BV.fst" + (Prims.of_int (144)) (Prims.of_int (8)) + (Prims.of_int (144)) (Prims.of_int (32))) + (Prims.mk_range "FStar.Tactics.BV.fst" + (Prims.of_int (145)) (Prims.of_int (8)) + (Prims.of_int (146)) (Prims.of_int (27))) + (Obj.magic + (FStar_Tactics_Derived.apply_lemma + (FStar_Reflection_Builtins.pack_ln + (FStar_Reflection_Data.Tv_FVar + (FStar_Reflection_Builtins.pack_fv + ["FStar"; "Tactics"; "BV"; "cong_bvor"]))))) + (fun uu___1 -> + (fun uu___1 -> + Obj.magic + (FStar_Tactics_Effect.tac_bind + (Prims.mk_range "FStar.Tactics.BV.fst" + (Prims.of_int (145)) (Prims.of_int (8)) + (Prims.of_int (145)) (Prims.of_int (27))) + (Prims.mk_range "FStar.Tactics.BV.fst" + (Prims.of_int (146)) (Prims.of_int (8)) + (Prims.of_int (146)) (Prims.of_int (27))) + (Obj.magic (arith_expr_to_bv e1)) + (fun uu___2 -> + (fun uu___2 -> + Obj.magic (arith_expr_to_bv e2)) uu___2))) + uu___1))) uu___) + | FStar_Reflection_Arith.NatToBv (FStar_Reflection_Arith.Ladd (e1, e2)) + -> + FStar_Tactics_Effect.tac_bind + (Prims.mk_range "FStar.Tactics.BV.fst" (Prims.of_int (148)) + (Prims.of_int (8)) (Prims.of_int (148)) (Prims.of_int (33))) + (Prims.mk_range "FStar.Tactics.BV.fst" (Prims.of_int (149)) + (Prims.of_int (8)) (Prims.of_int (151)) (Prims.of_int (27))) + (Obj.magic + (FStar_Tactics_Derived.apply_lemma + (FStar_Reflection_Builtins.pack_ln + (FStar_Reflection_Data.Tv_FVar + (FStar_Reflection_Builtins.pack_fv + ["FStar"; "BV"; "int2bv_add"]))))) + (fun uu___ -> + (fun uu___ -> + Obj.magic + (FStar_Tactics_Effect.tac_bind + (Prims.mk_range "FStar.Tactics.BV.fst" + (Prims.of_int (149)) (Prims.of_int (8)) + (Prims.of_int (149)) (Prims.of_int (33))) + (Prims.mk_range "FStar.Tactics.BV.fst" + (Prims.of_int (150)) (Prims.of_int (8)) + (Prims.of_int (151)) (Prims.of_int (27))) + (Obj.magic + (FStar_Tactics_Derived.apply_lemma + (FStar_Reflection_Builtins.pack_ln + (FStar_Reflection_Data.Tv_FVar + (FStar_Reflection_Builtins.pack_fv + ["FStar"; "Tactics"; "BV"; "cong_bvadd"]))))) + (fun uu___1 -> + (fun uu___1 -> + Obj.magic + (FStar_Tactics_Effect.tac_bind + (Prims.mk_range "FStar.Tactics.BV.fst" + (Prims.of_int (150)) (Prims.of_int (8)) + (Prims.of_int (150)) (Prims.of_int (27))) + (Prims.mk_range "FStar.Tactics.BV.fst" + (Prims.of_int (151)) (Prims.of_int (8)) + (Prims.of_int (151)) (Prims.of_int (27))) + (Obj.magic (arith_expr_to_bv e1)) + (fun uu___2 -> + (fun uu___2 -> + Obj.magic (arith_expr_to_bv e2)) uu___2))) + uu___1))) uu___) + | FStar_Reflection_Arith.Ladd (e1, e2) -> + FStar_Tactics_Effect.tac_bind + (Prims.mk_range "FStar.Tactics.BV.fst" (Prims.of_int (148)) + (Prims.of_int (8)) (Prims.of_int (148)) (Prims.of_int (33))) + (Prims.mk_range "FStar.Tactics.BV.fst" (Prims.of_int (149)) + (Prims.of_int (8)) (Prims.of_int (151)) (Prims.of_int (27))) + (Obj.magic + (FStar_Tactics_Derived.apply_lemma + (FStar_Reflection_Builtins.pack_ln + (FStar_Reflection_Data.Tv_FVar + (FStar_Reflection_Builtins.pack_fv + ["FStar"; "BV"; "int2bv_add"]))))) + (fun uu___ -> + (fun uu___ -> + Obj.magic + (FStar_Tactics_Effect.tac_bind + (Prims.mk_range "FStar.Tactics.BV.fst" + (Prims.of_int (149)) (Prims.of_int (8)) + (Prims.of_int (149)) (Prims.of_int (33))) + (Prims.mk_range "FStar.Tactics.BV.fst" + (Prims.of_int (150)) (Prims.of_int (8)) + (Prims.of_int (151)) (Prims.of_int (27))) + (Obj.magic + (FStar_Tactics_Derived.apply_lemma + (FStar_Reflection_Builtins.pack_ln + (FStar_Reflection_Data.Tv_FVar + (FStar_Reflection_Builtins.pack_fv + ["FStar"; "Tactics"; "BV"; "cong_bvadd"]))))) + (fun uu___1 -> + (fun uu___1 -> + Obj.magic + (FStar_Tactics_Effect.tac_bind + (Prims.mk_range "FStar.Tactics.BV.fst" + (Prims.of_int (150)) (Prims.of_int (8)) + (Prims.of_int (150)) (Prims.of_int (27))) + (Prims.mk_range "FStar.Tactics.BV.fst" + (Prims.of_int (151)) (Prims.of_int (8)) + (Prims.of_int (151)) (Prims.of_int (27))) + (Obj.magic (arith_expr_to_bv e1)) + (fun uu___2 -> + (fun uu___2 -> + Obj.magic (arith_expr_to_bv e2)) uu___2))) + uu___1))) uu___) + | FStar_Reflection_Arith.NatToBv (FStar_Reflection_Arith.Lsub (e1, e2)) + -> + FStar_Tactics_Effect.tac_bind + (Prims.mk_range "FStar.Tactics.BV.fst" (Prims.of_int (153)) + (Prims.of_int (8)) (Prims.of_int (153)) (Prims.of_int (33))) + (Prims.mk_range "FStar.Tactics.BV.fst" (Prims.of_int (154)) + (Prims.of_int (8)) (Prims.of_int (156)) (Prims.of_int (27))) + (Obj.magic + (FStar_Tactics_Derived.apply_lemma + (FStar_Reflection_Builtins.pack_ln + (FStar_Reflection_Data.Tv_FVar + (FStar_Reflection_Builtins.pack_fv + ["FStar"; "BV"; "int2bv_sub"]))))) + (fun uu___ -> + (fun uu___ -> + Obj.magic + (FStar_Tactics_Effect.tac_bind + (Prims.mk_range "FStar.Tactics.BV.fst" + (Prims.of_int (154)) (Prims.of_int (8)) + (Prims.of_int (154)) (Prims.of_int (33))) + (Prims.mk_range "FStar.Tactics.BV.fst" + (Prims.of_int (155)) (Prims.of_int (8)) + (Prims.of_int (156)) (Prims.of_int (27))) + (Obj.magic + (FStar_Tactics_Derived.apply_lemma + (FStar_Reflection_Builtins.pack_ln + (FStar_Reflection_Data.Tv_FVar + (FStar_Reflection_Builtins.pack_fv + ["FStar"; "Tactics"; "BV"; "cong_bvsub"]))))) + (fun uu___1 -> + (fun uu___1 -> + Obj.magic + (FStar_Tactics_Effect.tac_bind + (Prims.mk_range "FStar.Tactics.BV.fst" + (Prims.of_int (155)) (Prims.of_int (8)) + (Prims.of_int (155)) (Prims.of_int (27))) + (Prims.mk_range "FStar.Tactics.BV.fst" + (Prims.of_int (156)) (Prims.of_int (8)) + (Prims.of_int (156)) (Prims.of_int (27))) + (Obj.magic (arith_expr_to_bv e1)) + (fun uu___2 -> + (fun uu___2 -> + Obj.magic (arith_expr_to_bv e2)) uu___2))) + uu___1))) uu___) + | FStar_Reflection_Arith.Lsub (e1, e2) -> + FStar_Tactics_Effect.tac_bind + (Prims.mk_range "FStar.Tactics.BV.fst" (Prims.of_int (153)) + (Prims.of_int (8)) (Prims.of_int (153)) (Prims.of_int (33))) + (Prims.mk_range "FStar.Tactics.BV.fst" (Prims.of_int (154)) + (Prims.of_int (8)) (Prims.of_int (156)) (Prims.of_int (27))) + (Obj.magic + (FStar_Tactics_Derived.apply_lemma + (FStar_Reflection_Builtins.pack_ln + (FStar_Reflection_Data.Tv_FVar + (FStar_Reflection_Builtins.pack_fv + ["FStar"; "BV"; "int2bv_sub"]))))) + (fun uu___ -> + (fun uu___ -> + Obj.magic + (FStar_Tactics_Effect.tac_bind + (Prims.mk_range "FStar.Tactics.BV.fst" + (Prims.of_int (154)) (Prims.of_int (8)) + (Prims.of_int (154)) (Prims.of_int (33))) + (Prims.mk_range "FStar.Tactics.BV.fst" + (Prims.of_int (155)) (Prims.of_int (8)) + (Prims.of_int (156)) (Prims.of_int (27))) + (Obj.magic + (FStar_Tactics_Derived.apply_lemma + (FStar_Reflection_Builtins.pack_ln + (FStar_Reflection_Data.Tv_FVar + (FStar_Reflection_Builtins.pack_fv + ["FStar"; "Tactics"; "BV"; "cong_bvsub"]))))) + (fun uu___1 -> + (fun uu___1 -> + Obj.magic + (FStar_Tactics_Effect.tac_bind + (Prims.mk_range "FStar.Tactics.BV.fst" + (Prims.of_int (155)) (Prims.of_int (8)) + (Prims.of_int (155)) (Prims.of_int (27))) + (Prims.mk_range "FStar.Tactics.BV.fst" + (Prims.of_int (156)) (Prims.of_int (8)) + (Prims.of_int (156)) (Prims.of_int (27))) + (Obj.magic (arith_expr_to_bv e1)) + (fun uu___2 -> + (fun uu___2 -> + Obj.magic (arith_expr_to_bv e2)) uu___2))) + uu___1))) uu___) + | uu___ -> FStar_Tactics_Derived.trefl () +let (arith_to_bv_tac : unit -> (unit, unit) FStar_Tactics_Effect.tac_repr) = + fun uu___ -> + FStar_Tactics_Derived.focus + (fun uu___1 -> + FStar_Tactics_Effect.tac_bind + (Prims.mk_range "FStar.Tactics.BV.fst" (Prims.of_int (161)) + (Prims.of_int (4)) (Prims.of_int (161)) (Prims.of_int (40))) + (Prims.mk_range "FStar.Tactics.BV.fst" (Prims.of_int (162)) + (Prims.of_int (4)) (Prims.of_int (175)) (Prims.of_int (65))) + (Obj.magic + (FStar_Tactics_Builtins.norm + [FStar_Pervasives.delta_only ["FStar.BV.bvult"]])) + (fun uu___2 -> + (fun uu___2 -> + Obj.magic + (FStar_Tactics_Effect.tac_bind + (Prims.mk_range "FStar.Tactics.BV.fst" + (Prims.of_int (162)) (Prims.of_int (12)) + (Prims.of_int (162)) (Prims.of_int (23))) + (Prims.mk_range "FStar.Tactics.BV.fst" + (Prims.of_int (163)) (Prims.of_int (4)) + (Prims.of_int (175)) (Prims.of_int (65))) + (Obj.magic (FStar_Tactics_Derived.cur_goal ())) + (fun uu___3 -> + (fun g -> + Obj.magic + (FStar_Tactics_Effect.tac_bind + (Prims.mk_range "FStar.Tactics.BV.fst" + (Prims.of_int (163)) (Prims.of_int (12)) + (Prims.of_int (163)) (Prims.of_int (29))) + (Prims.mk_range "FStar.Tactics.BV.fst" + (Prims.of_int (164)) (Prims.of_int (4)) + (Prims.of_int (175)) (Prims.of_int (65))) + (Obj.magic + (FStar_Reflection_Formula.term_as_formula + g)) + (fun uu___3 -> + (fun f -> + match f with + | FStar_Reflection_Formula.Comp + (FStar_Reflection_Formula.Eq + uu___3, l, r) + -> + Obj.magic + (FStar_Tactics_Effect.tac_bind + (Prims.mk_range + "FStar.Tactics.BV.fst" + (Prims.of_int (166)) + (Prims.of_int (17)) + (Prims.of_int (166)) + (Prims.of_int (41))) + (Prims.mk_range + "FStar.Tactics.BV.fst" + (Prims.of_int (166)) + (Prims.of_int (11)) + (Prims.of_int (172)) + (Prims.of_int (52))) + (Obj.magic + (FStar_Reflection_Arith.run_tm + (FStar_Reflection_Arith.as_arith_expr + l))) + (fun uu___4 -> + (fun uu___4 -> + match uu___4 with + | FStar_Pervasives.Inl + s -> + Obj.magic + (FStar_Tactics_Effect.tac_bind + (Prims.mk_range + "FStar.Tactics.BV.fst" + (Prims.of_int (168)) + (Prims.of_int (10)) + (Prims.of_int (168)) + (Prims.of_int (16))) + (Prims.mk_range + "FStar.Tactics.BV.fst" + (Prims.of_int (169)) + (Prims.of_int (10)) + (Prims.of_int (169)) + (Prims.of_int (18))) + (Obj.magic + (FStar_Tactics_Builtins.dump + s)) + (fun uu___5 -> + (fun uu___5 + -> + Obj.magic + (FStar_Tactics_Derived.trefl + ())) + uu___5)) + | FStar_Pervasives.Inr + e -> + Obj.magic + (FStar_Tactics_Derived.seq + (fun uu___5 -> + arith_expr_to_bv + e) + FStar_Tactics_Derived.trefl)) + uu___4)) + | uu___3 -> + Obj.magic + (FStar_Tactics_Effect.tac_bind + (Prims.mk_range + "FStar.Tactics.BV.fst" + (Prims.of_int (175)) + (Prims.of_int (13)) + (Prims.of_int (175)) + (Prims.of_int (65))) + (Prims.mk_range + "FStar.Tactics.BV.fst" + (Prims.of_int (175)) + (Prims.of_int (8)) + (Prims.of_int (175)) + (Prims.of_int (65))) + (Obj.magic + (FStar_Tactics_Effect.tac_bind + (Prims.mk_range + "FStar.Tactics.BV.fst" + (Prims.of_int (175)) + (Prims.of_int (48)) + (Prims.of_int (175)) + (Prims.of_int (64))) + (Prims.mk_range + "prims.fst" + (Prims.of_int (606)) + (Prims.of_int (19)) + (Prims.of_int (606)) + (Prims.of_int (31))) + (Obj.magic + (FStar_Tactics_Builtins.term_to_string + g)) + (fun uu___4 -> + FStar_Tactics_Effect.lift_div_tac + (fun uu___5 -> + Prims.strcat + "arith_to_bv_tac: unexpected: " + uu___4)))) + (fun uu___4 -> + (fun uu___4 -> + Obj.magic + (FStar_Tactics_Derived.fail + uu___4)) uu___4))) + uu___3))) uu___3))) uu___2)) +let (bv_tac : unit -> (unit, unit) FStar_Tactics_Effect.tac_repr) = + fun uu___ -> + FStar_Tactics_Derived.focus + (fun uu___1 -> + FStar_Tactics_Effect.tac_bind + (Prims.mk_range "FStar.Tactics.BV.fst" (Prims.of_int (182)) + (Prims.of_int (2)) (Prims.of_int (182)) (Prims.of_int (20))) + (Prims.mk_range "FStar.Tactics.BV.fst" (Prims.of_int (183)) + (Prims.of_int (2)) (Prims.of_int (188)) (Prims.of_int (8))) + (Obj.magic + (FStar_Tactics_Derived.mapply + (FStar_Reflection_Builtins.pack_ln + (FStar_Reflection_Data.Tv_FVar + (FStar_Reflection_Builtins.pack_fv + ["FStar"; "Tactics"; "BV"; "eq_to_bv"]))))) + (fun uu___2 -> + (fun uu___2 -> + Obj.magic + (FStar_Tactics_Effect.tac_bind + (Prims.mk_range "FStar.Tactics.BV.fst" + (Prims.of_int (183)) (Prims.of_int (2)) + (Prims.of_int (183)) (Prims.of_int (17))) + (Prims.mk_range "FStar.Tactics.BV.fst" + (Prims.of_int (184)) (Prims.of_int (2)) + (Prims.of_int (188)) (Prims.of_int (8))) + (Obj.magic + (FStar_Tactics_Derived.mapply + (FStar_Reflection_Builtins.pack_ln + (FStar_Reflection_Data.Tv_FVar + (FStar_Reflection_Builtins.pack_fv + ["FStar"; "Tactics"; "BV"; "trans"]))))) + (fun uu___3 -> + (fun uu___3 -> + Obj.magic + (FStar_Tactics_Effect.tac_bind + (Prims.mk_range "FStar.Tactics.BV.fst" + (Prims.of_int (184)) (Prims.of_int (2)) + (Prims.of_int (184)) (Prims.of_int (20))) + (Prims.mk_range "FStar.Tactics.BV.fst" + (Prims.of_int (185)) (Prims.of_int (2)) + (Prims.of_int (188)) (Prims.of_int (8))) + (Obj.magic (arith_to_bv_tac ())) + (fun uu___4 -> + (fun uu___4 -> + Obj.magic + (FStar_Tactics_Effect.tac_bind + (Prims.mk_range + "FStar.Tactics.BV.fst" + (Prims.of_int (185)) + (Prims.of_int (2)) + (Prims.of_int (185)) + (Prims.of_int (20))) + (Prims.mk_range + "FStar.Tactics.BV.fst" + (Prims.of_int (186)) + (Prims.of_int (2)) + (Prims.of_int (188)) + (Prims.of_int (8))) + (Obj.magic (arith_to_bv_tac ())) + (fun uu___5 -> + (fun uu___5 -> + Obj.magic + (FStar_Tactics_Effect.tac_bind + (Prims.mk_range + "FStar.Tactics.BV.fst" + (Prims.of_int (186)) + (Prims.of_int (2)) + (Prims.of_int (186)) + (Prims.of_int (43))) + (Prims.mk_range + "FStar.Tactics.BV.fst" + (Prims.of_int (187)) + (Prims.of_int (2)) + (Prims.of_int (188)) + (Prims.of_int (8))) + (Obj.magic + (FStar_Tactics_Builtins.set_options + "--smtencoding.elim_box true")) + (fun uu___6 -> + (fun uu___6 -> + Obj.magic + (FStar_Tactics_Effect.tac_bind + (Prims.mk_range + "FStar.Tactics.BV.fst" + (Prims.of_int (187)) + (Prims.of_int (2)) + (Prims.of_int (187)) + (Prims.of_int (14))) + (Prims.mk_range + "FStar.Tactics.BV.fst" + (Prims.of_int (188)) + (Prims.of_int (2)) + (Prims.of_int (188)) + (Prims.of_int (8))) + (Obj.magic + (FStar_Tactics_Builtins.norm + [FStar_Pervasives.delta])) + (fun uu___7 + -> + (fun + uu___7 -> + Obj.magic + (FStar_Tactics_Derived.smt + ())) + uu___7))) + uu___6))) uu___5))) + uu___4))) uu___3))) uu___2)) +let (bv_tac_lt : Prims.int -> (unit, unit) FStar_Tactics_Effect.tac_repr) = + fun n -> + FStar_Tactics_Derived.focus + (fun uu___ -> + FStar_Tactics_Effect.tac_bind + (Prims.mk_range "FStar.Tactics.BV.fst" (Prims.of_int (192)) + (Prims.of_int (11)) (Prims.of_int (192)) (Prims.of_int (39))) + (Prims.mk_range "FStar.Tactics.BV.fst" (Prims.of_int (193)) + (Prims.of_int (2)) (Prims.of_int (198)) (Prims.of_int (8))) + (FStar_Tactics_Effect.lift_div_tac + (fun uu___1 -> + FStar_Reflection_Builtins.pack_ln + (FStar_Reflection_Data.Tv_Const + (FStar_Reflection_Data.C_Int n)))) + (fun uu___1 -> + (fun nn -> + Obj.magic + (FStar_Tactics_Effect.tac_bind + (Prims.mk_range "FStar.Tactics.BV.fst" + (Prims.of_int (193)) (Prims.of_int (10)) + (Prims.of_int (193)) (Prims.of_int (48))) + (Prims.mk_range "FStar.Tactics.BV.fst" + (Prims.of_int (194)) (Prims.of_int (2)) + (Prims.of_int (198)) (Prims.of_int (8))) + (FStar_Tactics_Effect.lift_div_tac + (fun uu___1 -> + FStar_Reflection_Derived.mk_app + (FStar_Reflection_Builtins.pack_ln + (FStar_Reflection_Data.Tv_FVar + (FStar_Reflection_Builtins.pack_fv + ["FStar"; + "Tactics"; + "BV"; + "trans_lt2"]))) + [(nn, FStar_Reflection_Data.Q_Implicit)])) + (fun uu___1 -> + (fun t -> + Obj.magic + (FStar_Tactics_Effect.tac_bind + (Prims.mk_range "FStar.Tactics.BV.fst" + (Prims.of_int (194)) (Prims.of_int (2)) + (Prims.of_int (194)) (Prims.of_int (15))) + (Prims.mk_range "FStar.Tactics.BV.fst" + (Prims.of_int (195)) (Prims.of_int (2)) + (Prims.of_int (198)) (Prims.of_int (8))) + (Obj.magic + (FStar_Tactics_Derived.apply_lemma t)) + (fun uu___1 -> + (fun uu___1 -> + Obj.magic + (FStar_Tactics_Effect.tac_bind + (Prims.mk_range + "FStar.Tactics.BV.fst" + (Prims.of_int (195)) + (Prims.of_int (2)) + (Prims.of_int (195)) + (Prims.of_int (20))) + (Prims.mk_range + "FStar.Tactics.BV.fst" + (Prims.of_int (196)) + (Prims.of_int (2)) + (Prims.of_int (198)) + (Prims.of_int (8))) + (Obj.magic (arith_to_bv_tac ())) + (fun uu___2 -> + (fun uu___2 -> + Obj.magic + (FStar_Tactics_Effect.tac_bind + (Prims.mk_range + "FStar.Tactics.BV.fst" + (Prims.of_int (196)) + (Prims.of_int (2)) + (Prims.of_int (196)) + (Prims.of_int (20))) + (Prims.mk_range + "FStar.Tactics.BV.fst" + (Prims.of_int (197)) + (Prims.of_int (2)) + (Prims.of_int (198)) + (Prims.of_int (8))) + (Obj.magic + (arith_to_bv_tac ())) + (fun uu___3 -> + (fun uu___3 -> + Obj.magic + (FStar_Tactics_Effect.tac_bind + (Prims.mk_range + "FStar.Tactics.BV.fst" + (Prims.of_int (197)) + (Prims.of_int (2)) + (Prims.of_int (197)) + (Prims.of_int (43))) + (Prims.mk_range + "FStar.Tactics.BV.fst" + (Prims.of_int (198)) + (Prims.of_int (2)) + (Prims.of_int (198)) + (Prims.of_int (8))) + (Obj.magic + (FStar_Tactics_Builtins.set_options + "--smtencoding.elim_box true")) + (fun uu___4 + -> + (fun + uu___4 -> + Obj.magic + (FStar_Tactics_Derived.smt + ())) + uu___4))) + uu___3))) uu___2))) + uu___1))) uu___1))) uu___1)) +let (to_bv_tac : unit -> (unit, unit) FStar_Tactics_Effect.tac_repr) = + fun uu___ -> + FStar_Tactics_Derived.focus + (fun uu___1 -> + FStar_Tactics_Effect.tac_bind + (Prims.mk_range "FStar.Tactics.BV.fst" (Prims.of_int (202)) + (Prims.of_int (2)) (Prims.of_int (202)) (Prims.of_int (25))) + (Prims.mk_range "FStar.Tactics.BV.fst" (Prims.of_int (203)) + (Prims.of_int (2)) (Prims.of_int (205)) (Prims.of_int (20))) + (Obj.magic + (FStar_Tactics_Derived.apply_lemma + (FStar_Reflection_Builtins.pack_ln + (FStar_Reflection_Data.Tv_FVar + (FStar_Reflection_Builtins.pack_fv + ["FStar"; "Tactics"; "BV"; "eq_to_bv"]))))) + (fun uu___2 -> + (fun uu___2 -> + Obj.magic + (FStar_Tactics_Effect.tac_bind + (Prims.mk_range "FStar.Tactics.BV.fst" + (Prims.of_int (203)) (Prims.of_int (2)) + (Prims.of_int (203)) (Prims.of_int (22))) + (Prims.mk_range "FStar.Tactics.BV.fst" + (Prims.of_int (204)) (Prims.of_int (2)) + (Prims.of_int (205)) (Prims.of_int (20))) + (Obj.magic + (FStar_Tactics_Derived.apply_lemma + (FStar_Reflection_Builtins.pack_ln + (FStar_Reflection_Data.Tv_FVar + (FStar_Reflection_Builtins.pack_fv + ["FStar"; "Tactics"; "BV"; "trans"]))))) + (fun uu___3 -> + (fun uu___3 -> + Obj.magic + (FStar_Tactics_Effect.tac_bind + (Prims.mk_range "FStar.Tactics.BV.fst" + (Prims.of_int (204)) (Prims.of_int (2)) + (Prims.of_int (204)) (Prims.of_int (20))) + (Prims.mk_range "FStar.Tactics.BV.fst" + (Prims.of_int (205)) (Prims.of_int (2)) + (Prims.of_int (205)) (Prims.of_int (20))) + (Obj.magic (arith_to_bv_tac ())) + (fun uu___4 -> + (fun uu___4 -> + Obj.magic (arith_to_bv_tac ())) uu___4))) + uu___3))) uu___2)) \ No newline at end of file diff --git a/src/ocaml-output/FStar_Tactics_Basic.ml b/ocaml/fstar-lib/generated/FStar_Tactics_Basic.ml similarity index 100% rename from src/ocaml-output/FStar_Tactics_Basic.ml rename to ocaml/fstar-lib/generated/FStar_Tactics_Basic.ml diff --git a/ocaml/fstar-lib/generated/FStar_Tactics_Canon.ml b/ocaml/fstar-lib/generated/FStar_Tactics_Canon.ml new file mode 100644 index 00000000000..93e57a67c65 --- /dev/null +++ b/ocaml/fstar-lib/generated/FStar_Tactics_Canon.ml @@ -0,0 +1,1037 @@ +open Prims +let (step : + (unit -> (unit, unit) FStar_Tactics_Effect.tac_repr) -> + (unit, unit) FStar_Tactics_Effect.tac_repr) + = + fun t -> + FStar_Tactics_Effect.tac_bind + (Prims.mk_range "FStar.Tactics.Canon.fst" (Prims.of_int (126)) + (Prims.of_int (4)) (Prims.of_int (126)) (Prims.of_int (24))) + (Prims.mk_range "FStar.Tactics.Canon.fst" (Prims.of_int (127)) + (Prims.of_int (4)) (Prims.of_int (127)) (Prims.of_int (8))) + (Obj.magic + (FStar_Tactics_Derived.apply_lemma + (FStar_Reflection_Builtins.pack_ln + (FStar_Reflection_Data.Tv_FVar + (FStar_Reflection_Builtins.pack_fv + ["FStar"; "Tactics"; "Canon"; "trans"]))))) + (fun uu___ -> (fun uu___ -> Obj.magic (t ())) uu___) +let (step_lemma : + FStar_Reflection_Types.term -> (unit, unit) FStar_Tactics_Effect.tac_repr) + = fun lem -> step (fun uu___ -> FStar_Tactics_Derived.apply_lemma lem) +let rec (canon_point : + FStar_Reflection_Arith.expr -> + (FStar_Reflection_Arith.expr, unit) FStar_Tactics_Effect.tac_repr) + = + fun e -> + FStar_Tactics_Effect.tac_bind + (Prims.mk_range "FStar.Tactics.Canon.fst" (Prims.of_int (136)) + (Prims.of_int (8)) (Prims.of_int (136)) (Prims.of_int (19))) + (Prims.mk_range "FStar.Tactics.Canon.fst" (Prims.of_int (138)) + (Prims.of_int (4)) (Prims.of_int (250)) (Prims.of_int (15))) + (FStar_Tactics_Effect.lift_div_tac + (fun uu___ -> + fun uu___1 -> + FStar_Tactics_Effect.tac_bind + (Prims.mk_range "FStar.Tactics.Canon.fst" + (Prims.of_int (136)) (Prims.of_int (8)) + (Prims.of_int (136)) (Prims.of_int (16))) + (Prims.mk_range "FStar.Tactics.Canon.fst" + (Prims.of_int (134)) (Prims.of_int (28)) + (Prims.of_int (134)) (Prims.of_int (29))) + (Obj.magic (FStar_Tactics_Derived.trefl ())) + (fun uu___2 -> + FStar_Tactics_Effect.lift_div_tac (fun uu___3 -> e)))) + (fun uu___ -> + (fun skip -> + match e with + | FStar_Reflection_Arith.Plus + (FStar_Reflection_Arith.Lit a, FStar_Reflection_Arith.Lit b) + -> + Obj.magic + (FStar_Tactics_Effect.tac_bind + (Prims.mk_range "FStar.Tactics.Canon.fst" + (Prims.of_int (141)) (Prims.of_int (8)) + (Prims.of_int (141)) (Prims.of_int (22))) + (Prims.mk_range "FStar.Tactics.Canon.fst" + (Prims.of_int (142)) (Prims.of_int (8)) + (Prims.of_int (143)) (Prims.of_int (19))) + (Obj.magic + (FStar_Tactics_Builtins.norm + [FStar_Pervasives.primops])) + (fun uu___ -> + (fun uu___ -> + Obj.magic + (FStar_Tactics_Effect.tac_bind + (Prims.mk_range "FStar.Tactics.Canon.fst" + (Prims.of_int (142)) (Prims.of_int (8)) + (Prims.of_int (142)) (Prims.of_int (16))) + (Prims.mk_range "FStar.Tactics.Canon.fst" + (Prims.of_int (143)) (Prims.of_int (8)) + (Prims.of_int (143)) (Prims.of_int (19))) + (Obj.magic (FStar_Tactics_Derived.trefl ())) + (fun uu___1 -> + FStar_Tactics_Effect.lift_div_tac + (fun uu___2 -> + FStar_Reflection_Arith.Lit (a + b))))) + uu___)) + | FStar_Reflection_Arith.Mult + (FStar_Reflection_Arith.Lit a, FStar_Reflection_Arith.Lit b) + -> + Obj.magic + (FStar_Tactics_Effect.tac_bind + (Prims.mk_range "FStar.Tactics.Canon.fst" + (Prims.of_int (146)) (Prims.of_int (8)) + (Prims.of_int (146)) (Prims.of_int (29))) + (Prims.mk_range "FStar.Tactics.Canon.fst" + (Prims.of_int (147)) (Prims.of_int (8)) + (Prims.of_int (148)) (Prims.of_int (19))) + (Obj.magic + (FStar_Tactics_Builtins.norm + [FStar_Pervasives.delta; FStar_Pervasives.primops])) + (fun uu___ -> + (fun uu___ -> + Obj.magic + (FStar_Tactics_Effect.tac_bind + (Prims.mk_range "FStar.Tactics.Canon.fst" + (Prims.of_int (147)) (Prims.of_int (8)) + (Prims.of_int (147)) (Prims.of_int (16))) + (Prims.mk_range "FStar.Tactics.Canon.fst" + (Prims.of_int (148)) (Prims.of_int (8)) + (Prims.of_int (148)) (Prims.of_int (19))) + (Obj.magic (FStar_Tactics_Derived.trefl ())) + (fun uu___1 -> + FStar_Tactics_Effect.lift_div_tac + (fun uu___2 -> + FStar_Reflection_Arith.Lit (a * b))))) + uu___)) + | FStar_Reflection_Arith.Neg e1 -> + Obj.magic + (FStar_Tactics_Effect.tac_bind + (Prims.mk_range "FStar.Tactics.Canon.fst" + (Prims.of_int (152)) (Prims.of_int (8)) + (Prims.of_int (152)) (Prims.of_int (35))) + (Prims.mk_range "FStar.Tactics.Canon.fst" + (Prims.of_int (153)) (Prims.of_int (8)) + (Prims.of_int (153)) (Prims.of_int (39))) + (Obj.magic + (step_lemma + (FStar_Reflection_Builtins.pack_ln + (FStar_Reflection_Data.Tv_FVar + (FStar_Reflection_Builtins.pack_fv + ["FStar"; + "Tactics"; + "Canon"; + "neg_minus_one"]))))) + (fun uu___ -> + (fun uu___ -> + Obj.magic + (canon_point + (FStar_Reflection_Arith.Mult + ((FStar_Reflection_Arith.Lit + (Prims.of_int (-1))), e1)))) uu___)) + | FStar_Reflection_Arith.Mult + (a, FStar_Reflection_Arith.Plus (b, c)) -> + Obj.magic + (FStar_Tactics_Effect.tac_bind + (Prims.mk_range "FStar.Tactics.Canon.fst" + (Prims.of_int (157)) (Prims.of_int (8)) + (Prims.of_int (157)) (Prims.of_int (27))) + (Prims.mk_range "FStar.Tactics.Canon.fst" + (Prims.of_int (158)) (Prims.of_int (8)) + (Prims.of_int (161)) (Prims.of_int (30))) + (Obj.magic + (step_lemma + (FStar_Reflection_Builtins.pack_ln + (FStar_Reflection_Data.Tv_FVar + (FStar_Reflection_Builtins.pack_fv + ["FStar"; "Tactics"; "Canon"; "distr"]))))) + (fun uu___ -> + (fun uu___ -> + Obj.magic + (FStar_Tactics_Effect.tac_bind + (Prims.mk_range "FStar.Tactics.Canon.fst" + (Prims.of_int (158)) (Prims.of_int (8)) + (Prims.of_int (158)) (Prims.of_int (31))) + (Prims.mk_range "FStar.Tactics.Canon.fst" + (Prims.of_int (159)) (Prims.of_int (8)) + (Prims.of_int (161)) (Prims.of_int (30))) + (Obj.magic + (step_lemma + (FStar_Reflection_Builtins.pack_ln + (FStar_Reflection_Data.Tv_FVar + (FStar_Reflection_Builtins.pack_fv + ["FStar"; + "Tactics"; + "Canon"; + "cong_plus"]))))) + (fun uu___1 -> + (fun uu___1 -> + Obj.magic + (FStar_Tactics_Effect.tac_bind + (Prims.mk_range + "FStar.Tactics.Canon.fst" + (Prims.of_int (159)) + (Prims.of_int (16)) + (Prims.of_int (159)) + (Prims.of_int (38))) + (Prims.mk_range + "FStar.Tactics.Canon.fst" + (Prims.of_int (160)) + (Prims.of_int (8)) + (Prims.of_int (161)) + (Prims.of_int (30))) + (Obj.magic + (canon_point + (FStar_Reflection_Arith.Mult + (a, b)))) + (fun uu___2 -> + (fun l -> + Obj.magic + (FStar_Tactics_Effect.tac_bind + (Prims.mk_range + "FStar.Tactics.Canon.fst" + (Prims.of_int (160)) + (Prims.of_int (16)) + (Prims.of_int (160)) + (Prims.of_int (38))) + (Prims.mk_range + "FStar.Tactics.Canon.fst" + (Prims.of_int (161)) + (Prims.of_int (8)) + (Prims.of_int (161)) + (Prims.of_int (30))) + (Obj.magic + (canon_point + (FStar_Reflection_Arith.Mult + (a, c)))) + (fun uu___2 -> + (fun r -> + Obj.magic + (canon_point + (FStar_Reflection_Arith.Plus + (l, r)))) + uu___2))) uu___2))) + uu___1))) uu___)) + | FStar_Reflection_Arith.Mult + (FStar_Reflection_Arith.Plus (a, b), c) -> + Obj.magic + (FStar_Tactics_Effect.tac_bind + (Prims.mk_range "FStar.Tactics.Canon.fst" + (Prims.of_int (164)) (Prims.of_int (8)) + (Prims.of_int (164)) (Prims.of_int (27))) + (Prims.mk_range "FStar.Tactics.Canon.fst" + (Prims.of_int (165)) (Prims.of_int (8)) + (Prims.of_int (168)) (Prims.of_int (30))) + (Obj.magic + (step_lemma + (FStar_Reflection_Builtins.pack_ln + (FStar_Reflection_Data.Tv_FVar + (FStar_Reflection_Builtins.pack_fv + ["FStar"; "Tactics"; "Canon"; "distl"]))))) + (fun uu___ -> + (fun uu___ -> + Obj.magic + (FStar_Tactics_Effect.tac_bind + (Prims.mk_range "FStar.Tactics.Canon.fst" + (Prims.of_int (165)) (Prims.of_int (8)) + (Prims.of_int (165)) (Prims.of_int (31))) + (Prims.mk_range "FStar.Tactics.Canon.fst" + (Prims.of_int (166)) (Prims.of_int (8)) + (Prims.of_int (168)) (Prims.of_int (30))) + (Obj.magic + (step_lemma + (FStar_Reflection_Builtins.pack_ln + (FStar_Reflection_Data.Tv_FVar + (FStar_Reflection_Builtins.pack_fv + ["FStar"; + "Tactics"; + "Canon"; + "cong_plus"]))))) + (fun uu___1 -> + (fun uu___1 -> + Obj.magic + (FStar_Tactics_Effect.tac_bind + (Prims.mk_range + "FStar.Tactics.Canon.fst" + (Prims.of_int (166)) + (Prims.of_int (16)) + (Prims.of_int (166)) + (Prims.of_int (38))) + (Prims.mk_range + "FStar.Tactics.Canon.fst" + (Prims.of_int (167)) + (Prims.of_int (8)) + (Prims.of_int (168)) + (Prims.of_int (30))) + (Obj.magic + (canon_point + (FStar_Reflection_Arith.Mult + (a, c)))) + (fun uu___2 -> + (fun l -> + Obj.magic + (FStar_Tactics_Effect.tac_bind + (Prims.mk_range + "FStar.Tactics.Canon.fst" + (Prims.of_int (167)) + (Prims.of_int (16)) + (Prims.of_int (167)) + (Prims.of_int (38))) + (Prims.mk_range + "FStar.Tactics.Canon.fst" + (Prims.of_int (168)) + (Prims.of_int (8)) + (Prims.of_int (168)) + (Prims.of_int (30))) + (Obj.magic + (canon_point + (FStar_Reflection_Arith.Mult + (b, c)))) + (fun uu___2 -> + (fun r -> + Obj.magic + (canon_point + (FStar_Reflection_Arith.Plus + (l, r)))) + uu___2))) uu___2))) + uu___1))) uu___)) + | FStar_Reflection_Arith.Mult + (a, FStar_Reflection_Arith.Mult (b, c)) -> + Obj.magic + (FStar_Tactics_Effect.tac_bind + (Prims.mk_range "FStar.Tactics.Canon.fst" + (Prims.of_int (172)) (Prims.of_int (8)) + (Prims.of_int (172)) (Prims.of_int (32))) + (Prims.mk_range "FStar.Tactics.Canon.fst" + (Prims.of_int (173)) (Prims.of_int (8)) + (Prims.of_int (176)) (Prims.of_int (30))) + (Obj.magic + (step_lemma + (FStar_Reflection_Builtins.pack_ln + (FStar_Reflection_Data.Tv_FVar + (FStar_Reflection_Builtins.pack_fv + ["FStar"; + "Tactics"; + "Canon"; + "ass_mult_l"]))))) + (fun uu___ -> + (fun uu___ -> + Obj.magic + (FStar_Tactics_Effect.tac_bind + (Prims.mk_range "FStar.Tactics.Canon.fst" + (Prims.of_int (173)) (Prims.of_int (8)) + (Prims.of_int (173)) (Prims.of_int (31))) + (Prims.mk_range "FStar.Tactics.Canon.fst" + (Prims.of_int (174)) (Prims.of_int (8)) + (Prims.of_int (176)) (Prims.of_int (30))) + (Obj.magic + (step_lemma + (FStar_Reflection_Builtins.pack_ln + (FStar_Reflection_Data.Tv_FVar + (FStar_Reflection_Builtins.pack_fv + ["FStar"; + "Tactics"; + "Canon"; + "cong_mult"]))))) + (fun uu___1 -> + (fun uu___1 -> + Obj.magic + (FStar_Tactics_Effect.tac_bind + (Prims.mk_range + "FStar.Tactics.Canon.fst" + (Prims.of_int (174)) + (Prims.of_int (16)) + (Prims.of_int (174)) + (Prims.of_int (38))) + (Prims.mk_range + "FStar.Tactics.Canon.fst" + (Prims.of_int (175)) + (Prims.of_int (8)) + (Prims.of_int (176)) + (Prims.of_int (30))) + (Obj.magic + (canon_point + (FStar_Reflection_Arith.Mult + (a, b)))) + (fun uu___2 -> + (fun l -> + Obj.magic + (FStar_Tactics_Effect.tac_bind + (Prims.mk_range + "FStar.Tactics.Canon.fst" + (Prims.of_int (175)) + (Prims.of_int (16)) + (Prims.of_int (175)) + (Prims.of_int (29))) + (Prims.mk_range + "FStar.Tactics.Canon.fst" + (Prims.of_int (176)) + (Prims.of_int (8)) + (Prims.of_int (176)) + (Prims.of_int (30))) + (Obj.magic + (canon_point c)) + (fun uu___2 -> + (fun r -> + Obj.magic + (canon_point + (FStar_Reflection_Arith.Mult + (l, r)))) + uu___2))) uu___2))) + uu___1))) uu___)) + | FStar_Reflection_Arith.Plus + (a, FStar_Reflection_Arith.Plus (b, c)) -> + Obj.magic + (FStar_Tactics_Effect.tac_bind + (Prims.mk_range "FStar.Tactics.Canon.fst" + (Prims.of_int (179)) (Prims.of_int (8)) + (Prims.of_int (179)) (Prims.of_int (32))) + (Prims.mk_range "FStar.Tactics.Canon.fst" + (Prims.of_int (180)) (Prims.of_int (8)) + (Prims.of_int (183)) (Prims.of_int (30))) + (Obj.magic + (step_lemma + (FStar_Reflection_Builtins.pack_ln + (FStar_Reflection_Data.Tv_FVar + (FStar_Reflection_Builtins.pack_fv + ["FStar"; + "Tactics"; + "Canon"; + "ass_plus_l"]))))) + (fun uu___ -> + (fun uu___ -> + Obj.magic + (FStar_Tactics_Effect.tac_bind + (Prims.mk_range "FStar.Tactics.Canon.fst" + (Prims.of_int (180)) (Prims.of_int (8)) + (Prims.of_int (180)) (Prims.of_int (31))) + (Prims.mk_range "FStar.Tactics.Canon.fst" + (Prims.of_int (181)) (Prims.of_int (8)) + (Prims.of_int (183)) (Prims.of_int (30))) + (Obj.magic + (step_lemma + (FStar_Reflection_Builtins.pack_ln + (FStar_Reflection_Data.Tv_FVar + (FStar_Reflection_Builtins.pack_fv + ["FStar"; + "Tactics"; + "Canon"; + "cong_plus"]))))) + (fun uu___1 -> + (fun uu___1 -> + Obj.magic + (FStar_Tactics_Effect.tac_bind + (Prims.mk_range + "FStar.Tactics.Canon.fst" + (Prims.of_int (181)) + (Prims.of_int (16)) + (Prims.of_int (181)) + (Prims.of_int (38))) + (Prims.mk_range + "FStar.Tactics.Canon.fst" + (Prims.of_int (182)) + (Prims.of_int (8)) + (Prims.of_int (183)) + (Prims.of_int (30))) + (Obj.magic + (canon_point + (FStar_Reflection_Arith.Plus + (a, b)))) + (fun uu___2 -> + (fun l -> + Obj.magic + (FStar_Tactics_Effect.tac_bind + (Prims.mk_range + "FStar.Tactics.Canon.fst" + (Prims.of_int (182)) + (Prims.of_int (16)) + (Prims.of_int (182)) + (Prims.of_int (29))) + (Prims.mk_range + "FStar.Tactics.Canon.fst" + (Prims.of_int (183)) + (Prims.of_int (8)) + (Prims.of_int (183)) + (Prims.of_int (30))) + (Obj.magic + (canon_point c)) + (fun uu___2 -> + (fun r -> + Obj.magic + (canon_point + (FStar_Reflection_Arith.Plus + (l, r)))) + uu___2))) uu___2))) + uu___1))) uu___)) + | FStar_Reflection_Arith.Plus + (FStar_Reflection_Arith.Plus (a, b), c) -> + if FStar_Order.gt (FStar_Reflection_Arith.compare_expr b c) + then + Obj.magic + (FStar_Tactics_Effect.tac_bind + (Prims.mk_range "FStar.Tactics.Canon.fst" + (Prims.of_int (188)) (Prims.of_int (12)) + (Prims.of_int (188)) (Prims.of_int (33))) + (Prims.mk_range "FStar.Tactics.Canon.fst" + (Prims.of_int (189)) (Prims.of_int (12)) + (Prims.of_int (192)) (Prims.of_int (20))) + (Obj.magic + (step_lemma + (FStar_Reflection_Builtins.pack_ln + (FStar_Reflection_Data.Tv_FVar + (FStar_Reflection_Builtins.pack_fv + ["FStar"; + "Tactics"; + "Canon"; + "sw_plus"]))))) + (fun uu___ -> + (fun uu___ -> + Obj.magic + (FStar_Tactics_Effect.tac_bind + (Prims.mk_range "FStar.Tactics.Canon.fst" + (Prims.of_int (189)) (Prims.of_int (12)) + (Prims.of_int (189)) (Prims.of_int (36))) + (Prims.mk_range "FStar.Tactics.Canon.fst" + (Prims.of_int (190)) (Prims.of_int (12)) + (Prims.of_int (192)) (Prims.of_int (20))) + (Obj.magic + (FStar_Tactics_Derived.apply_lemma + (FStar_Reflection_Builtins.pack_ln + (FStar_Reflection_Data.Tv_FVar + (FStar_Reflection_Builtins.pack_fv + ["FStar"; + "Tactics"; + "Canon"; + "cong_plus"]))))) + (fun uu___1 -> + (fun uu___1 -> + Obj.magic + (FStar_Tactics_Effect.tac_bind + (Prims.mk_range + "FStar.Tactics.Canon.fst" + (Prims.of_int (190)) + (Prims.of_int (20)) + (Prims.of_int (190)) + (Prims.of_int (42))) + (Prims.mk_range + "FStar.Tactics.Canon.fst" + (Prims.of_int (191)) + (Prims.of_int (12)) + (Prims.of_int (192)) + (Prims.of_int (20))) + (Obj.magic + (canon_point + (FStar_Reflection_Arith.Plus + (a, c)))) + (fun uu___2 -> + (fun l -> + Obj.magic + (FStar_Tactics_Effect.tac_bind + (Prims.mk_range + "FStar.Tactics.Canon.fst" + (Prims.of_int (191)) + (Prims.of_int (12)) + (Prims.of_int (191)) + (Prims.of_int (19))) + (Prims.mk_range + "FStar.Tactics.Canon.fst" + (Prims.of_int (192)) + (Prims.of_int (12)) + (Prims.of_int (192)) + (Prims.of_int (20))) + (Obj.magic + (FStar_Tactics_Derived.trefl + ())) + (fun uu___2 -> + FStar_Tactics_Effect.lift_div_tac + (fun uu___3 -> + FStar_Reflection_Arith.Plus + (l, b))))) + uu___2))) uu___1))) uu___)) + else Obj.magic (skip ()) + | FStar_Reflection_Arith.Mult + (FStar_Reflection_Arith.Mult (a, b), c) -> + if FStar_Order.gt (FStar_Reflection_Arith.compare_expr b c) + then + Obj.magic + (FStar_Tactics_Effect.tac_bind + (Prims.mk_range "FStar.Tactics.Canon.fst" + (Prims.of_int (199)) (Prims.of_int (12)) + (Prims.of_int (199)) (Prims.of_int (33))) + (Prims.mk_range "FStar.Tactics.Canon.fst" + (Prims.of_int (200)) (Prims.of_int (12)) + (Prims.of_int (203)) (Prims.of_int (20))) + (Obj.magic + (step_lemma + (FStar_Reflection_Builtins.pack_ln + (FStar_Reflection_Data.Tv_FVar + (FStar_Reflection_Builtins.pack_fv + ["FStar"; + "Tactics"; + "Canon"; + "sw_mult"]))))) + (fun uu___ -> + (fun uu___ -> + Obj.magic + (FStar_Tactics_Effect.tac_bind + (Prims.mk_range "FStar.Tactics.Canon.fst" + (Prims.of_int (200)) (Prims.of_int (12)) + (Prims.of_int (200)) (Prims.of_int (36))) + (Prims.mk_range "FStar.Tactics.Canon.fst" + (Prims.of_int (201)) (Prims.of_int (12)) + (Prims.of_int (203)) (Prims.of_int (20))) + (Obj.magic + (FStar_Tactics_Derived.apply_lemma + (FStar_Reflection_Builtins.pack_ln + (FStar_Reflection_Data.Tv_FVar + (FStar_Reflection_Builtins.pack_fv + ["FStar"; + "Tactics"; + "Canon"; + "cong_mult"]))))) + (fun uu___1 -> + (fun uu___1 -> + Obj.magic + (FStar_Tactics_Effect.tac_bind + (Prims.mk_range + "FStar.Tactics.Canon.fst" + (Prims.of_int (201)) + (Prims.of_int (20)) + (Prims.of_int (201)) + (Prims.of_int (42))) + (Prims.mk_range + "FStar.Tactics.Canon.fst" + (Prims.of_int (202)) + (Prims.of_int (12)) + (Prims.of_int (203)) + (Prims.of_int (20))) + (Obj.magic + (canon_point + (FStar_Reflection_Arith.Mult + (a, c)))) + (fun uu___2 -> + (fun l -> + Obj.magic + (FStar_Tactics_Effect.tac_bind + (Prims.mk_range + "FStar.Tactics.Canon.fst" + (Prims.of_int (202)) + (Prims.of_int (12)) + (Prims.of_int (202)) + (Prims.of_int (20))) + (Prims.mk_range + "FStar.Tactics.Canon.fst" + (Prims.of_int (203)) + (Prims.of_int (12)) + (Prims.of_int (203)) + (Prims.of_int (20))) + (Obj.magic + (FStar_Tactics_Derived.trefl + ())) + (fun uu___2 -> + FStar_Tactics_Effect.lift_div_tac + (fun uu___3 -> + FStar_Reflection_Arith.Mult + (l, b))))) + uu___2))) uu___1))) uu___)) + else Obj.magic (skip ()) + | FStar_Reflection_Arith.Plus + (a, FStar_Reflection_Arith.Lit uu___) when + uu___ = Prims.int_zero -> + Obj.magic + (FStar_Tactics_Effect.tac_bind + (Prims.mk_range "FStar.Tactics.Canon.fst" + (Prims.of_int (208)) (Prims.of_int (8)) + (Prims.of_int (208)) (Prims.of_int (34))) + (Prims.mk_range "FStar.Tactics.Canon.fst" + (Prims.of_int (207)) (Prims.of_int (11)) + (Prims.of_int (207)) (Prims.of_int (12))) + (Obj.magic + (FStar_Tactics_Derived.apply_lemma + (FStar_Reflection_Builtins.pack_ln + (FStar_Reflection_Data.Tv_FVar + (FStar_Reflection_Builtins.pack_fv + ["FStar"; + "Tactics"; + "Canon"; + "x_plus_zero"]))))) + (fun uu___1 -> + FStar_Tactics_Effect.lift_div_tac (fun uu___2 -> a))) + | FStar_Reflection_Arith.Plus + (FStar_Reflection_Arith.Lit uu___, b) when + uu___ = Prims.int_zero -> + Obj.magic + (FStar_Tactics_Effect.tac_bind + (Prims.mk_range "FStar.Tactics.Canon.fst" + (Prims.of_int (212)) (Prims.of_int (8)) + (Prims.of_int (212)) (Prims.of_int (34))) + (Prims.mk_range "FStar.Tactics.Canon.fst" + (Prims.of_int (211)) (Prims.of_int (19)) + (Prims.of_int (211)) (Prims.of_int (20))) + (Obj.magic + (FStar_Tactics_Derived.apply_lemma + (FStar_Reflection_Builtins.pack_ln + (FStar_Reflection_Data.Tv_FVar + (FStar_Reflection_Builtins.pack_fv + ["FStar"; + "Tactics"; + "Canon"; + "zero_plus_x"]))))) + (fun uu___1 -> + FStar_Tactics_Effect.lift_div_tac (fun uu___2 -> b))) + | FStar_Reflection_Arith.Plus (a, b) -> + if FStar_Order.gt (FStar_Reflection_Arith.compare_expr a b) + then + Obj.magic + (FStar_Tactics_Effect.tac_bind + (Prims.mk_range "FStar.Tactics.Canon.fst" + (Prims.of_int (217)) (Prims.of_int (14)) + (Prims.of_int (217)) (Prims.of_int (38))) + (Prims.mk_range "FStar.Tactics.Canon.fst" + (Prims.of_int (217)) (Prims.of_int (40)) + (Prims.of_int (217)) (Prims.of_int (48))) + (Obj.magic + (FStar_Tactics_Derived.apply_lemma + (FStar_Reflection_Builtins.pack_ln + (FStar_Reflection_Data.Tv_FVar + (FStar_Reflection_Builtins.pack_fv + ["FStar"; + "Tactics"; + "Canon"; + "comm_plus"]))))) + (fun uu___ -> + FStar_Tactics_Effect.lift_div_tac + (fun uu___1 -> FStar_Reflection_Arith.Plus (b, a)))) + else Obj.magic (skip ()) + | FStar_Reflection_Arith.Mult + (FStar_Reflection_Arith.Lit uu___, uu___1) when + uu___ = Prims.int_zero -> + Obj.magic + (FStar_Tactics_Effect.tac_bind + (Prims.mk_range "FStar.Tactics.Canon.fst" + (Prims.of_int (221)) (Prims.of_int (8)) + (Prims.of_int (221)) (Prims.of_int (34))) + (Prims.mk_range "FStar.Tactics.Canon.fst" + (Prims.of_int (222)) (Prims.of_int (8)) + (Prims.of_int (222)) (Prims.of_int (13))) + (Obj.magic + (FStar_Tactics_Derived.apply_lemma + (FStar_Reflection_Builtins.pack_ln + (FStar_Reflection_Data.Tv_FVar + (FStar_Reflection_Builtins.pack_fv + ["FStar"; + "Tactics"; + "Canon"; + "zero_mult_x"]))))) + (fun uu___2 -> + FStar_Tactics_Effect.lift_div_tac + (fun uu___3 -> + FStar_Reflection_Arith.Lit Prims.int_zero))) + | FStar_Reflection_Arith.Mult + (uu___, FStar_Reflection_Arith.Lit uu___1) when + uu___1 = Prims.int_zero -> + Obj.magic + (FStar_Tactics_Effect.tac_bind + (Prims.mk_range "FStar.Tactics.Canon.fst" + (Prims.of_int (225)) (Prims.of_int (8)) + (Prims.of_int (225)) (Prims.of_int (34))) + (Prims.mk_range "FStar.Tactics.Canon.fst" + (Prims.of_int (226)) (Prims.of_int (8)) + (Prims.of_int (226)) (Prims.of_int (13))) + (Obj.magic + (FStar_Tactics_Derived.apply_lemma + (FStar_Reflection_Builtins.pack_ln + (FStar_Reflection_Data.Tv_FVar + (FStar_Reflection_Builtins.pack_fv + ["FStar"; + "Tactics"; + "Canon"; + "x_mult_zero"]))))) + (fun uu___2 -> + FStar_Tactics_Effect.lift_div_tac + (fun uu___3 -> + FStar_Reflection_Arith.Lit Prims.int_zero))) + | FStar_Reflection_Arith.Mult + (FStar_Reflection_Arith.Lit uu___, r) when + uu___ = Prims.int_one -> + Obj.magic + (FStar_Tactics_Effect.tac_bind + (Prims.mk_range "FStar.Tactics.Canon.fst" + (Prims.of_int (229)) (Prims.of_int (8)) + (Prims.of_int (229)) (Prims.of_int (33))) + (Prims.mk_range "FStar.Tactics.Canon.fst" + (Prims.of_int (228)) (Prims.of_int (19)) + (Prims.of_int (228)) (Prims.of_int (20))) + (Obj.magic + (FStar_Tactics_Derived.apply_lemma + (FStar_Reflection_Builtins.pack_ln + (FStar_Reflection_Data.Tv_FVar + (FStar_Reflection_Builtins.pack_fv + ["FStar"; + "Tactics"; + "Canon"; + "one_mult_x"]))))) + (fun uu___1 -> + FStar_Tactics_Effect.lift_div_tac (fun uu___2 -> r))) + | FStar_Reflection_Arith.Mult + (l, FStar_Reflection_Arith.Lit uu___) when + uu___ = Prims.int_one -> + Obj.magic + (FStar_Tactics_Effect.tac_bind + (Prims.mk_range "FStar.Tactics.Canon.fst" + (Prims.of_int (233)) (Prims.of_int (8)) + (Prims.of_int (233)) (Prims.of_int (33))) + (Prims.mk_range "FStar.Tactics.Canon.fst" + (Prims.of_int (232)) (Prims.of_int (11)) + (Prims.of_int (232)) (Prims.of_int (12))) + (Obj.magic + (FStar_Tactics_Derived.apply_lemma + (FStar_Reflection_Builtins.pack_ln + (FStar_Reflection_Data.Tv_FVar + (FStar_Reflection_Builtins.pack_fv + ["FStar"; + "Tactics"; + "Canon"; + "x_mult_one"]))))) + (fun uu___1 -> + FStar_Tactics_Effect.lift_div_tac (fun uu___2 -> l))) + | FStar_Reflection_Arith.Mult (a, b) -> + if FStar_Order.gt (FStar_Reflection_Arith.compare_expr a b) + then + Obj.magic + (FStar_Tactics_Effect.tac_bind + (Prims.mk_range "FStar.Tactics.Canon.fst" + (Prims.of_int (238)) (Prims.of_int (14)) + (Prims.of_int (238)) (Prims.of_int (38))) + (Prims.mk_range "FStar.Tactics.Canon.fst" + (Prims.of_int (238)) (Prims.of_int (40)) + (Prims.of_int (238)) (Prims.of_int (48))) + (Obj.magic + (FStar_Tactics_Derived.apply_lemma + (FStar_Reflection_Builtins.pack_ln + (FStar_Reflection_Data.Tv_FVar + (FStar_Reflection_Builtins.pack_fv + ["FStar"; + "Tactics"; + "Canon"; + "comm_mult"]))))) + (fun uu___ -> + FStar_Tactics_Effect.lift_div_tac + (fun uu___1 -> FStar_Reflection_Arith.Mult (b, a)))) + else Obj.magic (skip ()) + | FStar_Reflection_Arith.Minus (a, b) -> + Obj.magic + (FStar_Tactics_Effect.tac_bind + (Prims.mk_range "FStar.Tactics.Canon.fst" + (Prims.of_int (243)) (Prims.of_int (8)) + (Prims.of_int (243)) (Prims.of_int (35))) + (Prims.mk_range "FStar.Tactics.Canon.fst" + (Prims.of_int (244)) (Prims.of_int (8)) + (Prims.of_int (247)) (Prims.of_int (30))) + (Obj.magic + (step_lemma + (FStar_Reflection_Builtins.pack_ln + (FStar_Reflection_Data.Tv_FVar + (FStar_Reflection_Builtins.pack_fv + ["FStar"; + "Tactics"; + "Canon"; + "minus_is_plus"]))))) + (fun uu___ -> + (fun uu___ -> + Obj.magic + (FStar_Tactics_Effect.tac_bind + (Prims.mk_range "FStar.Tactics.Canon.fst" + (Prims.of_int (244)) (Prims.of_int (8)) + (Prims.of_int (244)) (Prims.of_int (31))) + (Prims.mk_range "FStar.Tactics.Canon.fst" + (Prims.of_int (245)) (Prims.of_int (8)) + (Prims.of_int (247)) (Prims.of_int (30))) + (Obj.magic + (step_lemma + (FStar_Reflection_Builtins.pack_ln + (FStar_Reflection_Data.Tv_FVar + (FStar_Reflection_Builtins.pack_fv + ["FStar"; + "Tactics"; + "Canon"; + "cong_plus"]))))) + (fun uu___1 -> + (fun uu___1 -> + Obj.magic + (FStar_Tactics_Effect.tac_bind + (Prims.mk_range + "FStar.Tactics.Canon.fst" + (Prims.of_int (245)) + (Prims.of_int (8)) + (Prims.of_int (245)) + (Prims.of_int (16))) + (Prims.mk_range + "FStar.Tactics.Canon.fst" + (Prims.of_int (246)) + (Prims.of_int (8)) + (Prims.of_int (247)) + (Prims.of_int (30))) + (Obj.magic + (FStar_Tactics_Derived.trefl ())) + (fun uu___2 -> + (fun uu___2 -> + Obj.magic + (FStar_Tactics_Effect.tac_bind + (Prims.mk_range + "FStar.Tactics.Canon.fst" + (Prims.of_int (246)) + (Prims.of_int (16)) + (Prims.of_int (246)) + (Prims.of_int (35))) + (Prims.mk_range + "FStar.Tactics.Canon.fst" + (Prims.of_int (247)) + (Prims.of_int (8)) + (Prims.of_int (247)) + (Prims.of_int (30))) + (Obj.magic + (canon_point + (FStar_Reflection_Arith.Neg + b))) + (fun uu___3 -> + (fun r -> + Obj.magic + (canon_point + (FStar_Reflection_Arith.Plus + (a, r)))) + uu___3))) uu___2))) + uu___1))) uu___)) + | uu___ -> Obj.magic (skip ())) uu___) +let (canon_point_entry : unit -> (unit, unit) FStar_Tactics_Effect.tac_repr) + = + fun uu___ -> + FStar_Tactics_Effect.tac_bind + (Prims.mk_range "FStar.Tactics.Canon.fst" (Prims.of_int (264)) + (Prims.of_int (4)) (Prims.of_int (264)) (Prims.of_int (11))) + (Prims.mk_range "FStar.Tactics.Canon.fst" (Prims.of_int (265)) + (Prims.of_int (4)) (Prims.of_int (273)) (Prims.of_int (48))) + (Obj.magic (FStar_Tactics_Builtins.norm [])) + (fun uu___1 -> + (fun uu___1 -> + Obj.magic + (FStar_Tactics_Effect.tac_bind + (Prims.mk_range "FStar.Tactics.Canon.fst" + (Prims.of_int (265)) (Prims.of_int (12)) + (Prims.of_int (265)) (Prims.of_int (23))) + (Prims.mk_range "FStar.Tactics.Canon.fst" + (Prims.of_int (266)) (Prims.of_int (4)) + (Prims.of_int (273)) (Prims.of_int (48))) + (Obj.magic (FStar_Tactics_Derived.cur_goal ())) + (fun uu___2 -> + (fun g -> + Obj.magic + (FStar_Tactics_Effect.tac_bind + (Prims.mk_range "FStar.Tactics.Canon.fst" + (Prims.of_int (266)) (Prims.of_int (10)) + (Prims.of_int (266)) (Prims.of_int (27))) + (Prims.mk_range "FStar.Tactics.Canon.fst" + (Prims.of_int (266)) (Prims.of_int (4)) + (Prims.of_int (273)) (Prims.of_int (48))) + (Obj.magic + (FStar_Reflection_Formula.term_as_formula g)) + (fun uu___2 -> + (fun uu___2 -> + match uu___2 with + | FStar_Reflection_Formula.Comp + (FStar_Reflection_Formula.Eq uu___3, l, + r) + -> + Obj.magic + (FStar_Tactics_Effect.tac_bind + (Prims.mk_range + "FStar.Tactics.Canon.fst" + (Prims.of_int (268)) + (Prims.of_int (20)) + (Prims.of_int (268)) + (Prims.of_int (44))) + (Prims.mk_range + "FStar.Tactics.Canon.fst" + (Prims.of_int (268)) + (Prims.of_int (14)) + (Prims.of_int (270)) + (Prims.of_int (27))) + (Obj.magic + (FStar_Reflection_Arith.run_tm + (FStar_Reflection_Arith.is_arith_expr + l))) + (fun uu___4 -> + (fun uu___4 -> + match uu___4 with + | FStar_Pervasives.Inr e -> + Obj.magic + (FStar_Tactics_Effect.tac_bind + (Prims.mk_range + "FStar.Tactics.Canon.fst" + (Prims.of_int (269)) + (Prims.of_int (29)) + (Prims.of_int (269)) + (Prims.of_int (42))) + (Prims.mk_range + "FStar.Tactics.Canon.fst" + (Prims.of_int (269)) + (Prims.of_int (46)) + (Prims.of_int (269)) + (Prims.of_int (48))) + (Obj.magic + (canon_point e)) + (fun _e -> + FStar_Tactics_Effect.lift_div_tac + (fun uu___5 -> + ()))) + | FStar_Pervasives.Inl + uu___5 -> + Obj.magic + (FStar_Tactics_Derived.trefl + ())) uu___4)) + | uu___3 -> + Obj.magic + (FStar_Tactics_Effect.tac_bind + (Prims.mk_range + "FStar.Tactics.Canon.fst" + (Prims.of_int (273)) + (Prims.of_int (13)) + (Prims.of_int (273)) + (Prims.of_int (48))) + (Prims.mk_range + "FStar.Tactics.Canon.fst" + (Prims.of_int (273)) + (Prims.of_int (8)) + (Prims.of_int (273)) + (Prims.of_int (48))) + (Obj.magic + (FStar_Tactics_Effect.tac_bind + (Prims.mk_range + "FStar.Tactics.Canon.fst" + (Prims.of_int (273)) + (Prims.of_int (31)) + (Prims.of_int (273)) + (Prims.of_int (47))) + (Prims.mk_range "prims.fst" + (Prims.of_int (606)) + (Prims.of_int (19)) + (Prims.of_int (606)) + (Prims.of_int (31))) + (Obj.magic + (FStar_Tactics_Builtins.term_to_string + g)) + (fun uu___4 -> + FStar_Tactics_Effect.lift_div_tac + (fun uu___5 -> + Prims.strcat + "impossible: " + uu___4)))) + (fun uu___4 -> + (fun uu___4 -> + Obj.magic + (FStar_Tactics_Derived.fail + uu___4)) uu___4))) + uu___2))) uu___2))) uu___1) +let (canon : unit -> (unit, unit) FStar_Tactics_Effect.tac_repr) = + fun uu___ -> FStar_Tactics_Derived.pointwise canon_point_entry \ No newline at end of file diff --git a/ocaml/fstar-lib/generated/FStar_Tactics_CanonCommMonoid.ml b/ocaml/fstar-lib/generated/FStar_Tactics_CanonCommMonoid.ml new file mode 100644 index 00000000000..d71fd4339c0 --- /dev/null +++ b/ocaml/fstar-lib/generated/FStar_Tactics_CanonCommMonoid.ml @@ -0,0 +1,2314 @@ +open Prims +let (dump : Prims.string -> (unit, unit) FStar_Tactics_Effect.tac_repr) = + fun m -> + FStar_Tactics_Effect.tac_bind + (Prims.mk_range "FStar.Tactics.CanonCommMonoid.fst" (Prims.of_int (32)) + (Prims.of_int (24)) (Prims.of_int (32)) (Prims.of_int (36))) + (Prims.mk_range "FStar.Tactics.CanonCommMonoid.fst" (Prims.of_int (32)) + (Prims.of_int (21)) (Prims.of_int (32)) (Prims.of_int (48))) + (Obj.magic (FStar_Tactics_Builtins.debugging ())) + (fun uu___ -> + (fun uu___ -> + if uu___ + then Obj.magic (Obj.repr (FStar_Tactics_Builtins.dump m)) + else + Obj.magic + (Obj.repr + (FStar_Tactics_Effect.lift_div_tac (fun uu___2 -> ())))) + uu___) +type var = Prims.nat +type exp = + | Unit + | Var of var + | Mult of exp * exp +let (uu___is_Unit : exp -> Prims.bool) = + fun projectee -> match projectee with | Unit -> true | uu___ -> false +let (uu___is_Var : exp -> Prims.bool) = + fun projectee -> match projectee with | Var _0 -> true | uu___ -> false +let (__proj__Var__item___0 : exp -> var) = + fun projectee -> match projectee with | Var _0 -> _0 +let (uu___is_Mult : exp -> Prims.bool) = + fun projectee -> + match projectee with | Mult (_0, _1) -> true | uu___ -> false +let (__proj__Mult__item___0 : exp -> exp) = + fun projectee -> match projectee with | Mult (_0, _1) -> _0 +let (__proj__Mult__item___1 : exp -> exp) = + fun projectee -> match projectee with | Mult (_0, _1) -> _1 +let rec (exp_to_string : exp -> Prims.string) = + fun e -> + match e with + | Unit -> "Unit" + | Var x -> Prims.strcat "Var " (Prims.string_of_int x) + | Mult (e1, e2) -> + Prims.strcat "Mult (" + (Prims.strcat (exp_to_string e1) + (Prims.strcat ") (" (Prims.strcat (exp_to_string e2) ")"))) +type ('a, 'b) vmap = ((var * ('a * 'b)) Prims.list * ('a * 'b)) +let const : 'a 'b . 'a -> 'b -> ('a, 'b) vmap = + fun xa -> fun xb -> ([], (xa, xb)) +let select : 'a 'b . var -> ('a, 'b) vmap -> 'a = + fun x -> + fun vm -> + match FStar_List_Tot_Base.assoc x (FStar_Pervasives_Native.fst vm) with + | FStar_Pervasives_Native.Some (a1, uu___) -> a1 + | uu___ -> FStar_Pervasives_Native.fst (FStar_Pervasives_Native.snd vm) +let select_extra : 'a 'b . var -> ('a, 'b) vmap -> 'b = + fun x -> + fun vm -> + match FStar_List_Tot_Base.assoc x (FStar_Pervasives_Native.fst vm) with + | FStar_Pervasives_Native.Some (uu___, b1) -> b1 + | uu___ -> FStar_Pervasives_Native.snd (FStar_Pervasives_Native.snd vm) +let update : 'a 'b . var -> 'a -> 'b -> ('a, 'b) vmap -> ('a, 'b) vmap = + fun x -> + fun xa -> + fun xb -> + fun vm -> + (((x, (xa, xb)) :: (FStar_Pervasives_Native.fst vm)), + (FStar_Pervasives_Native.snd vm)) +let rec mdenote : + 'a 'b . 'a FStar_Algebra_CommMonoid.cm -> ('a, 'b) vmap -> exp -> 'a = + fun m -> + fun vm -> + fun e -> + match e with + | Unit -> FStar_Algebra_CommMonoid.__proj__CM__item__unit m + | Var x -> select x vm + | Mult (e1, e2) -> + FStar_Algebra_CommMonoid.__proj__CM__item__mult m + (mdenote m vm e1) (mdenote m vm e2) +let rec xsdenote : + 'a 'b . + 'a FStar_Algebra_CommMonoid.cm -> ('a, 'b) vmap -> var Prims.list -> 'a + = + fun m -> + fun vm -> + fun xs -> + match xs with + | [] -> FStar_Algebra_CommMonoid.__proj__CM__item__unit m + | x::[] -> select x vm + | x::xs' -> + FStar_Algebra_CommMonoid.__proj__CM__item__mult m (select x vm) + (xsdenote m vm xs') +let rec (flatten : exp -> var Prims.list) = + fun e -> + match e with + | Unit -> [] + | Var x -> [x] + | Mult (e1, e2) -> FStar_List_Tot_Base.op_At (flatten e1) (flatten e2) +type 'b permute = + unit -> (Obj.t, 'b) vmap -> var Prims.list -> var Prims.list +type ('b, 'p) permute_correct = unit +type ('b, 'p) permute_via_swaps = unit + +let (sort : unit permute) = + fun a -> + fun vm -> + FStar_List_Tot_Base.sortWith (FStar_List_Tot_Base.compare_of_bool (<)) +let sortWith : 'b . (Prims.nat -> Prims.nat -> Prims.int) -> 'b permute = + fun f -> fun a -> fun vm -> FStar_List_Tot_Base.sortWith f + + +let canon : 'a 'b . ('a, 'b) vmap -> 'b permute -> exp -> var Prims.list = + fun vm -> fun p -> fun e -> p () (Obj.magic vm) (flatten e) +let rec (where_aux : + Prims.nat -> + FStar_Reflection_Types.term -> + FStar_Reflection_Types.term Prims.list -> + (Prims.nat FStar_Pervasives_Native.option, unit) + FStar_Tactics_Effect.tac_repr) + = + fun uu___2 -> + fun uu___1 -> + fun uu___ -> + (fun n -> + fun x -> + fun xs -> + match xs with + | [] -> + Obj.magic + (Obj.repr + (FStar_Tactics_Effect.lift_div_tac + (fun uu___ -> FStar_Pervasives_Native.None))) + | x'::xs' -> + Obj.magic + (Obj.repr + (FStar_Tactics_Effect.tac_bind + (Prims.mk_range + "FStar.Tactics.CanonCommMonoid.fst" + (Prims.of_int (236)) (Prims.of_int (18)) + (Prims.of_int (236)) (Prims.of_int (34))) + (Prims.mk_range + "FStar.Tactics.CanonCommMonoid.fst" + (Prims.of_int (236)) (Prims.of_int (15)) + (Prims.of_int (236)) (Prims.of_int (73))) + (Obj.magic + (FStar_Tactics_Builtins.term_eq_old x x')) + (fun uu___ -> + (fun uu___ -> + if uu___ + then + Obj.magic + (Obj.repr + (FStar_Tactics_Effect.lift_div_tac + (fun uu___1 -> + FStar_Pervasives_Native.Some n))) + else + Obj.magic + (Obj.repr + (where_aux (n + Prims.int_one) x xs'))) + uu___)))) uu___2 uu___1 uu___ +let (where : + FStar_Reflection_Types.term -> + FStar_Reflection_Types.term Prims.list -> + (Prims.nat FStar_Pervasives_Native.option, unit) + FStar_Tactics_Effect.tac_repr) + = where_aux Prims.int_zero +let rec reification_aux : + 'a 'b . + (FStar_Reflection_Types.term -> ('a, unit) FStar_Tactics_Effect.tac_repr) + -> + FStar_Reflection_Types.term Prims.list -> + ('a, 'b) vmap -> + (FStar_Reflection_Types.term -> + ('b, unit) FStar_Tactics_Effect.tac_repr) + -> + FStar_Reflection_Types.term -> + FStar_Reflection_Types.term -> + FStar_Reflection_Types.term -> + ((exp * FStar_Reflection_Types.term Prims.list * ('a, + 'b) vmap), + unit) FStar_Tactics_Effect.tac_repr + = + fun unquotea -> + fun ts -> + fun vm -> + fun f -> + fun mult -> + fun unit -> + fun t -> + FStar_Tactics_Effect.tac_bind + (Prims.mk_range "FStar.Tactics.CanonCommMonoid.fst" + (Prims.of_int (243)) (Prims.of_int (15)) + (Prims.of_int (243)) (Prims.of_int (32))) + (Prims.mk_range "FStar.Tactics.CanonCommMonoid.fst" + (Prims.of_int (243)) (Prims.of_int (2)) + (Prims.of_int (260)) (Prims.of_int (21))) + (FStar_Tactics_Effect.lift_div_tac + (fun uu___ -> + FStar_Reflection_Derived_Lemmas.collect_app_ref t)) + (fun uu___ -> + (fun uu___ -> + match uu___ with + | (hd, tl) -> + Obj.magic + (FStar_Tactics_Effect.tac_bind + (Prims.mk_range + "FStar.Tactics.CanonCommMonoid.fst" + (Prims.of_int (245)) (Prims.of_int (4)) + (Prims.of_int (248)) (Prims.of_int (62))) + (Prims.mk_range + "FStar.Tactics.CanonCommMonoid.fst" + (Prims.of_int (250)) (Prims.of_int (2)) + (Prims.of_int (260)) (Prims.of_int (21))) + (FStar_Tactics_Effect.lift_div_tac + (fun uu___1 -> + fun t1 -> + fun ts1 -> + fun vm1 -> + FStar_Tactics_Effect.tac_bind + (Prims.mk_range + "FStar.Tactics.CanonCommMonoid.fst" + (Prims.of_int (245)) + (Prims.of_int (10)) + (Prims.of_int (245)) + (Prims.of_int (20))) + (Prims.mk_range + "FStar.Tactics.CanonCommMonoid.fst" + (Prims.of_int (245)) + (Prims.of_int (4)) + (Prims.of_int (248)) + (Prims.of_int (62))) + (Obj.magic (where t1 ts1)) + (fun uu___2 -> + (fun uu___2 -> + match uu___2 with + | FStar_Pervasives_Native.Some + v -> + Obj.magic + (Obj.repr + (FStar_Tactics_Effect.lift_div_tac + (fun uu___3 + -> + ((Var v), + ts1, vm1)))) + | FStar_Pervasives_Native.None + -> + Obj.magic + (Obj.repr + (FStar_Tactics_Effect.tac_bind + (Prims.mk_range + "FStar.Tactics.CanonCommMonoid.fst" + (Prims.of_int (247)) + (Prims.of_int (27)) + (Prims.of_int (247)) + (Prims.of_int (36))) + (Prims.mk_range + "FStar.Tactics.CanonCommMonoid.fst" + (Prims.of_int (247)) + (Prims.of_int (40)) + (Prims.of_int (248)) + (Prims.of_int (62))) + (FStar_Tactics_Effect.lift_div_tac + ( + fun + uu___3 -> + FStar_List_Tot_Base.length + ts1)) + (fun uu___3 + -> + (fun + vfresh -> + Obj.magic + (FStar_Tactics_Effect.tac_bind + (Prims.mk_range + "FStar.Tactics.CanonCommMonoid.fst" + (Prims.of_int (247)) + (Prims.of_int (48)) + (Prims.of_int (247)) + (Prims.of_int (58))) + (Prims.mk_range + "FStar.Tactics.CanonCommMonoid.fst" + (Prims.of_int (248)) + (Prims.of_int (14)) + (Prims.of_int (248)) + (Prims.of_int (62))) + (Obj.magic + (unquotea + t1)) + (fun + uu___3 -> + (fun z -> + Obj.magic + (FStar_Tactics_Effect.tac_bind + (Prims.mk_range + "FStar.Tactics.CanonCommMonoid.fst" + (Prims.of_int (248)) + (Prims.of_int (37)) + (Prims.of_int (248)) + (Prims.of_int (61))) + (Prims.mk_range + "FStar.Tactics.CanonCommMonoid.fst" + (Prims.of_int (248)) + (Prims.of_int (14)) + (Prims.of_int (248)) + (Prims.of_int (62))) + (Obj.magic + (FStar_Tactics_Effect.tac_bind + (Prims.mk_range + "FStar.Tactics.CanonCommMonoid.fst" + (Prims.of_int (248)) + (Prims.of_int (53)) + (Prims.of_int (248)) + (Prims.of_int (58))) + (Prims.mk_range + "FStar.Tactics.CanonCommMonoid.fst" + (Prims.of_int (248)) + (Prims.of_int (37)) + (Prims.of_int (248)) + (Prims.of_int (61))) + (Obj.magic + (f t1)) + (fun + uu___3 -> + FStar_Tactics_Effect.lift_div_tac + (fun + uu___4 -> + update + vfresh z + uu___3 + vm1)))) + (fun + uu___3 -> + FStar_Tactics_Effect.lift_div_tac + (fun + uu___4 -> + ((Var + vfresh), + (FStar_List_Tot_Base.op_At + ts1 + [t1]), + uu___3))))) + uu___3))) + uu___3)))) + uu___2))) + (fun uu___1 -> + (fun fvar -> + Obj.magic + (FStar_Tactics_Effect.tac_bind + (Prims.mk_range + "FStar.Tactics.CanonCommMonoid.fst" + (Prims.of_int (250)) + (Prims.of_int (8)) + (Prims.of_int (250)) + (Prims.of_int (33))) + (Prims.mk_range + "FStar.Tactics.CanonCommMonoid.fst" + (Prims.of_int (250)) + (Prims.of_int (2)) + (Prims.of_int (260)) + (Prims.of_int (21))) + (Obj.magic + (FStar_Tactics_Effect.tac_bind + (Prims.mk_range + "FStar.Tactics.CanonCommMonoid.fst" + (Prims.of_int (250)) + (Prims.of_int (8)) + (Prims.of_int (250)) + (Prims.of_int (18))) + (Prims.mk_range + "FStar.Tactics.CanonCommMonoid.fst" + (Prims.of_int (250)) + (Prims.of_int (8)) + (Prims.of_int (250)) + (Prims.of_int (33))) + (Obj.magic + (FStar_Tactics_Builtins.inspect + hd)) + (fun uu___1 -> + FStar_Tactics_Effect.lift_div_tac + (fun uu___2 -> + (uu___1, + (FStar_List_Tot_Base.list_unref + tl)))))) + (fun uu___1 -> + (fun uu___1 -> + match uu___1 with + | (FStar_Reflection_Data.Tv_FVar + fv, + (t1, + FStar_Reflection_Data.Q_Explicit):: + (t2, + FStar_Reflection_Data.Q_Explicit)::[]) + -> + Obj.magic + (FStar_Tactics_Effect.tac_bind + (Prims.mk_range + "FStar.Tactics.CanonCommMonoid.fst" + (Prims.of_int (252)) + (Prims.of_int (7)) + (Prims.of_int (252)) + (Prims.of_int (43))) + (Prims.mk_range + "FStar.Tactics.CanonCommMonoid.fst" + (Prims.of_int (252)) + (Prims.of_int (4)) + (Prims.of_int (256)) + (Prims.of_int (21))) + (Obj.magic + (FStar_Tactics_Effect.tac_bind + (Prims.mk_range + "FStar.Tactics.CanonCommMonoid.fst" + (Prims.of_int (252)) + (Prims.of_int (19)) + (Prims.of_int (252)) + (Prims.of_int (38))) + (Prims.mk_range + "FStar.Tactics.CanonCommMonoid.fst" + (Prims.of_int (252)) + (Prims.of_int (7)) + (Prims.of_int (252)) + (Prims.of_int (43))) + (Obj.magic + ( + FStar_Tactics_Builtins.pack + (FStar_Reflection_Data.Tv_FVar + fv))) + (fun uu___2 + -> + (fun + uu___2 -> + Obj.magic + (FStar_Tactics_Builtins.term_eq_old + uu___2 + mult)) + uu___2))) + (fun uu___2 -> + (fun uu___2 -> + if uu___2 + then + Obj.magic + (FStar_Tactics_Effect.tac_bind + (Prims.mk_range + "FStar.Tactics.CanonCommMonoid.fst" + (Prims.of_int (253)) + (Prims.of_int (27)) + (Prims.of_int (253)) + (Prims.of_int (72))) + (Prims.mk_range + "FStar.Tactics.CanonCommMonoid.fst" + (Prims.of_int (253)) + (Prims.of_int (9)) + (Prims.of_int (255)) + (Prims.of_int (31))) + (Obj.magic + (reification_aux + unquotea + ts vm f + mult unit + t1)) + (fun + uu___3 -> + (fun + uu___3 -> + match uu___3 + with + | + (e1, ts1, + vm1) -> + Obj.magic + (FStar_Tactics_Effect.tac_bind + (Prims.mk_range + "FStar.Tactics.CanonCommMonoid.fst" + (Prims.of_int (254)) + (Prims.of_int (27)) + (Prims.of_int (254)) + (Prims.of_int (72))) + (Prims.mk_range + "FStar.Tactics.CanonCommMonoid.fst" + (Prims.of_int (254)) + (Prims.of_int (10)) + (Prims.of_int (255)) + (Prims.of_int (30))) + (Obj.magic + (reification_aux + unquotea + ts1 vm1 f + mult unit + t2)) + (fun + uu___4 -> + FStar_Tactics_Effect.lift_div_tac + (fun + uu___5 -> + match uu___4 + with + | + (e2, ts2, + vm2) -> + ((Mult + (e1, e2)), + ts2, vm2))))) + uu___3)) + else + Obj.magic + (fvar t + ts vm)) + uu___2)) + | (uu___2, uu___3) -> + Obj.magic + (FStar_Tactics_Effect.tac_bind + (Prims.mk_range + "FStar.Tactics.CanonCommMonoid.fst" + (Prims.of_int (258)) + (Prims.of_int (7)) + (Prims.of_int (258)) + (Prims.of_int (25))) + (Prims.mk_range + "FStar.Tactics.CanonCommMonoid.fst" + (Prims.of_int (258)) + (Prims.of_int (4)) + (Prims.of_int (260)) + (Prims.of_int (21))) + (Obj.magic + (FStar_Tactics_Builtins.term_eq_old + t unit)) + (fun uu___4 -> + (fun uu___4 -> + if uu___4 + then + Obj.magic + (Obj.repr + (FStar_Tactics_Effect.lift_div_tac + (fun + uu___5 -> + (Unit, + ts, vm)))) + else + Obj.magic + (Obj.repr + (fvar t + ts vm))) + uu___4))) + uu___1))) uu___1))) uu___) +let reification : + 'b . + (FStar_Reflection_Types.term -> ('b, unit) FStar_Tactics_Effect.tac_repr) + -> + 'b -> + unit -> + (FStar_Reflection_Types.term -> + (Obj.t, unit) FStar_Tactics_Effect.tac_repr) + -> + (Obj.t -> + (FStar_Reflection_Types.term, unit) + FStar_Tactics_Effect.tac_repr) + -> + FStar_Reflection_Types.term -> + FStar_Reflection_Types.term -> + Obj.t -> + FStar_Reflection_Types.term Prims.list -> + ((exp Prims.list * (Obj.t, 'b) vmap), unit) + FStar_Tactics_Effect.tac_repr + = + fun f -> + fun def -> + fun a -> + fun unquotea -> + fun quotea -> + fun tmult -> + fun tunit -> + fun munit -> + fun ts -> + FStar_Tactics_Effect.tac_bind + (Prims.mk_range "FStar.Tactics.CanonCommMonoid.fst" + (Prims.of_int (267)) (Prims.of_int (20)) + (Prims.of_int (267)) (Prims.of_int (53))) + (Prims.mk_range "FStar.Tactics.CanonCommMonoid.fst" + (Prims.of_int (268)) (Prims.of_int (2)) + (Prims.of_int (279)) (Prims.of_int (30))) + (Obj.magic + (FStar_Tactics_Derived.norm_term + [FStar_Pervasives.delta; + FStar_Pervasives.zeta; + FStar_Pervasives.iota] tmult)) + (fun uu___ -> + (fun tmult1 -> + Obj.magic + (FStar_Tactics_Effect.tac_bind + (Prims.mk_range + "FStar.Tactics.CanonCommMonoid.fst" + (Prims.of_int (268)) (Prims.of_int (20)) + (Prims.of_int (268)) (Prims.of_int (53))) + (Prims.mk_range + "FStar.Tactics.CanonCommMonoid.fst" + (Prims.of_int (269)) (Prims.of_int (2)) + (Prims.of_int (279)) (Prims.of_int (30))) + (Obj.magic + (FStar_Tactics_Derived.norm_term + [FStar_Pervasives.delta; + FStar_Pervasives.zeta; + FStar_Pervasives.iota] tunit)) + (fun uu___ -> + (fun tunit1 -> + Obj.magic + (FStar_Tactics_Effect.tac_bind + (Prims.mk_range + "FStar.Tactics.CanonCommMonoid.fst" + (Prims.of_int (269)) + (Prims.of_int (13)) + (Prims.of_int (269)) + (Prims.of_int (62))) + (Prims.mk_range + "FStar.Tactics.CanonCommMonoid.fst" + (Prims.of_int (273)) + (Prims.of_int (2)) + (Prims.of_int (279)) + (Prims.of_int (30))) + (Obj.magic + (FStar_Tactics_Util.map + (FStar_Tactics_Derived.norm_term + [FStar_Pervasives.delta; + FStar_Pervasives.zeta; + FStar_Pervasives.iota]) + ts)) + (fun uu___ -> + (fun ts1 -> + Obj.magic + (FStar_Tactics_Effect.tac_bind + (Prims.mk_range + "FStar.Tactics.CanonCommMonoid.fst" + (Prims.of_int (274)) + (Prims.of_int (4)) + (Prims.of_int (278)) + (Prims.of_int (33))) + (Prims.mk_range + "FStar.Tactics.CanonCommMonoid.fst" + (Prims.of_int (273)) + (Prims.of_int (2)) + (Prims.of_int (279)) + (Prims.of_int (30))) + (Obj.magic + (FStar_Tactics_Util.fold_left + (fun uu___ -> + fun t -> + match uu___ + with + | (es, vs, + vm) -> + FStar_Tactics_Effect.tac_bind + (Prims.mk_range + "FStar.Tactics.CanonCommMonoid.fst" + (Prims.of_int (276)) + (Prims.of_int (24)) + (Prims.of_int (276)) + (Prims.of_int (70))) + (Prims.mk_range + "FStar.Tactics.CanonCommMonoid.fst" + (Prims.of_int (276)) + (Prims.of_int (8)) + (Prims.of_int (277)) + (Prims.of_int (24))) + (Obj.magic + (reification_aux + unquotea + vs vm f + tmult1 + tunit1 t)) + (fun + uu___1 -> + FStar_Tactics_Effect.lift_div_tac + (fun + uu___2 -> + match uu___1 + with + | + (e, vs1, + vm1) -> + ((e :: + es), vs1, + vm1)))) + ([], [], + (const munit + def)) ts1)) + (fun uu___ -> + FStar_Tactics_Effect.lift_div_tac + (fun uu___1 -> + match uu___ + with + | (es, uu___2, + vm) -> + ((FStar_List_Tot_Base.rev + es), vm))))) + uu___))) uu___))) uu___) +let rec (term_mem : + FStar_Reflection_Types.term -> + FStar_Reflection_Types.term Prims.list -> + (Prims.bool, unit) FStar_Tactics_Effect.tac_repr) + = + fun uu___1 -> + fun uu___ -> + (fun x -> + fun uu___ -> + match uu___ with + | [] -> + Obj.magic + (Obj.repr + (FStar_Tactics_Effect.lift_div_tac (fun uu___1 -> false))) + | hd::tl -> + Obj.magic + (Obj.repr + (FStar_Tactics_Effect.tac_bind + (Prims.mk_range "FStar.Tactics.CanonCommMonoid.fst" + (Prims.of_int (284)) (Prims.of_int (17)) + (Prims.of_int (284)) (Prims.of_int (33))) + (Prims.mk_range "FStar.Tactics.CanonCommMonoid.fst" + (Prims.of_int (284)) (Prims.of_int (14)) + (Prims.of_int (284)) (Prims.of_int (62))) + (Obj.magic (FStar_Tactics_Builtins.term_eq_old hd x)) + (fun uu___1 -> + (fun uu___1 -> + if uu___1 + then + Obj.magic + (Obj.repr + (FStar_Tactics_Effect.lift_div_tac + (fun uu___2 -> true))) + else Obj.magic (Obj.repr (term_mem x tl))) + uu___1)))) uu___1 uu___ +let (unfold_topdown : + FStar_Reflection_Types.term Prims.list -> + (unit, unit) FStar_Tactics_Effect.tac_repr) + = + fun ts -> + FStar_Tactics_Effect.tac_bind + (Prims.mk_range "FStar.Tactics.CanonCommMonoid.fst" + (Prims.of_int (288)) (Prims.of_int (4)) (Prims.of_int (288)) + (Prims.of_int (22))) + (Prims.mk_range "FStar.Tactics.CanonCommMonoid.fst" + (Prims.of_int (290)) (Prims.of_int (2)) (Prims.of_int (294)) + (Prims.of_int (40))) + (FStar_Tactics_Effect.lift_div_tac + (fun uu___ -> + fun s -> + FStar_Tactics_Effect.tac_bind + (Prims.mk_range "FStar.Tactics.CanonCommMonoid.fst" + (Prims.of_int (288)) (Prims.of_int (5)) + (Prims.of_int (288)) (Prims.of_int (18))) + (Prims.mk_range "FStar.Tactics.CanonCommMonoid.fst" + (Prims.of_int (288)) (Prims.of_int (4)) + (Prims.of_int (288)) (Prims.of_int (22))) + (Obj.magic (term_mem s ts)) + (fun uu___1 -> + FStar_Tactics_Effect.lift_div_tac + (fun uu___2 -> (uu___1, Prims.int_zero))))) + (fun uu___ -> + (fun should_rewrite -> + Obj.magic + (FStar_Tactics_Effect.tac_bind + (Prims.mk_range "FStar.Tactics.CanonCommMonoid.fst" + (Prims.of_int (291)) (Prims.of_int (4)) + (Prims.of_int (292)) (Prims.of_int (11))) + (Prims.mk_range "FStar.Tactics.CanonCommMonoid.fst" + (Prims.of_int (294)) (Prims.of_int (2)) + (Prims.of_int (294)) (Prims.of_int (40))) + (FStar_Tactics_Effect.lift_div_tac + (fun uu___ -> + fun uu___1 -> + FStar_Tactics_Effect.tac_bind + (Prims.mk_range + "FStar.Tactics.CanonCommMonoid.fst" + (Prims.of_int (291)) (Prims.of_int (4)) + (Prims.of_int (291)) (Prims.of_int (16))) + (Prims.mk_range + "FStar.Tactics.CanonCommMonoid.fst" + (Prims.of_int (292)) (Prims.of_int (4)) + (Prims.of_int (292)) (Prims.of_int (11))) + (Obj.magic + (FStar_Tactics_Builtins.norm + [FStar_Pervasives.delta])) + (fun uu___2 -> + (fun uu___2 -> + Obj.magic (FStar_Tactics_Derived.trefl ())) + uu___2))) + (fun uu___ -> + (fun rewrite -> + Obj.magic + (FStar_Tactics_Derived.topdown_rewrite + should_rewrite rewrite)) uu___))) uu___) +let rec quote_list : + 'a . + FStar_Reflection_Types.term -> + ('a -> + (FStar_Reflection_Types.term, unit) FStar_Tactics_Effect.tac_repr) + -> + 'a Prims.list -> + (FStar_Reflection_Types.term, unit) FStar_Tactics_Effect.tac_repr + = + fun uu___2 -> + fun uu___1 -> + fun uu___ -> + (fun ta -> + fun quotea -> + fun xs -> + match xs with + | [] -> + Obj.magic + (Obj.repr + (FStar_Tactics_Effect.lift_div_tac + (fun uu___ -> + FStar_Reflection_Derived.mk_app + (FStar_Reflection_Builtins.pack_ln + (FStar_Reflection_Data.Tv_FVar + (FStar_Reflection_Builtins.pack_fv + ["Prims"; "Nil"]))) + [(ta, FStar_Reflection_Data.Q_Implicit)]))) + | x::xs' -> + Obj.magic + (Obj.repr + (FStar_Tactics_Effect.tac_bind + (Prims.mk_range + "FStar.Tactics.CanonCommMonoid.fst" + (Prims.of_int (300)) (Prims.of_int (29)) + (Prims.of_int (302)) (Prims.of_int (69))) + (Prims.mk_range + "FStar.Tactics.CanonCommMonoid.fst" + (Prims.of_int (300)) (Prims.of_int (14)) + (Prims.of_int (302)) (Prims.of_int (69))) + (Obj.magic + (FStar_Tactics_Effect.tac_bind + (Prims.mk_range + "FStar.Tactics.CanonCommMonoid.fst" + (Prims.of_int (300)) (Prims.of_int (29)) + (Prims.of_int (302)) (Prims.of_int (69))) + (Prims.mk_range + "FStar.Tactics.CanonCommMonoid.fst" + (Prims.of_int (300)) (Prims.of_int (29)) + (Prims.of_int (302)) (Prims.of_int (69))) + (Obj.magic + (FStar_Tactics_Effect.tac_bind + (Prims.mk_range + "FStar.Tactics.CanonCommMonoid.fst" + (Prims.of_int (301)) + (Prims.of_int (30)) + (Prims.of_int (301)) + (Prims.of_int (52))) + (Prims.mk_range + "FStar.Tactics.CanonCommMonoid.fst" + (Prims.of_int (300)) + (Prims.of_int (29)) + (Prims.of_int (302)) + (Prims.of_int (69))) + (Obj.magic + (FStar_Tactics_Effect.tac_bind + (Prims.mk_range + "FStar.Tactics.CanonCommMonoid.fst" + (Prims.of_int (301)) + (Prims.of_int (31)) + (Prims.of_int (301)) + (Prims.of_int (39))) + (Prims.mk_range + "FStar.Tactics.CanonCommMonoid.fst" + (Prims.of_int (301)) + (Prims.of_int (30)) + (Prims.of_int (301)) + (Prims.of_int (52))) + (Obj.magic (quotea x)) + (fun uu___ -> + FStar_Tactics_Effect.lift_div_tac + (fun uu___1 -> + (uu___, + FStar_Reflection_Data.Q_Explicit))))) + (fun uu___ -> + (fun uu___ -> + Obj.magic + (FStar_Tactics_Effect.tac_bind + (Prims.mk_range + "FStar.Tactics.CanonCommMonoid.fst" + (Prims.of_int (300)) + (Prims.of_int (29)) + (Prims.of_int (302)) + (Prims.of_int (69))) + (Prims.mk_range + "FStar.Tactics.CanonCommMonoid.fst" + (Prims.of_int (300)) + (Prims.of_int (29)) + (Prims.of_int (302)) + (Prims.of_int (69))) + (Obj.magic + (FStar_Tactics_Effect.tac_bind + (Prims.mk_range + "FStar.Tactics.CanonCommMonoid.fst" + (Prims.of_int (302)) + (Prims.of_int (30)) + (Prims.of_int (302)) + (Prims.of_int (68))) + (Prims.mk_range + "FStar.Tactics.CanonCommMonoid.fst" + (Prims.of_int (300)) + (Prims.of_int (29)) + (Prims.of_int (302)) + (Prims.of_int (69))) + (Obj.magic + (FStar_Tactics_Effect.tac_bind + (Prims.mk_range + "FStar.Tactics.CanonCommMonoid.fst" + (Prims.of_int (302)) + (Prims.of_int (31)) + (Prims.of_int (302)) + (Prims.of_int (55))) + (Prims.mk_range + "FStar.Tactics.CanonCommMonoid.fst" + (Prims.of_int (302)) + (Prims.of_int (30)) + (Prims.of_int (302)) + (Prims.of_int (68))) + (Obj.magic + (quote_list + ta quotea + xs')) + (fun uu___1 -> + FStar_Tactics_Effect.lift_div_tac + (fun + uu___2 -> + (uu___1, + FStar_Reflection_Data.Q_Explicit))))) + (fun uu___1 -> + FStar_Tactics_Effect.lift_div_tac + (fun uu___2 -> + [uu___1])))) + (fun uu___1 -> + FStar_Tactics_Effect.lift_div_tac + (fun uu___2 -> uu___ + :: uu___1)))) uu___))) + (fun uu___ -> + FStar_Tactics_Effect.lift_div_tac + (fun uu___1 -> + (ta, + FStar_Reflection_Data.Q_Implicit) + :: uu___)))) + (fun uu___ -> + FStar_Tactics_Effect.lift_div_tac + (fun uu___1 -> + FStar_Reflection_Derived.mk_app + (FStar_Reflection_Builtins.pack_ln + (FStar_Reflection_Data.Tv_FVar + (FStar_Reflection_Builtins.pack_fv + ["Prims"; "Cons"]))) uu___))))) + uu___2 uu___1 uu___ +let quote_vm : + 'a 'b . + FStar_Reflection_Types.term -> + FStar_Reflection_Types.term -> + ('a -> + (FStar_Reflection_Types.term, unit) FStar_Tactics_Effect.tac_repr) + -> + ('b -> + (FStar_Reflection_Types.term, unit) + FStar_Tactics_Effect.tac_repr) + -> + ('a, 'b) vmap -> + (FStar_Reflection_Types.term, unit) + FStar_Tactics_Effect.tac_repr + = + fun ta -> + fun tb -> + fun quotea -> + fun quoteb -> + fun vm -> + FStar_Tactics_Effect.tac_bind + (Prims.mk_range "FStar.Tactics.CanonCommMonoid.fst" + (Prims.of_int (307)) (Prims.of_int (4)) (Prims.of_int (308)) + (Prims.of_int (70))) + (Prims.mk_range "FStar.Tactics.CanonCommMonoid.fst" + (Prims.of_int (309)) (Prims.of_int (2)) (Prims.of_int (322)) + (Prims.of_int (63))) + (FStar_Tactics_Effect.lift_div_tac + (fun uu___ -> + fun p -> + FStar_Tactics_Effect.tac_bind + (Prims.mk_range "FStar.Tactics.CanonCommMonoid.fst" + (Prims.of_int (307)) (Prims.of_int (23)) + (Prims.of_int (308)) (Prims.of_int (70))) + (Prims.mk_range "FStar.Tactics.CanonCommMonoid.fst" + (Prims.of_int (307)) (Prims.of_int (4)) + (Prims.of_int (308)) (Prims.of_int (70))) + (Obj.magic + (FStar_Tactics_Effect.tac_bind + (Prims.mk_range + "FStar.Tactics.CanonCommMonoid.fst" + (Prims.of_int (307)) (Prims.of_int (23)) + (Prims.of_int (308)) (Prims.of_int (70))) + (Prims.mk_range + "FStar.Tactics.CanonCommMonoid.fst" + (Prims.of_int (307)) (Prims.of_int (23)) + (Prims.of_int (308)) (Prims.of_int (70))) + (Obj.magic + (FStar_Tactics_Effect.tac_bind + (Prims.mk_range + "FStar.Tactics.CanonCommMonoid.fst" + (Prims.of_int (307)) + (Prims.of_int (23)) + (Prims.of_int (308)) + (Prims.of_int (70))) + (Prims.mk_range + "FStar.Tactics.CanonCommMonoid.fst" + (Prims.of_int (307)) + (Prims.of_int (23)) + (Prims.of_int (308)) + (Prims.of_int (70))) + (Obj.magic + (FStar_Tactics_Effect.tac_bind + (Prims.mk_range + "FStar.Tactics.CanonCommMonoid.fst" + (Prims.of_int (308)) + (Prims.of_int (11)) + (Prims.of_int (308)) + (Prims.of_int (39))) + (Prims.mk_range + "FStar.Tactics.CanonCommMonoid.fst" + (Prims.of_int (307)) + (Prims.of_int (23)) + (Prims.of_int (308)) + (Prims.of_int (70))) + (Obj.magic + (FStar_Tactics_Effect.tac_bind + (Prims.mk_range + "FStar.Tactics.CanonCommMonoid.fst" + (Prims.of_int (308)) + (Prims.of_int (12)) + (Prims.of_int (308)) + (Prims.of_int (26))) + (Prims.mk_range + "FStar.Tactics.CanonCommMonoid.fst" + (Prims.of_int (308)) + (Prims.of_int (11)) + (Prims.of_int (308)) + (Prims.of_int (39))) + (Obj.magic + (quotea + (FStar_Pervasives_Native.fst + p))) + (fun uu___1 -> + FStar_Tactics_Effect.lift_div_tac + (fun uu___2 -> + (uu___1, + FStar_Reflection_Data.Q_Explicit))))) + (fun uu___1 -> + (fun uu___1 -> + Obj.magic + (FStar_Tactics_Effect.tac_bind + (Prims.mk_range + "FStar.Tactics.CanonCommMonoid.fst" + (Prims.of_int (307)) + (Prims.of_int (23)) + (Prims.of_int (308)) + (Prims.of_int (70))) + (Prims.mk_range + "FStar.Tactics.CanonCommMonoid.fst" + (Prims.of_int (307)) + (Prims.of_int (23)) + (Prims.of_int (308)) + (Prims.of_int (70))) + (Obj.magic + (FStar_Tactics_Effect.tac_bind + (Prims.mk_range + "FStar.Tactics.CanonCommMonoid.fst" + (Prims.of_int (308)) + (Prims.of_int (41)) + (Prims.of_int (308)) + (Prims.of_int (69))) + (Prims.mk_range + "FStar.Tactics.CanonCommMonoid.fst" + (Prims.of_int (307)) + (Prims.of_int (23)) + (Prims.of_int (308)) + (Prims.of_int (70))) + (Obj.magic + (FStar_Tactics_Effect.tac_bind + (Prims.mk_range + "FStar.Tactics.CanonCommMonoid.fst" + (Prims.of_int (308)) + (Prims.of_int (42)) + (Prims.of_int (308)) + (Prims.of_int (56))) + (Prims.mk_range + "FStar.Tactics.CanonCommMonoid.fst" + (Prims.of_int (308)) + (Prims.of_int (41)) + (Prims.of_int (308)) + (Prims.of_int (69))) + (Obj.magic + ( + quoteb + (FStar_Pervasives_Native.snd + p))) + (fun uu___2 + -> + FStar_Tactics_Effect.lift_div_tac + (fun + uu___3 -> + (uu___2, + FStar_Reflection_Data.Q_Explicit))))) + (fun uu___2 -> + FStar_Tactics_Effect.lift_div_tac + (fun uu___3 + -> + [uu___2])))) + (fun uu___2 -> + FStar_Tactics_Effect.lift_div_tac + (fun uu___3 -> + uu___1 :: uu___2)))) + uu___1))) + (fun uu___1 -> + FStar_Tactics_Effect.lift_div_tac + (fun uu___2 -> + (tb, + FStar_Reflection_Data.Q_Implicit) + :: uu___1)))) + (fun uu___1 -> + FStar_Tactics_Effect.lift_div_tac + (fun uu___2 -> + (ta, FStar_Reflection_Data.Q_Implicit) + :: uu___1)))) + (fun uu___1 -> + FStar_Tactics_Effect.lift_div_tac + (fun uu___2 -> + FStar_Reflection_Derived.mk_app + (FStar_Reflection_Builtins.pack_ln + (FStar_Reflection_Data.Tv_FVar + (FStar_Reflection_Builtins.pack_fv + ["FStar"; + "Pervasives"; + "Native"; + "Mktuple2"]))) uu___1)))) + (fun uu___ -> + (fun quote_pair -> + Obj.magic + (FStar_Tactics_Effect.tac_bind + (Prims.mk_range "FStar.Tactics.CanonCommMonoid.fst" + (Prims.of_int (309)) (Prims.of_int (19)) + (Prims.of_int (309)) (Prims.of_int (45))) + (Prims.mk_range "FStar.Tactics.CanonCommMonoid.fst" + (Prims.of_int (310)) (Prims.of_int (2)) + (Prims.of_int (322)) (Prims.of_int (63))) + (FStar_Tactics_Effect.lift_div_tac + (fun uu___ -> + FStar_Reflection_Derived.mk_e_app + (FStar_Reflection_Builtins.pack_ln + (FStar_Reflection_Data.Tv_FVar + (FStar_Reflection_Builtins.pack_fv + ["FStar"; + "Pervasives"; + "Native"; + "tuple2"]))) [ta; tb])) + (fun uu___ -> + (fun t_a_star_b -> + Obj.magic + (FStar_Tactics_Effect.tac_bind + (Prims.mk_range + "FStar.Tactics.CanonCommMonoid.fst" + (Prims.of_int (311)) + (Prims.of_int (4)) + (Prims.of_int (313)) + (Prims.of_int (39))) + (Prims.mk_range + "FStar.Tactics.CanonCommMonoid.fst" + (Prims.of_int (314)) + (Prims.of_int (2)) + (Prims.of_int (322)) + (Prims.of_int (63))) + (FStar_Tactics_Effect.lift_div_tac + (fun uu___ -> + fun p -> + FStar_Tactics_Effect.tac_bind + (Prims.mk_range + "FStar.Tactics.CanonCommMonoid.fst" + (Prims.of_int (311)) + (Prims.of_int (23)) + (Prims.of_int (313)) + (Prims.of_int (39))) + (Prims.mk_range + "FStar.Tactics.CanonCommMonoid.fst" + (Prims.of_int (311)) + (Prims.of_int (4)) + (Prims.of_int (313)) + (Prims.of_int (39))) + (Obj.magic + (FStar_Tactics_Effect.tac_bind + (Prims.mk_range + "FStar.Tactics.CanonCommMonoid.fst" + (Prims.of_int (311)) + (Prims.of_int (23)) + (Prims.of_int (313)) + (Prims.of_int (39))) + (Prims.mk_range + "FStar.Tactics.CanonCommMonoid.fst" + (Prims.of_int (311)) + (Prims.of_int (23)) + (Prims.of_int (313)) + (Prims.of_int (39))) + (Obj.magic + (FStar_Tactics_Effect.tac_bind + (Prims.mk_range + "FStar.Tactics.CanonCommMonoid.fst" + (Prims.of_int (311)) + (Prims.of_int (23)) + (Prims.of_int (313)) + (Prims.of_int (39))) + (Prims.mk_range + "FStar.Tactics.CanonCommMonoid.fst" + (Prims.of_int (311)) + (Prims.of_int (23)) + (Prims.of_int (313)) + (Prims.of_int (39))) + (Obj.magic + (FStar_Tactics_Effect.tac_bind + (Prims.mk_range + "FStar.Tactics.CanonCommMonoid.fst" + (Prims.of_int (312)) + (Prims.of_int (6)) + (Prims.of_int (312)) + (Prims.of_int (51))) + (Prims.mk_range + "FStar.Tactics.CanonCommMonoid.fst" + (Prims.of_int (311)) + (Prims.of_int (23)) + (Prims.of_int (313)) + (Prims.of_int (39))) + (Obj.magic + (FStar_Tactics_Effect.tac_bind + (Prims.mk_range + "FStar.Tactics.CanonCommMonoid.fst" + (Prims.of_int (312)) + (Prims.of_int (7)) + (Prims.of_int (312)) + (Prims.of_int (38))) + (Prims.mk_range + "FStar.Tactics.CanonCommMonoid.fst" + (Prims.of_int (312)) + (Prims.of_int (6)) + (Prims.of_int (312)) + (Prims.of_int (51))) + (Obj.magic + (FStar_Tactics_Builtins.pack + (FStar_Reflection_Data.Tv_Const + (FStar_Reflection_Data.C_Int + (FStar_Pervasives_Native.fst + p))))) + (fun + uu___1 -> + FStar_Tactics_Effect.lift_div_tac + (fun + uu___2 -> + (uu___1, + FStar_Reflection_Data.Q_Explicit))))) + (fun uu___1 + -> + (fun + uu___1 -> + Obj.magic + (FStar_Tactics_Effect.tac_bind + (Prims.mk_range + "FStar.Tactics.CanonCommMonoid.fst" + (Prims.of_int (311)) + (Prims.of_int (23)) + (Prims.of_int (313)) + (Prims.of_int (39))) + (Prims.mk_range + "FStar.Tactics.CanonCommMonoid.fst" + (Prims.of_int (311)) + (Prims.of_int (23)) + (Prims.of_int (313)) + (Prims.of_int (39))) + (Obj.magic + (FStar_Tactics_Effect.tac_bind + (Prims.mk_range + "FStar.Tactics.CanonCommMonoid.fst" + (Prims.of_int (313)) + (Prims.of_int (6)) + (Prims.of_int (313)) + (Prims.of_int (38))) + (Prims.mk_range + "FStar.Tactics.CanonCommMonoid.fst" + (Prims.of_int (311)) + (Prims.of_int (23)) + (Prims.of_int (313)) + (Prims.of_int (39))) + (Obj.magic + (FStar_Tactics_Effect.tac_bind + (Prims.mk_range + "FStar.Tactics.CanonCommMonoid.fst" + (Prims.of_int (313)) + (Prims.of_int (7)) + (Prims.of_int (313)) + (Prims.of_int (25))) + (Prims.mk_range + "FStar.Tactics.CanonCommMonoid.fst" + (Prims.of_int (313)) + (Prims.of_int (6)) + (Prims.of_int (313)) + (Prims.of_int (38))) + (Obj.magic + (quote_pair + (FStar_Pervasives_Native.snd + p))) + (fun + uu___2 -> + FStar_Tactics_Effect.lift_div_tac + (fun + uu___3 -> + (uu___2, + FStar_Reflection_Data.Q_Explicit))))) + (fun + uu___2 -> + FStar_Tactics_Effect.lift_div_tac + (fun + uu___3 -> + [uu___2])))) + (fun + uu___2 -> + FStar_Tactics_Effect.lift_div_tac + (fun + uu___3 -> + uu___1 :: + uu___2)))) + uu___1))) + (fun uu___1 -> + FStar_Tactics_Effect.lift_div_tac + (fun uu___2 -> + (t_a_star_b, + FStar_Reflection_Data.Q_Implicit) + :: uu___1)))) + (fun uu___1 -> + FStar_Tactics_Effect.lift_div_tac + (fun uu___2 -> + ((FStar_Reflection_Builtins.pack_ln + (FStar_Reflection_Data.Tv_FVar + (FStar_Reflection_Builtins.pack_fv + ["Prims"; + "nat"]))), + FStar_Reflection_Data.Q_Implicit) + :: uu___1)))) + (fun uu___1 -> + FStar_Tactics_Effect.lift_div_tac + (fun uu___2 -> + FStar_Reflection_Derived.mk_app + (FStar_Reflection_Builtins.pack_ln + (FStar_Reflection_Data.Tv_FVar + (FStar_Reflection_Builtins.pack_fv + ["FStar"; + "Pervasives"; + "Native"; + "Mktuple2"]))) + uu___1)))) + (fun uu___ -> + (fun quote_map_entry -> + Obj.magic + (FStar_Tactics_Effect.tac_bind + (Prims.mk_range + "FStar.Tactics.CanonCommMonoid.fst" + (Prims.of_int (314)) + (Prims.of_int (16)) + (Prims.of_int (314)) + (Prims.of_int (55))) + (Prims.mk_range + "FStar.Tactics.CanonCommMonoid.fst" + (Prims.of_int (315)) + (Prims.of_int (2)) + (Prims.of_int (322)) + (Prims.of_int (63))) + (FStar_Tactics_Effect.lift_div_tac + (fun uu___ -> + FStar_Reflection_Derived.mk_e_app + (FStar_Reflection_Builtins.pack_ln + (FStar_Reflection_Data.Tv_FVar + (FStar_Reflection_Builtins.pack_fv + ["FStar"; + "Pervasives"; + "Native"; + "tuple2"]))) + [FStar_Reflection_Builtins.pack_ln + (FStar_Reflection_Data.Tv_FVar + (FStar_Reflection_Builtins.pack_fv + ["Prims"; + "nat"])); + t_a_star_b])) + (fun uu___ -> + (fun tyentry -> + Obj.magic + (FStar_Tactics_Effect.tac_bind + (Prims.mk_range + "FStar.Tactics.CanonCommMonoid.fst" + (Prims.of_int (315)) + (Prims.of_int (14)) + (Prims.of_int (315)) + (Prims.of_int (57))) + (Prims.mk_range + "FStar.Tactics.CanonCommMonoid.fst" + (Prims.of_int (317)) + (Prims.of_int (2)) + (Prims.of_int (322)) + (Prims.of_int (63))) + (Obj.magic + (quote_list + tyentry + quote_map_entry + (FStar_Pervasives_Native.fst + vm))) + (fun uu___ -> + (fun tlist -> + Obj.magic + (FStar_Tactics_Effect.tac_bind + (Prims.mk_range + "FStar.Tactics.CanonCommMonoid.fst" + (Prims.of_int (317)) + (Prims.of_int (14)) + (Prims.of_int (317)) + (Prims.of_int (33))) + (Prims.mk_range + "FStar.Tactics.CanonCommMonoid.fst" + (Prims.of_int (321)) + (Prims.of_int (2)) + (Prims.of_int (322)) + (Prims.of_int (63))) + (Obj.magic + (quote_pair + (FStar_Pervasives_Native.snd + vm))) + (fun + tpair -> + FStar_Tactics_Effect.lift_div_tac + (fun + uu___ -> + FStar_Reflection_Derived.mk_app + (FStar_Reflection_Builtins.pack_ln + (FStar_Reflection_Data.Tv_FVar + (FStar_Reflection_Builtins.pack_fv + ["FStar"; + "Pervasives"; + "Native"; + "Mktuple2"]))) + [ + ((FStar_Reflection_Derived.mk_e_app + (FStar_Reflection_Builtins.pack_ln + (FStar_Reflection_Data.Tv_FVar + (FStar_Reflection_Builtins.pack_fv + ["Prims"; + "list"]))) + [tyentry]), + FStar_Reflection_Data.Q_Implicit); + (t_a_star_b, + FStar_Reflection_Data.Q_Implicit); + (tlist, + FStar_Reflection_Data.Q_Explicit); + (tpair, + FStar_Reflection_Data.Q_Explicit)])))) + uu___))) uu___))) + uu___))) uu___))) uu___) +let rec (quote_exp : + exp -> (FStar_Reflection_Types.term, unit) FStar_Tactics_Effect.tac_repr) = + fun uu___ -> + (fun e -> + match e with + | Unit -> + Obj.magic + (Obj.repr + (FStar_Tactics_Effect.lift_div_tac + (fun uu___ -> + FStar_Reflection_Builtins.pack_ln + (FStar_Reflection_Data.Tv_FVar + (FStar_Reflection_Builtins.pack_fv + ["FStar"; "Tactics"; "CanonCommMonoid"; "Unit"]))))) + | Var x -> + Obj.magic + (Obj.repr + (FStar_Tactics_Effect.tac_bind + (Prims.mk_range "FStar.Tactics.CanonCommMonoid.fst" + (Prims.of_int (327)) (Prims.of_int (29)) + (Prims.of_int (327)) (Prims.of_int (56))) + (Prims.mk_range "FStar.Tactics.CanonCommMonoid.fst" + (Prims.of_int (327)) (Prims.of_int (13)) + (Prims.of_int (327)) (Prims.of_int (56))) + (Obj.magic + (FStar_Tactics_Effect.tac_bind + (Prims.mk_range "FStar.Tactics.CanonCommMonoid.fst" + (Prims.of_int (327)) (Prims.of_int (30)) + (Prims.of_int (327)) (Prims.of_int (55))) + (Prims.mk_range "FStar.Tactics.CanonCommMonoid.fst" + (Prims.of_int (327)) (Prims.of_int (29)) + (Prims.of_int (327)) (Prims.of_int (56))) + (Obj.magic + (FStar_Tactics_Builtins.pack + (FStar_Reflection_Data.Tv_Const + (FStar_Reflection_Data.C_Int x)))) + (fun uu___ -> + FStar_Tactics_Effect.lift_div_tac + (fun uu___1 -> [uu___])))) + (fun uu___ -> + FStar_Tactics_Effect.lift_div_tac + (fun uu___1 -> + FStar_Reflection_Derived.mk_e_app + (FStar_Reflection_Builtins.pack_ln + (FStar_Reflection_Data.Tv_FVar + (FStar_Reflection_Builtins.pack_fv + ["FStar"; + "Tactics"; + "CanonCommMonoid"; + "Var"]))) uu___)))) + | Mult (e1, e2) -> + Obj.magic + (Obj.repr + (FStar_Tactics_Effect.tac_bind + (Prims.mk_range "FStar.Tactics.CanonCommMonoid.fst" + (Prims.of_int (328)) (Prims.of_int (35)) + (Prims.of_int (328)) (Prims.of_int (63))) + (Prims.mk_range "FStar.Tactics.CanonCommMonoid.fst" + (Prims.of_int (328)) (Prims.of_int (18)) + (Prims.of_int (328)) (Prims.of_int (63))) + (Obj.magic + (FStar_Tactics_Effect.tac_bind + (Prims.mk_range "FStar.Tactics.CanonCommMonoid.fst" + (Prims.of_int (328)) (Prims.of_int (36)) + (Prims.of_int (328)) (Prims.of_int (48))) + (Prims.mk_range "FStar.Tactics.CanonCommMonoid.fst" + (Prims.of_int (328)) (Prims.of_int (35)) + (Prims.of_int (328)) (Prims.of_int (63))) + (Obj.magic (quote_exp e1)) + (fun uu___ -> + (fun uu___ -> + Obj.magic + (FStar_Tactics_Effect.tac_bind + (Prims.mk_range + "FStar.Tactics.CanonCommMonoid.fst" + (Prims.of_int (328)) + (Prims.of_int (35)) + (Prims.of_int (328)) + (Prims.of_int (63))) + (Prims.mk_range + "FStar.Tactics.CanonCommMonoid.fst" + (Prims.of_int (328)) + (Prims.of_int (35)) + (Prims.of_int (328)) + (Prims.of_int (63))) + (Obj.magic + (FStar_Tactics_Effect.tac_bind + (Prims.mk_range + "FStar.Tactics.CanonCommMonoid.fst" + (Prims.of_int (328)) + (Prims.of_int (50)) + (Prims.of_int (328)) + (Prims.of_int (62))) + (Prims.mk_range + "FStar.Tactics.CanonCommMonoid.fst" + (Prims.of_int (328)) + (Prims.of_int (35)) + (Prims.of_int (328)) + (Prims.of_int (63))) + (Obj.magic (quote_exp e2)) + (fun uu___1 -> + FStar_Tactics_Effect.lift_div_tac + (fun uu___2 -> [uu___1])))) + (fun uu___1 -> + FStar_Tactics_Effect.lift_div_tac + (fun uu___2 -> uu___ :: uu___1)))) + uu___))) + (fun uu___ -> + FStar_Tactics_Effect.lift_div_tac + (fun uu___1 -> + FStar_Reflection_Derived.mk_e_app + (FStar_Reflection_Builtins.pack_ln + (FStar_Reflection_Data.Tv_FVar + (FStar_Reflection_Builtins.pack_fv + ["FStar"; + "Tactics"; + "CanonCommMonoid"; + "Mult"]))) uu___))))) uu___ +let canon_monoid_aux : + 'a 'b . + FStar_Reflection_Types.term -> + (FStar_Reflection_Types.term -> + ('a, unit) FStar_Tactics_Effect.tac_repr) + -> + ('a -> + (FStar_Reflection_Types.term, unit) FStar_Tactics_Effect.tac_repr) + -> + FStar_Reflection_Types.term -> + FStar_Reflection_Types.term -> + FStar_Reflection_Types.term -> + 'a -> + FStar_Reflection_Types.term -> + ('b -> + (FStar_Reflection_Types.term, unit) + FStar_Tactics_Effect.tac_repr) + -> + (FStar_Reflection_Types.term -> + ('b, unit) FStar_Tactics_Effect.tac_repr) + -> + 'b -> + FStar_Reflection_Types.term -> + FStar_Reflection_Types.term -> + (unit, unit) FStar_Tactics_Effect.tac_repr + = + fun ta -> + fun unquotea -> + fun quotea -> + fun tm -> + fun tmult -> + fun tunit -> + fun munit -> + fun tb -> + fun quoteb -> + fun f -> + fun def -> + fun tp -> + fun tpc -> + FStar_Tactics_Effect.tac_bind + (Prims.mk_range + "FStar.Tactics.CanonCommMonoid.fst" + (Prims.of_int (335)) (Prims.of_int (2)) + (Prims.of_int (335)) (Prims.of_int (9))) + (Prims.mk_range + "FStar.Tactics.CanonCommMonoid.fst" + (Prims.of_int (336)) (Prims.of_int (2)) + (Prims.of_int (412)) (Prims.of_int (42))) + (Obj.magic (FStar_Tactics_Builtins.norm [])) + (fun uu___ -> + (fun uu___ -> + Obj.magic + (FStar_Tactics_Effect.tac_bind + (Prims.mk_range + "FStar.Tactics.CanonCommMonoid.fst" + (Prims.of_int (336)) + (Prims.of_int (8)) + (Prims.of_int (336)) + (Prims.of_int (37))) + (Prims.mk_range + "FStar.Tactics.CanonCommMonoid.fst" + (Prims.of_int (336)) + (Prims.of_int (2)) + (Prims.of_int (412)) + (Prims.of_int (42))) + (Obj.magic + (FStar_Tactics_Effect.tac_bind + (Prims.mk_range + "FStar.Tactics.CanonCommMonoid.fst" + (Prims.of_int (336)) + (Prims.of_int (24)) + (Prims.of_int (336)) + (Prims.of_int (37))) + (Prims.mk_range + "FStar.Tactics.CanonCommMonoid.fst" + (Prims.of_int (336)) + (Prims.of_int (8)) + (Prims.of_int (336)) + (Prims.of_int (37))) + (Obj.magic + (FStar_Tactics_Derived.cur_goal + ())) + (fun uu___1 -> + (fun uu___1 -> + Obj.magic + (FStar_Reflection_Formula.term_as_formula + uu___1)) uu___1))) + (fun uu___1 -> + (fun uu___1 -> + match uu___1 with + | FStar_Reflection_Formula.Comp + (FStar_Reflection_Formula.Eq + (FStar_Pervasives_Native.Some + t), t1, t2) + -> + Obj.magic + (FStar_Tactics_Effect.tac_bind + (Prims.mk_range + "FStar.Tactics.CanonCommMonoid.fst" + (Prims.of_int (340)) + (Prims.of_int (9)) + (Prims.of_int (340)) + (Prims.of_int (25))) + (Prims.mk_range + "FStar.Tactics.CanonCommMonoid.fst" + (Prims.of_int (340)) + (Prims.of_int (6)) + (Prims.of_int (411)) + (Prims.of_int (69))) + (Obj.magic + (FStar_Tactics_Builtins.term_eq_old + t ta)) + (fun uu___2 -> + (fun uu___2 -> + if uu___2 + then + Obj.magic + (FStar_Tactics_Effect.tac_bind + (Prims.mk_range + "FStar.Tactics.CanonCommMonoid.fst" + (Prims.of_int (341)) + (Prims.of_int (14)) + (Prims.of_int (341)) + (Prims.of_int (75))) + (Prims.mk_range + "FStar.Tactics.CanonCommMonoid.fst" + (Prims.of_int (341)) + (Prims.of_int (8)) + (Prims.of_int (410)) + (Prims.of_int (32))) + (Obj.magic + (reification + f def () + (fun + uu___3 -> + (Obj.magic + unquotea) + uu___3) + (fun + uu___3 -> + (Obj.magic + quotea) + uu___3) + tmult + tunit + (Obj.magic + munit) + [t1; t2])) + (fun + uu___3 -> + (fun + uu___3 -> + match uu___3 + with + | + (r1::r2::[], + vm) -> + Obj.magic + (FStar_Tactics_Effect.tac_bind + (Prims.mk_range + "FStar.Tactics.CanonCommMonoid.fst" + (Prims.of_int (349)) + (Prims.of_int (20)) + (Prims.of_int (349)) + (Prims.of_int (51))) + (Prims.mk_range + "FStar.Tactics.CanonCommMonoid.fst" + (Prims.of_int (350)) + (Prims.of_int (10)) + (Prims.of_int (407)) + (Prims.of_int (36))) + (Obj.magic + (quote_vm + ta tb + quotea + quoteb vm)) + (fun + uu___4 -> + (fun tvm + -> + Obj.magic + (FStar_Tactics_Effect.tac_bind + (Prims.mk_range + "FStar.Tactics.CanonCommMonoid.fst" + (Prims.of_int (350)) + (Prims.of_int (20)) + (Prims.of_int (350)) + (Prims.of_int (32))) + (Prims.mk_range + "FStar.Tactics.CanonCommMonoid.fst" + (Prims.of_int (351)) + (Prims.of_int (10)) + (Prims.of_int (407)) + (Prims.of_int (36))) + (Obj.magic + (quote_exp + r1)) + (fun + uu___4 -> + (fun tr1 + -> + Obj.magic + (FStar_Tactics_Effect.tac_bind + (Prims.mk_range + "FStar.Tactics.CanonCommMonoid.fst" + (Prims.of_int (351)) + (Prims.of_int (20)) + (Prims.of_int (351)) + (Prims.of_int (32))) + (Prims.mk_range + "FStar.Tactics.CanonCommMonoid.fst" + (Prims.of_int (352)) + (Prims.of_int (10)) + (Prims.of_int (407)) + (Prims.of_int (36))) + (Obj.magic + (quote_exp + r2)) + (fun + uu___4 -> + (fun tr2 + -> + Obj.magic + (FStar_Tactics_Effect.tac_bind + (Prims.mk_range + "FStar.Tactics.CanonCommMonoid.fst" + (Prims.of_int (352)) + (Prims.of_int (25)) + (Prims.of_int (357)) + (Prims.of_int (83))) + (Prims.mk_range + "FStar.Tactics.CanonCommMonoid.fst" + (Prims.of_int (358)) + (Prims.of_int (10)) + (Prims.of_int (407)) + (Prims.of_int (36))) + (FStar_Tactics_Effect.lift_div_tac + (fun + uu___4 -> + FStar_Reflection_Derived.mk_app + (FStar_Reflection_Builtins.pack_ln + (FStar_Reflection_Data.Tv_FVar + (FStar_Reflection_Builtins.pack_fv + ["Prims"; + "eq2"]))) + [ + (ta, + FStar_Reflection_Data.Q_Implicit); + ((FStar_Reflection_Derived.mk_app + (FStar_Reflection_Builtins.pack_ln + (FStar_Reflection_Data.Tv_FVar + (FStar_Reflection_Builtins.pack_fv + ["FStar"; + "Tactics"; + "CanonCommMonoid"; + "mdenote"]))) + [ + (ta, + FStar_Reflection_Data.Q_Implicit); + (tb, + FStar_Reflection_Data.Q_Implicit); + (tm, + FStar_Reflection_Data.Q_Explicit); + (tvm, + FStar_Reflection_Data.Q_Explicit); + (tr1, + FStar_Reflection_Data.Q_Explicit)]), + FStar_Reflection_Data.Q_Explicit); + ((FStar_Reflection_Derived.mk_app + (FStar_Reflection_Builtins.pack_ln + (FStar_Reflection_Data.Tv_FVar + (FStar_Reflection_Builtins.pack_fv + ["FStar"; + "Tactics"; + "CanonCommMonoid"; + "mdenote"]))) + [ + (ta, + FStar_Reflection_Data.Q_Implicit); + (tb, + FStar_Reflection_Data.Q_Implicit); + (tm, + FStar_Reflection_Data.Q_Explicit); + (tvm, + FStar_Reflection_Data.Q_Explicit); + (tr2, + FStar_Reflection_Data.Q_Explicit)]), + FStar_Reflection_Data.Q_Explicit)])) + (fun + uu___4 -> + (fun teq + -> + Obj.magic + (FStar_Tactics_Effect.tac_bind + (Prims.mk_range + "FStar.Tactics.CanonCommMonoid.fst" + (Prims.of_int (358)) + (Prims.of_int (10)) + (Prims.of_int (358)) + (Prims.of_int (23))) + (Prims.mk_range + "FStar.Tactics.CanonCommMonoid.fst" + (Prims.of_int (366)) + (Prims.of_int (10)) + (Prims.of_int (407)) + (Prims.of_int (36))) + (Obj.magic + (FStar_Tactics_Derived.change_sq + teq)) + (fun + uu___4 -> + (fun + uu___4 -> + Obj.magic + (FStar_Tactics_Effect.tac_bind + (Prims.mk_range + "FStar.Tactics.CanonCommMonoid.fst" + (Prims.of_int (366)) + (Prims.of_int (10)) + (Prims.of_int (369)) + (Prims.of_int (63))) + (Prims.mk_range + "FStar.Tactics.CanonCommMonoid.fst" + (Prims.of_int (371)) + (Prims.of_int (10)) + (Prims.of_int (407)) + (Prims.of_int (36))) + (Obj.magic + (FStar_Tactics_Derived.mapply + (FStar_Reflection_Derived.mk_app + (FStar_Reflection_Builtins.pack_ln + (FStar_Reflection_Data.Tv_FVar + (FStar_Reflection_Builtins.pack_fv + ["FStar"; + "Tactics"; + "CanonCommMonoid"; + "monoid_reflect"]))) + [ + (ta, + FStar_Reflection_Data.Q_Implicit); + (tb, + FStar_Reflection_Data.Q_Implicit); + (tp, + FStar_Reflection_Data.Q_Explicit); + (tpc, + FStar_Reflection_Data.Q_Explicit)]))) + (fun + uu___5 -> + (fun + uu___5 -> + Obj.magic + (FStar_Tactics_Effect.tac_bind + (Prims.mk_range + "FStar.Tactics.CanonCommMonoid.fst" + (Prims.of_int (371)) + (Prims.of_int (10)) + (Prims.of_int (371)) + (Prims.of_int (52))) + (Prims.mk_range + "FStar.Tactics.CanonCommMonoid.fst" + (Prims.of_int (375)) + (Prims.of_int (10)) + (Prims.of_int (407)) + (Prims.of_int (36))) + (Obj.magic + (unfold_topdown + [ + FStar_Reflection_Builtins.pack_ln + (FStar_Reflection_Data.Tv_FVar + (FStar_Reflection_Builtins.pack_fv + ["FStar"; + "Tactics"; + "CanonCommMonoid"; + "canon"])); + FStar_Reflection_Builtins.pack_ln + (FStar_Reflection_Data.Tv_FVar + (FStar_Reflection_Builtins.pack_fv + ["FStar"; + "Tactics"; + "CanonCommMonoid"; + "xsdenote"])); + tp])) + (fun + uu___6 -> + (fun + uu___6 -> + Obj.magic + (FStar_Tactics_Builtins.norm + [ + FStar_Pervasives.delta_only + ["FStar.Tactics.CanonCommMonoid.canon"; + "FStar.Tactics.CanonCommMonoid.xsdenote"; + "FStar.Tactics.CanonCommMonoid.flatten"; + "FStar.Tactics.CanonCommMonoid.select"; + "FStar.Tactics.CanonCommMonoid.select_extra"; + "FStar.Tactics.CanonCommMonoid.quote_list"; + "FStar.Tactics.CanonCommMonoid.quote_vm"; + "FStar.Tactics.CanonCommMonoid.quote_exp"; + "FStar.Tactics.CanonCommMonoid.const_compare"; + "FStar.Tactics.CanonCommMonoid.special_compare"; + "FStar.Pervasives.Native.fst"; + "FStar.Pervasives.Native.snd"; + "FStar.Pervasives.Native.__proj__Mktuple2__item___1"; + "FStar.Pervasives.Native.__proj__Mktuple2__item___2"; + "FStar.List.Tot.Base.assoc"; + "FStar.List.Tot.Base.op_At"; + "FStar.List.Tot.Base.append"; + "SL.AutoTactic.compare_b"; + "SL.AutoTactic.compare_v"; + "FStar.Order.int_of_order"; + "FStar.Reflection.Compare.compare_term"; + "FStar.List.Tot.Base.sortWith"; + "FStar.List.Tot.Base.partition"; + "FStar.List.Tot.Base.bool_of_compare"; + "FStar.List.Tot.Base.compare_of_bool"]; + FStar_Pervasives.zeta; + FStar_Pervasives.iota; + FStar_Pervasives.primops])) + uu___6))) + uu___5))) + uu___4))) + uu___4))) + uu___4))) + uu___4))) + uu___4)) + | + uu___4 -> + Obj.magic + (FStar_Tactics_Derived.fail + "Unexpected")) + uu___3)) + else + Obj.magic + (FStar_Tactics_Derived.fail + "Goal should be an equality at the right monoid type")) + uu___2)) + | uu___2 -> + Obj.magic + (FStar_Tactics_Derived.fail + "Goal should be an equality")) + uu___1))) uu___) +let canon_monoid_with : + 'b . + (FStar_Reflection_Types.term -> ('b, unit) FStar_Tactics_Effect.tac_repr) + -> + 'b -> + 'b permute -> + unit -> + unit -> + Obj.t FStar_Algebra_CommMonoid.cm -> + (unit, unit) FStar_Tactics_Effect.tac_repr + = + fun f -> + fun def -> + fun p -> + fun pc -> + fun a -> + fun m -> + FStar_Tactics_Effect.tac_bind + (Prims.mk_range "FStar.Tactics.CanonCommMonoid.fst" + (Prims.of_int (418)) (Prims.of_int (4)) + (Prims.of_int (418)) (Prims.of_int (13))) + (Prims.mk_range "FStar.Tactics.CanonCommMonoid.fst" + (Prims.of_int (417)) (Prims.of_int (2)) + (Prims.of_int (420)) (Prims.of_int (86))) + (FStar_Tactics_Effect.lift_div_tac + (fun uu___ -> + (fun uu___ -> + Obj.magic + (failwith + "Cannot evaluate open quotation at runtime")) + uu___)) + (fun uu___ -> + (fun uu___ -> + Obj.magic + (FStar_Tactics_Effect.tac_bind + (Prims.mk_range + "FStar.Tactics.CanonCommMonoid.fst" + (Prims.of_int (419)) (Prims.of_int (4)) + (Prims.of_int (419)) (Prims.of_int (13))) + (Prims.mk_range + "FStar.Tactics.CanonCommMonoid.fst" + (Prims.of_int (417)) (Prims.of_int (2)) + (Prims.of_int (420)) (Prims.of_int (86))) + (FStar_Tactics_Effect.lift_div_tac + (fun uu___1 -> + (fun uu___1 -> + Obj.magic + (failwith + "Cannot evaluate open quotation at runtime")) + uu___1)) + (fun uu___1 -> + (fun uu___1 -> + Obj.magic + (FStar_Tactics_Effect.tac_bind + (Prims.mk_range + "FStar.Tactics.CanonCommMonoid.fst" + (Prims.of_int (419)) + (Prims.of_int (14)) + (Prims.of_int (419)) + (Prims.of_int (34))) + (Prims.mk_range + "FStar.Tactics.CanonCommMonoid.fst" + (Prims.of_int (417)) + (Prims.of_int (2)) + (Prims.of_int (420)) + (Prims.of_int (86))) + (FStar_Tactics_Effect.lift_div_tac + (fun uu___2 -> + (fun uu___2 -> + Obj.magic + (failwith + "Cannot evaluate open quotation at runtime")) + uu___2)) + (fun uu___2 -> + (fun uu___2 -> + Obj.magic + (FStar_Tactics_Effect.tac_bind + (Prims.mk_range + "FStar.Tactics.CanonCommMonoid.fst" + (Prims.of_int (419)) + (Prims.of_int (35)) + (Prims.of_int (419)) + (Prims.of_int (55))) + (Prims.mk_range + "FStar.Tactics.CanonCommMonoid.fst" + (Prims.of_int (417)) + (Prims.of_int (2)) + (Prims.of_int (420)) + (Prims.of_int (86))) + (FStar_Tactics_Effect.lift_div_tac + (fun uu___3 -> + (fun uu___3 -> + Obj.magic + (failwith + "Cannot evaluate open quotation at runtime")) + uu___3)) + (fun uu___3 -> + (fun uu___3 -> + Obj.magic + (FStar_Tactics_Effect.tac_bind + (Prims.mk_range + "FStar.Tactics.CanonCommMonoid.fst" + (Prims.of_int (420)) + (Prims.of_int (4)) + (Prims.of_int (420)) + (Prims.of_int (13))) + (Prims.mk_range + "FStar.Tactics.CanonCommMonoid.fst" + (Prims.of_int (417)) + (Prims.of_int (2)) + (Prims.of_int (420)) + (Prims.of_int (86))) + (FStar_Tactics_Effect.lift_div_tac + (fun uu___4 -> + (fun uu___4 + -> + Obj.magic + (failwith + "Cannot evaluate open quotation at runtime")) + uu___4)) + (fun uu___4 -> + (fun uu___4 -> + Obj.magic + ( + FStar_Tactics_Effect.tac_bind + (Prims.mk_range + "FStar.Tactics.CanonCommMonoid.fst" + (Prims.of_int (420)) + (Prims.of_int (43)) + (Prims.of_int (420)) + (Prims.of_int (52))) + (Prims.mk_range + "FStar.Tactics.CanonCommMonoid.fst" + (Prims.of_int (417)) + (Prims.of_int (2)) + (Prims.of_int (420)) + (Prims.of_int (86))) + (FStar_Tactics_Effect.lift_div_tac + (fun + uu___5 -> + (fun + uu___5 -> + Obj.magic + (failwith + "Cannot evaluate open quotation at runtime")) + uu___5)) + (fun + uu___5 -> + (fun + uu___5 -> + Obj.magic + (FStar_Tactics_Effect.tac_bind + (Prims.mk_range + "FStar.Tactics.CanonCommMonoid.fst" + (Prims.of_int (420)) + (Prims.of_int (53)) + (Prims.of_int (420)) + (Prims.of_int (86))) + (Prims.mk_range + "FStar.Tactics.CanonCommMonoid.fst" + (Prims.of_int (417)) + (Prims.of_int (2)) + (Prims.of_int (420)) + (Prims.of_int (86))) + (FStar_Tactics_Effect.lift_div_tac + (fun + uu___6 -> + (fun + uu___6 -> + Obj.magic + (failwith + "Cannot evaluate open quotation at runtime")) + uu___6)) + (fun + uu___6 -> + (fun + uu___6 -> + Obj.magic + (canon_monoid_aux + uu___ + FStar_Tactics_Builtins.unquote + (fun + uu___7 -> + (fun x -> + Obj.magic + (FStar_Tactics_Effect.lift_div_tac + (fun + uu___7 -> + (fun + uu___7 -> + Obj.magic + (failwith + "Cannot evaluate open quotation at runtime")) + uu___7))) + uu___7) + uu___1 + uu___2 + uu___3 + (FStar_Algebra_CommMonoid.__proj__CM__item__unit + m) uu___4 + (fun + uu___7 -> + (fun x -> + Obj.magic + (FStar_Tactics_Effect.lift_div_tac + (fun + uu___7 -> + (fun + uu___7 -> + Obj.magic + (failwith + "Cannot evaluate open quotation at runtime")) + uu___7))) + uu___7) f + def + uu___5 + uu___6)) + uu___6))) + uu___5))) + uu___4))) + uu___3))) uu___2))) + uu___1))) uu___) +let canon_monoid : + 'a . + 'a FStar_Algebra_CommMonoid.cm -> + (unit, unit) FStar_Tactics_Effect.tac_repr + = + fun cm -> + canon_monoid_with + (fun uu___ -> + (fun uu___ -> + Obj.magic (FStar_Tactics_Effect.lift_div_tac (fun uu___1 -> ()))) + uu___) () (fun a1 -> sort ()) () () (Obj.magic cm) +let (is_const : + FStar_Reflection_Types.term -> + (Prims.bool, unit) FStar_Tactics_Effect.tac_repr) + = + fun t -> + FStar_Tactics_Effect.tac_bind + (Prims.mk_range "FStar.Tactics.CanonCommMonoid.fst" + (Prims.of_int (438)) (Prims.of_int (45)) (Prims.of_int (438)) + (Prims.of_int (56))) + (Prims.mk_range "FStar.Tactics.CanonCommMonoid.fst" + (Prims.of_int (438)) (Prims.of_int (35)) (Prims.of_int (438)) + (Prims.of_int (56))) (Obj.magic (FStar_Tactics_Builtins.inspect t)) + (fun uu___ -> + FStar_Tactics_Effect.lift_div_tac + (fun uu___1 -> FStar_Reflection_Data.uu___is_Tv_Const uu___)) +let const_compare : 'a . ('a, Prims.bool) vmap -> var -> var -> Prims.int = + fun vm -> + fun x -> + fun y -> + match ((select_extra x vm), (select_extra y vm)) with + | (false, false) -> FStar_List_Tot_Base.compare_of_bool (<) x y + | (true, true) -> FStar_List_Tot_Base.compare_of_bool (<) x y + | (false, true) -> Prims.int_one + | (true, false) -> (Prims.of_int (-1)) +let const_last : + 'a . ('a, Prims.bool) vmap -> var Prims.list -> var Prims.list = + fun vm -> fun xs -> FStar_List_Tot_Base.sortWith (const_compare vm) xs +let canon_monoid_const : + 'a . + 'a FStar_Algebra_CommMonoid.cm -> + (unit, unit) FStar_Tactics_Effect.tac_repr + = + fun cm -> + canon_monoid_with is_const false (fun a1 -> const_last) () () + (Obj.magic cm) +let (is_special : + FStar_Reflection_Types.term Prims.list -> + FStar_Reflection_Types.term -> + (Prims.bool, unit) FStar_Tactics_Effect.tac_repr) + = fun ts -> fun t -> term_mem t ts +let special_compare : 'a . ('a, Prims.bool) vmap -> var -> var -> Prims.int = + fun vm -> + fun x -> + fun y -> + match ((select_extra x vm), (select_extra y vm)) with + | (false, false) -> Prims.int_zero + | (true, true) -> FStar_List_Tot_Base.compare_of_bool (<) x y + | (false, true) -> (Prims.of_int (-1)) + | (true, false) -> Prims.int_one +let special_first : + 'a . ('a, Prims.bool) vmap -> var Prims.list -> var Prims.list = + fun vm -> fun xs -> FStar_List_Tot_Base.sortWith (special_compare vm) xs + +let canon_monoid_special : + 'uuuuu . + FStar_Reflection_Types.term Prims.list -> + 'uuuuu FStar_Algebra_CommMonoid.cm -> + (unit, unit) FStar_Tactics_Effect.tac_repr + = + fun uu___1 -> + fun uu___ -> + (fun ts -> + Obj.magic + (canon_monoid_with (is_special ts) false (fun a -> special_first) + () ())) uu___1 uu___ \ No newline at end of file diff --git a/ocaml/fstar-lib/generated/FStar_Tactics_CanonCommMonoidSimple.ml b/ocaml/fstar-lib/generated/FStar_Tactics_CanonCommMonoidSimple.ml new file mode 100644 index 00000000000..d4730d05f43 --- /dev/null +++ b/ocaml/fstar-lib/generated/FStar_Tactics_CanonCommMonoidSimple.ml @@ -0,0 +1,914 @@ +open Prims +let (term_eq : + FStar_Reflection_Types.term -> + FStar_Reflection_Types.term -> + (Prims.bool, unit) FStar_Tactics_Effect.tac_repr) + = FStar_Tactics_Builtins.term_eq_old +let (dump : Prims.string -> (unit, unit) FStar_Tactics_Effect.tac_repr) = + fun m -> + FStar_Tactics_Effect.tac_bind + (Prims.mk_range "FStar.Tactics.CanonCommMonoidSimple.fst" + (Prims.of_int (36)) (Prims.of_int (16)) (Prims.of_int (36)) + (Prims.of_int (28))) + (Prims.mk_range "FStar.Tactics.CanonCommMonoidSimple.fst" + (Prims.of_int (36)) (Prims.of_int (13)) (Prims.of_int (36)) + (Prims.of_int (40))) + (Obj.magic (FStar_Tactics_Builtins.debugging ())) + (fun uu___ -> + (fun uu___ -> + if uu___ + then Obj.magic (Obj.repr (FStar_Tactics_Builtins.dump m)) + else + Obj.magic + (Obj.repr + (FStar_Tactics_Effect.lift_div_tac (fun uu___2 -> ())))) + uu___) +type atom = Prims.nat +type exp = + | Unit + | Mult of exp * exp + | Atom of atom +let (uu___is_Unit : exp -> Prims.bool) = + fun projectee -> match projectee with | Unit -> true | uu___ -> false +let (uu___is_Mult : exp -> Prims.bool) = + fun projectee -> + match projectee with | Mult (_0, _1) -> true | uu___ -> false +let (__proj__Mult__item___0 : exp -> exp) = + fun projectee -> match projectee with | Mult (_0, _1) -> _0 +let (__proj__Mult__item___1 : exp -> exp) = + fun projectee -> match projectee with | Mult (_0, _1) -> _1 +let (uu___is_Atom : exp -> Prims.bool) = + fun projectee -> match projectee with | Atom _0 -> true | uu___ -> false +let (__proj__Atom__item___0 : exp -> atom) = + fun projectee -> match projectee with | Atom _0 -> _0 +let rec (exp_to_string : exp -> Prims.string) = + fun e -> + match e with + | Unit -> "Unit" + | Atom x -> Prims.strcat "Atom " (Prims.string_of_int x) + | Mult (e1, e2) -> + Prims.strcat "Mult (" + (Prims.strcat (exp_to_string e1) + (Prims.strcat ") (" (Prims.strcat (exp_to_string e2) ")"))) +type 'a amap = ((atom * 'a) Prims.list * 'a) +let const : 'a . 'a -> 'a amap = fun xa -> ([], xa) +let select : 'a . atom -> 'a amap -> 'a = + fun x -> + fun am -> + match FStar_List_Tot_Base.assoc x (FStar_Pervasives_Native.fst am) with + | FStar_Pervasives_Native.Some a1 -> a1 + | uu___ -> FStar_Pervasives_Native.snd am +let update : 'a . atom -> 'a -> 'a amap -> 'a amap = + fun x -> + fun xa -> + fun am -> + (((x, xa) :: (FStar_Pervasives_Native.fst am)), + (FStar_Pervasives_Native.snd am)) +let rec mdenote : 'a . 'a FStar_Algebra_CommMonoid.cm -> 'a amap -> exp -> 'a + = + fun m -> + fun am -> + fun e -> + match e with + | Unit -> FStar_Algebra_CommMonoid.__proj__CM__item__unit m + | Atom x -> select x am + | Mult (e1, e2) -> + FStar_Algebra_CommMonoid.__proj__CM__item__mult m + (mdenote m am e1) (mdenote m am e2) +let rec xsdenote : + 'a . 'a FStar_Algebra_CommMonoid.cm -> 'a amap -> atom Prims.list -> 'a = + fun m -> + fun am -> + fun xs -> + match xs with + | [] -> FStar_Algebra_CommMonoid.__proj__CM__item__unit m + | x::[] -> select x am + | x::xs' -> + FStar_Algebra_CommMonoid.__proj__CM__item__mult m (select x am) + (xsdenote m am xs') +let rec (flatten : exp -> atom Prims.list) = + fun e -> + match e with + | Unit -> [] + | Atom x -> [x] + | Mult (e1, e2) -> FStar_List_Tot_Base.op_At (flatten e1) (flatten e2) +type permute = atom Prims.list -> atom Prims.list +type 'p permute_correct = unit +type 'p permute_via_swaps = unit + +let (sort : permute) = + FStar_List_Tot_Base.sortWith (FStar_List_Tot_Base.compare_of_bool (<)) + +let (canon : exp -> atom Prims.list) = fun e -> sort (flatten e) +let rec (where_aux : + Prims.nat -> + FStar_Reflection_Types.term -> + FStar_Reflection_Types.term Prims.list -> + (Prims.nat FStar_Pervasives_Native.option, unit) + FStar_Tactics_Effect.tac_repr) + = + fun uu___2 -> + fun uu___1 -> + fun uu___ -> + (fun n -> + fun x -> + fun xs -> + match xs with + | [] -> + Obj.magic + (Obj.repr + (FStar_Tactics_Effect.lift_div_tac + (fun uu___ -> FStar_Pervasives_Native.None))) + | x'::xs' -> + Obj.magic + (Obj.repr + (FStar_Tactics_Effect.tac_bind + (Prims.mk_range + "FStar.Tactics.CanonCommMonoidSimple.fst" + (Prims.of_int (217)) (Prims.of_int (18)) + (Prims.of_int (217)) (Prims.of_int (30))) + (Prims.mk_range + "FStar.Tactics.CanonCommMonoidSimple.fst" + (Prims.of_int (217)) (Prims.of_int (15)) + (Prims.of_int (217)) (Prims.of_int (69))) + (Obj.magic (term_eq x x')) + (fun uu___ -> + (fun uu___ -> + if uu___ + then + Obj.magic + (Obj.repr + (FStar_Tactics_Effect.lift_div_tac + (fun uu___1 -> + FStar_Pervasives_Native.Some n))) + else + Obj.magic + (Obj.repr + (where_aux (n + Prims.int_one) x xs'))) + uu___)))) uu___2 uu___1 uu___ +let (where : + FStar_Reflection_Types.term -> + FStar_Reflection_Types.term Prims.list -> + (Prims.nat FStar_Pervasives_Native.option, unit) + FStar_Tactics_Effect.tac_repr) + = where_aux Prims.int_zero +let rec reification_aux : + 'a . + FStar_Reflection_Types.term Prims.list -> + 'a amap -> + FStar_Reflection_Types.term -> + FStar_Reflection_Types.term -> + FStar_Reflection_Types.term -> + ((exp * FStar_Reflection_Types.term Prims.list * 'a amap), + unit) FStar_Tactics_Effect.tac_repr + = + fun ts -> + fun am -> + fun mult -> + fun unit -> + fun t -> + FStar_Tactics_Effect.tac_bind + (Prims.mk_range "FStar.Tactics.CanonCommMonoidSimple.fst" + (Prims.of_int (223)) (Prims.of_int (15)) + (Prims.of_int (223)) (Prims.of_int (32))) + (Prims.mk_range "FStar.Tactics.CanonCommMonoidSimple.fst" + (Prims.of_int (223)) (Prims.of_int (2)) (Prims.of_int (240)) + (Prims.of_int (22))) + (FStar_Tactics_Effect.lift_div_tac + (fun uu___ -> + FStar_Reflection_Derived_Lemmas.collect_app_ref t)) + (fun uu___ -> + (fun uu___ -> + match uu___ with + | (hd, tl) -> + Obj.magic + (FStar_Tactics_Effect.tac_bind + (Prims.mk_range + "FStar.Tactics.CanonCommMonoidSimple.fst" + (Prims.of_int (225)) (Prims.of_int (4)) + (Prims.of_int (228)) (Prims.of_int (57))) + (Prims.mk_range + "FStar.Tactics.CanonCommMonoidSimple.fst" + (Prims.of_int (230)) (Prims.of_int (2)) + (Prims.of_int (240)) (Prims.of_int (22))) + (FStar_Tactics_Effect.lift_div_tac + (fun uu___1 -> + fun t1 -> + fun ts1 -> + fun am1 -> + FStar_Tactics_Effect.tac_bind + (Prims.mk_range + "FStar.Tactics.CanonCommMonoidSimple.fst" + (Prims.of_int (225)) + (Prims.of_int (10)) + (Prims.of_int (225)) + (Prims.of_int (20))) + (Prims.mk_range + "FStar.Tactics.CanonCommMonoidSimple.fst" + (Prims.of_int (225)) + (Prims.of_int (4)) + (Prims.of_int (228)) + (Prims.of_int (57))) + (Obj.magic (where t1 ts1)) + (fun uu___2 -> + (fun uu___2 -> + match uu___2 with + | FStar_Pervasives_Native.Some + v -> + Obj.magic + (Obj.repr + (FStar_Tactics_Effect.lift_div_tac + (fun uu___3 -> + ((Atom v), + ts1, am1)))) + | FStar_Pervasives_Native.None + -> + Obj.magic + (Obj.repr + (FStar_Tactics_Effect.tac_bind + (Prims.mk_range + "FStar.Tactics.CanonCommMonoidSimple.fst" + (Prims.of_int (227)) + (Prims.of_int (27)) + (Prims.of_int (227)) + (Prims.of_int (36))) + (Prims.mk_range + "FStar.Tactics.CanonCommMonoidSimple.fst" + (Prims.of_int (227)) + (Prims.of_int (40)) + (Prims.of_int (228)) + (Prims.of_int (57))) + (FStar_Tactics_Effect.lift_div_tac + (fun uu___3 + -> + FStar_List_Tot_Base.length + ts1)) + (fun uu___3 -> + (fun vfresh + -> + Obj.magic + (FStar_Tactics_Effect.tac_bind + (Prims.mk_range + "FStar.Tactics.CanonCommMonoidSimple.fst" + (Prims.of_int (227)) + (Prims.of_int (48)) + (Prims.of_int (227)) + (Prims.of_int (57))) + (Prims.mk_range + "FStar.Tactics.CanonCommMonoidSimple.fst" + (Prims.of_int (228)) + (Prims.of_int (14)) + (Prims.of_int (228)) + (Prims.of_int (57))) + (Obj.magic + (FStar_Tactics_Builtins.unquote + t1)) + (fun z -> + FStar_Tactics_Effect.lift_div_tac + (fun + uu___3 -> + ((Atom + vfresh), + (FStar_List_Tot_Base.op_At + ts1 + [t1]), + (update + vfresh z + am1)))))) + uu___3)))) + uu___2))) + (fun uu___1 -> + (fun fatom -> + Obj.magic + (FStar_Tactics_Effect.tac_bind + (Prims.mk_range + "FStar.Tactics.CanonCommMonoidSimple.fst" + (Prims.of_int (230)) + (Prims.of_int (8)) + (Prims.of_int (230)) + (Prims.of_int (33))) + (Prims.mk_range + "FStar.Tactics.CanonCommMonoidSimple.fst" + (Prims.of_int (230)) + (Prims.of_int (2)) + (Prims.of_int (240)) + (Prims.of_int (22))) + (Obj.magic + (FStar_Tactics_Effect.tac_bind + (Prims.mk_range + "FStar.Tactics.CanonCommMonoidSimple.fst" + (Prims.of_int (230)) + (Prims.of_int (8)) + (Prims.of_int (230)) + (Prims.of_int (18))) + (Prims.mk_range + "FStar.Tactics.CanonCommMonoidSimple.fst" + (Prims.of_int (230)) + (Prims.of_int (8)) + (Prims.of_int (230)) + (Prims.of_int (33))) + (Obj.magic + (FStar_Tactics_Builtins.inspect + hd)) + (fun uu___1 -> + FStar_Tactics_Effect.lift_div_tac + (fun uu___2 -> + (uu___1, + (FStar_List_Tot_Base.list_unref + tl)))))) + (fun uu___1 -> + (fun uu___1 -> + match uu___1 with + | (FStar_Reflection_Data.Tv_FVar + fv, + (t1, + FStar_Reflection_Data.Q_Explicit):: + (t2, + FStar_Reflection_Data.Q_Explicit)::[]) + -> + Obj.magic + (FStar_Tactics_Effect.tac_bind + (Prims.mk_range + "FStar.Tactics.CanonCommMonoidSimple.fst" + (Prims.of_int (232)) + (Prims.of_int (7)) + (Prims.of_int (232)) + (Prims.of_int (39))) + (Prims.mk_range + "FStar.Tactics.CanonCommMonoidSimple.fst" + (Prims.of_int (232)) + (Prims.of_int (4)) + (Prims.of_int (236)) + (Prims.of_int (22))) + (Obj.magic + (FStar_Tactics_Effect.tac_bind + (Prims.mk_range + "FStar.Tactics.CanonCommMonoidSimple.fst" + (Prims.of_int (232)) + (Prims.of_int (15)) + (Prims.of_int (232)) + (Prims.of_int (34))) + (Prims.mk_range + "FStar.Tactics.CanonCommMonoidSimple.fst" + (Prims.of_int (232)) + (Prims.of_int (7)) + (Prims.of_int (232)) + (Prims.of_int (39))) + (Obj.magic + (FStar_Tactics_Builtins.pack + (FStar_Reflection_Data.Tv_FVar + fv))) + (fun uu___2 -> + (fun uu___2 + -> + Obj.magic + (term_eq + uu___2 + mult)) + uu___2))) + (fun uu___2 -> + (fun uu___2 -> + if uu___2 + then + Obj.magic + (FStar_Tactics_Effect.tac_bind + ( + Prims.mk_range + "FStar.Tactics.CanonCommMonoidSimple.fst" + (Prims.of_int (233)) + (Prims.of_int (27)) + (Prims.of_int (233)) + (Prims.of_int (61))) + ( + Prims.mk_range + "FStar.Tactics.CanonCommMonoidSimple.fst" + (Prims.of_int (233)) + (Prims.of_int (9)) + (Prims.of_int (235)) + (Prims.of_int (31))) + ( + Obj.magic + (reification_aux + ts am + mult unit + t1)) + ( + fun + uu___3 -> + (fun + uu___3 -> + match uu___3 + with + | + (e1, ts1, + am1) -> + Obj.magic + (FStar_Tactics_Effect.tac_bind + (Prims.mk_range + "FStar.Tactics.CanonCommMonoidSimple.fst" + (Prims.of_int (234)) + (Prims.of_int (27)) + (Prims.of_int (234)) + (Prims.of_int (61))) + (Prims.mk_range + "FStar.Tactics.CanonCommMonoidSimple.fst" + (Prims.of_int (234)) + (Prims.of_int (10)) + (Prims.of_int (235)) + (Prims.of_int (30))) + (Obj.magic + (reification_aux + ts1 am1 + mult unit + t2)) + (fun + uu___4 -> + FStar_Tactics_Effect.lift_div_tac + (fun + uu___5 -> + match uu___4 + with + | + (e2, ts2, + am2) -> + ((Mult + (e1, e2)), + ts2, am2))))) + uu___3)) + else + Obj.magic + (fatom t ts + am)) + uu___2)) + | (uu___2, uu___3) -> + Obj.magic + (FStar_Tactics_Effect.tac_bind + (Prims.mk_range + "FStar.Tactics.CanonCommMonoidSimple.fst" + (Prims.of_int (238)) + (Prims.of_int (7)) + (Prims.of_int (238)) + (Prims.of_int (21))) + (Prims.mk_range + "FStar.Tactics.CanonCommMonoidSimple.fst" + (Prims.of_int (238)) + (Prims.of_int (4)) + (Prims.of_int (240)) + (Prims.of_int (22))) + (Obj.magic + (term_eq t unit)) + (fun uu___4 -> + (fun uu___4 -> + if uu___4 + then + Obj.magic + (Obj.repr + ( + FStar_Tactics_Effect.lift_div_tac + (fun + uu___5 -> + (Unit, + ts, am)))) + else + Obj.magic + (Obj.repr + ( + fatom t + ts am))) + uu___4))) uu___1))) + uu___1))) uu___) +let reification : + 'a . + 'a FStar_Algebra_CommMonoid.cm -> + FStar_Reflection_Types.term Prims.list -> + 'a amap -> + FStar_Reflection_Types.term -> + ((exp * FStar_Reflection_Types.term Prims.list * 'a amap), + unit) FStar_Tactics_Effect.tac_repr + = + fun m -> + fun ts -> + fun am -> + fun t -> + FStar_Tactics_Effect.tac_bind + (Prims.mk_range "FStar.Tactics.CanonCommMonoidSimple.fst" + (Prims.of_int (244)) (Prims.of_int (13)) (Prims.of_int (244)) + (Prims.of_int (61))) + (Prims.mk_range "FStar.Tactics.CanonCommMonoidSimple.fst" + (Prims.of_int (245)) (Prims.of_int (2)) (Prims.of_int (247)) + (Prims.of_int (35))) + (Obj.magic + (FStar_Tactics_Effect.tac_bind + (Prims.mk_range "FStar.Tactics.CanonCommMonoidSimple.fst" + (Prims.of_int (244)) (Prims.of_int (41)) + (Prims.of_int (244)) (Prims.of_int (61))) + (Prims.mk_range "FStar.Tactics.CanonCommMonoidSimple.fst" + (Prims.of_int (244)) (Prims.of_int (13)) + (Prims.of_int (244)) (Prims.of_int (61))) + (FStar_Tactics_Effect.lift_div_tac + (fun uu___ -> + (fun uu___ -> + Obj.magic + (failwith + "Cannot evaluate open quotation at runtime")) + uu___)) + (fun uu___ -> + (fun uu___ -> + Obj.magic + (FStar_Tactics_Derived.norm_term + [FStar_Pervasives.delta; + FStar_Pervasives.zeta; + FStar_Pervasives.iota] uu___)) uu___))) + (fun uu___ -> + (fun mult -> + Obj.magic + (FStar_Tactics_Effect.tac_bind + (Prims.mk_range + "FStar.Tactics.CanonCommMonoidSimple.fst" + (Prims.of_int (245)) (Prims.of_int (13)) + (Prims.of_int (245)) (Prims.of_int (61))) + (Prims.mk_range + "FStar.Tactics.CanonCommMonoidSimple.fst" + (Prims.of_int (246)) (Prims.of_int (2)) + (Prims.of_int (247)) (Prims.of_int (35))) + (Obj.magic + (FStar_Tactics_Effect.tac_bind + (Prims.mk_range + "FStar.Tactics.CanonCommMonoidSimple.fst" + (Prims.of_int (245)) (Prims.of_int (41)) + (Prims.of_int (245)) (Prims.of_int (61))) + (Prims.mk_range + "FStar.Tactics.CanonCommMonoidSimple.fst" + (Prims.of_int (245)) (Prims.of_int (13)) + (Prims.of_int (245)) (Prims.of_int (61))) + (FStar_Tactics_Effect.lift_div_tac + (fun uu___ -> + (fun uu___ -> + Obj.magic + (failwith + "Cannot evaluate open quotation at runtime")) + uu___)) + (fun uu___ -> + (fun uu___ -> + Obj.magic + (FStar_Tactics_Derived.norm_term + [FStar_Pervasives.delta; + FStar_Pervasives.zeta; + FStar_Pervasives.iota] uu___)) uu___))) + (fun uu___ -> + (fun unit -> + Obj.magic + (FStar_Tactics_Effect.tac_bind + (Prims.mk_range + "FStar.Tactics.CanonCommMonoidSimple.fst" + (Prims.of_int (246)) (Prims.of_int (13)) + (Prims.of_int (246)) (Prims.of_int (42))) + (Prims.mk_range + "FStar.Tactics.CanonCommMonoidSimple.fst" + (Prims.of_int (247)) (Prims.of_int (2)) + (Prims.of_int (247)) (Prims.of_int (35))) + (Obj.magic + (FStar_Tactics_Derived.norm_term + [FStar_Pervasives.delta; + FStar_Pervasives.zeta; + FStar_Pervasives.iota] t)) + (fun uu___ -> + (fun t1 -> + Obj.magic + (reification_aux ts am mult unit t1)) + uu___))) uu___))) uu___) +let canon_monoid : + 'a . + 'a FStar_Algebra_CommMonoid.cm -> + (unit, unit) FStar_Tactics_Effect.tac_repr + = + fun m -> + FStar_Tactics_Effect.tac_bind + (Prims.mk_range "FStar.Tactics.CanonCommMonoidSimple.fst" + (Prims.of_int (250)) (Prims.of_int (2)) (Prims.of_int (250)) + (Prims.of_int (9))) + (Prims.mk_range "FStar.Tactics.CanonCommMonoidSimple.fst" + (Prims.of_int (251)) (Prims.of_int (2)) (Prims.of_int (274)) + (Prims.of_int (42))) (Obj.magic (FStar_Tactics_Builtins.norm [])) + (fun uu___ -> + (fun uu___ -> + Obj.magic + (FStar_Tactics_Effect.tac_bind + (Prims.mk_range "FStar.Tactics.CanonCommMonoidSimple.fst" + (Prims.of_int (251)) (Prims.of_int (8)) + (Prims.of_int (251)) (Prims.of_int (37))) + (Prims.mk_range "FStar.Tactics.CanonCommMonoidSimple.fst" + (Prims.of_int (251)) (Prims.of_int (2)) + (Prims.of_int (274)) (Prims.of_int (42))) + (Obj.magic + (FStar_Tactics_Effect.tac_bind + (Prims.mk_range + "FStar.Tactics.CanonCommMonoidSimple.fst" + (Prims.of_int (251)) (Prims.of_int (24)) + (Prims.of_int (251)) (Prims.of_int (37))) + (Prims.mk_range + "FStar.Tactics.CanonCommMonoidSimple.fst" + (Prims.of_int (251)) (Prims.of_int (8)) + (Prims.of_int (251)) (Prims.of_int (37))) + (Obj.magic (FStar_Tactics_Derived.cur_goal ())) + (fun uu___1 -> + (fun uu___1 -> + Obj.magic + (FStar_Reflection_Formula.term_as_formula + uu___1)) uu___1))) + (fun uu___1 -> + (fun uu___1 -> + match uu___1 with + | FStar_Reflection_Formula.Comp + (FStar_Reflection_Formula.Eq + (FStar_Pervasives_Native.Some t), t1, t2) + -> + Obj.magic + (FStar_Tactics_Effect.tac_bind + (Prims.mk_range + "FStar.Tactics.CanonCommMonoidSimple.fst" + (Prims.of_int (255)) (Prims.of_int (9)) + (Prims.of_int (255)) (Prims.of_int (28))) + (Prims.mk_range + "FStar.Tactics.CanonCommMonoidSimple.fst" + (Prims.of_int (255)) (Prims.of_int (6)) + (Prims.of_int (273)) (Prims.of_int (69))) + (Obj.magic + (FStar_Tactics_Effect.tac_bind + (Prims.mk_range + "FStar.Tactics.CanonCommMonoidSimple.fst" + (Prims.of_int (255)) + (Prims.of_int (19)) + (Prims.of_int (255)) + (Prims.of_int (28))) + (Prims.mk_range + "FStar.Tactics.CanonCommMonoidSimple.fst" + (Prims.of_int (255)) + (Prims.of_int (9)) + (Prims.of_int (255)) + (Prims.of_int (28))) + (FStar_Tactics_Effect.lift_div_tac + (fun uu___2 -> + (fun uu___2 -> + Obj.magic + (failwith + "Cannot evaluate open quotation at runtime")) + uu___2)) + (fun uu___2 -> + (fun uu___2 -> + Obj.magic (term_eq t uu___2)) + uu___2))) + (fun uu___2 -> + (fun uu___2 -> + if uu___2 + then + Obj.magic + (FStar_Tactics_Effect.tac_bind + (Prims.mk_range + "FStar.Tactics.CanonCommMonoidSimple.fst" + (Prims.of_int (256)) + (Prims.of_int (27)) + (Prims.of_int (256)) + (Prims.of_int (67))) + (Prims.mk_range + "FStar.Tactics.CanonCommMonoidSimple.fst" + (Prims.of_int (256)) + (Prims.of_int (8)) + (Prims.of_int (271)) + (Prims.of_int (22))) + (Obj.magic + (reification m [] + (const + (FStar_Algebra_CommMonoid.__proj__CM__item__unit + m)) t1)) + (fun uu___3 -> + (fun uu___3 -> + match uu___3 with + | (r1, ts, am) -> + Obj.magic + (FStar_Tactics_Effect.tac_bind + (Prims.mk_range + "FStar.Tactics.CanonCommMonoidSimple.fst" + (Prims.of_int (257)) + (Prims.of_int (26)) + (Prims.of_int (257)) + (Prims.of_int (48))) + (Prims.mk_range + "FStar.Tactics.CanonCommMonoidSimple.fst" + (Prims.of_int (257)) + (Prims.of_int (8)) + (Prims.of_int (271)) + (Prims.of_int (22))) + (Obj.magic + (reification m + ts am t2)) + (fun uu___4 -> + (fun uu___4 -> + match uu___4 + with + | (r2, + uu___5, + am1) -> + Obj.magic + (FStar_Tactics_Effect.tac_bind + (Prims.mk_range + "FStar.Tactics.CanonCommMonoidSimple.fst" + (Prims.of_int (258)) + (Prims.of_int (9)) + (Prims.of_int (258)) + (Prims.of_int (50))) + (Prims.mk_range + "FStar.Tactics.CanonCommMonoidSimple.fst" + (Prims.of_int (259)) + (Prims.of_int (8)) + (Prims.of_int (271)) + (Prims.of_int (22))) + (Obj.magic + (FStar_Tactics_Effect.tac_bind + (Prims.mk_range + "FStar.Tactics.CanonCommMonoidSimple.fst" + (Prims.of_int (258)) + (Prims.of_int (14)) + (Prims.of_int (258)) + (Prims.of_int (50))) + (Prims.mk_range + "FStar.Tactics.CanonCommMonoidSimple.fst" + (Prims.of_int (258)) + (Prims.of_int (9)) + (Prims.of_int (258)) + (Prims.of_int (50))) + (Obj.magic + (FStar_Tactics_Effect.tac_bind + (Prims.mk_range + "FStar.Tactics.CanonCommMonoidSimple.fst" + (Prims.of_int (258)) + (Prims.of_int (24)) + (Prims.of_int (258)) + (Prims.of_int (49))) + (Prims.mk_range + "prims.fst" + (Prims.of_int (606)) + (Prims.of_int (19)) + (Prims.of_int (606)) + (Prims.of_int (31))) + (Obj.magic + (FStar_Tactics_Effect.tac_bind + (Prims.mk_range + "FStar.Tactics.CanonCommMonoidSimple.fst" + (Prims.of_int (258)) + (Prims.of_int (39)) + (Prims.of_int (258)) + (Prims.of_int (49))) + (Prims.mk_range + "FStar.Tactics.CanonCommMonoidSimple.fst" + (Prims.of_int (258)) + (Prims.of_int (24)) + (Prims.of_int (258)) + (Prims.of_int (49))) + (FStar_Tactics_Effect.lift_div_tac + (fun + uu___6 -> + (fun + uu___6 -> + Obj.magic + (failwith + "Cannot evaluate open quotation at runtime")) + uu___6)) + (fun + uu___6 -> + (fun + uu___6 -> + Obj.magic + (FStar_Tactics_Builtins.term_to_string + uu___6)) + uu___6))) + (fun + uu___6 -> + FStar_Tactics_Effect.lift_div_tac + (fun + uu___7 -> + Prims.strcat + "am =" + uu___6)))) + (fun + uu___6 -> + (fun + uu___6 -> + Obj.magic + (dump + uu___6)) + uu___6))) + (fun + uu___6 -> + (fun + uu___6 -> + Obj.magic + (FStar_Tactics_Effect.tac_bind + (Prims.mk_range + "FStar.Tactics.CanonCommMonoidSimple.fst" + (Prims.of_int (259)) + (Prims.of_int (8)) + (Prims.of_int (259)) + (Prims.of_int (62))) + (Prims.mk_range + "FStar.Tactics.CanonCommMonoidSimple.fst" + (Prims.of_int (265)) + (Prims.of_int (8)) + (Prims.of_int (271)) + (Prims.of_int (22))) + (Obj.magic + (FStar_Tactics_Effect.tac_bind + (Prims.mk_range + "FStar.Tactics.CanonCommMonoidSimple.fst" + (Prims.of_int (259)) + (Prims.of_int (18)) + (Prims.of_int (259)) + (Prims.of_int (62))) + (Prims.mk_range + "FStar.Tactics.CanonCommMonoidSimple.fst" + (Prims.of_int (259)) + (Prims.of_int (8)) + (Prims.of_int (259)) + (Prims.of_int (62))) + (FStar_Tactics_Effect.lift_div_tac + (fun + uu___7 -> + (fun + uu___7 -> + Obj.magic + (failwith + "Cannot evaluate open quotation at runtime")) + uu___7)) + (fun + uu___7 -> + (fun + uu___7 -> + Obj.magic + (FStar_Tactics_Derived.change_sq + uu___7)) + uu___7))) + (fun + uu___7 -> + (fun + uu___7 -> + Obj.magic + (FStar_Tactics_Effect.tac_bind + (Prims.mk_range + "FStar.Tactics.CanonCommMonoidSimple.fst" + (Prims.of_int (265)) + (Prims.of_int (8)) + (Prims.of_int (265)) + (Prims.of_int (31))) + (Prims.mk_range + "FStar.Tactics.CanonCommMonoidSimple.fst" + (Prims.of_int (267)) + (Prims.of_int (8)) + (Prims.of_int (271)) + (Prims.of_int (22))) + (Obj.magic + (FStar_Tactics_Derived.apply + (FStar_Reflection_Builtins.pack_ln + (FStar_Reflection_Data.Tv_FVar + (FStar_Reflection_Builtins.pack_fv + ["FStar"; + "Tactics"; + "CanonCommMonoidSimple"; + "monoid_reflect"]))))) + (fun + uu___8 -> + (fun + uu___8 -> + Obj.magic + (FStar_Tactics_Builtins.norm + [ + FStar_Pervasives.delta_only + ["FStar.Tactics.CanonCommMonoidSimple.canon"; + "FStar.Tactics.CanonCommMonoidSimple.xsdenote"; + "FStar.Tactics.CanonCommMonoidSimple.flatten"; + "FStar.Tactics.CanonCommMonoidSimple.sort"; + "FStar.Tactics.CanonCommMonoidSimple.select"; + "FStar.List.Tot.Base.assoc"; + "FStar.Pervasives.Native.fst"; + "FStar.Pervasives.Native.__proj__Mktuple2__item___1"; + "FStar.List.Tot.Base.op_At"; + "FStar.List.Tot.Base.append"; + "FStar.List.Tot.Base.sortWith"; + "FStar.List.Tot.Base.partition"; + "FStar.List.Tot.Base.bool_of_compare"; + "FStar.List.Tot.Base.compare_of_bool"]; + FStar_Pervasives.primops])) + uu___8))) + uu___7))) + uu___6))) + uu___4))) + uu___3)) + else + Obj.magic + (FStar_Tactics_Derived.fail + "Goal should be an equality at the right monoid type")) + uu___2)) + | uu___2 -> + Obj.magic + (FStar_Tactics_Derived.fail + "Goal should be an equality")) uu___1))) + uu___) \ No newline at end of file diff --git a/ocaml/fstar-lib/generated/FStar_Tactics_CanonCommMonoidSimple_Equiv.ml b/ocaml/fstar-lib/generated/FStar_Tactics_CanonCommMonoidSimple_Equiv.ml new file mode 100644 index 00000000000..6bd65b0452a --- /dev/null +++ b/ocaml/fstar-lib/generated/FStar_Tactics_CanonCommMonoidSimple_Equiv.ml @@ -0,0 +1,1151 @@ +open Prims +let (term_eq : + FStar_Reflection_Types.term -> + FStar_Reflection_Types.term -> + (Prims.bool, unit) FStar_Tactics_Effect.tac_repr) + = FStar_Tactics_Builtins.term_eq_old +type atom = Prims.int +type exp = + | Unit + | Mult of exp * exp + | Atom of atom +let (uu___is_Unit : exp -> Prims.bool) = + fun projectee -> match projectee with | Unit -> true | uu___ -> false +let (uu___is_Mult : exp -> Prims.bool) = + fun projectee -> + match projectee with | Mult (_0, _1) -> true | uu___ -> false +let (__proj__Mult__item___0 : exp -> exp) = + fun projectee -> match projectee with | Mult (_0, _1) -> _0 +let (__proj__Mult__item___1 : exp -> exp) = + fun projectee -> match projectee with | Mult (_0, _1) -> _1 +let (uu___is_Atom : exp -> Prims.bool) = + fun projectee -> match projectee with | Atom _0 -> true | uu___ -> false +let (__proj__Atom__item___0 : exp -> atom) = + fun projectee -> match projectee with | Atom _0 -> _0 +let rec (exp_to_string : exp -> Prims.string) = + fun e -> + match e with + | Unit -> "Unit" + | Atom x -> Prims.strcat "Atom " (Prims.string_of_int x) + | Mult (e1, e2) -> + Prims.strcat "Mult (" + (Prims.strcat (exp_to_string e1) + (Prims.strcat ") (" (Prims.strcat (exp_to_string e2) ")"))) +type 'a amap = ((atom * 'a) Prims.list * 'a) +let const : 'a . 'a -> 'a amap = fun xa -> ([], xa) +let select : 'a . atom -> 'a amap -> 'a = + fun x -> + fun am -> + match FStar_List_Tot_Base.assoc x (FStar_Pervasives_Native.fst am) with + | FStar_Pervasives_Native.Some a1 -> a1 + | uu___ -> FStar_Pervasives_Native.snd am +let update : 'a . atom -> 'a -> 'a amap -> 'a amap = + fun x -> + fun xa -> + fun am -> + (((x, xa) :: (FStar_Pervasives_Native.fst am)), + (FStar_Pervasives_Native.snd am)) +let rec mdenote : + 'a . + 'a FStar_Algebra_CommMonoid_Equiv.equiv -> + ('a, unit) FStar_Algebra_CommMonoid_Equiv.cm -> 'a amap -> exp -> 'a + = + fun eq -> + fun m -> + fun am -> + fun e -> + match e with + | Unit -> + FStar_Algebra_CommMonoid_Equiv.__proj__CM__item__unit eq m + | Atom x -> select x am + | Mult (e1, e2) -> + FStar_Algebra_CommMonoid_Equiv.__proj__CM__item__mult eq m + (mdenote eq m am e1) (mdenote eq m am e2) +let rec xsdenote : + 'a . + 'a FStar_Algebra_CommMonoid_Equiv.equiv -> + ('a, unit) FStar_Algebra_CommMonoid_Equiv.cm -> + 'a amap -> atom Prims.list -> 'a + = + fun eq -> + fun m -> + fun am -> + fun xs -> + match xs with + | [] -> FStar_Algebra_CommMonoid_Equiv.__proj__CM__item__unit eq m + | x::[] -> select x am + | x::xs' -> + FStar_Algebra_CommMonoid_Equiv.__proj__CM__item__mult eq m + (select x am) (xsdenote eq m am xs') +let rec (flatten : exp -> atom Prims.list) = + fun e -> + match e with + | Unit -> [] + | Atom x -> [x] + | Mult (e1, e2) -> FStar_List_Tot_Base.op_At (flatten e1) (flatten e2) +type permute = atom Prims.list -> atom Prims.list +type 'p permute_correct = unit +type 'p permute_via_swaps = unit + +let (sort : permute) = + FStar_List_Tot_Base.sortWith (FStar_List_Tot_Base.compare_of_bool (<)) + +let (canon : exp -> atom Prims.list) = fun e -> sort (flatten e) +let rec (where_aux : + Prims.nat -> + FStar_Reflection_Types.term -> + FStar_Reflection_Types.term Prims.list -> + (Prims.nat FStar_Pervasives_Native.option, unit) + FStar_Tactics_Effect.tac_repr) + = + fun uu___2 -> + fun uu___1 -> + fun uu___ -> + (fun n -> + fun x -> + fun xs -> + match xs with + | [] -> + Obj.magic + (Obj.repr + (FStar_Tactics_Effect.lift_div_tac + (fun uu___ -> FStar_Pervasives_Native.None))) + | x'::xs' -> + Obj.magic + (Obj.repr + (FStar_Tactics_Effect.tac_bind + (Prims.mk_range + "FStar.Tactics.CanonCommMonoidSimple.Equiv.fst" + (Prims.of_int (275)) (Prims.of_int (18)) + (Prims.of_int (275)) (Prims.of_int (30))) + (Prims.mk_range + "FStar.Tactics.CanonCommMonoidSimple.Equiv.fst" + (Prims.of_int (275)) (Prims.of_int (15)) + (Prims.of_int (275)) (Prims.of_int (69))) + (Obj.magic (term_eq x x')) + (fun uu___ -> + (fun uu___ -> + if uu___ + then + Obj.magic + (Obj.repr + (FStar_Tactics_Effect.lift_div_tac + (fun uu___1 -> + FStar_Pervasives_Native.Some n))) + else + Obj.magic + (Obj.repr + (where_aux (n + Prims.int_one) x xs'))) + uu___)))) uu___2 uu___1 uu___ +let (where : + FStar_Reflection_Types.term -> + FStar_Reflection_Types.term Prims.list -> + (Prims.nat FStar_Pervasives_Native.option, unit) + FStar_Tactics_Effect.tac_repr) + = where_aux Prims.int_zero +let (fatom : + FStar_Reflection_Types.term -> + FStar_Reflection_Types.term Prims.list -> + FStar_Reflection_Types.term amap -> + ((exp * FStar_Reflection_Types.term Prims.list * + FStar_Reflection_Types.term amap), + unit) FStar_Tactics_Effect.tac_repr) + = + fun t -> + fun ts -> + fun am -> + FStar_Tactics_Effect.tac_bind + (Prims.mk_range "FStar.Tactics.CanonCommMonoidSimple.Equiv.fst" + (Prims.of_int (279)) (Prims.of_int (8)) (Prims.of_int (279)) + (Prims.of_int (18))) + (Prims.mk_range "FStar.Tactics.CanonCommMonoidSimple.Equiv.fst" + (Prims.of_int (279)) (Prims.of_int (2)) (Prims.of_int (284)) + (Prims.of_int (47))) (Obj.magic (where t ts)) + (fun uu___ -> + (fun uu___ -> + match uu___ with + | FStar_Pervasives_Native.Some v -> + Obj.magic + (Obj.repr + (FStar_Tactics_Effect.lift_div_tac + (fun uu___1 -> ((Atom v), ts, am)))) + | FStar_Pervasives_Native.None -> + Obj.magic + (Obj.repr + (FStar_Tactics_Effect.tac_bind + (Prims.mk_range + "FStar.Tactics.CanonCommMonoidSimple.Equiv.fst" + (Prims.of_int (282)) (Prims.of_int (17)) + (Prims.of_int (282)) (Prims.of_int (26))) + (Prims.mk_range + "FStar.Tactics.CanonCommMonoidSimple.Equiv.fst" + (Prims.of_int (283)) (Prims.of_int (4)) + (Prims.of_int (284)) (Prims.of_int (47))) + (FStar_Tactics_Effect.lift_div_tac + (fun uu___1 -> FStar_List_Tot_Base.length ts)) + (fun uu___1 -> + (fun vfresh -> + Obj.magic + (FStar_Tactics_Effect.tac_bind + (Prims.mk_range + "FStar.Tactics.CanonCommMonoidSimple.Equiv.fst" + (Prims.of_int (283)) + (Prims.of_int (12)) + (Prims.of_int (283)) + (Prims.of_int (36))) + (Prims.mk_range + "FStar.Tactics.CanonCommMonoidSimple.Equiv.fst" + (Prims.of_int (284)) + (Prims.of_int (4)) + (Prims.of_int (284)) + (Prims.of_int (47))) + (Obj.magic + (FStar_Tactics_Derived.norm_term + [FStar_Pervasives.iota; + FStar_Pervasives.zeta] t)) + (fun t1 -> + FStar_Tactics_Effect.lift_div_tac + (fun uu___1 -> + ((Atom vfresh), + (FStar_List_Tot_Base.op_At + ts [t1]), + (update vfresh t1 am)))))) + uu___1)))) uu___) +let rec (reification_aux : + FStar_Reflection_Types.term Prims.list -> + FStar_Reflection_Types.term amap -> + FStar_Reflection_Types.term -> + FStar_Reflection_Types.term -> + FStar_Reflection_Types.term -> + ((exp * FStar_Reflection_Types.term Prims.list * + FStar_Reflection_Types.term amap), + unit) FStar_Tactics_Effect.tac_repr) + = + fun ts -> + fun am -> + fun mult -> + fun unit -> + fun t -> + FStar_Tactics_Effect.tac_bind + (Prims.mk_range "FStar.Tactics.CanonCommMonoidSimple.Equiv.fst" + (Prims.of_int (289)) (Prims.of_int (15)) + (Prims.of_int (289)) (Prims.of_int (32))) + (Prims.mk_range "FStar.Tactics.CanonCommMonoidSimple.Equiv.fst" + (Prims.of_int (289)) (Prims.of_int (2)) (Prims.of_int (300)) + (Prims.of_int (22))) + (FStar_Tactics_Effect.lift_div_tac + (fun uu___ -> + FStar_Reflection_Derived_Lemmas.collect_app_ref t)) + (fun uu___ -> + (fun uu___ -> + match uu___ with + | (hd, tl) -> + Obj.magic + (FStar_Tactics_Effect.tac_bind + (Prims.mk_range + "FStar.Tactics.CanonCommMonoidSimple.Equiv.fst" + (Prims.of_int (290)) (Prims.of_int (8)) + (Prims.of_int (290)) (Prims.of_int (33))) + (Prims.mk_range + "FStar.Tactics.CanonCommMonoidSimple.Equiv.fst" + (Prims.of_int (290)) (Prims.of_int (2)) + (Prims.of_int (300)) (Prims.of_int (22))) + (Obj.magic + (FStar_Tactics_Effect.tac_bind + (Prims.mk_range + "FStar.Tactics.CanonCommMonoidSimple.Equiv.fst" + (Prims.of_int (290)) (Prims.of_int (8)) + (Prims.of_int (290)) + (Prims.of_int (18))) + (Prims.mk_range + "FStar.Tactics.CanonCommMonoidSimple.Equiv.fst" + (Prims.of_int (290)) (Prims.of_int (8)) + (Prims.of_int (290)) + (Prims.of_int (33))) + (Obj.magic + (FStar_Tactics_Builtins.inspect hd)) + (fun uu___1 -> + FStar_Tactics_Effect.lift_div_tac + (fun uu___2 -> + (uu___1, + (FStar_List_Tot_Base.list_unref + tl)))))) + (fun uu___1 -> + (fun uu___1 -> + match uu___1 with + | (FStar_Reflection_Data.Tv_FVar fv, + (t1, FStar_Reflection_Data.Q_Explicit):: + (t2, FStar_Reflection_Data.Q_Explicit)::[]) + -> + Obj.magic + (FStar_Tactics_Effect.tac_bind + (Prims.mk_range + "FStar.Tactics.CanonCommMonoidSimple.Equiv.fst" + (Prims.of_int (292)) + (Prims.of_int (7)) + (Prims.of_int (292)) + (Prims.of_int (39))) + (Prims.mk_range + "FStar.Tactics.CanonCommMonoidSimple.Equiv.fst" + (Prims.of_int (292)) + (Prims.of_int (4)) + (Prims.of_int (296)) + (Prims.of_int (22))) + (Obj.magic + (FStar_Tactics_Effect.tac_bind + (Prims.mk_range + "FStar.Tactics.CanonCommMonoidSimple.Equiv.fst" + (Prims.of_int (292)) + (Prims.of_int (15)) + (Prims.of_int (292)) + (Prims.of_int (34))) + (Prims.mk_range + "FStar.Tactics.CanonCommMonoidSimple.Equiv.fst" + (Prims.of_int (292)) + (Prims.of_int (7)) + (Prims.of_int (292)) + (Prims.of_int (39))) + (Obj.magic + (FStar_Tactics_Builtins.pack + (FStar_Reflection_Data.Tv_FVar + fv))) + (fun uu___2 -> + (fun uu___2 -> + Obj.magic + (term_eq uu___2 + mult)) uu___2))) + (fun uu___2 -> + (fun uu___2 -> + if uu___2 + then + Obj.magic + (FStar_Tactics_Effect.tac_bind + (Prims.mk_range + "FStar.Tactics.CanonCommMonoidSimple.Equiv.fst" + (Prims.of_int (293)) + (Prims.of_int (29)) + (Prims.of_int (293)) + (Prims.of_int (63))) + (Prims.mk_range + "FStar.Tactics.CanonCommMonoidSimple.Equiv.fst" + (Prims.of_int (293)) + (Prims.of_int (9)) + (Prims.of_int (295)) + (Prims.of_int (31))) + (Obj.magic + (reification_aux + ts am mult + unit t1)) + (fun uu___3 -> + (fun uu___3 -> + match uu___3 + with + | (e1, ts1, + am1) -> + Obj.magic + (FStar_Tactics_Effect.tac_bind + (Prims.mk_range + "FStar.Tactics.CanonCommMonoidSimple.Equiv.fst" + (Prims.of_int (294)) + (Prims.of_int (29)) + (Prims.of_int (294)) + (Prims.of_int (63))) + (Prims.mk_range + "FStar.Tactics.CanonCommMonoidSimple.Equiv.fst" + (Prims.of_int (294)) + (Prims.of_int (10)) + (Prims.of_int (295)) + (Prims.of_int (30))) + (Obj.magic + (reification_aux + ts1 am1 + mult unit + t2)) + (fun + uu___4 -> + FStar_Tactics_Effect.lift_div_tac + (fun + uu___5 -> + match uu___4 + with + | + (e2, ts2, + am2) -> + ((Mult + (e1, e2)), + ts2, am2))))) + uu___3)) + else + Obj.magic (fatom t ts am)) + uu___2)) + | (uu___2, uu___3) -> + Obj.magic + (FStar_Tactics_Effect.tac_bind + (Prims.mk_range + "FStar.Tactics.CanonCommMonoidSimple.Equiv.fst" + (Prims.of_int (298)) + (Prims.of_int (7)) + (Prims.of_int (298)) + (Prims.of_int (21))) + (Prims.mk_range + "FStar.Tactics.CanonCommMonoidSimple.Equiv.fst" + (Prims.of_int (298)) + (Prims.of_int (4)) + (Prims.of_int (300)) + (Prims.of_int (22))) + (Obj.magic (term_eq t unit)) + (fun uu___4 -> + (fun uu___4 -> + if uu___4 + then + Obj.magic + (Obj.repr + (FStar_Tactics_Effect.lift_div_tac + (fun uu___5 -> + (Unit, ts, am)))) + else + Obj.magic + (Obj.repr + (fatom t ts am))) + uu___4))) uu___1))) uu___) +let (reification : + FStar_Reflection_Types.term -> + FStar_Reflection_Types.term -> + FStar_Reflection_Types.term Prims.list -> + FStar_Reflection_Types.term amap -> + FStar_Reflection_Types.term -> + ((exp * FStar_Reflection_Types.term Prims.list * + FStar_Reflection_Types.term amap), + unit) FStar_Tactics_Effect.tac_repr) + = + fun eq -> + fun m -> + fun ts -> + fun am -> + fun t -> + FStar_Tactics_Effect.tac_bind + (Prims.mk_range "FStar.Tactics.CanonCommMonoidSimple.Equiv.fst" + (Prims.of_int (304)) (Prims.of_int (13)) + (Prims.of_int (304)) (Prims.of_int (60))) + (Prims.mk_range "FStar.Tactics.CanonCommMonoidSimple.Equiv.fst" + (Prims.of_int (305)) (Prims.of_int (2)) (Prims.of_int (307)) + (Prims.of_int (35))) + (Obj.magic + (FStar_Tactics_Derived.norm_term + [FStar_Pervasives.iota; + FStar_Pervasives.zeta; + FStar_Pervasives.delta] + (FStar_Reflection_Builtins.pack_ln + (FStar_Reflection_Data.Tv_App + ((FStar_Reflection_Builtins.pack_ln + (FStar_Reflection_Data.Tv_FVar + (FStar_Reflection_Builtins.pack_fv + ["FStar"; + "Algebra"; + "CommMonoid"; + "Equiv"; + "__proj__CM__item__mult"]))), + (m, FStar_Reflection_Data.Q_Explicit)))))) + (fun uu___ -> + (fun mult -> + Obj.magic + (FStar_Tactics_Effect.tac_bind + (Prims.mk_range + "FStar.Tactics.CanonCommMonoidSimple.Equiv.fst" + (Prims.of_int (305)) (Prims.of_int (13)) + (Prims.of_int (305)) (Prims.of_int (60))) + (Prims.mk_range + "FStar.Tactics.CanonCommMonoidSimple.Equiv.fst" + (Prims.of_int (306)) (Prims.of_int (2)) + (Prims.of_int (307)) (Prims.of_int (35))) + (Obj.magic + (FStar_Tactics_Derived.norm_term + [FStar_Pervasives.iota; + FStar_Pervasives.zeta; + FStar_Pervasives.delta] + (FStar_Reflection_Builtins.pack_ln + (FStar_Reflection_Data.Tv_App + ((FStar_Reflection_Builtins.pack_ln + (FStar_Reflection_Data.Tv_FVar + (FStar_Reflection_Builtins.pack_fv + ["FStar"; + "Algebra"; + "CommMonoid"; + "Equiv"; + "__proj__CM__item__unit"]))), + (m, FStar_Reflection_Data.Q_Explicit)))))) + (fun uu___ -> + (fun unit -> + Obj.magic + (FStar_Tactics_Effect.tac_bind + (Prims.mk_range + "FStar.Tactics.CanonCommMonoidSimple.Equiv.fst" + (Prims.of_int (306)) + (Prims.of_int (13)) + (Prims.of_int (306)) + (Prims.of_int (37))) + (Prims.mk_range + "FStar.Tactics.CanonCommMonoidSimple.Equiv.fst" + (Prims.of_int (307)) + (Prims.of_int (2)) + (Prims.of_int (307)) + (Prims.of_int (35))) + (Obj.magic + (FStar_Tactics_Derived.norm_term + [FStar_Pervasives.iota; + FStar_Pervasives.zeta] t)) + (fun uu___ -> + (fun t1 -> + Obj.magic + (reification_aux ts am mult unit + t1)) uu___))) uu___))) uu___) +let rec (repeat_cong_right_identity : + FStar_Reflection_Types.term -> + FStar_Reflection_Types.term -> (unit, unit) FStar_Tactics_Effect.tac_repr) + = + fun eq -> + fun m -> + FStar_Tactics_Derived.or_else + (fun uu___ -> + FStar_Tactics_Derived.apply_lemma + (FStar_Reflection_Builtins.pack_ln + (FStar_Reflection_Data.Tv_FVar + (FStar_Reflection_Builtins.pack_fv + ["FStar"; + "Algebra"; + "CommMonoid"; + "Equiv"; + "right_identity"])))) + (fun uu___ -> + FStar_Tactics_Effect.tac_bind + (Prims.mk_range "FStar.Tactics.CanonCommMonoidSimple.Equiv.fst" + (Prims.of_int (311)) (Prims.of_int (20)) (Prims.of_int (311)) + (Prims.of_int (55))) + (Prims.mk_range "FStar.Tactics.CanonCommMonoidSimple.Equiv.fst" + (Prims.of_int (312)) (Prims.of_int (20)) (Prims.of_int (314)) + (Prims.of_int (51))) + (Obj.magic + (FStar_Tactics_Derived.apply_lemma + (FStar_Reflection_Builtins.pack_ln + (FStar_Reflection_Data.Tv_App + ((FStar_Reflection_Builtins.pack_ln + (FStar_Reflection_Data.Tv_FVar + (FStar_Reflection_Builtins.pack_fv + ["FStar"; + "Algebra"; + "CommMonoid"; + "Equiv"; + "__proj__CM__item__congruence"]))), + (m, FStar_Reflection_Data.Q_Explicit)))))) + (fun uu___1 -> + (fun uu___1 -> + Obj.magic + (FStar_Tactics_Effect.tac_bind + (Prims.mk_range + "FStar.Tactics.CanonCommMonoidSimple.Equiv.fst" + (Prims.of_int (312)) (Prims.of_int (20)) + (Prims.of_int (312)) (Prims.of_int (28))) + (Prims.mk_range + "FStar.Tactics.CanonCommMonoidSimple.Equiv.fst" + (Prims.of_int (313)) (Prims.of_int (20)) + (Prims.of_int (314)) (Prims.of_int (51))) + (Obj.magic (FStar_Tactics_Logic.split ())) + (fun uu___2 -> + (fun uu___2 -> + Obj.magic + (FStar_Tactics_Effect.tac_bind + (Prims.mk_range + "FStar.Tactics.CanonCommMonoidSimple.Equiv.fst" + (Prims.of_int (313)) + (Prims.of_int (20)) + (Prims.of_int (313)) + (Prims.of_int (57))) + (Prims.mk_range + "FStar.Tactics.CanonCommMonoidSimple.Equiv.fst" + (Prims.of_int (314)) + (Prims.of_int (20)) + (Prims.of_int (314)) + (Prims.of_int (51))) + (Obj.magic + (FStar_Tactics_Derived.apply_lemma + (FStar_Reflection_Builtins.pack_ln + (FStar_Reflection_Data.Tv_App + ((FStar_Reflection_Builtins.pack_ln + (FStar_Reflection_Data.Tv_FVar + (FStar_Reflection_Builtins.pack_fv + ["FStar"; + "Algebra"; + "CommMonoid"; + "Equiv"; + "__proj__EQ__item__reflexivity"]))), + (eq, + FStar_Reflection_Data.Q_Explicit)))))) + (fun uu___3 -> + (fun uu___3 -> + Obj.magic + (repeat_cong_right_identity eq m)) + uu___3))) uu___2))) uu___1)) +let rec (convert_map : + (atom * FStar_Reflection_Types.term) Prims.list -> + FStar_Reflection_Types.term) + = + fun m -> + match m with + | [] -> + FStar_Reflection_Builtins.pack_ln + (FStar_Reflection_Data.Tv_FVar + (FStar_Reflection_Builtins.pack_fv ["Prims"; "Nil"])) + | (a, t)::ps -> + let a1 = + FStar_Reflection_Builtins.pack_ln + (FStar_Reflection_Data.Tv_Const (FStar_Reflection_Data.C_Int a)) in + let uu___ = convert_map ps in + let uu___1 = t in + let uu___2 = a1 in + FStar_Reflection_Builtins.pack_ln + (FStar_Reflection_Data.Tv_App + ((FStar_Reflection_Builtins.pack_ln + (FStar_Reflection_Data.Tv_App + ((FStar_Reflection_Builtins.pack_ln + (FStar_Reflection_Data.Tv_FVar + (FStar_Reflection_Builtins.pack_fv + ["Prims"; "Cons"]))), + ((FStar_Reflection_Builtins.pack_ln + (FStar_Reflection_Data.Tv_App + ((FStar_Reflection_Builtins.pack_ln + (FStar_Reflection_Data.Tv_App + ((FStar_Reflection_Builtins.pack_ln + (FStar_Reflection_Data.Tv_FVar + (FStar_Reflection_Builtins.pack_fv + ["FStar"; + "Pervasives"; + "Native"; + "Mktuple2"]))), + (uu___2, + FStar_Reflection_Data.Q_Explicit)))), + (uu___1, FStar_Reflection_Data.Q_Explicit)))), + FStar_Reflection_Data.Q_Explicit)))), + (uu___, FStar_Reflection_Data.Q_Explicit))) +let (convert_am : + FStar_Reflection_Types.term amap -> FStar_Reflection_Types.term) = + fun am -> + let uu___ = am in + match uu___ with + | (map, def) -> + let uu___1 = def in + let uu___2 = convert_map map in + FStar_Reflection_Builtins.pack_ln + (FStar_Reflection_Data.Tv_App + ((FStar_Reflection_Builtins.pack_ln + (FStar_Reflection_Data.Tv_App + ((FStar_Reflection_Builtins.pack_ln + (FStar_Reflection_Data.Tv_FVar + (FStar_Reflection_Builtins.pack_fv + ["FStar"; "Pervasives"; "Native"; "Mktuple2"]))), + (uu___2, FStar_Reflection_Data.Q_Explicit)))), + (uu___1, FStar_Reflection_Data.Q_Explicit))) +let rec (quote_exp : exp -> FStar_Reflection_Types.term) = + fun e -> + match e with + | Unit -> + FStar_Reflection_Builtins.pack_ln + (FStar_Reflection_Data.Tv_FVar + (FStar_Reflection_Builtins.pack_fv + ["FStar"; + "Tactics"; + "CanonCommMonoidSimple"; + "Equiv"; + "Unit"])) + | Mult (e1, e2) -> + let uu___ = quote_exp e2 in + let uu___1 = quote_exp e1 in + FStar_Reflection_Builtins.pack_ln + (FStar_Reflection_Data.Tv_App + ((FStar_Reflection_Builtins.pack_ln + (FStar_Reflection_Data.Tv_App + ((FStar_Reflection_Builtins.pack_ln + (FStar_Reflection_Data.Tv_FVar + (FStar_Reflection_Builtins.pack_fv + ["FStar"; + "Tactics"; + "CanonCommMonoidSimple"; + "Equiv"; + "Mult"]))), + (uu___1, FStar_Reflection_Data.Q_Explicit)))), + (uu___, FStar_Reflection_Data.Q_Explicit))) + | Atom n -> + let nt = + FStar_Reflection_Builtins.pack_ln + (FStar_Reflection_Data.Tv_Const (FStar_Reflection_Data.C_Int n)) in + FStar_Reflection_Builtins.pack_ln + (FStar_Reflection_Data.Tv_App + ((FStar_Reflection_Builtins.pack_ln + (FStar_Reflection_Data.Tv_FVar + (FStar_Reflection_Builtins.pack_fv + ["FStar"; + "Tactics"; + "CanonCommMonoidSimple"; + "Equiv"; + "Atom"]))), (nt, FStar_Reflection_Data.Q_Explicit))) +let (canon_lhs_rhs : + FStar_Reflection_Types.term -> + FStar_Reflection_Types.term -> + FStar_Reflection_Types.term -> + FStar_Reflection_Types.term -> + (unit, unit) FStar_Tactics_Effect.tac_repr) + = + fun eq -> + fun m -> + fun lhs -> + fun rhs -> + FStar_Tactics_Effect.tac_bind + (Prims.mk_range "FStar.Tactics.CanonCommMonoidSimple.Equiv.fst" + (Prims.of_int (341)) (Prims.of_int (15)) (Prims.of_int (341)) + (Prims.of_int (61))) + (Prims.mk_range "FStar.Tactics.CanonCommMonoidSimple.Equiv.fst" + (Prims.of_int (342)) (Prims.of_int (2)) (Prims.of_int (370)) + (Prims.of_int (52))) + (Obj.magic + (FStar_Tactics_Derived.norm_term + [FStar_Pervasives.iota; + FStar_Pervasives.zeta; + FStar_Pervasives.delta] + (FStar_Reflection_Builtins.pack_ln + (FStar_Reflection_Data.Tv_App + ((FStar_Reflection_Builtins.pack_ln + (FStar_Reflection_Data.Tv_FVar + (FStar_Reflection_Builtins.pack_fv + ["FStar"; + "Algebra"; + "CommMonoid"; + "Equiv"; + "__proj__CM__item__unit"]))), + (m, FStar_Reflection_Data.Q_Explicit)))))) + (fun uu___ -> + (fun m_unit -> + Obj.magic + (FStar_Tactics_Effect.tac_bind + (Prims.mk_range + "FStar.Tactics.CanonCommMonoidSimple.Equiv.fst" + (Prims.of_int (342)) (Prims.of_int (11)) + (Prims.of_int (342)) (Prims.of_int (23))) + (Prims.mk_range + "FStar.Tactics.CanonCommMonoidSimple.Equiv.fst" + (Prims.of_int (343)) (Prims.of_int (2)) + (Prims.of_int (370)) (Prims.of_int (52))) + (FStar_Tactics_Effect.lift_div_tac + (fun uu___ -> const m_unit)) + (fun uu___ -> + (fun am -> + Obj.magic + (FStar_Tactics_Effect.tac_bind + (Prims.mk_range + "FStar.Tactics.CanonCommMonoidSimple.Equiv.fst" + (Prims.of_int (343)) (Prims.of_int (21)) + (Prims.of_int (343)) (Prims.of_int (47))) + (Prims.mk_range + "FStar.Tactics.CanonCommMonoidSimple.Equiv.fst" + (Prims.of_int (343)) (Prims.of_int (2)) + (Prims.of_int (370)) (Prims.of_int (52))) + (Obj.magic (reification eq m [] am lhs)) + (fun uu___ -> + (fun uu___ -> + match uu___ with + | (r1, ts, am1) -> + Obj.magic + (FStar_Tactics_Effect.tac_bind + (Prims.mk_range + "FStar.Tactics.CanonCommMonoidSimple.Equiv.fst" + (Prims.of_int (344)) + (Prims.of_int (21)) + (Prims.of_int (344)) + (Prims.of_int (47))) + (Prims.mk_range + "FStar.Tactics.CanonCommMonoidSimple.Equiv.fst" + (Prims.of_int (344)) + (Prims.of_int (2)) + (Prims.of_int (370)) + (Prims.of_int (52))) + (Obj.magic + (reification eq m ts am1 + rhs)) + (fun uu___1 -> + (fun uu___1 -> + match uu___1 with + | (r2, uu___2, am2) -> + Obj.magic + (FStar_Tactics_Effect.tac_bind + (Prims.mk_range + "FStar.Tactics.CanonCommMonoidSimple.Equiv.fst" + (Prims.of_int (351)) + (Prims.of_int (11)) + (Prims.of_int (351)) + (Prims.of_int (24))) + (Prims.mk_range + "FStar.Tactics.CanonCommMonoidSimple.Equiv.fst" + (Prims.of_int (352)) + (Prims.of_int (2)) + (Prims.of_int (370)) + (Prims.of_int (52))) + (FStar_Tactics_Effect.lift_div_tac + (fun + uu___3 -> + convert_am + am2)) + (fun uu___3 + -> + (fun am3 + -> + Obj.magic + (FStar_Tactics_Effect.tac_bind + (Prims.mk_range + "FStar.Tactics.CanonCommMonoidSimple.Equiv.fst" + (Prims.of_int (352)) + (Prims.of_int (11)) + (Prims.of_int (352)) + (Prims.of_int (23))) + (Prims.mk_range + "FStar.Tactics.CanonCommMonoidSimple.Equiv.fst" + (Prims.of_int (353)) + (Prims.of_int (2)) + (Prims.of_int (370)) + (Prims.of_int (52))) + (FStar_Tactics_Effect.lift_div_tac + (fun + uu___3 -> + quote_exp + r1)) + (fun + uu___3 -> + (fun r11 + -> + Obj.magic + (FStar_Tactics_Effect.tac_bind + (Prims.mk_range + "FStar.Tactics.CanonCommMonoidSimple.Equiv.fst" + (Prims.of_int (353)) + (Prims.of_int (11)) + (Prims.of_int (353)) + (Prims.of_int (23))) + (Prims.mk_range + "FStar.Tactics.CanonCommMonoidSimple.Equiv.fst" + (Prims.of_int (354)) + (Prims.of_int (2)) + (Prims.of_int (370)) + (Prims.of_int (52))) + (FStar_Tactics_Effect.lift_div_tac + (fun + uu___3 -> + quote_exp + r2)) + (fun + uu___3 -> + (fun r21 + -> + Obj.magic + (FStar_Tactics_Effect.tac_bind + (Prims.mk_range + "FStar.Tactics.CanonCommMonoidSimple.Equiv.fst" + (Prims.of_int (354)) + (Prims.of_int (2)) + (Prims.of_int (356)) + (Prims.of_int (51))) + (Prims.mk_range + "FStar.Tactics.CanonCommMonoidSimple.Equiv.fst" + (Prims.of_int (360)) + (Prims.of_int (2)) + (Prims.of_int (370)) + (Prims.of_int (52))) + (Obj.magic + (FStar_Tactics_Derived.change_sq + (FStar_Reflection_Builtins.pack_ln + (FStar_Reflection_Data.Tv_App + ((FStar_Reflection_Builtins.pack_ln + (FStar_Reflection_Data.Tv_App + ((FStar_Reflection_Builtins.pack_ln + (FStar_Reflection_Data.Tv_App + ((FStar_Reflection_Builtins.pack_ln + (FStar_Reflection_Data.Tv_FVar + (FStar_Reflection_Builtins.pack_fv + ["FStar"; + "Algebra"; + "CommMonoid"; + "Equiv"; + "__proj__EQ__item__eq"]))), + (eq, + FStar_Reflection_Data.Q_Explicit)))), + ((FStar_Reflection_Builtins.pack_ln + (FStar_Reflection_Data.Tv_App + ((FStar_Reflection_Builtins.pack_ln + (FStar_Reflection_Data.Tv_App + ((FStar_Reflection_Builtins.pack_ln + (FStar_Reflection_Data.Tv_App + ((FStar_Reflection_Builtins.pack_ln + (FStar_Reflection_Data.Tv_App + ((FStar_Reflection_Builtins.pack_ln + (FStar_Reflection_Data.Tv_FVar + (FStar_Reflection_Builtins.pack_fv + ["FStar"; + "Tactics"; + "CanonCommMonoidSimple"; + "Equiv"; + "mdenote"]))), + (eq, + FStar_Reflection_Data.Q_Explicit)))), + (m, + FStar_Reflection_Data.Q_Explicit)))), + (am3, + FStar_Reflection_Data.Q_Explicit)))), + (r11, + FStar_Reflection_Data.Q_Explicit)))), + FStar_Reflection_Data.Q_Explicit)))), + ((FStar_Reflection_Builtins.pack_ln + (FStar_Reflection_Data.Tv_App + ((FStar_Reflection_Builtins.pack_ln + (FStar_Reflection_Data.Tv_App + ((FStar_Reflection_Builtins.pack_ln + (FStar_Reflection_Data.Tv_App + ((FStar_Reflection_Builtins.pack_ln + (FStar_Reflection_Data.Tv_App + ((FStar_Reflection_Builtins.pack_ln + (FStar_Reflection_Data.Tv_FVar + (FStar_Reflection_Builtins.pack_fv + ["FStar"; + "Tactics"; + "CanonCommMonoidSimple"; + "Equiv"; + "mdenote"]))), + (eq, + FStar_Reflection_Data.Q_Explicit)))), + (m, + FStar_Reflection_Data.Q_Explicit)))), + (am3, + FStar_Reflection_Data.Q_Explicit)))), + (r21, + FStar_Reflection_Data.Q_Explicit)))), + FStar_Reflection_Data.Q_Explicit)))))) + (fun + uu___3 -> + (fun + uu___3 -> + Obj.magic + (FStar_Tactics_Effect.tac_bind + (Prims.mk_range + "FStar.Tactics.CanonCommMonoidSimple.Equiv.fst" + (Prims.of_int (360)) + (Prims.of_int (2)) + (Prims.of_int (360)) + (Prims.of_int (25))) + (Prims.mk_range + "FStar.Tactics.CanonCommMonoidSimple.Equiv.fst" + (Prims.of_int (362)) + (Prims.of_int (2)) + (Prims.of_int (370)) + (Prims.of_int (52))) + (Obj.magic + (FStar_Tactics_Derived.apply + (FStar_Reflection_Builtins.pack_ln + (FStar_Reflection_Data.Tv_FVar + (FStar_Reflection_Builtins.pack_fv + ["FStar"; + "Tactics"; + "CanonCommMonoidSimple"; + "Equiv"; + "monoid_reflect"]))))) + (fun + uu___4 -> + (fun + uu___4 -> + Obj.magic + (FStar_Tactics_Effect.tac_bind + (Prims.mk_range + "FStar.Tactics.CanonCommMonoidSimple.Equiv.fst" + (Prims.of_int (362)) + (Prims.of_int (2)) + (Prims.of_int (367)) + (Prims.of_int (18))) + (Prims.mk_range + "FStar.Tactics.CanonCommMonoidSimple.Equiv.fst" + (Prims.of_int (369)) + (Prims.of_int (2)) + (Prims.of_int (370)) + (Prims.of_int (52))) + (Obj.magic + (FStar_Tactics_Builtins.norm + [FStar_Pervasives.iota; + FStar_Pervasives.zeta; + FStar_Pervasives.delta_only + ["FStar.Tactics.CanonCommMonoidSimple.Equiv.canon"; + "FStar.Tactics.CanonCommMonoidSimple.Equiv.xsdenote"; + "FStar.Tactics.CanonCommMonoidSimple.Equiv.flatten"; + "FStar.Tactics.CanonCommMonoidSimple.Equiv.sort"; + "FStar.Tactics.CanonCommMonoidSimple.Equiv.select"; + "FStar.List.Tot.Base.assoc"; + "FStar.Pervasives.Native.fst"; + "FStar.Pervasives.Native.__proj__Mktuple2__item___1"; + "FStar.List.Tot.Base.op_At"; + "FStar.List.Tot.Base.append"; + "FStar.List.Tot.Base.sortWith"; + "FStar.List.Tot.Base.partition"; + "FStar.List.Tot.Base.bool_of_compare"; + "FStar.List.Tot.Base.compare_of_bool"]; + FStar_Pervasives.primops])) + (fun + uu___5 -> + (fun + uu___5 -> + Obj.magic + (FStar_Tactics_Derived.or_else + (fun + uu___6 -> + FStar_Tactics_Derived.apply_lemma + (FStar_Reflection_Builtins.pack_ln + (FStar_Reflection_Data.Tv_App + ((FStar_Reflection_Builtins.pack_ln + (FStar_Reflection_Data.Tv_FVar + (FStar_Reflection_Builtins.pack_fv + ["FStar"; + "Algebra"; + "CommMonoid"; + "Equiv"; + "__proj__EQ__item__reflexivity"]))), + (eq, + FStar_Reflection_Data.Q_Explicit))))) + (fun + uu___6 -> + repeat_cong_right_identity + eq m))) + uu___5))) + uu___4))) + uu___3))) + uu___3))) + uu___3))) + uu___3))) + uu___1))) uu___))) + uu___))) uu___) +let (canon_monoid : + FStar_Reflection_Types.term -> + FStar_Reflection_Types.term -> (unit, unit) FStar_Tactics_Effect.tac_repr) + = + fun eq -> + fun m -> + FStar_Tactics_Effect.tac_bind + (Prims.mk_range "FStar.Tactics.CanonCommMonoidSimple.Equiv.fst" + (Prims.of_int (374)) (Prims.of_int (2)) (Prims.of_int (374)) + (Prims.of_int (19))) + (Prims.mk_range "FStar.Tactics.CanonCommMonoidSimple.Equiv.fst" + (Prims.of_int (375)) (Prims.of_int (2)) (Prims.of_int (392)) + (Prims.of_int (68))) + (Obj.magic + (FStar_Tactics_Builtins.norm + [FStar_Pervasives.iota; FStar_Pervasives.zeta])) + (fun uu___ -> + (fun uu___ -> + Obj.magic + (FStar_Tactics_Effect.tac_bind + (Prims.mk_range + "FStar.Tactics.CanonCommMonoidSimple.Equiv.fst" + (Prims.of_int (375)) (Prims.of_int (10)) + (Prims.of_int (375)) (Prims.of_int (21))) + (Prims.mk_range + "FStar.Tactics.CanonCommMonoidSimple.Equiv.fst" + (Prims.of_int (377)) (Prims.of_int (2)) + (Prims.of_int (392)) (Prims.of_int (68))) + (Obj.magic (FStar_Tactics_Derived.cur_goal ())) + (fun uu___1 -> + (fun t -> + Obj.magic + (FStar_Tactics_Effect.tac_bind + (Prims.mk_range + "FStar.Tactics.CanonCommMonoidSimple.Equiv.fst" + (Prims.of_int (377)) (Prims.of_int (19)) + (Prims.of_int (377)) (Prims.of_int (36))) + (Prims.mk_range + "FStar.Tactics.CanonCommMonoidSimple.Equiv.fst" + (Prims.of_int (377)) (Prims.of_int (2)) + (Prims.of_int (392)) (Prims.of_int (68))) + (FStar_Tactics_Effect.lift_div_tac + (fun uu___1 -> + FStar_Reflection_Derived_Lemmas.collect_app_ref + t)) + (fun uu___1 -> + (fun uu___1 -> + match uu___1 with + | (sq, rel_xy) -> + (match rel_xy with + | (rel_xy1, uu___2)::[] -> + Obj.magic + (FStar_Tactics_Effect.tac_bind + (Prims.mk_range + "FStar.Tactics.CanonCommMonoidSimple.Equiv.fst" + (Prims.of_int (381)) + (Prims.of_int (21)) + (Prims.of_int (381)) + (Prims.of_int (43))) + (Prims.mk_range + "FStar.Tactics.CanonCommMonoidSimple.Equiv.fst" + (Prims.of_int (380)) + (Prims.of_int (21)) + (Prims.of_int (391)) + (Prims.of_int (6))) + (FStar_Tactics_Effect.lift_div_tac + (fun uu___3 -> + FStar_Reflection_Derived_Lemmas.collect_app_ref + rel_xy1)) + (fun uu___3 -> + (fun uu___3 -> + match uu___3 with + | (rel, xy) -> + if + (FStar_List_Tot_Base.length + xy) + >= + (Prims.of_int (2)) + then + (match + ((FStar_List_Tot_Base.index + xy + ((FStar_List_Tot_Base.length + xy) - + (Prims.of_int (2)))), + (FStar_List_Tot_Base.index + xy + ((FStar_List_Tot_Base.length + xy) - + Prims.int_one))) + with + | ((lhs, + FStar_Reflection_Data.Q_Explicit), + (rhs, + FStar_Reflection_Data.Q_Explicit)) + -> + Obj.magic + (canon_lhs_rhs + eq m lhs + rhs) + | uu___4 -> + Obj.magic + (FStar_Tactics_Derived.fail + "Goal should have been an application of a binary relation to 2 explicit arguments")) + else + Obj.magic + (FStar_Tactics_Derived.fail + "Goal should have been an application of a binary relation to n implicit and 2 explicit arguments")) + uu___3)) + | uu___2 -> + Obj.magic + (FStar_Tactics_Derived.fail + "Goal should be squash applied to a binary relation"))) + uu___1))) uu___1))) uu___) +let _ = + FStar_Tactics_Native.register_tactic + "FStar.Tactics.CanonCommMonoidSimple.Equiv.canon_monoid" + (Prims.of_int (3)) + (fun psc -> + fun ncb -> + fun args -> + FStar_Tactics_InterpFuns.mk_tactic_interpretation_2 + (FStar_Tactics_Native.from_tactic_2 canon_monoid) + FStar_Reflection_Embeddings.e_term + FStar_Reflection_Embeddings.e_term + FStar_Syntax_Embeddings.e_unit psc ncb args) \ No newline at end of file diff --git a/ocaml/fstar-lib/generated/FStar_Tactics_CanonCommSemiring.ml b/ocaml/fstar-lib/generated/FStar_Tactics_CanonCommSemiring.ml new file mode 100644 index 00000000000..a7843079ede --- /dev/null +++ b/ocaml/fstar-lib/generated/FStar_Tactics_CanonCommSemiring.ml @@ -0,0 +1,2765 @@ +open Prims +let (term_eq : + FStar_Reflection_Types.term -> + FStar_Reflection_Types.term -> + (Prims.bool, unit) FStar_Tactics_Effect.tac_repr) + = FStar_Tactics_Builtins.term_eq_old +type ('a, 'cmuadd, 'cmumult) distribute_left_lemma = unit +type ('a, 'cmuadd, 'cmumult) distribute_right_lemma = unit +type ('a, 'cmuadd, 'cmumult) mult_zero_l_lemma = unit +type ('a, 'cmuadd, 'opp) add_opp_r_lemma = unit +type 'a cr = + | CR of 'a FStar_Algebra_CommMonoid.cm * 'a FStar_Algebra_CommMonoid.cm * + ('a -> 'a) * unit * unit * unit +let uu___is_CR : 'a . 'a cr -> Prims.bool = fun projectee -> true +let __proj__CR__item__cm_add : 'a . 'a cr -> 'a FStar_Algebra_CommMonoid.cm = + fun projectee -> + match projectee with + | CR (cm_add, cm_mult, opp, add_opp, distribute, mult_zero_l) -> cm_add +let __proj__CR__item__cm_mult : 'a . 'a cr -> 'a FStar_Algebra_CommMonoid.cm + = + fun projectee -> + match projectee with + | CR (cm_add, cm_mult, opp, add_opp, distribute, mult_zero_l) -> cm_mult +let __proj__CR__item__opp : 'a . 'a cr -> 'a -> 'a = + fun projectee -> + match projectee with + | CR (cm_add, cm_mult, opp, add_opp, distribute, mult_zero_l) -> opp + + + + +let norm_fully : 'a . 'a -> 'a = fun x -> x +type index = Prims.nat +type varlist = + | Nil_var + | Cons_var of index * varlist +let (uu___is_Nil_var : varlist -> Prims.bool) = + fun projectee -> match projectee with | Nil_var -> true | uu___ -> false +let (uu___is_Cons_var : varlist -> Prims.bool) = + fun projectee -> + match projectee with | Cons_var (_0, _1) -> true | uu___ -> false +let (__proj__Cons_var__item___0 : varlist -> index) = + fun projectee -> match projectee with | Cons_var (_0, _1) -> _0 +let (__proj__Cons_var__item___1 : varlist -> varlist) = + fun projectee -> match projectee with | Cons_var (_0, _1) -> _1 +type 'a canonical_sum = + | Nil_monom + | Cons_monom of 'a * varlist * 'a canonical_sum + | Cons_varlist of varlist * 'a canonical_sum +let uu___is_Nil_monom : 'a . 'a canonical_sum -> Prims.bool = + fun projectee -> match projectee with | Nil_monom -> true | uu___ -> false +let uu___is_Cons_monom : 'a . 'a canonical_sum -> Prims.bool = + fun projectee -> + match projectee with | Cons_monom (_0, _1, _2) -> true | uu___ -> false +let __proj__Cons_monom__item___0 : 'a . 'a canonical_sum -> 'a = + fun projectee -> match projectee with | Cons_monom (_0, _1, _2) -> _0 +let __proj__Cons_monom__item___1 : 'a . 'a canonical_sum -> varlist = + fun projectee -> match projectee with | Cons_monom (_0, _1, _2) -> _1 +let __proj__Cons_monom__item___2 : 'a . 'a canonical_sum -> 'a canonical_sum + = fun projectee -> match projectee with | Cons_monom (_0, _1, _2) -> _2 +let uu___is_Cons_varlist : 'a . 'a canonical_sum -> Prims.bool = + fun projectee -> + match projectee with | Cons_varlist (_0, _1) -> true | uu___ -> false +let __proj__Cons_varlist__item___0 : 'a . 'a canonical_sum -> varlist = + fun projectee -> match projectee with | Cons_varlist (_0, _1) -> _0 +let __proj__Cons_varlist__item___1 : + 'a . 'a canonical_sum -> 'a canonical_sum = + fun projectee -> match projectee with | Cons_varlist (_0, _1) -> _1 +let rec (varlist_lt : varlist -> varlist -> Prims.bool) = + fun x -> + fun y -> + match (x, y) with + | (Nil_var, Cons_var (uu___, uu___1)) -> true + | (Cons_var (i, xs), Cons_var (j, ys)) -> + if i < j then true else (i = j) && (varlist_lt xs ys) + | (uu___, uu___1) -> false +let rec (varlist_merge : varlist -> varlist -> varlist) = + fun l1 -> + fun l2 -> + match (l1, l2) with + | (uu___, Nil_var) -> l1 + | (Nil_var, uu___) -> l2 + | (Cons_var (v1, t1), Cons_var (v2, t2)) -> vm_aux v1 t1 l2 +and (vm_aux : index -> varlist -> varlist -> varlist) = + fun v1 -> + fun t1 -> + fun l2 -> + match l2 with + | Cons_var (v2, t2) -> + if v1 < v2 + then Cons_var (v1, (varlist_merge t1 l2)) + else Cons_var (v2, (vm_aux v1 t1 t2)) + | uu___ -> Cons_var (v1, t1) +let rec canonical_sum_merge : + 'a . 'a cr -> 'a canonical_sum -> 'a canonical_sum -> 'a canonical_sum = + fun r -> + fun s1 -> + fun s2 -> + let aplus = + FStar_Algebra_CommMonoid.__proj__CM__item__mult + (__proj__CR__item__cm_add r) in + let aone = + FStar_Algebra_CommMonoid.__proj__CM__item__unit + (__proj__CR__item__cm_mult r) in + match s1 with + | Cons_monom (c1, l1, t1) -> csm_aux r c1 l1 t1 s2 + | Cons_varlist (l1, t1) -> csm_aux r aone l1 t1 s2 + | Nil_monom -> s2 +and csm_aux : + 'a . + 'a cr -> + 'a -> + varlist -> 'a canonical_sum -> 'a canonical_sum -> 'a canonical_sum + = + fun r -> + fun c1 -> + fun l1 -> + fun t1 -> + fun s2 -> + let aplus = + FStar_Algebra_CommMonoid.__proj__CM__item__mult + (__proj__CR__item__cm_add r) in + let aone = + FStar_Algebra_CommMonoid.__proj__CM__item__unit + (__proj__CR__item__cm_mult r) in + match s2 with + | Cons_monom (c2, l2, t2) -> + if l1 = l2 + then + Cons_monom + ((aplus c1 c2), l1, (canonical_sum_merge r t1 t2)) + else + if varlist_lt l1 l2 + then Cons_monom (c1, l1, (canonical_sum_merge r t1 s2)) + else Cons_monom (c2, l2, (csm_aux r c1 l1 t1 t2)) + | Cons_varlist (l2, t2) -> + if l1 = l2 + then + Cons_monom + ((aplus c1 aone), l1, (canonical_sum_merge r t1 t2)) + else + if varlist_lt l1 l2 + then Cons_monom (c1, l1, (canonical_sum_merge r t1 s2)) + else Cons_varlist (l2, (csm_aux r c1 l1 t1 t2)) + | Nil_monom -> Cons_monom (c1, l1, t1) +let rec monom_insert : + 'a . 'a cr -> 'a -> varlist -> 'a canonical_sum -> 'a canonical_sum = + fun r -> + fun c1 -> + fun l1 -> + fun s2 -> + let aplus = + FStar_Algebra_CommMonoid.__proj__CM__item__mult + (__proj__CR__item__cm_add r) in + let aone = + FStar_Algebra_CommMonoid.__proj__CM__item__unit + (__proj__CR__item__cm_mult r) in + match s2 with + | Cons_monom (c2, l2, t2) -> + if l1 = l2 + then Cons_monom ((aplus c1 c2), l1, t2) + else + if varlist_lt l1 l2 + then Cons_monom (c1, l1, s2) + else Cons_monom (c2, l2, (monom_insert r c1 l1 t2)) + | Cons_varlist (l2, t2) -> + if l1 = l2 + then Cons_monom ((aplus c1 aone), l1, t2) + else + if varlist_lt l1 l2 + then Cons_monom (c1, l1, s2) + else Cons_varlist (l2, (monom_insert r c1 l1 t2)) + | Nil_monom -> + if c1 = aone + then Cons_varlist (l1, Nil_monom) + else Cons_monom (c1, l1, Nil_monom) +let varlist_insert : + 'a . 'a cr -> varlist -> 'a canonical_sum -> 'a canonical_sum = + fun r -> + fun l1 -> + fun s2 -> + let aone = + FStar_Algebra_CommMonoid.__proj__CM__item__unit + (__proj__CR__item__cm_mult r) in + monom_insert r aone l1 s2 +let rec canonical_sum_scalar : + 'a . 'a cr -> 'a -> 'a canonical_sum -> 'a canonical_sum = + fun r -> + fun c0 -> + fun s -> + let amult = + FStar_Algebra_CommMonoid.__proj__CM__item__mult + (__proj__CR__item__cm_mult r) in + match s with + | Cons_monom (c, l, t) -> + Cons_monom ((amult c0 c), l, (canonical_sum_scalar r c0 t)) + | Cons_varlist (l, t) -> + Cons_monom (c0, l, (canonical_sum_scalar r c0 t)) + | Nil_monom -> Nil_monom +let rec canonical_sum_scalar2 : + 'a . 'a cr -> varlist -> 'a canonical_sum -> 'a canonical_sum = + fun r -> + fun l0 -> + fun s -> + match s with + | Cons_monom (c, l, t) -> + monom_insert r c (varlist_merge l0 l) + (canonical_sum_scalar2 r l0 t) + | Cons_varlist (l, t) -> + varlist_insert r (varlist_merge l0 l) + (canonical_sum_scalar2 r l0 t) + | Nil_monom -> Nil_monom +let rec canonical_sum_scalar3 : + 'a . 'a cr -> 'a -> varlist -> 'a canonical_sum -> 'a canonical_sum = + fun r -> + fun c0 -> + fun l0 -> + fun s -> + let amult = + FStar_Algebra_CommMonoid.__proj__CM__item__mult + (__proj__CR__item__cm_mult r) in + match s with + | Cons_monom (c, l, t) -> + monom_insert r (amult c0 c) (varlist_merge l0 l) + (canonical_sum_scalar3 r c0 l0 t) + | Cons_varlist (l, t) -> + monom_insert r c0 (varlist_merge l0 l) + (canonical_sum_scalar3 r c0 l0 t) + | Nil_monom -> s +let rec canonical_sum_prod : + 'a . 'a cr -> 'a canonical_sum -> 'a canonical_sum -> 'a canonical_sum = + fun r -> + fun s1 -> + fun s2 -> + match s1 with + | Cons_monom (c1, l1, t1) -> + canonical_sum_merge r (canonical_sum_scalar3 r c1 l1 s2) + (canonical_sum_prod r t1 s2) + | Cons_varlist (l1, t1) -> + canonical_sum_merge r (canonical_sum_scalar2 r l1 s2) + (canonical_sum_prod r t1 s2) + | Nil_monom -> s1 +type 'a spolynomial = + | SPvar of index + | SPconst of 'a + | SPplus of 'a spolynomial * 'a spolynomial + | SPmult of 'a spolynomial * 'a spolynomial +let uu___is_SPvar : 'a . 'a spolynomial -> Prims.bool = + fun projectee -> match projectee with | SPvar _0 -> true | uu___ -> false +let __proj__SPvar__item___0 : 'a . 'a spolynomial -> index = + fun projectee -> match projectee with | SPvar _0 -> _0 +let uu___is_SPconst : 'a . 'a spolynomial -> Prims.bool = + fun projectee -> match projectee with | SPconst _0 -> true | uu___ -> false +let __proj__SPconst__item___0 : 'a . 'a spolynomial -> 'a = + fun projectee -> match projectee with | SPconst _0 -> _0 +let uu___is_SPplus : 'a . 'a spolynomial -> Prims.bool = + fun projectee -> + match projectee with | SPplus (_0, _1) -> true | uu___ -> false +let __proj__SPplus__item___0 : 'a . 'a spolynomial -> 'a spolynomial = + fun projectee -> match projectee with | SPplus (_0, _1) -> _0 +let __proj__SPplus__item___1 : 'a . 'a spolynomial -> 'a spolynomial = + fun projectee -> match projectee with | SPplus (_0, _1) -> _1 +let uu___is_SPmult : 'a . 'a spolynomial -> Prims.bool = + fun projectee -> + match projectee with | SPmult (_0, _1) -> true | uu___ -> false +let __proj__SPmult__item___0 : 'a . 'a spolynomial -> 'a spolynomial = + fun projectee -> match projectee with | SPmult (_0, _1) -> _0 +let __proj__SPmult__item___1 : 'a . 'a spolynomial -> 'a spolynomial = + fun projectee -> match projectee with | SPmult (_0, _1) -> _1 +let rec spolynomial_normalize : + 'a . 'a cr -> 'a spolynomial -> 'a canonical_sum = + fun r -> + fun p -> + match p with + | SPvar i -> Cons_varlist ((Cons_var (i, Nil_var)), Nil_monom) + | SPconst c -> Cons_monom (c, Nil_var, Nil_monom) + | SPplus (l, q) -> + canonical_sum_merge r (spolynomial_normalize r l) + (spolynomial_normalize r q) + | SPmult (l, q) -> + canonical_sum_prod r (spolynomial_normalize r l) + (spolynomial_normalize r q) +let rec canonical_sum_simplify : + 'a . 'a cr -> 'a canonical_sum -> 'a canonical_sum = + fun r -> + fun s -> + let azero = + FStar_Algebra_CommMonoid.__proj__CM__item__unit + (__proj__CR__item__cm_add r) in + let aone = + FStar_Algebra_CommMonoid.__proj__CM__item__unit + (__proj__CR__item__cm_mult r) in + let aplus = + FStar_Algebra_CommMonoid.__proj__CM__item__mult + (__proj__CR__item__cm_add r) in + match s with + | Cons_monom (c, l, t) -> + if c = azero + then canonical_sum_simplify r t + else + if c = aone + then Cons_varlist (l, (canonical_sum_simplify r t)) + else Cons_monom (c, l, (canonical_sum_simplify r t)) + | Cons_varlist (l, t) -> Cons_varlist (l, (canonical_sum_simplify r t)) + | Nil_monom -> s +let spolynomial_simplify : 'a . 'a cr -> 'a spolynomial -> 'a canonical_sum = + fun r -> fun p -> canonical_sum_simplify r (spolynomial_normalize r p) +type 'a vmap = ((FStar_Reflection_Data.var * 'a) Prims.list * 'a) +let update : 'a . FStar_Reflection_Data.var -> 'a -> 'a vmap -> 'a vmap = + fun x -> + fun xa -> + fun vm -> + let uu___ = vm in match uu___ with | (l, y) -> (((x, xa) :: l), y) +let rec quote_list : + 'a . + FStar_Reflection_Types.term -> + ('a -> + (FStar_Reflection_Types.term, unit) FStar_Tactics_Effect.tac_repr) + -> + 'a Prims.list -> + (FStar_Reflection_Types.term, unit) FStar_Tactics_Effect.tac_repr + = + fun uu___2 -> + fun uu___1 -> + fun uu___ -> + (fun ta -> + fun quotea -> + fun xs -> + match xs with + | [] -> + Obj.magic + (Obj.repr + (FStar_Tactics_Effect.lift_div_tac + (fun uu___ -> + FStar_Reflection_Derived.mk_app + (FStar_Reflection_Builtins.pack_ln + (FStar_Reflection_Data.Tv_FVar + (FStar_Reflection_Builtins.pack_fv + ["Prims"; "Nil"]))) + [(ta, FStar_Reflection_Data.Q_Implicit)]))) + | x::xs' -> + Obj.magic + (Obj.repr + (FStar_Tactics_Effect.tac_bind + (Prims.mk_range + "FStar.Tactics.CanonCommSemiring.fst" + (Prims.of_int (382)) (Prims.of_int (29)) + (Prims.of_int (384)) (Prims.of_int (68))) + (Prims.mk_range + "FStar.Tactics.CanonCommSemiring.fst" + (Prims.of_int (382)) (Prims.of_int (14)) + (Prims.of_int (384)) (Prims.of_int (68))) + (Obj.magic + (FStar_Tactics_Effect.tac_bind + (Prims.mk_range + "FStar.Tactics.CanonCommSemiring.fst" + (Prims.of_int (382)) (Prims.of_int (29)) + (Prims.of_int (384)) (Prims.of_int (68))) + (Prims.mk_range + "FStar.Tactics.CanonCommSemiring.fst" + (Prims.of_int (382)) (Prims.of_int (29)) + (Prims.of_int (384)) (Prims.of_int (68))) + (Obj.magic + (FStar_Tactics_Effect.tac_bind + (Prims.mk_range + "FStar.Tactics.CanonCommSemiring.fst" + (Prims.of_int (383)) + (Prims.of_int (29)) + (Prims.of_int (383)) + (Prims.of_int (51))) + (Prims.mk_range + "FStar.Tactics.CanonCommSemiring.fst" + (Prims.of_int (382)) + (Prims.of_int (29)) + (Prims.of_int (384)) + (Prims.of_int (68))) + (Obj.magic + (FStar_Tactics_Effect.tac_bind + (Prims.mk_range + "FStar.Tactics.CanonCommSemiring.fst" + (Prims.of_int (383)) + (Prims.of_int (30)) + (Prims.of_int (383)) + (Prims.of_int (38))) + (Prims.mk_range + "FStar.Tactics.CanonCommSemiring.fst" + (Prims.of_int (383)) + (Prims.of_int (29)) + (Prims.of_int (383)) + (Prims.of_int (51))) + (Obj.magic (quotea x)) + (fun uu___ -> + FStar_Tactics_Effect.lift_div_tac + (fun uu___1 -> + (uu___, + FStar_Reflection_Data.Q_Explicit))))) + (fun uu___ -> + (fun uu___ -> + Obj.magic + (FStar_Tactics_Effect.tac_bind + (Prims.mk_range + "FStar.Tactics.CanonCommSemiring.fst" + (Prims.of_int (382)) + (Prims.of_int (29)) + (Prims.of_int (384)) + (Prims.of_int (68))) + (Prims.mk_range + "FStar.Tactics.CanonCommSemiring.fst" + (Prims.of_int (382)) + (Prims.of_int (29)) + (Prims.of_int (384)) + (Prims.of_int (68))) + (Obj.magic + (FStar_Tactics_Effect.tac_bind + (Prims.mk_range + "FStar.Tactics.CanonCommSemiring.fst" + (Prims.of_int (384)) + (Prims.of_int (29)) + (Prims.of_int (384)) + (Prims.of_int (67))) + (Prims.mk_range + "FStar.Tactics.CanonCommSemiring.fst" + (Prims.of_int (382)) + (Prims.of_int (29)) + (Prims.of_int (384)) + (Prims.of_int (68))) + (Obj.magic + (FStar_Tactics_Effect.tac_bind + (Prims.mk_range + "FStar.Tactics.CanonCommSemiring.fst" + (Prims.of_int (384)) + (Prims.of_int (30)) + (Prims.of_int (384)) + (Prims.of_int (54))) + (Prims.mk_range + "FStar.Tactics.CanonCommSemiring.fst" + (Prims.of_int (384)) + (Prims.of_int (29)) + (Prims.of_int (384)) + (Prims.of_int (67))) + (Obj.magic + (quote_list + ta quotea + xs')) + (fun uu___1 -> + FStar_Tactics_Effect.lift_div_tac + (fun + uu___2 -> + (uu___1, + FStar_Reflection_Data.Q_Explicit))))) + (fun uu___1 -> + FStar_Tactics_Effect.lift_div_tac + (fun uu___2 -> + [uu___1])))) + (fun uu___1 -> + FStar_Tactics_Effect.lift_div_tac + (fun uu___2 -> uu___ + :: uu___1)))) uu___))) + (fun uu___ -> + FStar_Tactics_Effect.lift_div_tac + (fun uu___1 -> + (ta, + FStar_Reflection_Data.Q_Implicit) + :: uu___)))) + (fun uu___ -> + FStar_Tactics_Effect.lift_div_tac + (fun uu___1 -> + FStar_Reflection_Derived.mk_app + (FStar_Reflection_Builtins.pack_ln + (FStar_Reflection_Data.Tv_FVar + (FStar_Reflection_Builtins.pack_fv + ["Prims"; "Cons"]))) uu___))))) + uu___2 uu___1 uu___ +let quote_vm : + 'a . + FStar_Reflection_Types.term -> + ('a -> + (FStar_Reflection_Types.term, unit) FStar_Tactics_Effect.tac_repr) + -> + 'a vmap -> + (FStar_Reflection_Types.term, unit) FStar_Tactics_Effect.tac_repr + = + fun ta -> + fun quotea -> + fun vm -> + FStar_Tactics_Effect.tac_bind + (Prims.mk_range "FStar.Tactics.CanonCommSemiring.fst" + (Prims.of_int (389)) (Prims.of_int (4)) (Prims.of_int (391)) + (Prims.of_int (35))) + (Prims.mk_range "FStar.Tactics.CanonCommSemiring.fst" + (Prims.of_int (392)) (Prims.of_int (2)) (Prims.of_int (396)) + (Prims.of_int (73))) + (FStar_Tactics_Effect.lift_div_tac + (fun uu___ -> + fun p -> + FStar_Tactics_Effect.tac_bind + (Prims.mk_range "FStar.Tactics.CanonCommSemiring.fst" + (Prims.of_int (389)) (Prims.of_int (23)) + (Prims.of_int (391)) (Prims.of_int (35))) + (Prims.mk_range "FStar.Tactics.CanonCommSemiring.fst" + (Prims.of_int (389)) (Prims.of_int (4)) + (Prims.of_int (391)) (Prims.of_int (35))) + (Obj.magic + (FStar_Tactics_Effect.tac_bind + (Prims.mk_range + "FStar.Tactics.CanonCommSemiring.fst" + (Prims.of_int (389)) (Prims.of_int (23)) + (Prims.of_int (391)) (Prims.of_int (35))) + (Prims.mk_range + "FStar.Tactics.CanonCommSemiring.fst" + (Prims.of_int (389)) (Prims.of_int (23)) + (Prims.of_int (391)) (Prims.of_int (35))) + (Obj.magic + (FStar_Tactics_Effect.tac_bind + (Prims.mk_range + "FStar.Tactics.CanonCommSemiring.fst" + (Prims.of_int (389)) (Prims.of_int (23)) + (Prims.of_int (391)) (Prims.of_int (35))) + (Prims.mk_range + "FStar.Tactics.CanonCommSemiring.fst" + (Prims.of_int (389)) (Prims.of_int (23)) + (Prims.of_int (391)) (Prims.of_int (35))) + (Obj.magic + (FStar_Tactics_Effect.tac_bind + (Prims.mk_range + "FStar.Tactics.CanonCommSemiring.fst" + (Prims.of_int (390)) + (Prims.of_int (6)) + (Prims.of_int (390)) + (Prims.of_int (51))) + (Prims.mk_range + "FStar.Tactics.CanonCommSemiring.fst" + (Prims.of_int (389)) + (Prims.of_int (23)) + (Prims.of_int (391)) + (Prims.of_int (35))) + (Obj.magic + (FStar_Tactics_Effect.tac_bind + (Prims.mk_range + "FStar.Tactics.CanonCommSemiring.fst" + (Prims.of_int (390)) + (Prims.of_int (7)) + (Prims.of_int (390)) + (Prims.of_int (38))) + (Prims.mk_range + "FStar.Tactics.CanonCommSemiring.fst" + (Prims.of_int (390)) + (Prims.of_int (6)) + (Prims.of_int (390)) + (Prims.of_int (51))) + (Obj.magic + (FStar_Tactics_Builtins.pack + (FStar_Reflection_Data.Tv_Const + (FStar_Reflection_Data.C_Int + (FStar_Pervasives_Native.fst + p))))) + (fun uu___1 -> + FStar_Tactics_Effect.lift_div_tac + (fun uu___2 -> + (uu___1, + FStar_Reflection_Data.Q_Explicit))))) + (fun uu___1 -> + (fun uu___1 -> + Obj.magic + (FStar_Tactics_Effect.tac_bind + (Prims.mk_range + "FStar.Tactics.CanonCommSemiring.fst" + (Prims.of_int (389)) + (Prims.of_int (23)) + (Prims.of_int (391)) + (Prims.of_int (35))) + (Prims.mk_range + "FStar.Tactics.CanonCommSemiring.fst" + (Prims.of_int (389)) + (Prims.of_int (23)) + (Prims.of_int (391)) + (Prims.of_int (35))) + (Obj.magic + (FStar_Tactics_Effect.tac_bind + (Prims.mk_range + "FStar.Tactics.CanonCommSemiring.fst" + (Prims.of_int (391)) + (Prims.of_int (6)) + (Prims.of_int (391)) + (Prims.of_int (34))) + (Prims.mk_range + "FStar.Tactics.CanonCommSemiring.fst" + (Prims.of_int (389)) + (Prims.of_int (23)) + (Prims.of_int (391)) + (Prims.of_int (35))) + (Obj.magic + (FStar_Tactics_Effect.tac_bind + (Prims.mk_range + "FStar.Tactics.CanonCommSemiring.fst" + (Prims.of_int (391)) + (Prims.of_int (7)) + (Prims.of_int (391)) + (Prims.of_int (21))) + (Prims.mk_range + "FStar.Tactics.CanonCommSemiring.fst" + (Prims.of_int (391)) + (Prims.of_int (6)) + (Prims.of_int (391)) + (Prims.of_int (34))) + (Obj.magic + (quotea + (FStar_Pervasives_Native.snd + p))) + (fun uu___2 -> + FStar_Tactics_Effect.lift_div_tac + (fun uu___3 + -> + (uu___2, + FStar_Reflection_Data.Q_Explicit))))) + (fun uu___2 -> + FStar_Tactics_Effect.lift_div_tac + (fun uu___3 -> + [uu___2])))) + (fun uu___2 -> + FStar_Tactics_Effect.lift_div_tac + (fun uu___3 -> uu___1 + :: uu___2)))) uu___1))) + (fun uu___1 -> + FStar_Tactics_Effect.lift_div_tac + (fun uu___2 -> + (ta, + FStar_Reflection_Data.Q_Implicit) + :: uu___1)))) + (fun uu___1 -> + FStar_Tactics_Effect.lift_div_tac + (fun uu___2 -> + ((FStar_Reflection_Builtins.pack_ln + (FStar_Reflection_Data.Tv_FVar + (FStar_Reflection_Builtins.pack_fv + ["Prims"; "nat"]))), + FStar_Reflection_Data.Q_Implicit) + :: uu___1)))) + (fun uu___1 -> + FStar_Tactics_Effect.lift_div_tac + (fun uu___2 -> + FStar_Reflection_Derived.mk_app + (FStar_Reflection_Builtins.pack_ln + (FStar_Reflection_Data.Tv_FVar + (FStar_Reflection_Builtins.pack_fv + ["FStar"; + "Pervasives"; + "Native"; + "Mktuple2"]))) uu___1)))) + (fun uu___ -> + (fun quote_map_entry -> + Obj.magic + (FStar_Tactics_Effect.tac_bind + (Prims.mk_range "FStar.Tactics.CanonCommSemiring.fst" + (Prims.of_int (392)) (Prims.of_int (16)) + (Prims.of_int (392)) (Prims.of_int (47))) + (Prims.mk_range "FStar.Tactics.CanonCommSemiring.fst" + (Prims.of_int (393)) (Prims.of_int (2)) + (Prims.of_int (396)) (Prims.of_int (73))) + (FStar_Tactics_Effect.lift_div_tac + (fun uu___ -> + FStar_Reflection_Derived.mk_e_app + (FStar_Reflection_Builtins.pack_ln + (FStar_Reflection_Data.Tv_FVar + (FStar_Reflection_Builtins.pack_fv + ["FStar"; + "Pervasives"; + "Native"; + "tuple2"]))) + [FStar_Reflection_Builtins.pack_ln + (FStar_Reflection_Data.Tv_FVar + (FStar_Reflection_Builtins.pack_fv + ["Prims"; "nat"])); + ta])) + (fun uu___ -> + (fun tyentry -> + Obj.magic + (FStar_Tactics_Effect.tac_bind + (Prims.mk_range + "FStar.Tactics.CanonCommSemiring.fst" + (Prims.of_int (393)) (Prims.of_int (14)) + (Prims.of_int (393)) (Prims.of_int (57))) + (Prims.mk_range + "FStar.Tactics.CanonCommSemiring.fst" + (Prims.of_int (394)) (Prims.of_int (2)) + (Prims.of_int (396)) (Prims.of_int (73))) + (Obj.magic + (quote_list tyentry quote_map_entry + (FStar_Pervasives_Native.fst vm))) + (fun uu___ -> + (fun tlist -> + Obj.magic + (FStar_Tactics_Effect.tac_bind + (Prims.mk_range + "FStar.Tactics.CanonCommSemiring.fst" + (Prims.of_int (394)) + (Prims.of_int (15)) + (Prims.of_int (394)) + (Prims.of_int (41))) + (Prims.mk_range + "FStar.Tactics.CanonCommSemiring.fst" + (Prims.of_int (395)) + (Prims.of_int (2)) + (Prims.of_int (396)) + (Prims.of_int (73))) + (FStar_Tactics_Effect.lift_div_tac + (fun uu___ -> + FStar_Reflection_Derived.mk_e_app + (FStar_Reflection_Builtins.pack_ln + (FStar_Reflection_Data.Tv_FVar + (FStar_Reflection_Builtins.pack_fv + ["Prims"; "list"]))) + [tyentry])) + (fun uu___ -> + (fun tylist -> + Obj.magic + (FStar_Tactics_Effect.tac_bind + (Prims.mk_range + "FStar.Tactics.CanonCommSemiring.fst" + (Prims.of_int (395)) + (Prims.of_int (21)) + (Prims.of_int (396)) + (Prims.of_int (73))) + (Prims.mk_range + "FStar.Tactics.CanonCommSemiring.fst" + (Prims.of_int (395)) + (Prims.of_int (2)) + (Prims.of_int (396)) + (Prims.of_int (73))) + (Obj.magic + (FStar_Tactics_Effect.tac_bind + (Prims.mk_range + "FStar.Tactics.CanonCommSemiring.fst" + (Prims.of_int (395)) + (Prims.of_int (21)) + (Prims.of_int (396)) + (Prims.of_int (73))) + (Prims.mk_range + "FStar.Tactics.CanonCommSemiring.fst" + (Prims.of_int (395)) + (Prims.of_int (21)) + (Prims.of_int (396)) + (Prims.of_int (73))) + (Obj.magic + (FStar_Tactics_Effect.tac_bind + (Prims.mk_range + "FStar.Tactics.CanonCommSemiring.fst" + (Prims.of_int (395)) + (Prims.of_int (21)) + (Prims.of_int (396)) + (Prims.of_int (73))) + (Prims.mk_range + "FStar.Tactics.CanonCommSemiring.fst" + (Prims.of_int (395)) + (Prims.of_int (21)) + (Prims.of_int (396)) + (Prims.of_int (73))) + (Obj.magic + (FStar_Tactics_Effect.tac_bind + (Prims.mk_range + "FStar.Tactics.CanonCommSemiring.fst" + (Prims.of_int (395)) + (Prims.of_int (21)) + (Prims.of_int (396)) + (Prims.of_int (73))) + (Prims.mk_range + "FStar.Tactics.CanonCommSemiring.fst" + (Prims.of_int (395)) + (Prims.of_int (21)) + (Prims.of_int (396)) + (Prims.of_int (73))) + (Obj.magic + (FStar_Tactics_Effect.tac_bind + (Prims.mk_range + "FStar.Tactics.CanonCommSemiring.fst" + (Prims.of_int (396)) + (Prims.of_int (43)) + (Prims.of_int (396)) + (Prims.of_int (72))) + (Prims.mk_range + "FStar.Tactics.CanonCommSemiring.fst" + (Prims.of_int (395)) + (Prims.of_int (21)) + (Prims.of_int (396)) + (Prims.of_int (73))) + (Obj.magic + (FStar_Tactics_Effect.tac_bind + (Prims.mk_range + "FStar.Tactics.CanonCommSemiring.fst" + (Prims.of_int (396)) + (Prims.of_int (44)) + (Prims.of_int (396)) + (Prims.of_int (59))) + (Prims.mk_range + "FStar.Tactics.CanonCommSemiring.fst" + (Prims.of_int (396)) + (Prims.of_int (43)) + (Prims.of_int (396)) + (Prims.of_int (72))) + (Obj.magic + (quotea + (FStar_Pervasives_Native.snd + vm))) + (fun + uu___ -> + FStar_Tactics_Effect.lift_div_tac + (fun + uu___1 -> + (uu___, + FStar_Reflection_Data.Q_Explicit))))) + (fun + uu___ -> + FStar_Tactics_Effect.lift_div_tac + (fun + uu___1 -> + [uu___])))) + (fun + uu___ -> + FStar_Tactics_Effect.lift_div_tac + (fun + uu___1 -> + (tlist, + FStar_Reflection_Data.Q_Explicit) + :: uu___)))) + (fun uu___ + -> + FStar_Tactics_Effect.lift_div_tac + (fun + uu___1 -> + (ta, + FStar_Reflection_Data.Q_Implicit) + :: uu___)))) + (fun uu___ -> + FStar_Tactics_Effect.lift_div_tac + (fun uu___1 + -> + (tylist, + FStar_Reflection_Data.Q_Implicit) + :: uu___)))) + (fun uu___ -> + FStar_Tactics_Effect.lift_div_tac + (fun uu___1 -> + FStar_Reflection_Derived.mk_app + (FStar_Reflection_Builtins.pack_ln + (FStar_Reflection_Data.Tv_FVar + (FStar_Reflection_Builtins.pack_fv + ["FStar"; + "Pervasives"; + "Native"; + "Mktuple2"]))) + uu___)))) + uu___))) uu___))) uu___))) + uu___) +let interp_var : 'a . 'a vmap -> index -> 'a = + fun vm -> + fun i -> + match FStar_List_Tot_Base.assoc i (FStar_Pervasives_Native.fst vm) with + | FStar_Pervasives_Native.Some x -> x + | uu___ -> FStar_Pervasives_Native.snd vm +let rec ivl_aux : 'a . 'a cr -> 'a vmap -> index -> varlist -> 'a = + fun r -> + fun vm -> + fun x -> + fun t -> + let amult = + FStar_Algebra_CommMonoid.__proj__CM__item__mult + (__proj__CR__item__cm_mult r) in + match t with + | Nil_var -> interp_var vm x + | Cons_var (x', t') -> amult (interp_var vm x) (ivl_aux r vm x' t') +let interp_vl : 'a . 'a cr -> 'a vmap -> varlist -> 'a = + fun r -> + fun vm -> + fun l -> + let aone = + FStar_Algebra_CommMonoid.__proj__CM__item__unit + (__proj__CR__item__cm_mult r) in + match l with | Nil_var -> aone | Cons_var (x, t) -> ivl_aux r vm x t +let interp_m : 'a . 'a cr -> 'a vmap -> 'a -> varlist -> 'a = + fun r -> + fun vm -> + fun c -> + fun l -> + let amult = + FStar_Algebra_CommMonoid.__proj__CM__item__mult + (__proj__CR__item__cm_mult r) in + match l with + | Nil_var -> c + | Cons_var (x, t) -> amult c (ivl_aux r vm x t) +let rec ics_aux : 'a . 'a cr -> 'a vmap -> 'a -> 'a canonical_sum -> 'a = + fun r -> + fun vm -> + fun x -> + fun s -> + let aplus = + FStar_Algebra_CommMonoid.__proj__CM__item__mult + (__proj__CR__item__cm_add r) in + match s with + | Nil_monom -> x + | Cons_varlist (l, t) -> + aplus x (ics_aux r vm (interp_vl r vm l) t) + | Cons_monom (c, l, t) -> + aplus x (ics_aux r vm (interp_m r vm c l) t) +let interp_cs : 'a . 'a cr -> 'a vmap -> 'a canonical_sum -> 'a = + fun r -> + fun vm -> + fun s -> + let azero = + FStar_Algebra_CommMonoid.__proj__CM__item__unit + (__proj__CR__item__cm_add r) in + match s with + | Nil_monom -> azero + | Cons_varlist (l, t) -> ics_aux r vm (interp_vl r vm l) t + | Cons_monom (c, l, t) -> ics_aux r vm (interp_m r vm c l) t +let rec interp_sp : 'a . 'a cr -> 'a vmap -> 'a spolynomial -> 'a = + fun r -> + fun vm -> + fun p -> + let aplus = + FStar_Algebra_CommMonoid.__proj__CM__item__mult + (__proj__CR__item__cm_add r) in + let amult = + FStar_Algebra_CommMonoid.__proj__CM__item__mult + (__proj__CR__item__cm_mult r) in + match p with + | SPconst c -> c + | SPvar i -> interp_var vm i + | SPplus (p1, p2) -> aplus (interp_sp r vm p1) (interp_sp r vm p2) + | SPmult (p1, p2) -> amult (interp_sp r vm p1) (interp_sp r vm p2) +type 'a polynomial = + | Pvar of index + | Pconst of 'a + | Pplus of 'a polynomial * 'a polynomial + | Pmult of 'a polynomial * 'a polynomial + | Popp of 'a polynomial +let uu___is_Pvar : 'a . 'a polynomial -> Prims.bool = + fun projectee -> match projectee with | Pvar _0 -> true | uu___ -> false +let __proj__Pvar__item___0 : 'a . 'a polynomial -> index = + fun projectee -> match projectee with | Pvar _0 -> _0 +let uu___is_Pconst : 'a . 'a polynomial -> Prims.bool = + fun projectee -> match projectee with | Pconst _0 -> true | uu___ -> false +let __proj__Pconst__item___0 : 'a . 'a polynomial -> 'a = + fun projectee -> match projectee with | Pconst _0 -> _0 +let uu___is_Pplus : 'a . 'a polynomial -> Prims.bool = + fun projectee -> + match projectee with | Pplus (_0, _1) -> true | uu___ -> false +let __proj__Pplus__item___0 : 'a . 'a polynomial -> 'a polynomial = + fun projectee -> match projectee with | Pplus (_0, _1) -> _0 +let __proj__Pplus__item___1 : 'a . 'a polynomial -> 'a polynomial = + fun projectee -> match projectee with | Pplus (_0, _1) -> _1 +let uu___is_Pmult : 'a . 'a polynomial -> Prims.bool = + fun projectee -> + match projectee with | Pmult (_0, _1) -> true | uu___ -> false +let __proj__Pmult__item___0 : 'a . 'a polynomial -> 'a polynomial = + fun projectee -> match projectee with | Pmult (_0, _1) -> _0 +let __proj__Pmult__item___1 : 'a . 'a polynomial -> 'a polynomial = + fun projectee -> match projectee with | Pmult (_0, _1) -> _1 +let uu___is_Popp : 'a . 'a polynomial -> Prims.bool = + fun projectee -> match projectee with | Popp _0 -> true | uu___ -> false +let __proj__Popp__item___0 : 'a . 'a polynomial -> 'a polynomial = + fun projectee -> match projectee with | Popp _0 -> _0 +let rec polynomial_normalize : + 'a . 'a cr -> 'a polynomial -> 'a canonical_sum = + fun r -> + fun p -> + match p with + | Pvar i -> Cons_varlist ((Cons_var (i, Nil_var)), Nil_monom) + | Pconst c -> Cons_monom (c, Nil_var, Nil_monom) + | Pplus (l, q) -> + canonical_sum_merge r (polynomial_normalize r l) + (polynomial_normalize r q) + | Pmult (l, q) -> + canonical_sum_prod r (polynomial_normalize r l) + (polynomial_normalize r q) + | Popp p1 -> + canonical_sum_scalar3 r + (__proj__CR__item__opp r + (FStar_Algebra_CommMonoid.__proj__CM__item__unit + (__proj__CR__item__cm_mult r))) Nil_var + (polynomial_normalize r p1) +let polynomial_simplify : 'a . 'a cr -> 'a polynomial -> 'a canonical_sum = + fun r -> fun p -> canonical_sum_simplify r (polynomial_normalize r p) +let rec spolynomial_of : 'a . 'a cr -> 'a polynomial -> 'a spolynomial = + fun r -> + fun p -> + match p with + | Pvar i -> SPvar i + | Pconst c -> SPconst c + | Pplus (l, q) -> SPplus ((spolynomial_of r l), (spolynomial_of r q)) + | Pmult (l, q) -> SPmult ((spolynomial_of r l), (spolynomial_of r q)) + | Popp p1 -> + SPmult + ((SPconst + (__proj__CR__item__opp r + (FStar_Algebra_CommMonoid.__proj__CM__item__unit + (__proj__CR__item__cm_mult r)))), + (spolynomial_of r p1)) +let rec interp_p : 'a . 'a cr -> 'a vmap -> 'a polynomial -> 'a = + fun r -> + fun vm -> + fun p -> + let aplus = + FStar_Algebra_CommMonoid.__proj__CM__item__mult + (__proj__CR__item__cm_add r) in + let amult = + FStar_Algebra_CommMonoid.__proj__CM__item__mult + (__proj__CR__item__cm_mult r) in + match p with + | Pconst c -> c + | Pvar i -> interp_var vm i + | Pplus (p1, p2) -> aplus (interp_p r vm p1) (interp_p r vm p2) + | Pmult (p1, p2) -> amult (interp_p r vm p1) (interp_p r vm p2) + | Popp p1 -> __proj__CR__item__opp r (interp_p r vm p1) +let (ddump : Prims.string -> (unit, unit) FStar_Tactics_Effect.tac_repr) = + fun m -> + FStar_Tactics_Effect.tac_bind + (Prims.mk_range "FStar.Tactics.CanonCommSemiring.fst" + (Prims.of_int (1498)) (Prims.of_int (17)) (Prims.of_int (1498)) + (Prims.of_int (29))) + (Prims.mk_range "FStar.Tactics.CanonCommSemiring.fst" + (Prims.of_int (1498)) (Prims.of_int (14)) (Prims.of_int (1498)) + (Prims.of_int (41))) + (Obj.magic (FStar_Tactics_Builtins.debugging ())) + (fun uu___ -> + (fun uu___ -> + if uu___ + then Obj.magic (Obj.repr (FStar_Tactics_Builtins.dump m)) + else + Obj.magic + (Obj.repr + (FStar_Tactics_Effect.lift_div_tac (fun uu___2 -> ())))) + uu___) +let rec (find_aux : + Prims.nat -> + FStar_Reflection_Types.term -> + FStar_Reflection_Types.term Prims.list -> + (Prims.nat FStar_Pervasives_Native.option, unit) + FStar_Tactics_Effect.tac_repr) + = + fun uu___2 -> + fun uu___1 -> + fun uu___ -> + (fun n -> + fun x -> + fun xs -> + match xs with + | [] -> + Obj.magic + (Obj.repr + (FStar_Tactics_Effect.lift_div_tac + (fun uu___ -> FStar_Pervasives_Native.None))) + | x'::xs' -> + Obj.magic + (Obj.repr + (FStar_Tactics_Effect.tac_bind + (Prims.mk_range + "FStar.Tactics.CanonCommSemiring.fst" + (Prims.of_int (1507)) (Prims.of_int (18)) + (Prims.of_int (1507)) (Prims.of_int (30))) + (Prims.mk_range + "FStar.Tactics.CanonCommSemiring.fst" + (Prims.of_int (1507)) (Prims.of_int (15)) + (Prims.of_int (1507)) (Prims.of_int (68))) + (Obj.magic (term_eq x x')) + (fun uu___ -> + (fun uu___ -> + if uu___ + then + Obj.magic + (Obj.repr + (FStar_Tactics_Effect.lift_div_tac + (fun uu___1 -> + FStar_Pervasives_Native.Some n))) + else + Obj.magic + (Obj.repr + (find_aux (n + Prims.int_one) x xs'))) + uu___)))) uu___2 uu___1 uu___ +let (find : + FStar_Reflection_Types.term -> + FStar_Reflection_Types.term Prims.list -> + (Prims.nat FStar_Pervasives_Native.option, unit) + FStar_Tactics_Effect.tac_repr) + = find_aux Prims.int_zero +let make_fvar : + 'a . + FStar_Reflection_Types.term -> + (FStar_Reflection_Types.term -> + ('a, unit) FStar_Tactics_Effect.tac_repr) + -> + FStar_Reflection_Types.term Prims.list -> + 'a vmap -> + (('a polynomial * FStar_Reflection_Types.term Prims.list * 'a + vmap), + unit) FStar_Tactics_Effect.tac_repr + = + fun t -> + fun unquotea -> + fun ts -> + fun vm -> + FStar_Tactics_Effect.tac_bind + (Prims.mk_range "FStar.Tactics.CanonCommSemiring.fst" + (Prims.of_int (1513)) (Prims.of_int (8)) (Prims.of_int (1513)) + (Prims.of_int (17))) + (Prims.mk_range "FStar.Tactics.CanonCommSemiring.fst" + (Prims.of_int (1513)) (Prims.of_int (2)) (Prims.of_int (1518)) + (Prims.of_int (47))) (Obj.magic (find t ts)) + (fun uu___ -> + (fun uu___ -> + match uu___ with + | FStar_Pervasives_Native.Some v -> + Obj.magic + (Obj.repr + (FStar_Tactics_Effect.lift_div_tac + (fun uu___1 -> ((Pvar v), ts, vm)))) + | FStar_Pervasives_Native.None -> + Obj.magic + (Obj.repr + (FStar_Tactics_Effect.tac_bind + (Prims.mk_range + "FStar.Tactics.CanonCommSemiring.fst" + (Prims.of_int (1516)) (Prims.of_int (17)) + (Prims.of_int (1516)) (Prims.of_int (26))) + (Prims.mk_range + "FStar.Tactics.CanonCommSemiring.fst" + (Prims.of_int (1517)) (Prims.of_int (4)) + (Prims.of_int (1518)) (Prims.of_int (47))) + (FStar_Tactics_Effect.lift_div_tac + (fun uu___1 -> FStar_List_Tot_Base.length ts)) + (fun uu___1 -> + (fun vfresh -> + Obj.magic + (FStar_Tactics_Effect.tac_bind + (Prims.mk_range + "FStar.Tactics.CanonCommSemiring.fst" + (Prims.of_int (1517)) + (Prims.of_int (12)) + (Prims.of_int (1517)) + (Prims.of_int (22))) + (Prims.mk_range + "FStar.Tactics.CanonCommSemiring.fst" + (Prims.of_int (1518)) + (Prims.of_int (4)) + (Prims.of_int (1518)) + (Prims.of_int (47))) + (Obj.magic (unquotea t)) + (fun z -> + FStar_Tactics_Effect.lift_div_tac + (fun uu___1 -> + ((Pvar vfresh), + (FStar_List_Tot_Base.op_At + ts [t]), + (update vfresh z vm)))))) + uu___1)))) uu___) +let rec reification_aux : + 'a . + (FStar_Reflection_Types.term -> ('a, unit) FStar_Tactics_Effect.tac_repr) + -> + FStar_Reflection_Types.term Prims.list -> + 'a vmap -> + FStar_Reflection_Types.term -> + FStar_Reflection_Types.term -> + FStar_Reflection_Types.term -> + FStar_Reflection_Types.term -> + FStar_Reflection_Types.term -> + (('a polynomial * FStar_Reflection_Types.term Prims.list + * 'a vmap), + unit) FStar_Tactics_Effect.tac_repr + = + fun unquotea -> + fun ts -> + fun vm -> + fun add -> + fun opp -> + fun mone -> + fun mult -> + fun t -> + FStar_Tactics_Effect.tac_bind + (Prims.mk_range "FStar.Tactics.CanonCommSemiring.fst" + (Prims.of_int (1523)) (Prims.of_int (15)) + (Prims.of_int (1523)) (Prims.of_int (32))) + (Prims.mk_range "FStar.Tactics.CanonCommSemiring.fst" + (Prims.of_int (1523)) (Prims.of_int (2)) + (Prims.of_int (1545)) (Prims.of_int (38))) + (FStar_Tactics_Effect.lift_div_tac + (fun uu___ -> + FStar_Reflection_Derived_Lemmas.collect_app_ref t)) + (fun uu___ -> + (fun uu___ -> + match uu___ with + | (hd, tl) -> + Obj.magic + (FStar_Tactics_Effect.tac_bind + (Prims.mk_range + "FStar.Tactics.CanonCommSemiring.fst" + (Prims.of_int (1524)) + (Prims.of_int (8)) + (Prims.of_int (1524)) + (Prims.of_int (33))) + (Prims.mk_range + "FStar.Tactics.CanonCommSemiring.fst" + (Prims.of_int (1524)) + (Prims.of_int (2)) + (Prims.of_int (1545)) + (Prims.of_int (38))) + (Obj.magic + (FStar_Tactics_Effect.tac_bind + (Prims.mk_range + "FStar.Tactics.CanonCommSemiring.fst" + (Prims.of_int (1524)) + (Prims.of_int (8)) + (Prims.of_int (1524)) + (Prims.of_int (18))) + (Prims.mk_range + "FStar.Tactics.CanonCommSemiring.fst" + (Prims.of_int (1524)) + (Prims.of_int (8)) + (Prims.of_int (1524)) + (Prims.of_int (33))) + (Obj.magic + (FStar_Tactics_Builtins.inspect + hd)) + (fun uu___1 -> + FStar_Tactics_Effect.lift_div_tac + (fun uu___2 -> + (uu___1, + (FStar_List_Tot_Base.list_unref + tl)))))) + (fun uu___1 -> + (fun uu___1 -> + match uu___1 with + | (FStar_Reflection_Data.Tv_FVar fv, + (t1, uu___2)::(t2, uu___3)::[]) + -> + Obj.magic + (FStar_Tactics_Effect.tac_bind + (Prims.mk_range + "FStar.Tactics.CanonCommSemiring.fst" + (Prims.of_int (1530)) + (Prims.of_int (6)) + (Prims.of_int (1532)) + (Prims.of_int (24))) + (Prims.mk_range + "FStar.Tactics.CanonCommSemiring.fst" + (Prims.of_int (1534)) + (Prims.of_int (4)) + (Prims.of_int (1536)) + (Prims.of_int (30))) + (FStar_Tactics_Effect.lift_div_tac + (fun uu___4 -> + fun op -> + FStar_Tactics_Effect.tac_bind + (Prims.mk_range + "FStar.Tactics.CanonCommSemiring.fst" + (Prims.of_int (1530)) + (Prims.of_int (25)) + (Prims.of_int (1530)) + (Prims.of_int (76))) + (Prims.mk_range + "FStar.Tactics.CanonCommSemiring.fst" + (Prims.of_int (1530)) + (Prims.of_int (6)) + (Prims.of_int (1532)) + (Prims.of_int (24))) + (Obj.magic + (reification_aux + unquotea ts + vm add opp + mone mult + t1)) + (fun uu___5 -> + (fun uu___5 -> + match uu___5 + with + | (e1, ts1, + vm1) -> + Obj.magic + (FStar_Tactics_Effect.tac_bind + (Prims.mk_range + "FStar.Tactics.CanonCommSemiring.fst" + (Prims.of_int (1531)) + (Prims.of_int (25)) + (Prims.of_int (1531)) + (Prims.of_int (76))) + (Prims.mk_range + "FStar.Tactics.CanonCommSemiring.fst" + (Prims.of_int (1531)) + (Prims.of_int (6)) + (Prims.of_int (1532)) + (Prims.of_int (24))) + (Obj.magic + (reification_aux + unquotea + ts1 vm1 + add opp + mone mult + t2)) + (fun + uu___6 -> + FStar_Tactics_Effect.lift_div_tac + (fun + uu___7 -> + match uu___6 + with + | + (e2, ts2, + vm2) -> + ((op e1 + e2), ts2, + vm2))))) + uu___5))) + (fun uu___4 -> + (fun binop -> + Obj.magic + (FStar_Tactics_Effect.tac_bind + (Prims.mk_range + "FStar.Tactics.CanonCommSemiring.fst" + (Prims.of_int (1534)) + (Prims.of_int (7)) + (Prims.of_int (1534)) + (Prims.of_int (38))) + (Prims.mk_range + "FStar.Tactics.CanonCommSemiring.fst" + (Prims.of_int (1534)) + (Prims.of_int (4)) + (Prims.of_int (1536)) + (Prims.of_int (30))) + (Obj.magic + (FStar_Tactics_Effect.tac_bind + (Prims.mk_range + "FStar.Tactics.CanonCommSemiring.fst" + (Prims.of_int (1534)) + (Prims.of_int (15)) + (Prims.of_int (1534)) + (Prims.of_int (34))) + (Prims.mk_range + "FStar.Tactics.CanonCommSemiring.fst" + (Prims.of_int (1534)) + (Prims.of_int (7)) + (Prims.of_int (1534)) + (Prims.of_int (38))) + (Obj.magic + (FStar_Tactics_Builtins.pack + (FStar_Reflection_Data.Tv_FVar + fv))) + (fun + uu___4 -> + (fun + uu___4 -> + Obj.magic + (term_eq + uu___4 + add)) + uu___4))) + (fun uu___4 -> + (fun uu___4 + -> + if uu___4 + then + Obj.magic + (binop + (fun + uu___5 -> + fun + uu___6 -> + Pplus + (uu___5, + uu___6))) + else + Obj.magic + (FStar_Tactics_Effect.tac_bind + (Prims.mk_range + "FStar.Tactics.CanonCommSemiring.fst" + (Prims.of_int (1535)) + (Prims.of_int (7)) + (Prims.of_int (1535)) + (Prims.of_int (39))) + (Prims.mk_range + "FStar.Tactics.CanonCommSemiring.fst" + (Prims.of_int (1535)) + (Prims.of_int (4)) + (Prims.of_int (1536)) + (Prims.of_int (30))) + (Obj.magic + (FStar_Tactics_Effect.tac_bind + (Prims.mk_range + "FStar.Tactics.CanonCommSemiring.fst" + (Prims.of_int (1535)) + (Prims.of_int (15)) + (Prims.of_int (1535)) + (Prims.of_int (34))) + (Prims.mk_range + "FStar.Tactics.CanonCommSemiring.fst" + (Prims.of_int (1535)) + (Prims.of_int (7)) + (Prims.of_int (1535)) + (Prims.of_int (39))) + (Obj.magic + (FStar_Tactics_Builtins.pack + (FStar_Reflection_Data.Tv_FVar + fv))) + (fun + uu___6 -> + (fun + uu___6 -> + Obj.magic + (term_eq + uu___6 + mult)) + uu___6))) + (fun + uu___6 -> + (fun + uu___6 -> + if uu___6 + then + Obj.magic + (binop + (fun + uu___7 -> + fun + uu___8 -> + Pmult + (uu___7, + uu___8))) + else + Obj.magic + (make_fvar + t + unquotea + ts vm)) + uu___6))) + uu___4))) + uu___4)) + | (FStar_Reflection_Data.Tv_FVar fv, + (t1, uu___2)::[]) -> + Obj.magic + (FStar_Tactics_Effect.tac_bind + (Prims.mk_range + "FStar.Tactics.CanonCommSemiring.fst" + (Prims.of_int (1539)) + (Prims.of_int (6)) + (Prims.of_int (1540)) + (Prims.of_int (20))) + (Prims.mk_range + "FStar.Tactics.CanonCommSemiring.fst" + (Prims.of_int (1542)) + (Prims.of_int (4)) + (Prims.of_int (1543)) + (Prims.of_int (30))) + (FStar_Tactics_Effect.lift_div_tac + (fun uu___3 -> + fun op -> + FStar_Tactics_Effect.tac_bind + (Prims.mk_range + "FStar.Tactics.CanonCommSemiring.fst" + (Prims.of_int (1539)) + (Prims.of_int (24)) + (Prims.of_int (1539)) + (Prims.of_int (75))) + (Prims.mk_range + "FStar.Tactics.CanonCommSemiring.fst" + (Prims.of_int (1539)) + (Prims.of_int (6)) + (Prims.of_int (1540)) + (Prims.of_int (20))) + (Obj.magic + (reification_aux + unquotea ts + vm add opp + mone mult + t1)) + (fun uu___4 -> + FStar_Tactics_Effect.lift_div_tac + (fun uu___5 + -> + match uu___4 + with + | + (e, ts1, + vm1) -> + ((op e), + ts1, vm1))))) + (fun uu___3 -> + (fun monop -> + Obj.magic + (FStar_Tactics_Effect.tac_bind + (Prims.mk_range + "FStar.Tactics.CanonCommSemiring.fst" + (Prims.of_int (1542)) + (Prims.of_int (7)) + (Prims.of_int (1542)) + (Prims.of_int (38))) + (Prims.mk_range + "FStar.Tactics.CanonCommSemiring.fst" + (Prims.of_int (1542)) + (Prims.of_int (4)) + (Prims.of_int (1543)) + (Prims.of_int (30))) + (Obj.magic + (FStar_Tactics_Effect.tac_bind + (Prims.mk_range + "FStar.Tactics.CanonCommSemiring.fst" + (Prims.of_int (1542)) + (Prims.of_int (15)) + (Prims.of_int (1542)) + (Prims.of_int (34))) + (Prims.mk_range + "FStar.Tactics.CanonCommSemiring.fst" + (Prims.of_int (1542)) + (Prims.of_int (7)) + (Prims.of_int (1542)) + (Prims.of_int (38))) + (Obj.magic + (FStar_Tactics_Builtins.pack + (FStar_Reflection_Data.Tv_FVar + fv))) + (fun + uu___3 -> + (fun + uu___3 -> + Obj.magic + (term_eq + uu___3 + opp)) + uu___3))) + (fun uu___3 -> + (fun uu___3 + -> + if uu___3 + then + Obj.magic + (monop + (fun + uu___4 -> + Popp + uu___4)) + else + Obj.magic + (make_fvar + t + unquotea + ts vm)) + uu___3))) + uu___3)) + | (FStar_Reflection_Data.Tv_Const + uu___2, []) -> + Obj.magic + (FStar_Tactics_Effect.tac_bind + (Prims.mk_range + "FStar.Tactics.CanonCommSemiring.fst" + (Prims.of_int (1544)) + (Prims.of_int (22)) + (Prims.of_int (1544)) + (Prims.of_int (41))) + (Prims.mk_range + "FStar.Tactics.CanonCommSemiring.fst" + (Prims.of_int (1544)) + (Prims.of_int (22)) + (Prims.of_int (1544)) + (Prims.of_int (49))) + (Obj.magic + (FStar_Tactics_Effect.tac_bind + (Prims.mk_range + "FStar.Tactics.CanonCommSemiring.fst" + (Prims.of_int (1544)) + (Prims.of_int (29)) + (Prims.of_int (1544)) + (Prims.of_int (41))) + (Prims.mk_range + "FStar.Tactics.CanonCommSemiring.fst" + (Prims.of_int (1544)) + (Prims.of_int (22)) + (Prims.of_int (1544)) + (Prims.of_int (41))) + (Obj.magic + (unquotea t)) + (fun uu___3 -> + FStar_Tactics_Effect.lift_div_tac + (fun uu___4 -> + Pconst uu___3)))) + (fun uu___3 -> + FStar_Tactics_Effect.lift_div_tac + (fun uu___4 -> + (uu___3, ts, vm)))) + | (uu___2, uu___3) -> + Obj.magic + (make_fvar t unquotea ts vm)) + uu___1))) uu___) +let (steps : FStar_Pervasives.norm_step Prims.list) = + [FStar_Pervasives.primops; + FStar_Pervasives.iota; + FStar_Pervasives.zeta; + FStar_Pervasives.delta_attr ["FStar.Tactics.CanonCommSemiring.canon_attr"]; + FStar_Pervasives.delta_only + ["FStar.Mul.op_Star"; + "FStar.Algebra.CommMonoid.int_plus_cm"; + "FStar.Algebra.CommMonoid.int_multiply_cm"; + "FStar.Algebra.CommMonoid.__proj__CM__item__mult"; + "FStar.Algebra.CommMonoid.__proj__CM__item__unit"; + "FStar.Tactics.CanonCommSemiring.__proj__CR__item__cm_add"; + "FStar.Tactics.CanonCommSemiring.__proj__CR__item__opp"; + "FStar.Tactics.CanonCommSemiring.__proj__CR__item__cm_mult"; + "FStar.List.Tot.Base.assoc"; + "FStar.Pervasives.Native.fst"; + "FStar.Pervasives.Native.snd"; + "FStar.Pervasives.Native.__proj__Mktuple2__item___1"; + "FStar.Pervasives.Native.__proj__Mktuple2__item___2"; + "FStar.List.Tot.Base.op_At"; + "FStar.List.Tot.Base.append"]] +let (canon_norm : unit -> (unit, unit) FStar_Tactics_Effect.tac_repr) = + fun uu___ -> FStar_Tactics_Builtins.norm steps +let reification : + 'a . + (FStar_Reflection_Types.term -> ('a, unit) FStar_Tactics_Effect.tac_repr) + -> + ('a -> + (FStar_Reflection_Types.term, unit) FStar_Tactics_Effect.tac_repr) + -> + FStar_Reflection_Types.term -> + FStar_Reflection_Types.term -> + FStar_Reflection_Types.term -> + FStar_Reflection_Types.term -> + 'a -> + FStar_Reflection_Types.term Prims.list -> + (('a polynomial Prims.list * 'a vmap), unit) + FStar_Tactics_Effect.tac_repr + = + fun unquotea -> + fun quotea -> + fun tadd -> + fun topp -> + fun tmone -> + fun tmult -> + fun munit -> + fun ts -> + FStar_Tactics_Effect.tac_bind + (Prims.mk_range "FStar.Tactics.CanonCommSemiring.fst" + (Prims.of_int (1583)) (Prims.of_int (13)) + (Prims.of_int (1583)) (Prims.of_int (17))) + (Prims.mk_range "FStar.Tactics.CanonCommSemiring.fst" + (Prims.of_int (1584)) (Prims.of_int (2)) + (Prims.of_int (1595)) (Prims.of_int (31))) + (FStar_Tactics_Effect.lift_div_tac (fun uu___ -> tadd)) + (fun uu___ -> + (fun add -> + Obj.magic + (FStar_Tactics_Effect.tac_bind + (Prims.mk_range + "FStar.Tactics.CanonCommSemiring.fst" + (Prims.of_int (1584)) (Prims.of_int (13)) + (Prims.of_int (1584)) (Prims.of_int (17))) + (Prims.mk_range + "FStar.Tactics.CanonCommSemiring.fst" + (Prims.of_int (1585)) (Prims.of_int (2)) + (Prims.of_int (1595)) (Prims.of_int (31))) + (FStar_Tactics_Effect.lift_div_tac + (fun uu___ -> topp)) + (fun uu___ -> + (fun opp -> + Obj.magic + (FStar_Tactics_Effect.tac_bind + (Prims.mk_range + "FStar.Tactics.CanonCommSemiring.fst" + (Prims.of_int (1585)) + (Prims.of_int (13)) + (Prims.of_int (1585)) + (Prims.of_int (18))) + (Prims.mk_range + "FStar.Tactics.CanonCommSemiring.fst" + (Prims.of_int (1586)) + (Prims.of_int (2)) + (Prims.of_int (1595)) + (Prims.of_int (31))) + (FStar_Tactics_Effect.lift_div_tac + (fun uu___ -> tmone)) + (fun uu___ -> + (fun mone -> + Obj.magic + (FStar_Tactics_Effect.tac_bind + (Prims.mk_range + "FStar.Tactics.CanonCommSemiring.fst" + (Prims.of_int (1586)) + (Prims.of_int (13)) + (Prims.of_int (1586)) + (Prims.of_int (18))) + (Prims.mk_range + "FStar.Tactics.CanonCommSemiring.fst" + (Prims.of_int (1587)) + (Prims.of_int (2)) + (Prims.of_int (1595)) + (Prims.of_int (31))) + (FStar_Tactics_Effect.lift_div_tac + (fun uu___ -> tmult)) + (fun uu___ -> + (fun mult -> + Obj.magic + (FStar_Tactics_Effect.tac_bind + (Prims.mk_range + "FStar.Tactics.CanonCommSemiring.fst" + (Prims.of_int (1587)) + (Prims.of_int (11)) + (Prims.of_int (1587)) + (Prims.of_int (48))) + (Prims.mk_range + "FStar.Tactics.CanonCommSemiring.fst" + (Prims.of_int (1589)) + (Prims.of_int (2)) + (Prims.of_int (1595)) + (Prims.of_int (31))) + (Obj.magic + (FStar_Tactics_Util.map + (FStar_Tactics_Derived.norm_term + steps) ts)) + (fun uu___ -> + (fun ts1 + -> + Obj.magic + (FStar_Tactics_Effect.tac_bind + (Prims.mk_range + "FStar.Tactics.CanonCommSemiring.fst" + (Prims.of_int (1590)) + (Prims.of_int (4)) + (Prims.of_int (1594)) + (Prims.of_int (29))) + (Prims.mk_range + "FStar.Tactics.CanonCommSemiring.fst" + (Prims.of_int (1589)) + (Prims.of_int (2)) + (Prims.of_int (1595)) + (Prims.of_int (31))) + (Obj.magic + (FStar_Tactics_Util.fold_left + (fun + uu___ -> + fun t -> + match uu___ + with + | + (es, vs, + vm) -> + FStar_Tactics_Effect.tac_bind + (Prims.mk_range + "FStar.Tactics.CanonCommSemiring.fst" + (Prims.of_int (1592)) + (Prims.of_int (26)) + (Prims.of_int (1592)) + (Prims.of_int (76))) + (Prims.mk_range + "FStar.Tactics.CanonCommSemiring.fst" + (Prims.of_int (1592)) + (Prims.of_int (8)) + (Prims.of_int (1593)) + (Prims.of_int (26))) + (Obj.magic + (reification_aux + unquotea + vs vm add + opp mone + mult t)) + (fun + uu___1 -> + FStar_Tactics_Effect.lift_div_tac + (fun + uu___2 -> + match uu___1 + with + | + (e, vs1, + vm1) -> + ((e :: + es), vs1, + vm1)))) + ([], [], + ([], + munit)) + ts1)) + (fun + uu___ -> + FStar_Tactics_Effect.lift_div_tac + (fun + uu___1 -> + match uu___ + with + | + (es, + uu___2, + vm) -> + ((FStar_List_Tot_Base.rev + es), vm))))) + uu___))) + uu___))) uu___))) + uu___))) uu___) +let rec quote_polynomial : + 'a . + FStar_Reflection_Types.term -> + ('a -> + (FStar_Reflection_Types.term, unit) FStar_Tactics_Effect.tac_repr) + -> + 'a polynomial -> + (FStar_Reflection_Types.term, unit) FStar_Tactics_Effect.tac_repr + = + fun ta -> + fun quotea -> + fun e -> + match e with + | Pconst c -> + FStar_Tactics_Effect.tac_bind + (Prims.mk_range "FStar.Tactics.CanonCommSemiring.fst" + (Prims.of_int (1600)) (Prims.of_int (33)) + (Prims.of_int (1600)) (Prims.of_int (75))) + (Prims.mk_range "FStar.Tactics.CanonCommSemiring.fst" + (Prims.of_int (1600)) (Prims.of_int (16)) + (Prims.of_int (1600)) (Prims.of_int (75))) + (Obj.magic + (FStar_Tactics_Effect.tac_bind + (Prims.mk_range "FStar.Tactics.CanonCommSemiring.fst" + (Prims.of_int (1600)) (Prims.of_int (33)) + (Prims.of_int (1600)) (Prims.of_int (75))) + (Prims.mk_range "FStar.Tactics.CanonCommSemiring.fst" + (Prims.of_int (1600)) (Prims.of_int (33)) + (Prims.of_int (1600)) (Prims.of_int (75))) + (Obj.magic + (FStar_Tactics_Effect.tac_bind + (Prims.mk_range + "FStar.Tactics.CanonCommSemiring.fst" + (Prims.of_int (1600)) (Prims.of_int (52)) + (Prims.of_int (1600)) (Prims.of_int (74))) + (Prims.mk_range + "FStar.Tactics.CanonCommSemiring.fst" + (Prims.of_int (1600)) (Prims.of_int (33)) + (Prims.of_int (1600)) (Prims.of_int (75))) + (Obj.magic + (FStar_Tactics_Effect.tac_bind + (Prims.mk_range + "FStar.Tactics.CanonCommSemiring.fst" + (Prims.of_int (1600)) (Prims.of_int (53)) + (Prims.of_int (1600)) (Prims.of_int (61))) + (Prims.mk_range + "FStar.Tactics.CanonCommSemiring.fst" + (Prims.of_int (1600)) (Prims.of_int (52)) + (Prims.of_int (1600)) (Prims.of_int (74))) + (Obj.magic (quotea c)) + (fun uu___ -> + FStar_Tactics_Effect.lift_div_tac + (fun uu___1 -> + (uu___, + FStar_Reflection_Data.Q_Explicit))))) + (fun uu___ -> + FStar_Tactics_Effect.lift_div_tac + (fun uu___1 -> [uu___])))) + (fun uu___ -> + FStar_Tactics_Effect.lift_div_tac + (fun uu___1 -> + (ta, FStar_Reflection_Data.Q_Implicit) :: uu___)))) + (fun uu___ -> + FStar_Tactics_Effect.lift_div_tac + (fun uu___1 -> + FStar_Reflection_Derived.mk_app + (FStar_Reflection_Builtins.pack_ln + (FStar_Reflection_Data.Tv_FVar + (FStar_Reflection_Builtins.pack_fv + ["FStar"; + "Tactics"; + "CanonCommSemiring"; + "Pconst"]))) uu___)) + | Pvar x -> + FStar_Tactics_Effect.tac_bind + (Prims.mk_range "FStar.Tactics.CanonCommSemiring.fst" + (Prims.of_int (1601)) (Prims.of_int (31)) + (Prims.of_int (1601)) (Prims.of_int (58))) + (Prims.mk_range "FStar.Tactics.CanonCommSemiring.fst" + (Prims.of_int (1601)) (Prims.of_int (14)) + (Prims.of_int (1601)) (Prims.of_int (58))) + (Obj.magic + (FStar_Tactics_Effect.tac_bind + (Prims.mk_range "FStar.Tactics.CanonCommSemiring.fst" + (Prims.of_int (1601)) (Prims.of_int (32)) + (Prims.of_int (1601)) (Prims.of_int (57))) + (Prims.mk_range "FStar.Tactics.CanonCommSemiring.fst" + (Prims.of_int (1601)) (Prims.of_int (31)) + (Prims.of_int (1601)) (Prims.of_int (58))) + (Obj.magic + (FStar_Tactics_Builtins.pack + (FStar_Reflection_Data.Tv_Const + (FStar_Reflection_Data.C_Int x)))) + (fun uu___ -> + FStar_Tactics_Effect.lift_div_tac + (fun uu___1 -> [uu___])))) + (fun uu___ -> + FStar_Tactics_Effect.lift_div_tac + (fun uu___1 -> + FStar_Reflection_Derived.mk_e_app + (FStar_Reflection_Builtins.pack_ln + (FStar_Reflection_Data.Tv_FVar + (FStar_Reflection_Builtins.pack_fv + ["FStar"; + "Tactics"; + "CanonCommSemiring"; + "Pvar"]))) uu___)) + | Pplus (e1, e2) -> + FStar_Tactics_Effect.tac_bind + (Prims.mk_range "FStar.Tactics.CanonCommSemiring.fst" + (Prims.of_int (1603)) (Prims.of_int (22)) + (Prims.of_int (1603)) (Prims.of_int (84))) + (Prims.mk_range "FStar.Tactics.CanonCommSemiring.fst" + (Prims.of_int (1603)) (Prims.of_int (4)) + (Prims.of_int (1603)) (Prims.of_int (84))) + (Obj.magic + (FStar_Tactics_Effect.tac_bind + (Prims.mk_range "FStar.Tactics.CanonCommSemiring.fst" + (Prims.of_int (1603)) (Prims.of_int (23)) + (Prims.of_int (1603)) (Prims.of_int (52))) + (Prims.mk_range "FStar.Tactics.CanonCommSemiring.fst" + (Prims.of_int (1603)) (Prims.of_int (22)) + (Prims.of_int (1603)) (Prims.of_int (84))) + (Obj.magic (quote_polynomial ta quotea e1)) + (fun uu___ -> + (fun uu___ -> + Obj.magic + (FStar_Tactics_Effect.tac_bind + (Prims.mk_range + "FStar.Tactics.CanonCommSemiring.fst" + (Prims.of_int (1603)) (Prims.of_int (22)) + (Prims.of_int (1603)) (Prims.of_int (84))) + (Prims.mk_range + "FStar.Tactics.CanonCommSemiring.fst" + (Prims.of_int (1603)) (Prims.of_int (22)) + (Prims.of_int (1603)) (Prims.of_int (84))) + (Obj.magic + (FStar_Tactics_Effect.tac_bind + (Prims.mk_range + "FStar.Tactics.CanonCommSemiring.fst" + (Prims.of_int (1603)) + (Prims.of_int (54)) + (Prims.of_int (1603)) + (Prims.of_int (83))) + (Prims.mk_range + "FStar.Tactics.CanonCommSemiring.fst" + (Prims.of_int (1603)) + (Prims.of_int (22)) + (Prims.of_int (1603)) + (Prims.of_int (84))) + (Obj.magic + (quote_polynomial ta quotea e2)) + (fun uu___1 -> + FStar_Tactics_Effect.lift_div_tac + (fun uu___2 -> [uu___1])))) + (fun uu___1 -> + FStar_Tactics_Effect.lift_div_tac + (fun uu___2 -> uu___ :: uu___1)))) uu___))) + (fun uu___ -> + FStar_Tactics_Effect.lift_div_tac + (fun uu___1 -> + FStar_Reflection_Derived.mk_e_app + (FStar_Reflection_Builtins.pack_ln + (FStar_Reflection_Data.Tv_FVar + (FStar_Reflection_Builtins.pack_fv + ["FStar"; + "Tactics"; + "CanonCommSemiring"; + "Pplus"]))) uu___)) + | Pmult (e1, e2) -> + FStar_Tactics_Effect.tac_bind + (Prims.mk_range "FStar.Tactics.CanonCommSemiring.fst" + (Prims.of_int (1605)) (Prims.of_int (22)) + (Prims.of_int (1605)) (Prims.of_int (84))) + (Prims.mk_range "FStar.Tactics.CanonCommSemiring.fst" + (Prims.of_int (1605)) (Prims.of_int (4)) + (Prims.of_int (1605)) (Prims.of_int (84))) + (Obj.magic + (FStar_Tactics_Effect.tac_bind + (Prims.mk_range "FStar.Tactics.CanonCommSemiring.fst" + (Prims.of_int (1605)) (Prims.of_int (23)) + (Prims.of_int (1605)) (Prims.of_int (52))) + (Prims.mk_range "FStar.Tactics.CanonCommSemiring.fst" + (Prims.of_int (1605)) (Prims.of_int (22)) + (Prims.of_int (1605)) (Prims.of_int (84))) + (Obj.magic (quote_polynomial ta quotea e1)) + (fun uu___ -> + (fun uu___ -> + Obj.magic + (FStar_Tactics_Effect.tac_bind + (Prims.mk_range + "FStar.Tactics.CanonCommSemiring.fst" + (Prims.of_int (1605)) (Prims.of_int (22)) + (Prims.of_int (1605)) (Prims.of_int (84))) + (Prims.mk_range + "FStar.Tactics.CanonCommSemiring.fst" + (Prims.of_int (1605)) (Prims.of_int (22)) + (Prims.of_int (1605)) (Prims.of_int (84))) + (Obj.magic + (FStar_Tactics_Effect.tac_bind + (Prims.mk_range + "FStar.Tactics.CanonCommSemiring.fst" + (Prims.of_int (1605)) + (Prims.of_int (54)) + (Prims.of_int (1605)) + (Prims.of_int (83))) + (Prims.mk_range + "FStar.Tactics.CanonCommSemiring.fst" + (Prims.of_int (1605)) + (Prims.of_int (22)) + (Prims.of_int (1605)) + (Prims.of_int (84))) + (Obj.magic + (quote_polynomial ta quotea e2)) + (fun uu___1 -> + FStar_Tactics_Effect.lift_div_tac + (fun uu___2 -> [uu___1])))) + (fun uu___1 -> + FStar_Tactics_Effect.lift_div_tac + (fun uu___2 -> uu___ :: uu___1)))) uu___))) + (fun uu___ -> + FStar_Tactics_Effect.lift_div_tac + (fun uu___1 -> + FStar_Reflection_Derived.mk_e_app + (FStar_Reflection_Builtins.pack_ln + (FStar_Reflection_Data.Tv_FVar + (FStar_Reflection_Builtins.pack_fv + ["FStar"; + "Tactics"; + "CanonCommSemiring"; + "Pmult"]))) uu___)) + | Popp e1 -> + FStar_Tactics_Effect.tac_bind + (Prims.mk_range "FStar.Tactics.CanonCommSemiring.fst" + (Prims.of_int (1606)) (Prims.of_int (31)) + (Prims.of_int (1606)) (Prims.of_int (61))) + (Prims.mk_range "FStar.Tactics.CanonCommSemiring.fst" + (Prims.of_int (1606)) (Prims.of_int (14)) + (Prims.of_int (1606)) (Prims.of_int (61))) + (Obj.magic + (FStar_Tactics_Effect.tac_bind + (Prims.mk_range "FStar.Tactics.CanonCommSemiring.fst" + (Prims.of_int (1606)) (Prims.of_int (32)) + (Prims.of_int (1606)) (Prims.of_int (60))) + (Prims.mk_range "FStar.Tactics.CanonCommSemiring.fst" + (Prims.of_int (1606)) (Prims.of_int (31)) + (Prims.of_int (1606)) (Prims.of_int (61))) + (Obj.magic (quote_polynomial ta quotea e1)) + (fun uu___ -> + FStar_Tactics_Effect.lift_div_tac + (fun uu___1 -> [uu___])))) + (fun uu___ -> + FStar_Tactics_Effect.lift_div_tac + (fun uu___1 -> + FStar_Reflection_Derived.mk_e_app + (FStar_Reflection_Builtins.pack_ln + (FStar_Reflection_Data.Tv_FVar + (FStar_Reflection_Builtins.pack_fv + ["FStar"; + "Tactics"; + "CanonCommSemiring"; + "Popp"]))) uu___)) +let canon_semiring_aux : + 'a . + FStar_Reflection_Types.term -> + (FStar_Reflection_Types.term -> + ('a, unit) FStar_Tactics_Effect.tac_repr) + -> + ('a -> + (FStar_Reflection_Types.term, unit) FStar_Tactics_Effect.tac_repr) + -> + FStar_Reflection_Types.term -> + FStar_Reflection_Types.term -> + FStar_Reflection_Types.term -> + FStar_Reflection_Types.term -> + FStar_Reflection_Types.term -> + 'a -> (unit, unit) FStar_Tactics_Effect.tac_repr + = + fun ta -> + fun unquotea -> + fun quotea -> + fun tr -> + fun tadd -> + fun topp -> + fun tmone -> + fun tmult -> + fun munit -> + FStar_Tactics_Derived.focus + (fun uu___ -> + FStar_Tactics_Effect.tac_bind + (Prims.mk_range + "FStar.Tactics.CanonCommSemiring.fst" + (Prims.of_int (1628)) (Prims.of_int (2)) + (Prims.of_int (1628)) (Prims.of_int (9))) + (Prims.mk_range + "FStar.Tactics.CanonCommSemiring.fst" + (Prims.of_int (1629)) (Prims.of_int (2)) + (Prims.of_int (1673)) (Prims.of_int (42))) + (Obj.magic (FStar_Tactics_Builtins.norm [])) + (fun uu___1 -> + (fun uu___1 -> + Obj.magic + (FStar_Tactics_Effect.tac_bind + (Prims.mk_range + "FStar.Tactics.CanonCommSemiring.fst" + (Prims.of_int (1629)) + (Prims.of_int (10)) + (Prims.of_int (1629)) + (Prims.of_int (21))) + (Prims.mk_range + "FStar.Tactics.CanonCommSemiring.fst" + (Prims.of_int (1630)) + (Prims.of_int (2)) + (Prims.of_int (1673)) + (Prims.of_int (42))) + (Obj.magic + (FStar_Tactics_Derived.cur_goal ())) + (fun uu___2 -> + (fun g -> + Obj.magic + (FStar_Tactics_Effect.tac_bind + (Prims.mk_range + "FStar.Tactics.CanonCommSemiring.fst" + (Prims.of_int (1630)) + (Prims.of_int (8)) + (Prims.of_int (1630)) + (Prims.of_int (25))) + (Prims.mk_range + "FStar.Tactics.CanonCommSemiring.fst" + (Prims.of_int (1630)) + (Prims.of_int (2)) + (Prims.of_int (1673)) + (Prims.of_int (42))) + (Obj.magic + (FStar_Reflection_Formula.term_as_formula + g)) + (fun uu___2 -> + (fun uu___2 -> + match uu___2 with + | FStar_Reflection_Formula.Comp + (FStar_Reflection_Formula.Eq + (FStar_Pervasives_Native.Some + t), t1, t2) + -> + Obj.magic + (FStar_Tactics_Effect.tac_bind + (Prims.mk_range + "FStar.Tactics.CanonCommSemiring.fst" + (Prims.of_int (1634)) + (Prims.of_int (9)) + (Prims.of_int (1634)) + (Prims.of_int (21))) + (Prims.mk_range + "FStar.Tactics.CanonCommSemiring.fst" + (Prims.of_int (1634)) + (Prims.of_int (6)) + (Prims.of_int (1671)) + (Prims.of_int (73))) + (Obj.magic + (term_eq t + ta)) + (fun uu___3 + -> + (fun + uu___3 -> + if uu___3 + then + Obj.magic + (FStar_Tactics_Effect.tac_bind + (Prims.mk_range + "FStar.Tactics.CanonCommSemiring.fst" + (Prims.of_int (1636)) + (Prims.of_int (12)) + (Prims.of_int (1636)) + (Prims.of_int (76))) + (Prims.mk_range + "FStar.Tactics.CanonCommSemiring.fst" + (Prims.of_int (1636)) + (Prims.of_int (6)) + (Prims.of_int (1669)) + (Prims.of_int (30))) + (Obj.magic + (reification + unquotea + quotea + tadd topp + tmone + tmult + munit + [t1; t2])) + (fun + uu___4 -> + (fun + uu___4 -> + match uu___4 + with + | + (e1::e2::[], + vm) -> + Obj.magic + (FStar_Tactics_Effect.tac_bind + (Prims.mk_range + "FStar.Tactics.CanonCommSemiring.fst" + (Prims.of_int (1650)) + (Prims.of_int (18)) + (Prims.of_int (1650)) + (Prims.of_int (39))) + (Prims.mk_range + "FStar.Tactics.CanonCommSemiring.fst" + (Prims.of_int (1651)) + (Prims.of_int (8)) + (Prims.of_int (1668)) + (Prims.of_int (16))) + (Obj.magic + (quote_vm + ta quotea + vm)) + (fun + uu___5 -> + (fun tvm + -> + Obj.magic + (FStar_Tactics_Effect.tac_bind + (Prims.mk_range + "FStar.Tactics.CanonCommSemiring.fst" + (Prims.of_int (1651)) + (Prims.of_int (18)) + (Prims.of_int (1651)) + (Prims.of_int (47))) + (Prims.mk_range + "FStar.Tactics.CanonCommSemiring.fst" + (Prims.of_int (1653)) + (Prims.of_int (8)) + (Prims.of_int (1668)) + (Prims.of_int (16))) + (Obj.magic + (quote_polynomial + ta quotea + e1)) + (fun + uu___5 -> + (fun te1 + -> + Obj.magic + (FStar_Tactics_Effect.tac_bind + (Prims.mk_range + "FStar.Tactics.CanonCommSemiring.fst" + (Prims.of_int (1653)) + (Prims.of_int (18)) + (Prims.of_int (1653)) + (Prims.of_int (47))) + (Prims.mk_range + "FStar.Tactics.CanonCommSemiring.fst" + (Prims.of_int (1655)) + (Prims.of_int (8)) + (Prims.of_int (1668)) + (Prims.of_int (16))) + (Obj.magic + (quote_polynomial + ta quotea + e2)) + (fun + uu___5 -> + (fun te2 + -> + Obj.magic + (FStar_Tactics_Effect.tac_bind + (Prims.mk_range + "FStar.Tactics.CanonCommSemiring.fst" + (Prims.of_int (1655)) + (Prims.of_int (8)) + (Prims.of_int (1656)) + (Prims.of_int (64))) + (Prims.mk_range + "FStar.Tactics.CanonCommSemiring.fst" + (Prims.of_int (1658)) + (Prims.of_int (8)) + (Prims.of_int (1668)) + (Prims.of_int (16))) + (Obj.magic + (FStar_Tactics_Derived.mapply + (FStar_Reflection_Builtins.pack_ln + (FStar_Reflection_Data.Tv_App + ((FStar_Reflection_Builtins.pack_ln + (FStar_Reflection_Data.Tv_App + ((FStar_Reflection_Builtins.pack_ln + (FStar_Reflection_Data.Tv_App + ((FStar_Reflection_Builtins.pack_ln + (FStar_Reflection_Data.Tv_App + ((FStar_Reflection_Builtins.pack_ln + (FStar_Reflection_Data.Tv_App + ((FStar_Reflection_Builtins.pack_ln + (FStar_Reflection_Data.Tv_App + ((FStar_Reflection_Builtins.pack_ln + (FStar_Reflection_Data.Tv_App + ((FStar_Reflection_Builtins.pack_ln + (FStar_Reflection_Data.Tv_FVar + (FStar_Reflection_Builtins.pack_fv + ["FStar"; + "Tactics"; + "CanonCommSemiring"; + "semiring_reflect"]))), + (ta, + FStar_Reflection_Data.Q_Implicit)))), + (tr, + FStar_Reflection_Data.Q_Explicit)))), + (tvm, + FStar_Reflection_Data.Q_Explicit)))), + (te1, + FStar_Reflection_Data.Q_Explicit)))), + (te2, + FStar_Reflection_Data.Q_Explicit)))), + (t1, + FStar_Reflection_Data.Q_Explicit)))), + (t2, + FStar_Reflection_Data.Q_Explicit)))))) + (fun + uu___5 -> + (fun + uu___5 -> + Obj.magic + (FStar_Tactics_Effect.tac_bind + (Prims.mk_range + "FStar.Tactics.CanonCommSemiring.fst" + (Prims.of_int (1658)) + (Prims.of_int (8)) + (Prims.of_int (1658)) + (Prims.of_int (21))) + (Prims.mk_range + "FStar.Tactics.CanonCommSemiring.fst" + (Prims.of_int (1660)) + (Prims.of_int (8)) + (Prims.of_int (1668)) + (Prims.of_int (16))) + (Obj.magic + (canon_norm + ())) + (fun + uu___6 -> + (fun + uu___6 -> + Obj.magic + (FStar_Tactics_Effect.tac_bind + (Prims.mk_range + "FStar.Tactics.CanonCommSemiring.fst" + (Prims.of_int (1660)) + (Prims.of_int (8)) + (Prims.of_int (1660)) + (Prims.of_int (16))) + (Prims.mk_range + "FStar.Tactics.CanonCommSemiring.fst" + (Prims.of_int (1662)) + (Prims.of_int (8)) + (Prims.of_int (1668)) + (Prims.of_int (16))) + (Obj.magic + (FStar_Tactics_Derived.later + ())) + (fun + uu___7 -> + (fun + uu___7 -> + Obj.magic + (FStar_Tactics_Effect.tac_bind + (Prims.mk_range + "FStar.Tactics.CanonCommSemiring.fst" + (Prims.of_int (1662)) + (Prims.of_int (8)) + (Prims.of_int (1662)) + (Prims.of_int (21))) + (Prims.mk_range + "FStar.Tactics.CanonCommSemiring.fst" + (Prims.of_int (1664)) + (Prims.of_int (8)) + (Prims.of_int (1668)) + (Prims.of_int (16))) + (Obj.magic + (canon_norm + ())) + (fun + uu___8 -> + (fun + uu___8 -> + Obj.magic + (FStar_Tactics_Effect.tac_bind + (Prims.mk_range + "FStar.Tactics.CanonCommSemiring.fst" + (Prims.of_int (1664)) + (Prims.of_int (8)) + (Prims.of_int (1664)) + (Prims.of_int (16))) + (Prims.mk_range + "FStar.Tactics.CanonCommSemiring.fst" + (Prims.of_int (1666)) + (Prims.of_int (8)) + (Prims.of_int (1668)) + (Prims.of_int (16))) + (Obj.magic + (FStar_Tactics_Derived.trefl + ())) + (fun + uu___9 -> + (fun + uu___9 -> + Obj.magic + (FStar_Tactics_Effect.tac_bind + (Prims.mk_range + "FStar.Tactics.CanonCommSemiring.fst" + (Prims.of_int (1666)) + (Prims.of_int (8)) + (Prims.of_int (1666)) + (Prims.of_int (21))) + (Prims.mk_range + "FStar.Tactics.CanonCommSemiring.fst" + (Prims.of_int (1668)) + (Prims.of_int (8)) + (Prims.of_int (1668)) + (Prims.of_int (16))) + (Obj.magic + (canon_norm + ())) + (fun + uu___10 + -> + (fun + uu___10 + -> + Obj.magic + (FStar_Tactics_Derived.trefl + ())) + uu___10))) + uu___9))) + uu___8))) + uu___7))) + uu___6))) + uu___5))) + uu___5))) + uu___5))) + uu___5)) + | + uu___5 -> + Obj.magic + (FStar_Tactics_Derived.fail + "Unexpected")) + uu___4)) + else + Obj.magic + (FStar_Tactics_Derived.fail + "Found equality, but terms do not have the expected type")) + uu___3)) + | uu___3 -> + Obj.magic + (FStar_Tactics_Derived.fail + "Goal should be an equality")) + uu___2))) uu___2))) + uu___1)) +let canon_semiring : 'a . 'a cr -> (unit, unit) FStar_Tactics_Effect.tac_repr + = + fun r -> + FStar_Tactics_Effect.tac_bind + (Prims.mk_range "FStar.Tactics.CanonCommSemiring.fst" + (Prims.of_int (1677)) (Prims.of_int (4)) (Prims.of_int (1677)) + (Prims.of_int (13))) + (Prims.mk_range "FStar.Tactics.CanonCommSemiring.fst" + (Prims.of_int (1676)) (Prims.of_int (2)) (Prims.of_int (1682)) + (Prims.of_int (17))) + (FStar_Tactics_Effect.lift_div_tac + (fun uu___ -> + (fun uu___ -> + Obj.magic + (failwith "Cannot evaluate open quotation at runtime")) + uu___)) + (fun uu___ -> + (fun uu___ -> + Obj.magic + (FStar_Tactics_Effect.tac_bind + (Prims.mk_range "FStar.Tactics.CanonCommSemiring.fst" + (Prims.of_int (1677)) (Prims.of_int (50)) + (Prims.of_int (1677)) (Prims.of_int (59))) + (Prims.mk_range "FStar.Tactics.CanonCommSemiring.fst" + (Prims.of_int (1676)) (Prims.of_int (2)) + (Prims.of_int (1682)) (Prims.of_int (17))) + (FStar_Tactics_Effect.lift_div_tac + (fun uu___1 -> + (fun uu___1 -> + Obj.magic + (failwith + "Cannot evaluate open quotation at runtime")) + uu___1)) + (fun uu___1 -> + (fun uu___1 -> + Obj.magic + (FStar_Tactics_Effect.tac_bind + (Prims.mk_range + "FStar.Tactics.CanonCommSemiring.fst" + (Prims.of_int (1678)) (Prims.of_int (4)) + (Prims.of_int (1678)) (Prims.of_int (43))) + (Prims.mk_range + "FStar.Tactics.CanonCommSemiring.fst" + (Prims.of_int (1676)) (Prims.of_int (2)) + (Prims.of_int (1682)) (Prims.of_int (17))) + (Obj.magic + (FStar_Tactics_Effect.tac_bind + (Prims.mk_range + "FStar.Tactics.CanonCommSemiring.fst" + (Prims.of_int (1678)) + (Prims.of_int (21)) + (Prims.of_int (1678)) + (Prims.of_int (42))) + (Prims.mk_range + "FStar.Tactics.CanonCommSemiring.fst" + (Prims.of_int (1678)) (Prims.of_int (4)) + (Prims.of_int (1678)) + (Prims.of_int (43))) + (FStar_Tactics_Effect.lift_div_tac + (fun uu___2 -> + (fun uu___2 -> + Obj.magic + (failwith + "Cannot evaluate open quotation at runtime")) + uu___2)) + (fun uu___2 -> + (fun uu___2 -> + Obj.magic + (FStar_Tactics_Derived.norm_term + steps uu___2)) uu___2))) + (fun uu___2 -> + (fun uu___2 -> + Obj.magic + (FStar_Tactics_Effect.tac_bind + (Prims.mk_range + "FStar.Tactics.CanonCommSemiring.fst" + (Prims.of_int (1679)) + (Prims.of_int (4)) + (Prims.of_int (1679)) + (Prims.of_int (35))) + (Prims.mk_range + "FStar.Tactics.CanonCommSemiring.fst" + (Prims.of_int (1676)) + (Prims.of_int (2)) + (Prims.of_int (1682)) + (Prims.of_int (17))) + (Obj.magic + (FStar_Tactics_Effect.tac_bind + (Prims.mk_range + "FStar.Tactics.CanonCommSemiring.fst" + (Prims.of_int (1679)) + (Prims.of_int (21)) + (Prims.of_int (1679)) + (Prims.of_int (34))) + (Prims.mk_range + "FStar.Tactics.CanonCommSemiring.fst" + (Prims.of_int (1679)) + (Prims.of_int (4)) + (Prims.of_int (1679)) + (Prims.of_int (35))) + (FStar_Tactics_Effect.lift_div_tac + (fun uu___3 -> + (fun uu___3 -> + Obj.magic + (failwith + "Cannot evaluate open quotation at runtime")) + uu___3)) + (fun uu___3 -> + (fun uu___3 -> + Obj.magic + (FStar_Tactics_Derived.norm_term + steps uu___3)) uu___3))) + (fun uu___3 -> + (fun uu___3 -> + Obj.magic + (FStar_Tactics_Effect.tac_bind + (Prims.mk_range + "FStar.Tactics.CanonCommSemiring.fst" + (Prims.of_int (1680)) + (Prims.of_int (4)) + (Prims.of_int (1680)) + (Prims.of_int (52))) + (Prims.mk_range + "FStar.Tactics.CanonCommSemiring.fst" + (Prims.of_int (1676)) + (Prims.of_int (2)) + (Prims.of_int (1682)) + (Prims.of_int (17))) + (Obj.magic + (FStar_Tactics_Effect.tac_bind + (Prims.mk_range + "FStar.Tactics.CanonCommSemiring.fst" + (Prims.of_int (1680)) + (Prims.of_int (21)) + (Prims.of_int (1680)) + (Prims.of_int (51))) + (Prims.mk_range + "FStar.Tactics.CanonCommSemiring.fst" + (Prims.of_int (1680)) + (Prims.of_int (4)) + (Prims.of_int (1680)) + (Prims.of_int (52))) + (FStar_Tactics_Effect.lift_div_tac + (fun uu___4 -> + (fun uu___4 -> + Obj.magic + (failwith + "Cannot evaluate open quotation at runtime")) + uu___4)) + (fun uu___4 -> + (fun uu___4 -> + Obj.magic + (FStar_Tactics_Derived.norm_term + steps + uu___4)) + uu___4))) + (fun uu___4 -> + (fun uu___4 -> + Obj.magic + (FStar_Tactics_Effect.tac_bind + (Prims.mk_range + "FStar.Tactics.CanonCommSemiring.fst" + (Prims.of_int (1681)) + (Prims.of_int (4)) + (Prims.of_int (1681)) + (Prims.of_int (44))) + (Prims.mk_range + "FStar.Tactics.CanonCommSemiring.fst" + (Prims.of_int (1676)) + (Prims.of_int (2)) + (Prims.of_int (1682)) + (Prims.of_int (17))) + (Obj.magic + (FStar_Tactics_Effect.tac_bind + (Prims.mk_range + "FStar.Tactics.CanonCommSemiring.fst" + (Prims.of_int (1681)) + (Prims.of_int (21)) + (Prims.of_int (1681)) + (Prims.of_int (43))) + (Prims.mk_range + "FStar.Tactics.CanonCommSemiring.fst" + (Prims.of_int (1681)) + (Prims.of_int (4)) + (Prims.of_int (1681)) + (Prims.of_int (44))) + (FStar_Tactics_Effect.lift_div_tac + (fun + uu___5 -> + (fun + uu___5 -> + Obj.magic + (failwith + "Cannot evaluate open quotation at runtime")) + uu___5)) + (fun + uu___5 -> + (fun + uu___5 -> + Obj.magic + (FStar_Tactics_Derived.norm_term + steps + uu___5)) + uu___5))) + (fun uu___5 -> + (fun uu___5 + -> + Obj.magic + (canon_semiring_aux + uu___ + FStar_Tactics_Builtins.unquote + (fun + uu___6 -> + (fun x -> + Obj.magic + (FStar_Tactics_Effect.lift_div_tac + (fun + uu___6 -> + (fun + uu___6 -> + Obj.magic + (failwith + "Cannot evaluate open quotation at runtime")) + uu___6))) + uu___6) + uu___1 + uu___2 + uu___3 + uu___4 + uu___5 + (FStar_Algebra_CommMonoid.__proj__CM__item__unit + (__proj__CR__item__cm_add + r)))) + uu___5))) + uu___4))) uu___3))) + uu___2))) uu___1))) uu___) +let (int_cr : Prims.int cr) = + CR + (FStar_Algebra_CommMonoid.int_plus_cm, + FStar_Algebra_CommMonoid.int_multiply_cm, (~-), (), (), ()) +let (int_semiring : unit -> (unit, unit) FStar_Tactics_Effect.tac_repr) = + fun uu___ -> + FStar_Tactics_Effect.tac_bind + (Prims.mk_range "FStar.Tactics.CanonCommSemiring.fst" + (Prims.of_int (1695)) (Prims.of_int (10)) (Prims.of_int (1695)) + (Prims.of_int (39))) + (Prims.mk_range "FStar.Tactics.CanonCommSemiring.fst" + (Prims.of_int (1695)) (Prims.of_int (4)) (Prims.of_int (1701)) + (Prims.of_int (29))) + (Obj.magic + (FStar_Tactics_Effect.tac_bind + (Prims.mk_range "FStar.Tactics.CanonCommSemiring.fst" + (Prims.of_int (1695)) (Prims.of_int (26)) + (Prims.of_int (1695)) (Prims.of_int (39))) + (Prims.mk_range "FStar.Tactics.CanonCommSemiring.fst" + (Prims.of_int (1695)) (Prims.of_int (10)) + (Prims.of_int (1695)) (Prims.of_int (39))) + (Obj.magic (FStar_Tactics_Derived.cur_goal ())) + (fun uu___1 -> + (fun uu___1 -> + Obj.magic (FStar_Reflection_Formula.term_as_formula uu___1)) + uu___1))) + (fun uu___1 -> + (fun uu___1 -> + match uu___1 with + | FStar_Reflection_Formula.Comp + (FStar_Reflection_Formula.Eq (FStar_Pervasives_Native.Some + t), uu___2, uu___3) + -> + Obj.magic + (FStar_Tactics_Effect.tac_bind + (Prims.mk_range "FStar.Tactics.CanonCommSemiring.fst" + (Prims.of_int (1697)) (Prims.of_int (11)) + (Prims.of_int (1697)) (Prims.of_int (33))) + (Prims.mk_range "FStar.Tactics.CanonCommSemiring.fst" + (Prims.of_int (1697)) (Prims.of_int (8)) + (Prims.of_int (1699)) (Prims.of_int (34))) + (Obj.magic + (term_eq t + (FStar_Reflection_Builtins.pack_ln + (FStar_Reflection_Data.Tv_FVar + (FStar_Reflection_Builtins.pack_fv + ["Prims"; "nat"]))))) + (fun uu___4 -> + (fun uu___4 -> + if uu___4 + then + Obj.magic + (FStar_Tactics_Effect.tac_bind + (Prims.mk_range + "FStar.Tactics.CanonCommSemiring.fst" + (Prims.of_int (1698)) + (Prims.of_int (14)) + (Prims.of_int (1698)) + (Prims.of_int (43))) + (Prims.mk_range + "FStar.Tactics.CanonCommSemiring.fst" + (Prims.of_int (1698)) + (Prims.of_int (45)) + (Prims.of_int (1698)) + (Prims.of_int (66))) + (Obj.magic + (FStar_Tactics_Derived.apply_lemma + (FStar_Reflection_Builtins.pack_ln + (FStar_Reflection_Data.Tv_FVar + (FStar_Reflection_Builtins.pack_fv + ["FStar"; + "Tactics"; + "CanonCommSemiring"; + "eq_nat_via_int"]))))) + (fun uu___5 -> + (fun uu___5 -> + Obj.magic (canon_semiring int_cr)) + uu___5)) + else Obj.magic (canon_semiring int_cr)) uu___4)) + | uu___2 -> Obj.magic (canon_semiring int_cr)) uu___1) \ No newline at end of file diff --git a/ocaml/fstar-lib/generated/FStar_Tactics_CanonCommSwaps.ml b/ocaml/fstar-lib/generated/FStar_Tactics_CanonCommSwaps.ml new file mode 100644 index 00000000000..21f3cb8991e --- /dev/null +++ b/ocaml/fstar-lib/generated/FStar_Tactics_CanonCommSwaps.ml @@ -0,0 +1,60 @@ +open Prims +type 'n swap = Prims.nat +let rec apply_swap_aux : + 'a . Prims.nat -> 'a Prims.list -> unit swap -> 'a Prims.list = + fun n -> + fun xs -> + fun s -> + match xs with + | [] -> xs + | uu___::[] -> xs + | x1::x2::xs' -> + if n = s + then x2 :: x1 :: xs' + else x1 :: (apply_swap_aux (n + Prims.int_one) (x2 :: xs') s) +let apply_swap : 'a . unit -> 'a Prims.list -> unit swap -> 'a Prims.list = + fun uu___ -> apply_swap_aux Prims.int_zero +let rec apply_swaps : + 'a . 'a Prims.list -> unit swap Prims.list -> 'a Prims.list = + fun xs -> + fun ss -> + match ss with + | [] -> xs + | s::ss' -> apply_swaps ((apply_swap ()) xs s) ss' +type ('a, 'xs, 'ys) equal_counts = unit +type ('a, 'xs) swap_for = unit swap +type ('a, 'xs) swaps_for = unit swap Prims.list +let rec lift_swaps_cons : + 'a . 'a -> 'a Prims.list -> unit swap Prims.list -> unit swap Prims.list = + fun h -> + fun xs -> + fun ss -> + match ss with + | [] -> [] + | s::st -> (s + Prims.int_one) :: + (lift_swaps_cons h ((apply_swap ()) xs s) st) +let rec swap_to_front : 'a . 'a -> 'a Prims.list -> unit swap Prims.list = + fun h -> + fun xs -> + match xs with + | [] -> [] + | x::xt -> + if x = h + then [] + else + (let ss = swap_to_front h xt in + let ss' = lift_swaps_cons x xt ss in + let s = Prims.int_zero in FStar_List_Tot_Base.op_At ss' [s]) +let rec equal_counts_implies_swaps : + 'a . 'a Prims.list -> 'a Prims.list -> unit swap Prims.list = + fun xs -> + fun ys -> + match ys with + | [] -> (match xs with | [] -> [] | x::xt -> []) + | y::yt -> + let ss0 = swap_to_front y xs in + let xs' = apply_swaps xs ss0 in + let xt = FStar_List_Tot_Base.tl xs' in + let ss1 = equal_counts_implies_swaps xt yt in + let ss1' = lift_swaps_cons y xt ss1 in + FStar_List_Tot_Base.op_At ss0 ss1' \ No newline at end of file diff --git a/ocaml/fstar-lib/generated/FStar_Tactics_CanonMonoid.ml b/ocaml/fstar-lib/generated/FStar_Tactics_CanonMonoid.ml new file mode 100644 index 00000000000..648100aa857 --- /dev/null +++ b/ocaml/fstar-lib/generated/FStar_Tactics_CanonMonoid.ml @@ -0,0 +1,630 @@ +open Prims +let (dump : Prims.string -> (unit, unit) FStar_Tactics_Effect.tac_repr) = + fun m -> + FStar_Tactics_Effect.tac_bind + (Prims.mk_range "FStar.Tactics.CanonMonoid.fst" (Prims.of_int (24)) + (Prims.of_int (16)) (Prims.of_int (24)) (Prims.of_int (28))) + (Prims.mk_range "FStar.Tactics.CanonMonoid.fst" (Prims.of_int (24)) + (Prims.of_int (13)) (Prims.of_int (24)) (Prims.of_int (40))) + (Obj.magic (FStar_Tactics_Builtins.debugging ())) + (fun uu___ -> + (fun uu___ -> + if uu___ + then Obj.magic (Obj.repr (FStar_Tactics_Builtins.dump m)) + else + Obj.magic + (Obj.repr + (FStar_Tactics_Effect.lift_div_tac (fun uu___2 -> ())))) + uu___) +type 'a exp = + | Unit + | Var of 'a + | Mult of 'a exp * 'a exp +let uu___is_Unit : 'a . 'a exp -> Prims.bool = + fun projectee -> match projectee with | Unit -> true | uu___ -> false +let uu___is_Var : 'a . 'a exp -> Prims.bool = + fun projectee -> match projectee with | Var _0 -> true | uu___ -> false +let __proj__Var__item___0 : 'a . 'a exp -> 'a = + fun projectee -> match projectee with | Var _0 -> _0 +let uu___is_Mult : 'a . 'a exp -> Prims.bool = + fun projectee -> + match projectee with | Mult (_0, _1) -> true | uu___ -> false +let __proj__Mult__item___0 : 'a . 'a exp -> 'a exp = + fun projectee -> match projectee with | Mult (_0, _1) -> _0 +let __proj__Mult__item___1 : 'a . 'a exp -> 'a exp = + fun projectee -> match projectee with | Mult (_0, _1) -> _1 +let rec exp_to_string : 'a . ('a -> Prims.string) -> 'a exp -> Prims.string = + fun a_to_string -> + fun e -> + match e with + | Unit -> "Unit" + | Var x -> Prims.strcat "Var " (a_to_string x) + | Mult (e1, e2) -> + Prims.strcat "Mult (" + (Prims.strcat (exp_to_string a_to_string e1) + (Prims.strcat ") (" + (Prims.strcat (exp_to_string a_to_string e2) ")"))) +let rec mdenote : 'a . 'a FStar_Algebra_Monoid.monoid -> 'a exp -> 'a = + fun m -> + fun e -> + match e with + | Unit -> FStar_Algebra_Monoid.__proj__Monoid__item__unit m + | Var x -> x + | Mult (e1, e2) -> + FStar_Algebra_Monoid.__proj__Monoid__item__mult m (mdenote m e1) + (mdenote m e2) +let rec mldenote : 'a . 'a FStar_Algebra_Monoid.monoid -> 'a Prims.list -> 'a + = + fun m -> + fun xs -> + match xs with + | [] -> FStar_Algebra_Monoid.__proj__Monoid__item__unit m + | x::[] -> x + | x::xs' -> + FStar_Algebra_Monoid.__proj__Monoid__item__mult m x + (mldenote m xs') +let rec flatten : 'a . 'a exp -> 'a Prims.list = + fun e -> + match e with + | Unit -> [] + | Var x -> [x] + | Mult (e1, e2) -> FStar_List_Tot_Base.op_At (flatten e1) (flatten e2) +let rec reification_aux : + 'a . + FStar_Reflection_Types.term -> + FStar_Reflection_Types.term -> + FStar_Reflection_Types.term -> + ('a exp, unit) FStar_Tactics_Effect.tac_repr + = + fun mult -> + fun unit -> + fun me -> + FStar_Tactics_Effect.tac_bind + (Prims.mk_range "FStar.Tactics.CanonMonoid.fst" (Prims.of_int (84)) + (Prims.of_int (15)) (Prims.of_int (84)) (Prims.of_int (33))) + (Prims.mk_range "FStar.Tactics.CanonMonoid.fst" (Prims.of_int (84)) + (Prims.of_int (2)) (Prims.of_int (94)) (Prims.of_int (25))) + (FStar_Tactics_Effect.lift_div_tac + (fun uu___ -> FStar_Reflection_Derived_Lemmas.collect_app_ref me)) + (fun uu___ -> + (fun uu___ -> + match uu___ with + | (hd, tl) -> + Obj.magic + (FStar_Tactics_Effect.tac_bind + (Prims.mk_range "FStar.Tactics.CanonMonoid.fst" + (Prims.of_int (85)) (Prims.of_int (11)) + (Prims.of_int (85)) (Prims.of_int (24))) + (Prims.mk_range "FStar.Tactics.CanonMonoid.fst" + (Prims.of_int (86)) (Prims.of_int (2)) + (Prims.of_int (94)) (Prims.of_int (25))) + (FStar_Tactics_Effect.lift_div_tac + (fun uu___1 -> FStar_List_Tot_Base.list_unref tl)) + (fun uu___1 -> + (fun tl1 -> + Obj.magic + (FStar_Tactics_Effect.tac_bind + (Prims.mk_range + "FStar.Tactics.CanonMonoid.fst" + (Prims.of_int (86)) (Prims.of_int (8)) + (Prims.of_int (86)) + (Prims.of_int (22))) + (Prims.mk_range + "FStar.Tactics.CanonMonoid.fst" + (Prims.of_int (86)) (Prims.of_int (2)) + (Prims.of_int (94)) + (Prims.of_int (25))) + (Obj.magic + (FStar_Tactics_Effect.tac_bind + (Prims.mk_range + "FStar.Tactics.CanonMonoid.fst" + (Prims.of_int (86)) + (Prims.of_int (8)) + (Prims.of_int (86)) + (Prims.of_int (18))) + (Prims.mk_range + "FStar.Tactics.CanonMonoid.fst" + (Prims.of_int (86)) + (Prims.of_int (8)) + (Prims.of_int (86)) + (Prims.of_int (22))) + (Obj.magic + (FStar_Tactics_Builtins.inspect + hd)) + (fun uu___1 -> + FStar_Tactics_Effect.lift_div_tac + (fun uu___2 -> (uu___1, tl1))))) + (fun uu___1 -> + (fun uu___1 -> + match uu___1 with + | (FStar_Reflection_Data.Tv_FVar + fv, + (me1, + FStar_Reflection_Data.Q_Explicit):: + (me2, + FStar_Reflection_Data.Q_Explicit)::[]) + -> + Obj.magic + (FStar_Tactics_Effect.tac_bind + (Prims.mk_range + "FStar.Tactics.CanonMonoid.fst" + (Prims.of_int (88)) + (Prims.of_int (7)) + (Prims.of_int (88)) + (Prims.of_int (43))) + (Prims.mk_range + "FStar.Tactics.CanonMonoid.fst" + (Prims.of_int (88)) + (Prims.of_int (4)) + (Prims.of_int (90)) + (Prims.of_int (25))) + (Obj.magic + (FStar_Tactics_Effect.tac_bind + (Prims.mk_range + "FStar.Tactics.CanonMonoid.fst" + (Prims.of_int (88)) + (Prims.of_int (19)) + (Prims.of_int (88)) + (Prims.of_int (38))) + (Prims.mk_range + "FStar.Tactics.CanonMonoid.fst" + (Prims.of_int (88)) + (Prims.of_int (7)) + (Prims.of_int (88)) + (Prims.of_int (43))) + (Obj.magic + (FStar_Tactics_Builtins.pack + (FStar_Reflection_Data.Tv_FVar + fv))) + (fun uu___2 -> + (fun uu___2 -> + Obj.magic + (FStar_Tactics_Builtins.term_eq_old + uu___2 + mult)) + uu___2))) + (fun uu___2 -> + (fun uu___2 -> + if uu___2 + then + Obj.magic + (FStar_Tactics_Effect.tac_bind + (Prims.mk_range + "FStar.Tactics.CanonMonoid.fst" + (Prims.of_int (89)) + (Prims.of_int (14)) + (Prims.of_int (89)) + (Prims.of_int (45))) + (Prims.mk_range + "FStar.Tactics.CanonMonoid.fst" + (Prims.of_int (89)) + (Prims.of_int (9)) + (Prims.of_int (89)) + (Prims.of_int (77))) + (Obj.magic + (reification_aux + mult unit + me1)) + (fun uu___3 + -> + (fun + uu___3 -> + Obj.magic + (FStar_Tactics_Effect.tac_bind + (Prims.mk_range + "FStar.Tactics.CanonMonoid.fst" + (Prims.of_int (89)) + (Prims.of_int (46)) + (Prims.of_int (89)) + (Prims.of_int (77))) + (Prims.mk_range + "FStar.Tactics.CanonMonoid.fst" + (Prims.of_int (89)) + (Prims.of_int (9)) + (Prims.of_int (89)) + (Prims.of_int (77))) + (Obj.magic + (reification_aux + mult unit + me2)) + (fun + uu___4 -> + FStar_Tactics_Effect.lift_div_tac + (fun + uu___5 -> + Mult + (uu___3, + uu___4))))) + uu___3)) + else + Obj.magic + (FStar_Tactics_Effect.tac_bind + (Prims.mk_range + "FStar.Tactics.CanonMonoid.fst" + (Prims.of_int (90)) + (Prims.of_int (13)) + (Prims.of_int (90)) + (Prims.of_int (25))) + (Prims.mk_range + "FStar.Tactics.CanonMonoid.fst" + (Prims.of_int (90)) + (Prims.of_int (9)) + (Prims.of_int (90)) + (Prims.of_int (25))) + (Obj.magic + (FStar_Tactics_Builtins.unquote + me)) + (fun uu___4 + -> + FStar_Tactics_Effect.lift_div_tac + (fun + uu___5 -> + Var + uu___4)))) + uu___2)) + | (uu___2, uu___3) -> + Obj.magic + (FStar_Tactics_Effect.tac_bind + (Prims.mk_range + "FStar.Tactics.CanonMonoid.fst" + (Prims.of_int (92)) + (Prims.of_int (7)) + (Prims.of_int (92)) + (Prims.of_int (26))) + (Prims.mk_range + "FStar.Tactics.CanonMonoid.fst" + (Prims.of_int (92)) + (Prims.of_int (4)) + (Prims.of_int (94)) + (Prims.of_int (25))) + (Obj.magic + (FStar_Tactics_Builtins.term_eq_old + me unit)) + (fun uu___4 -> + (fun uu___4 -> + if uu___4 + then + Obj.magic + (Obj.repr + (FStar_Tactics_Effect.lift_div_tac + (fun + uu___5 -> + Unit))) + else + Obj.magic + (Obj.repr + (FStar_Tactics_Effect.tac_bind + (Prims.mk_range + "FStar.Tactics.CanonMonoid.fst" + (Prims.of_int (94)) + (Prims.of_int (13)) + (Prims.of_int (94)) + (Prims.of_int (25))) + (Prims.mk_range + "FStar.Tactics.CanonMonoid.fst" + (Prims.of_int (94)) + (Prims.of_int (9)) + (Prims.of_int (94)) + (Prims.of_int (25))) + (Obj.magic + (FStar_Tactics_Builtins.unquote + me)) + (fun + uu___6 -> + FStar_Tactics_Effect.lift_div_tac + (fun + uu___7 -> + Var + uu___6))))) + uu___4))) uu___1))) + uu___1))) uu___) +let reification : + 'a . + 'a FStar_Algebra_Monoid.monoid -> + FStar_Reflection_Types.term -> + ('a exp, unit) FStar_Tactics_Effect.tac_repr + = + fun m -> + fun me -> + FStar_Tactics_Effect.tac_bind + (Prims.mk_range "FStar.Tactics.CanonMonoid.fst" (Prims.of_int (97)) + (Prims.of_int (15)) (Prims.of_int (97)) (Prims.of_int (67))) + (Prims.mk_range "FStar.Tactics.CanonMonoid.fst" (Prims.of_int (98)) + (Prims.of_int (4)) (Prims.of_int (103)) (Prims.of_int (32))) + (Obj.magic + (FStar_Tactics_Effect.tac_bind + (Prims.mk_range "FStar.Tactics.CanonMonoid.fst" + (Prims.of_int (97)) (Prims.of_int (43)) (Prims.of_int (97)) + (Prims.of_int (67))) + (Prims.mk_range "FStar.Tactics.CanonMonoid.fst" + (Prims.of_int (97)) (Prims.of_int (15)) (Prims.of_int (97)) + (Prims.of_int (67))) + (FStar_Tactics_Effect.lift_div_tac + (fun uu___ -> + (fun uu___ -> + Obj.magic + (failwith + "Cannot evaluate open quotation at runtime")) + uu___)) + (fun uu___ -> + (fun uu___ -> + Obj.magic + (FStar_Tactics_Derived.norm_term + [FStar_Pervasives.delta; + FStar_Pervasives.zeta; + FStar_Pervasives.iota] uu___)) uu___))) + (fun uu___ -> + (fun mult -> + Obj.magic + (FStar_Tactics_Effect.tac_bind + (Prims.mk_range "FStar.Tactics.CanonMonoid.fst" + (Prims.of_int (98)) (Prims.of_int (15)) + (Prims.of_int (98)) (Prims.of_int (67))) + (Prims.mk_range "FStar.Tactics.CanonMonoid.fst" + (Prims.of_int (99)) (Prims.of_int (4)) + (Prims.of_int (103)) (Prims.of_int (32))) + (Obj.magic + (FStar_Tactics_Effect.tac_bind + (Prims.mk_range "FStar.Tactics.CanonMonoid.fst" + (Prims.of_int (98)) (Prims.of_int (43)) + (Prims.of_int (98)) (Prims.of_int (67))) + (Prims.mk_range "FStar.Tactics.CanonMonoid.fst" + (Prims.of_int (98)) (Prims.of_int (15)) + (Prims.of_int (98)) (Prims.of_int (67))) + (FStar_Tactics_Effect.lift_div_tac + (fun uu___ -> + (fun uu___ -> + Obj.magic + (failwith + "Cannot evaluate open quotation at runtime")) + uu___)) + (fun uu___ -> + (fun uu___ -> + Obj.magic + (FStar_Tactics_Derived.norm_term + [FStar_Pervasives.delta; + FStar_Pervasives.zeta; + FStar_Pervasives.iota] uu___)) uu___))) + (fun uu___ -> + (fun unit -> + Obj.magic + (FStar_Tactics_Effect.tac_bind + (Prims.mk_range "FStar.Tactics.CanonMonoid.fst" + (Prims.of_int (99)) (Prims.of_int (15)) + (Prims.of_int (99)) (Prims.of_int (45))) + (Prims.mk_range "FStar.Tactics.CanonMonoid.fst" + (Prims.of_int (103)) (Prims.of_int (4)) + (Prims.of_int (103)) (Prims.of_int (32))) + (Obj.magic + (FStar_Tactics_Derived.norm_term + [FStar_Pervasives.delta; + FStar_Pervasives.zeta; + FStar_Pervasives.iota] me)) + (fun uu___ -> + (fun me1 -> + Obj.magic (reification_aux mult unit me1)) + uu___))) uu___))) uu___) +let canon_monoid : + 'a . + 'a FStar_Algebra_Monoid.monoid -> + (unit, unit) FStar_Tactics_Effect.tac_repr + = + fun m -> + FStar_Tactics_Effect.tac_bind + (Prims.mk_range "FStar.Tactics.CanonMonoid.fst" (Prims.of_int (106)) + (Prims.of_int (2)) (Prims.of_int (106)) (Prims.of_int (9))) + (Prims.mk_range "FStar.Tactics.CanonMonoid.fst" (Prims.of_int (107)) + (Prims.of_int (2)) (Prims.of_int (120)) (Prims.of_int (42))) + (Obj.magic (FStar_Tactics_Builtins.norm [])) + (fun uu___ -> + (fun uu___ -> + Obj.magic + (FStar_Tactics_Effect.tac_bind + (Prims.mk_range "FStar.Tactics.CanonMonoid.fst" + (Prims.of_int (107)) (Prims.of_int (10)) + (Prims.of_int (107)) (Prims.of_int (21))) + (Prims.mk_range "FStar.Tactics.CanonMonoid.fst" + (Prims.of_int (108)) (Prims.of_int (2)) + (Prims.of_int (120)) (Prims.of_int (42))) + (Obj.magic (FStar_Tactics_Derived.cur_goal ())) + (fun uu___1 -> + (fun g -> + Obj.magic + (FStar_Tactics_Effect.tac_bind + (Prims.mk_range "FStar.Tactics.CanonMonoid.fst" + (Prims.of_int (108)) (Prims.of_int (8)) + (Prims.of_int (108)) (Prims.of_int (25))) + (Prims.mk_range "FStar.Tactics.CanonMonoid.fst" + (Prims.of_int (108)) (Prims.of_int (2)) + (Prims.of_int (120)) (Prims.of_int (42))) + (Obj.magic + (FStar_Reflection_Formula.term_as_formula g)) + (fun uu___1 -> + (fun uu___1 -> + match uu___1 with + | FStar_Reflection_Formula.Comp + (FStar_Reflection_Formula.Eq + (FStar_Pervasives_Native.Some t), me1, + me2) + -> + Obj.magic + (FStar_Tactics_Effect.tac_bind + (Prims.mk_range + "FStar.Tactics.CanonMonoid.fst" + (Prims.of_int (110)) + (Prims.of_int (9)) + (Prims.of_int (110)) + (Prims.of_int (32))) + (Prims.mk_range + "FStar.Tactics.CanonMonoid.fst" + (Prims.of_int (110)) + (Prims.of_int (6)) + (Prims.of_int (119)) + (Prims.of_int (69))) + (Obj.magic + (FStar_Tactics_Effect.tac_bind + (Prims.mk_range + "FStar.Tactics.CanonMonoid.fst" + (Prims.of_int (110)) + (Prims.of_int (23)) + (Prims.of_int (110)) + (Prims.of_int (32))) + (Prims.mk_range + "FStar.Tactics.CanonMonoid.fst" + (Prims.of_int (110)) + (Prims.of_int (9)) + (Prims.of_int (110)) + (Prims.of_int (32))) + (FStar_Tactics_Effect.lift_div_tac + (fun uu___2 -> + (fun uu___2 -> + Obj.magic + (failwith + "Cannot evaluate open quotation at runtime")) + uu___2)) + (fun uu___2 -> + (fun uu___2 -> + Obj.magic + (FStar_Tactics_Builtins.term_eq_old + t uu___2)) uu___2))) + (fun uu___2 -> + (fun uu___2 -> + if uu___2 + then + Obj.magic + (FStar_Tactics_Effect.tac_bind + (Prims.mk_range + "FStar.Tactics.CanonMonoid.fst" + (Prims.of_int (111)) + (Prims.of_int (17)) + (Prims.of_int (111)) + (Prims.of_int (34))) + (Prims.mk_range + "FStar.Tactics.CanonMonoid.fst" + (Prims.of_int (112)) + (Prims.of_int (8)) + (Prims.of_int (118)) + (Prims.of_int (51))) + (Obj.magic + (reification m me1)) + (fun uu___3 -> + (fun r1 -> + Obj.magic + (FStar_Tactics_Effect.tac_bind + (Prims.mk_range + "FStar.Tactics.CanonMonoid.fst" + (Prims.of_int (112)) + (Prims.of_int (17)) + (Prims.of_int (112)) + (Prims.of_int (34))) + (Prims.mk_range + "FStar.Tactics.CanonMonoid.fst" + (Prims.of_int (113)) + (Prims.of_int (8)) + (Prims.of_int (118)) + (Prims.of_int (51))) + (Obj.magic + (reification + m me2)) + (fun + uu___3 -> + (fun r2 + -> + Obj.magic + (FStar_Tactics_Effect.tac_bind + (Prims.mk_range + "FStar.Tactics.CanonMonoid.fst" + (Prims.of_int (113)) + (Prims.of_int (8)) + (Prims.of_int (113)) + (Prims.of_int (56))) + (Prims.mk_range + "FStar.Tactics.CanonMonoid.fst" + (Prims.of_int (114)) + (Prims.of_int (8)) + (Prims.of_int (118)) + (Prims.of_int (51))) + (Obj.magic + (FStar_Tactics_Effect.tac_bind + (Prims.mk_range + "FStar.Tactics.CanonMonoid.fst" + (Prims.of_int (113)) + (Prims.of_int (18)) + (Prims.of_int (113)) + (Prims.of_int (56))) + (Prims.mk_range + "FStar.Tactics.CanonMonoid.fst" + (Prims.of_int (113)) + (Prims.of_int (8)) + (Prims.of_int (113)) + (Prims.of_int (56))) + (FStar_Tactics_Effect.lift_div_tac + (fun + uu___3 -> + (fun + uu___3 -> + Obj.magic + (failwith + "Cannot evaluate open quotation at runtime")) + uu___3)) + (fun + uu___3 -> + (fun + uu___3 -> + Obj.magic + (FStar_Tactics_Derived.change_sq + uu___3)) + uu___3))) + (fun + uu___3 -> + (fun + uu___3 -> + Obj.magic + (FStar_Tactics_Effect.tac_bind + (Prims.mk_range + "FStar.Tactics.CanonMonoid.fst" + (Prims.of_int (114)) + (Prims.of_int (8)) + (Prims.of_int (114)) + (Prims.of_int (31))) + (Prims.mk_range + "FStar.Tactics.CanonMonoid.fst" + (Prims.of_int (115)) + (Prims.of_int (8)) + (Prims.of_int (118)) + (Prims.of_int (51))) + (Obj.magic + (FStar_Tactics_Derived.apply + (FStar_Reflection_Builtins.pack_ln + (FStar_Reflection_Data.Tv_FVar + (FStar_Reflection_Builtins.pack_fv + ["FStar"; + "Tactics"; + "CanonMonoid"; + "monoid_reflect"]))))) + (fun + uu___4 -> + (fun + uu___4 -> + Obj.magic + (FStar_Tactics_Builtins.norm + [ + FStar_Pervasives.delta_only + ["FStar.Tactics.CanonMonoid.mldenote"; + "FStar.Tactics.CanonMonoid.flatten"; + "FStar.List.Tot.Base.op_At"; + "FStar.List.Tot.Base.append"]])) + uu___4))) + uu___3))) + uu___3))) + uu___3)) + else + Obj.magic + (FStar_Tactics_Derived.fail + "Goal should be an equality at the right monoid type")) + uu___2)) + | uu___2 -> + Obj.magic + (FStar_Tactics_Derived.fail + "Goal should be an equality")) + uu___1))) uu___1))) uu___) \ No newline at end of file diff --git a/src/ocaml-output/FStar_Tactics_Common.ml b/ocaml/fstar-lib/generated/FStar_Tactics_Common.ml similarity index 100% rename from src/ocaml-output/FStar_Tactics_Common.ml rename to ocaml/fstar-lib/generated/FStar_Tactics_Common.ml diff --git a/src/ocaml-output/FStar_Tactics_CtrlRewrite.ml b/ocaml/fstar-lib/generated/FStar_Tactics_CtrlRewrite.ml similarity index 100% rename from src/ocaml-output/FStar_Tactics_CtrlRewrite.ml rename to ocaml/fstar-lib/generated/FStar_Tactics_CtrlRewrite.ml diff --git a/ocaml/fstar-lib/generated/FStar_Tactics_Derived.ml b/ocaml/fstar-lib/generated/FStar_Tactics_Derived.ml new file mode 100644 index 00000000000..4c8008fdce0 --- /dev/null +++ b/ocaml/fstar-lib/generated/FStar_Tactics_Derived.ml @@ -0,0 +1,4234 @@ +open Prims +exception Goal_not_trivial +let (uu___is_Goal_not_trivial : Prims.exn -> Prims.bool) = + fun projectee -> + match projectee with | Goal_not_trivial -> true | uu___ -> false +let rec (inspect_unascribe : + FStar_Reflection_Types.term -> + (FStar_Reflection_Data.term_view, unit) FStar_Tactics_Effect.tac_repr) + = + fun t -> + FStar_Tactics_Effect.tac_bind + (Prims.mk_range "FStar.Tactics.Derived.fst" (Prims.of_int (34)) + (Prims.of_int (8)) (Prims.of_int (34)) (Prims.of_int (17))) + (Prims.mk_range "FStar.Tactics.Derived.fst" (Prims.of_int (34)) + (Prims.of_int (2)) (Prims.of_int (38)) (Prims.of_int (12))) + (Obj.magic (FStar_Tactics_Builtins.inspect t)) + (fun uu___ -> + (fun uu___ -> + match uu___ with + | FStar_Reflection_Data.Tv_AscribedT (t1, uu___1, uu___2, uu___3) + -> Obj.magic (Obj.repr (inspect_unascribe t1)) + | FStar_Reflection_Data.Tv_AscribedC (t1, uu___1, uu___2, uu___3) + -> Obj.magic (Obj.repr (inspect_unascribe t1)) + | tv -> + Obj.magic + (Obj.repr + (FStar_Tactics_Effect.lift_div_tac (fun uu___1 -> tv)))) + uu___) +let (goals : + unit -> + (FStar_Tactics_Types.goal Prims.list, unit) FStar_Tactics_Effect.tac_repr) + = + fun uu___ -> + FStar_Tactics_Effect.tac_bind + (Prims.mk_range "FStar.Tactics.Derived.fst" (Prims.of_int (40)) + (Prims.of_int (42)) (Prims.of_int (40)) (Prims.of_int (50))) + (Prims.mk_range "FStar.Tactics.Derived.fst" (Prims.of_int (40)) + (Prims.of_int (33)) (Prims.of_int (40)) (Prims.of_int (50))) + (Obj.magic (FStar_Tactics_Effect.get ())) + (fun uu___1 -> + FStar_Tactics_Effect.lift_div_tac + (fun uu___2 -> FStar_Tactics_Types.goals_of uu___1)) +let (smt_goals : + unit -> + (FStar_Tactics_Types.goal Prims.list, unit) FStar_Tactics_Effect.tac_repr) + = + fun uu___ -> + FStar_Tactics_Effect.tac_bind + (Prims.mk_range "FStar.Tactics.Derived.fst" (Prims.of_int (41)) + (Prims.of_int (50)) (Prims.of_int (41)) (Prims.of_int (58))) + (Prims.mk_range "FStar.Tactics.Derived.fst" (Prims.of_int (41)) + (Prims.of_int (37)) (Prims.of_int (41)) (Prims.of_int (58))) + (Obj.magic (FStar_Tactics_Effect.get ())) + (fun uu___1 -> + FStar_Tactics_Effect.lift_div_tac + (fun uu___2 -> FStar_Tactics_Types.smt_goals_of uu___1)) +let fail : 'a . Prims.string -> ('a, unit) FStar_Tactics_Effect.tac_repr = + fun m -> FStar_Tactics_Effect.raise (FStar_Tactics_Common.TacticFailure m) +let fail_silently : + 'a . Prims.string -> ('a, unit) FStar_Tactics_Effect.tac_repr = + fun m -> + FStar_Tactics_Effect.tac_bind + (Prims.mk_range "FStar.Tactics.Derived.fst" (Prims.of_int (49)) + (Prims.of_int (4)) (Prims.of_int (49)) (Prims.of_int (17))) + (Prims.mk_range "FStar.Tactics.Derived.fst" (Prims.of_int (50)) + (Prims.of_int (4)) (Prims.of_int (50)) (Prims.of_int (30))) + (Obj.magic (FStar_Tactics_Builtins.set_urgency Prims.int_zero)) + (fun uu___ -> + (fun uu___ -> + Obj.magic + (FStar_Tactics_Effect.raise + (FStar_Tactics_Common.TacticFailure m))) uu___) +let (_cur_goal : + unit -> (FStar_Tactics_Types.goal, unit) FStar_Tactics_Effect.tac_repr) = + fun uu___ -> + FStar_Tactics_Effect.tac_bind + (Prims.mk_range "FStar.Tactics.Derived.fst" (Prims.of_int (54)) + (Prims.of_int (10)) (Prims.of_int (54)) (Prims.of_int (18))) + (Prims.mk_range "FStar.Tactics.Derived.fst" (Prims.of_int (54)) + (Prims.of_int (4)) (Prims.of_int (56)) (Prims.of_int (15))) + (Obj.magic (goals ())) + (fun uu___1 -> + (fun uu___1 -> + match uu___1 with + | [] -> Obj.magic (Obj.repr (fail "no more goals")) + | g::uu___2 -> + Obj.magic + (Obj.repr + (FStar_Tactics_Effect.lift_div_tac (fun uu___3 -> g)))) + uu___1) +let (cur_env : + unit -> (FStar_Reflection_Types.env, unit) FStar_Tactics_Effect.tac_repr) = + fun uu___ -> + FStar_Tactics_Effect.tac_bind + (Prims.mk_range "FStar.Tactics.Derived.fst" (Prims.of_int (59)) + (Prims.of_int (36)) (Prims.of_int (59)) (Prims.of_int (50))) + (Prims.mk_range "FStar.Tactics.Derived.fst" (Prims.of_int (59)) + (Prims.of_int (27)) (Prims.of_int (59)) (Prims.of_int (50))) + (Obj.magic (_cur_goal ())) + (fun uu___1 -> + FStar_Tactics_Effect.lift_div_tac + (fun uu___2 -> FStar_Tactics_Types.goal_env uu___1)) +let (cur_goal : + unit -> (FStar_Reflection_Types.typ, unit) FStar_Tactics_Effect.tac_repr) = + fun uu___ -> + FStar_Tactics_Effect.tac_bind + (Prims.mk_range "FStar.Tactics.Derived.fst" (Prims.of_int (62)) + (Prims.of_int (38)) (Prims.of_int (62)) (Prims.of_int (52))) + (Prims.mk_range "FStar.Tactics.Derived.fst" (Prims.of_int (62)) + (Prims.of_int (28)) (Prims.of_int (62)) (Prims.of_int (52))) + (Obj.magic (_cur_goal ())) + (fun uu___1 -> + FStar_Tactics_Effect.lift_div_tac + (fun uu___2 -> FStar_Tactics_Types.goal_type uu___1)) +let (cur_witness : + unit -> (FStar_Reflection_Types.term, unit) FStar_Tactics_Effect.tac_repr) + = + fun uu___ -> + FStar_Tactics_Effect.tac_bind + (Prims.mk_range "FStar.Tactics.Derived.fst" (Prims.of_int (65)) + (Prims.of_int (45)) (Prims.of_int (65)) (Prims.of_int (59))) + (Prims.mk_range "FStar.Tactics.Derived.fst" (Prims.of_int (65)) + (Prims.of_int (32)) (Prims.of_int (65)) (Prims.of_int (59))) + (Obj.magic (_cur_goal ())) + (fun uu___1 -> + FStar_Tactics_Effect.lift_div_tac + (fun uu___2 -> FStar_Tactics_Types.goal_witness uu___1)) +let (cur_goal_safe : + unit -> (FStar_Tactics_Types.goal, unit) FStar_Tactics_Effect.tac_repr) = + fun uu___ -> + FStar_Tactics_Effect.tac_bind + (Prims.mk_range "FStar.Tactics.Derived.fst" (Prims.of_int (72)) + (Prims.of_int (9)) (Prims.of_int (72)) (Prims.of_int (26))) + (Prims.mk_range "FStar.Tactics.Derived.fst" (Prims.of_int (72)) + (Prims.of_int (3)) (Prims.of_int (73)) (Prims.of_int (16))) + (Obj.magic + (FStar_Tactics_Effect.tac_bind + (Prims.mk_range "FStar.Tactics.Derived.fst" (Prims.of_int (72)) + (Prims.of_int (18)) (Prims.of_int (72)) (Prims.of_int (26))) + (Prims.mk_range "FStar.Tactics.Derived.fst" (Prims.of_int (72)) + (Prims.of_int (9)) (Prims.of_int (72)) (Prims.of_int (26))) + (Obj.magic (FStar_Tactics_Effect.get ())) + (fun uu___1 -> + FStar_Tactics_Effect.lift_div_tac + (fun uu___2 -> FStar_Tactics_Types.goals_of uu___1)))) + (fun uu___1 -> + FStar_Tactics_Effect.lift_div_tac + (fun uu___2 -> match uu___1 with | g::uu___3 -> g)) +let (cur_binders : + unit -> + (FStar_Reflection_Types.binders, unit) FStar_Tactics_Effect.tac_repr) + = + fun uu___ -> + FStar_Tactics_Effect.tac_bind + (Prims.mk_range "FStar.Tactics.Derived.fst" (Prims.of_int (77)) + (Prims.of_int (19)) (Prims.of_int (77)) (Prims.of_int (31))) + (Prims.mk_range "FStar.Tactics.Derived.fst" (Prims.of_int (77)) + (Prims.of_int (4)) (Prims.of_int (77)) (Prims.of_int (31))) + (Obj.magic (cur_env ())) + (fun uu___1 -> + FStar_Tactics_Effect.lift_div_tac + (fun uu___2 -> FStar_Reflection_Builtins.binders_of_env uu___1)) +let with_policy : + 'a . + FStar_Tactics_Types.guard_policy -> + (unit -> ('a, unit) FStar_Tactics_Effect.tac_repr) -> + ('a, unit) FStar_Tactics_Effect.tac_repr + = + fun pol -> + fun f -> + FStar_Tactics_Effect.tac_bind + (Prims.mk_range "FStar.Tactics.Derived.fst" (Prims.of_int (81)) + (Prims.of_int (18)) (Prims.of_int (81)) (Prims.of_int (37))) + (Prims.mk_range "FStar.Tactics.Derived.fst" (Prims.of_int (82)) + (Prims.of_int (4)) (Prims.of_int (85)) (Prims.of_int (5))) + (Obj.magic (FStar_Tactics_Builtins.get_guard_policy ())) + (fun uu___ -> + (fun old_pol -> + Obj.magic + (FStar_Tactics_Effect.tac_bind + (Prims.mk_range "FStar.Tactics.Derived.fst" + (Prims.of_int (82)) (Prims.of_int (4)) + (Prims.of_int (82)) (Prims.of_int (24))) + (Prims.mk_range "FStar.Tactics.Derived.fst" + (Prims.of_int (83)) (Prims.of_int (4)) + (Prims.of_int (85)) (Prims.of_int (5))) + (Obj.magic (FStar_Tactics_Builtins.set_guard_policy pol)) + (fun uu___ -> + (fun uu___ -> + Obj.magic + (FStar_Tactics_Effect.tac_bind + (Prims.mk_range "FStar.Tactics.Derived.fst" + (Prims.of_int (83)) (Prims.of_int (12)) + (Prims.of_int (83)) (Prims.of_int (16))) + (Prims.mk_range "FStar.Tactics.Derived.fst" + (Prims.of_int (84)) (Prims.of_int (4)) + (Prims.of_int (85)) (Prims.of_int (5))) + (Obj.magic (f ())) + (fun uu___1 -> + (fun r -> + Obj.magic + (FStar_Tactics_Effect.tac_bind + (Prims.mk_range + "FStar.Tactics.Derived.fst" + (Prims.of_int (84)) + (Prims.of_int (4)) + (Prims.of_int (84)) + (Prims.of_int (28))) + (Prims.mk_range + "FStar.Tactics.Derived.fst" + (Prims.of_int (83)) + (Prims.of_int (8)) + (Prims.of_int (83)) + (Prims.of_int (9))) + (Obj.magic + (FStar_Tactics_Builtins.set_guard_policy + old_pol)) + (fun uu___1 -> + FStar_Tactics_Effect.lift_div_tac + (fun uu___2 -> r)))) uu___1))) + uu___))) uu___) +let (exact : + FStar_Reflection_Types.term -> (unit, unit) FStar_Tactics_Effect.tac_repr) + = + fun t -> + with_policy FStar_Tactics_Types.SMT + (fun uu___ -> FStar_Tactics_Builtins.t_exact true false t) +let (exact_with_ref : + FStar_Reflection_Types.term -> (unit, unit) FStar_Tactics_Effect.tac_repr) + = + fun t -> + with_policy FStar_Tactics_Types.SMT + (fun uu___ -> FStar_Tactics_Builtins.t_exact true true t) +let (trivial : unit -> (unit, unit) FStar_Tactics_Effect.tac_repr) = + fun uu___ -> + FStar_Tactics_Effect.tac_bind + (Prims.mk_range "FStar.Tactics.Derived.fst" (Prims.of_int (99)) + (Prims.of_int (2)) (Prims.of_int (99)) (Prims.of_int (61))) + (Prims.mk_range "FStar.Tactics.Derived.fst" (Prims.of_int (100)) + (Prims.of_int (2)) (Prims.of_int (103)) (Prims.of_int (31))) + (Obj.magic + (FStar_Tactics_Builtins.norm + [FStar_Pervasives.iota; + FStar_Pervasives.zeta; + FStar_Pervasives.reify_; + FStar_Pervasives.delta; + FStar_Pervasives.primops; + FStar_Pervasives.simplify; + FStar_Pervasives.unmeta])) + (fun uu___1 -> + (fun uu___1 -> + Obj.magic + (FStar_Tactics_Effect.tac_bind + (Prims.mk_range "FStar.Tactics.Derived.fst" + (Prims.of_int (100)) (Prims.of_int (10)) + (Prims.of_int (100)) (Prims.of_int (21))) + (Prims.mk_range "FStar.Tactics.Derived.fst" + (Prims.of_int (101)) (Prims.of_int (2)) + (Prims.of_int (103)) (Prims.of_int (31))) + (Obj.magic (cur_goal ())) + (fun uu___2 -> + (fun g -> + Obj.magic + (FStar_Tactics_Effect.tac_bind + (Prims.mk_range "FStar.Tactics.Derived.fst" + (Prims.of_int (101)) (Prims.of_int (8)) + (Prims.of_int (101)) (Prims.of_int (25))) + (Prims.mk_range "FStar.Tactics.Derived.fst" + (Prims.of_int (101)) (Prims.of_int (2)) + (Prims.of_int (103)) (Prims.of_int (31))) + (Obj.magic + (FStar_Reflection_Formula.term_as_formula g)) + (fun uu___2 -> + (fun uu___2 -> + match uu___2 with + | FStar_Reflection_Formula.True_ -> + Obj.magic + (exact + (FStar_Reflection_Builtins.pack_ln + (FStar_Reflection_Data.Tv_Const + FStar_Reflection_Data.C_Unit))) + | uu___3 -> + Obj.magic + (FStar_Tactics_Effect.raise + Goal_not_trivial)) uu___2))) + uu___2))) uu___1) +let (dismiss : unit -> (unit, unit) FStar_Tactics_Effect.tac_repr) = + fun uu___ -> + FStar_Tactics_Effect.tac_bind + (Prims.mk_range "FStar.Tactics.Derived.fst" (Prims.of_int (115)) + (Prims.of_int (10)) (Prims.of_int (115)) (Prims.of_int (18))) + (Prims.mk_range "FStar.Tactics.Derived.fst" (Prims.of_int (115)) + (Prims.of_int (4)) (Prims.of_int (117)) (Prims.of_int (27))) + (Obj.magic (goals ())) + (fun uu___1 -> + (fun uu___1 -> + match uu___1 with + | [] -> Obj.magic (fail "dismiss: no more goals") + | uu___2::gs -> Obj.magic (FStar_Tactics_Builtins.set_goals gs)) + uu___1) +let (flip : unit -> (unit, unit) FStar_Tactics_Effect.tac_repr) = + fun uu___ -> + FStar_Tactics_Effect.tac_bind + (Prims.mk_range "FStar.Tactics.Derived.fst" (Prims.of_int (121)) + (Prims.of_int (13)) (Prims.of_int (121)) (Prims.of_int (21))) + (Prims.mk_range "FStar.Tactics.Derived.fst" (Prims.of_int (122)) + (Prims.of_int (4)) (Prims.of_int (124)) (Prims.of_int (42))) + (Obj.magic (goals ())) + (fun uu___1 -> + (fun gs -> + Obj.magic + (FStar_Tactics_Effect.tac_bind + (Prims.mk_range "FStar.Tactics.Derived.fst" + (Prims.of_int (122)) (Prims.of_int (10)) + (Prims.of_int (122)) (Prims.of_int (18))) + (Prims.mk_range "FStar.Tactics.Derived.fst" + (Prims.of_int (122)) (Prims.of_int (4)) + (Prims.of_int (124)) (Prims.of_int (42))) + (Obj.magic (goals ())) + (fun uu___1 -> + (fun uu___1 -> + match uu___1 with + | [] -> Obj.magic (fail "flip: less than two goals") + | uu___2::[] -> + Obj.magic (fail "flip: less than two goals") + | g1::g2::gs1 -> + Obj.magic + (FStar_Tactics_Builtins.set_goals (g2 :: g1 :: + gs1))) uu___1))) uu___1) +let (qed : unit -> (unit, unit) FStar_Tactics_Effect.tac_repr) = + fun uu___ -> + FStar_Tactics_Effect.tac_bind + (Prims.mk_range "FStar.Tactics.Derived.fst" (Prims.of_int (128)) + (Prims.of_int (10)) (Prims.of_int (128)) (Prims.of_int (18))) + (Prims.mk_range "FStar.Tactics.Derived.fst" (Prims.of_int (128)) + (Prims.of_int (4)) (Prims.of_int (130)) (Prims.of_int (32))) + (Obj.magic (goals ())) + (fun uu___1 -> + (fun uu___1 -> + match uu___1 with + | [] -> + Obj.magic + (Obj.repr + (FStar_Tactics_Effect.lift_div_tac (fun uu___2 -> ()))) + | uu___2 -> Obj.magic (Obj.repr (fail "qed: not done!"))) uu___1) +let (debug : Prims.string -> (unit, unit) FStar_Tactics_Effect.tac_repr) = + fun m -> + FStar_Tactics_Effect.tac_bind + (Prims.mk_range "FStar.Tactics.Derived.fst" (Prims.of_int (136)) + (Prims.of_int (7)) (Prims.of_int (136)) (Prims.of_int (19))) + (Prims.mk_range "FStar.Tactics.Derived.fst" (Prims.of_int (136)) + (Prims.of_int (4)) (Prims.of_int (136)) (Prims.of_int (32))) + (Obj.magic (FStar_Tactics_Builtins.debugging ())) + (fun uu___ -> + (fun uu___ -> + if uu___ + then Obj.magic (Obj.repr (FStar_Tactics_Builtins.print m)) + else + Obj.magic + (Obj.repr + (FStar_Tactics_Effect.lift_div_tac (fun uu___2 -> ())))) + uu___) +let (smt : unit -> (unit, unit) FStar_Tactics_Effect.tac_repr) = + fun uu___ -> + FStar_Tactics_Effect.tac_bind + (Prims.mk_range "FStar.Tactics.Derived.fst" (Prims.of_int (143)) + (Prims.of_int (10)) (Prims.of_int (143)) (Prims.of_int (32))) + (Prims.mk_range "FStar.Tactics.Derived.fst" (Prims.of_int (143)) + (Prims.of_int (4)) (Prims.of_int (149)) (Prims.of_int (11))) + (Obj.magic + (FStar_Tactics_Effect.tac_bind + (Prims.mk_range "FStar.Tactics.Derived.fst" (Prims.of_int (143)) + (Prims.of_int (10)) (Prims.of_int (143)) (Prims.of_int (18))) + (Prims.mk_range "FStar.Tactics.Derived.fst" (Prims.of_int (143)) + (Prims.of_int (10)) (Prims.of_int (143)) (Prims.of_int (32))) + (Obj.magic (goals ())) + (fun uu___1 -> + (fun uu___1 -> + Obj.magic + (FStar_Tactics_Effect.tac_bind + (Prims.mk_range "FStar.Tactics.Derived.fst" + (Prims.of_int (143)) (Prims.of_int (20)) + (Prims.of_int (143)) (Prims.of_int (32))) + (Prims.mk_range "FStar.Tactics.Derived.fst" + (Prims.of_int (143)) (Prims.of_int (10)) + (Prims.of_int (143)) (Prims.of_int (32))) + (Obj.magic (smt_goals ())) + (fun uu___2 -> + FStar_Tactics_Effect.lift_div_tac + (fun uu___3 -> (uu___1, uu___2))))) uu___1))) + (fun uu___1 -> + (fun uu___1 -> + match uu___1 with + | ([], uu___2) -> Obj.magic (fail "smt: no active goals") + | (g::gs, gs') -> + Obj.magic + (FStar_Tactics_Effect.tac_bind + (Prims.mk_range "FStar.Tactics.Derived.fst" + (Prims.of_int (147)) (Prims.of_int (8)) + (Prims.of_int (147)) (Prims.of_int (20))) + (Prims.mk_range "FStar.Tactics.Derived.fst" + (Prims.of_int (148)) (Prims.of_int (8)) + (Prims.of_int (148)) (Prims.of_int (32))) + (Obj.magic (FStar_Tactics_Builtins.set_goals gs)) + (fun uu___2 -> + (fun uu___2 -> + Obj.magic + (FStar_Tactics_Builtins.set_smt_goals (g :: gs'))) + uu___2))) uu___1) +let (idtac : unit -> (unit, unit) FStar_Tactics_Effect.tac_repr) = + fun uu___ -> + (fun uu___ -> + Obj.magic (FStar_Tactics_Effect.lift_div_tac (fun uu___1 -> ()))) + uu___ +let (later : unit -> (unit, unit) FStar_Tactics_Effect.tac_repr) = + fun uu___ -> + FStar_Tactics_Effect.tac_bind + (Prims.mk_range "FStar.Tactics.Derived.fst" (Prims.of_int (155)) + (Prims.of_int (10)) (Prims.of_int (155)) (Prims.of_int (18))) + (Prims.mk_range "FStar.Tactics.Derived.fst" (Prims.of_int (155)) + (Prims.of_int (4)) (Prims.of_int (157)) (Prims.of_int (33))) + (Obj.magic (goals ())) + (fun uu___1 -> + (fun uu___1 -> + match uu___1 with + | g::gs -> + Obj.magic + (FStar_Tactics_Builtins.set_goals + (FStar_List_Tot_Base.op_At gs [g])) + | uu___2 -> Obj.magic (fail "later: no goals")) uu___1) +let (apply : + FStar_Reflection_Types.term -> (unit, unit) FStar_Tactics_Effect.tac_repr) + = fun t -> FStar_Tactics_Builtins.t_apply true false false t +let (apply_noinst : + FStar_Reflection_Types.term -> (unit, unit) FStar_Tactics_Effect.tac_repr) + = fun t -> FStar_Tactics_Builtins.t_apply true true false t +let (apply_lemma : + FStar_Reflection_Types.term -> (unit, unit) FStar_Tactics_Effect.tac_repr) + = fun t -> FStar_Tactics_Builtins.t_apply_lemma false false t +let (trefl : unit -> (unit, unit) FStar_Tactics_Effect.tac_repr) = + fun uu___ -> FStar_Tactics_Builtins.t_trefl false +let (trefl_guard : unit -> (unit, unit) FStar_Tactics_Effect.tac_repr) = + fun uu___ -> FStar_Tactics_Builtins.t_trefl true +let (commute_applied_match : + unit -> (unit, unit) FStar_Tactics_Effect.tac_repr) = + fun uu___ -> FStar_Tactics_Builtins.t_commute_applied_match () +let (apply_lemma_noinst : + FStar_Reflection_Types.term -> (unit, unit) FStar_Tactics_Effect.tac_repr) + = fun t -> FStar_Tactics_Builtins.t_apply_lemma true false t +let (apply_lemma_rw : + FStar_Reflection_Types.term -> (unit, unit) FStar_Tactics_Effect.tac_repr) + = fun t -> FStar_Tactics_Builtins.t_apply_lemma false true t +let (apply_raw : + FStar_Reflection_Types.term -> (unit, unit) FStar_Tactics_Effect.tac_repr) + = fun t -> FStar_Tactics_Builtins.t_apply false false false t +let (exact_guard : + FStar_Reflection_Types.term -> (unit, unit) FStar_Tactics_Effect.tac_repr) + = + fun t -> + with_policy FStar_Tactics_Types.Goal + (fun uu___ -> FStar_Tactics_Builtins.t_exact true false t) +let (t_pointwise : + FStar_Tactics_Types.direction -> + (unit -> (unit, unit) FStar_Tactics_Effect.tac_repr) -> + (unit, unit) FStar_Tactics_Effect.tac_repr) + = + fun d -> + fun tau -> + FStar_Tactics_Effect.tac_bind + (Prims.mk_range "FStar.Tactics.Derived.fst" (Prims.of_int (216)) + (Prims.of_int (4)) (Prims.of_int (216)) (Prims.of_int (18))) + (Prims.mk_range "FStar.Tactics.Derived.fst" (Prims.of_int (218)) + (Prims.of_int (2)) (Prims.of_int (221)) (Prims.of_int (24))) + (FStar_Tactics_Effect.lift_div_tac + (fun uu___1 -> + fun uu___ -> + (fun uu___ -> + fun t -> + Obj.magic + (FStar_Tactics_Effect.lift_div_tac + (fun uu___1 -> (true, FStar_Tactics_Types.Continue)))) + uu___1 uu___)) + (fun uu___ -> + (fun ctrl -> + Obj.magic + (FStar_Tactics_Effect.tac_bind + (Prims.mk_range "FStar.Tactics.Derived.fst" + (Prims.of_int (219)) (Prims.of_int (4)) + (Prims.of_int (219)) (Prims.of_int (10))) + (Prims.mk_range "FStar.Tactics.Derived.fst" + (Prims.of_int (221)) (Prims.of_int (2)) + (Prims.of_int (221)) (Prims.of_int (24))) + (FStar_Tactics_Effect.lift_div_tac + (fun uu___ -> fun uu___1 -> tau ())) + (fun uu___ -> + (fun rw -> + Obj.magic + (FStar_Tactics_Builtins.ctrl_rewrite d ctrl rw)) + uu___))) uu___) +let (topdown_rewrite : + (FStar_Reflection_Types.term -> + ((Prims.bool * Prims.int), unit) FStar_Tactics_Effect.tac_repr) + -> + (unit -> (unit, unit) FStar_Tactics_Effect.tac_repr) -> + (unit, unit) FStar_Tactics_Effect.tac_repr) + = + fun ctrl -> + fun rw -> + FStar_Tactics_Effect.tac_bind + (Prims.mk_range "FStar.Tactics.Derived.fst" (Prims.of_int (246)) + (Prims.of_int (6)) (Prims.of_int (254)) (Prims.of_int (10))) + (Prims.mk_range "FStar.Tactics.Derived.fst" (Prims.of_int (256)) + (Prims.of_int (4)) (Prims.of_int (256)) (Prims.of_int (33))) + (FStar_Tactics_Effect.lift_div_tac + (fun uu___ -> + fun t -> + FStar_Tactics_Effect.tac_bind + (Prims.mk_range "FStar.Tactics.Derived.fst" + (Prims.of_int (246)) (Prims.of_int (17)) + (Prims.of_int (246)) (Prims.of_int (23))) + (Prims.mk_range "FStar.Tactics.Derived.fst" + (Prims.of_int (246)) (Prims.of_int (6)) + (Prims.of_int (254)) (Prims.of_int (10))) + (Obj.magic (ctrl t)) + (fun uu___1 -> + (fun uu___1 -> + match uu___1 with + | (b, i) -> + Obj.magic + (FStar_Tactics_Effect.tac_bind + (Prims.mk_range "FStar.Tactics.Derived.fst" + (Prims.of_int (248)) (Prims.of_int (8)) + (Prims.of_int (252)) (Prims.of_int (58))) + (Prims.mk_range "FStar.Tactics.Derived.fst" + (Prims.of_int (254)) (Prims.of_int (6)) + (Prims.of_int (254)) (Prims.of_int (10))) + (match i with + | uu___2 when uu___2 = Prims.int_zero -> + Obj.magic + (Obj.repr + (FStar_Tactics_Effect.lift_div_tac + (fun uu___3 -> + FStar_Tactics_Types.Continue))) + | uu___2 when uu___2 = Prims.int_one -> + Obj.magic + (Obj.repr + (FStar_Tactics_Effect.lift_div_tac + (fun uu___3 -> + FStar_Tactics_Types.Skip))) + | uu___2 when uu___2 = (Prims.of_int (2)) + -> + Obj.magic + (Obj.repr + (FStar_Tactics_Effect.lift_div_tac + (fun uu___3 -> + FStar_Tactics_Types.Abort))) + | uu___2 -> + Obj.magic + (Obj.repr + (fail + "topdown_rewrite: bad value from ctrl"))) + (fun f -> + FStar_Tactics_Effect.lift_div_tac + (fun uu___2 -> (b, f))))) uu___1))) + (fun uu___ -> + (fun ctrl' -> + Obj.magic + (FStar_Tactics_Builtins.ctrl_rewrite + FStar_Tactics_Types.TopDown ctrl' rw)) uu___) +let (pointwise : + (unit -> (unit, unit) FStar_Tactics_Effect.tac_repr) -> + (unit, unit) FStar_Tactics_Effect.tac_repr) + = fun tau -> t_pointwise FStar_Tactics_Types.BottomUp tau +let (pointwise' : + (unit -> (unit, unit) FStar_Tactics_Effect.tac_repr) -> + (unit, unit) FStar_Tactics_Effect.tac_repr) + = fun tau -> t_pointwise FStar_Tactics_Types.TopDown tau +let (cur_module : + unit -> (FStar_Reflection_Types.name, unit) FStar_Tactics_Effect.tac_repr) + = + fun uu___ -> + FStar_Tactics_Effect.tac_bind + (Prims.mk_range "FStar.Tactics.Derived.fst" (Prims.of_int (262)) + (Prims.of_int (13)) (Prims.of_int (262)) (Prims.of_int (25))) + (Prims.mk_range "FStar.Tactics.Derived.fst" (Prims.of_int (262)) + (Prims.of_int (4)) (Prims.of_int (262)) (Prims.of_int (25))) + (Obj.magic (FStar_Tactics_Builtins.top_env ())) + (fun uu___1 -> + FStar_Tactics_Effect.lift_div_tac + (fun uu___2 -> FStar_Reflection_Builtins.moduleof uu___1)) +let (open_modules : + unit -> + (FStar_Reflection_Types.name Prims.list, unit) + FStar_Tactics_Effect.tac_repr) + = + fun uu___ -> + FStar_Tactics_Effect.tac_bind + (Prims.mk_range "FStar.Tactics.Derived.fst" (Prims.of_int (265)) + (Prims.of_int (21)) (Prims.of_int (265)) (Prims.of_int (33))) + (Prims.mk_range "FStar.Tactics.Derived.fst" (Prims.of_int (265)) + (Prims.of_int (4)) (Prims.of_int (265)) (Prims.of_int (33))) + (Obj.magic (FStar_Tactics_Builtins.top_env ())) + (fun uu___1 -> + FStar_Tactics_Effect.lift_div_tac + (fun uu___2 -> FStar_Reflection_Builtins.env_open_modules uu___1)) +let (fresh_uvar : + FStar_Reflection_Types.typ FStar_Pervasives_Native.option -> + (FStar_Reflection_Types.term, unit) FStar_Tactics_Effect.tac_repr) + = + fun o -> + FStar_Tactics_Effect.tac_bind + (Prims.mk_range "FStar.Tactics.Derived.fst" (Prims.of_int (268)) + (Prims.of_int (12)) (Prims.of_int (268)) (Prims.of_int (22))) + (Prims.mk_range "FStar.Tactics.Derived.fst" (Prims.of_int (269)) + (Prims.of_int (4)) (Prims.of_int (269)) (Prims.of_int (16))) + (Obj.magic (cur_env ())) + (fun uu___ -> + (fun e -> Obj.magic (FStar_Tactics_Builtins.uvar_env e o)) uu___) +let (unify : + FStar_Reflection_Types.term -> + FStar_Reflection_Types.term -> + (Prims.bool, unit) FStar_Tactics_Effect.tac_repr) + = + fun t1 -> + fun t2 -> + FStar_Tactics_Effect.tac_bind + (Prims.mk_range "FStar.Tactics.Derived.fst" (Prims.of_int (272)) + (Prims.of_int (12)) (Prims.of_int (272)) (Prims.of_int (22))) + (Prims.mk_range "FStar.Tactics.Derived.fst" (Prims.of_int (273)) + (Prims.of_int (4)) (Prims.of_int (273)) (Prims.of_int (21))) + (Obj.magic (cur_env ())) + (fun uu___ -> + (fun e -> Obj.magic (FStar_Tactics_Builtins.unify_env e t1 t2)) + uu___) +let (unify_guard : + FStar_Reflection_Types.term -> + FStar_Reflection_Types.term -> + (Prims.bool, unit) FStar_Tactics_Effect.tac_repr) + = + fun t1 -> + fun t2 -> + FStar_Tactics_Effect.tac_bind + (Prims.mk_range "FStar.Tactics.Derived.fst" (Prims.of_int (276)) + (Prims.of_int (12)) (Prims.of_int (276)) (Prims.of_int (22))) + (Prims.mk_range "FStar.Tactics.Derived.fst" (Prims.of_int (277)) + (Prims.of_int (4)) (Prims.of_int (277)) (Prims.of_int (27))) + (Obj.magic (cur_env ())) + (fun uu___ -> + (fun e -> + Obj.magic (FStar_Tactics_Builtins.unify_guard_env e t1 t2)) + uu___) +let (tmatch : + FStar_Reflection_Types.term -> + FStar_Reflection_Types.term -> + (Prims.bool, unit) FStar_Tactics_Effect.tac_repr) + = + fun t1 -> + fun t2 -> + FStar_Tactics_Effect.tac_bind + (Prims.mk_range "FStar.Tactics.Derived.fst" (Prims.of_int (280)) + (Prims.of_int (12)) (Prims.of_int (280)) (Prims.of_int (22))) + (Prims.mk_range "FStar.Tactics.Derived.fst" (Prims.of_int (281)) + (Prims.of_int (4)) (Prims.of_int (281)) (Prims.of_int (21))) + (Obj.magic (cur_env ())) + (fun uu___ -> + (fun e -> Obj.magic (FStar_Tactics_Builtins.match_env e t1 t2)) + uu___) +let divide : + 'a 'b . + Prims.int -> + (unit -> ('a, unit) FStar_Tactics_Effect.tac_repr) -> + (unit -> ('b, unit) FStar_Tactics_Effect.tac_repr) -> + (('a * 'b), unit) FStar_Tactics_Effect.tac_repr + = + fun n -> + fun l -> + fun r -> + FStar_Tactics_Effect.tac_bind + (Prims.mk_range "FStar.Tactics.Derived.fst" (Prims.of_int (287)) + (Prims.of_int (4)) (Prims.of_int (288)) (Prims.of_int (31))) + (Prims.mk_range "FStar.Tactics.Derived.fst" (Prims.of_int (289)) + (Prims.of_int (4)) (Prims.of_int (301)) (Prims.of_int (10))) + (if n < Prims.int_zero + then Obj.magic (Obj.repr (fail "divide: negative n")) + else + Obj.magic + (Obj.repr + (FStar_Tactics_Effect.lift_div_tac (fun uu___1 -> ())))) + (fun uu___ -> + (fun uu___ -> + Obj.magic + (FStar_Tactics_Effect.tac_bind + (Prims.mk_range "FStar.Tactics.Derived.fst" + (Prims.of_int (289)) (Prims.of_int (18)) + (Prims.of_int (289)) (Prims.of_int (40))) + (Prims.mk_range "FStar.Tactics.Derived.fst" + (Prims.of_int (289)) (Prims.of_int (4)) + (Prims.of_int (301)) (Prims.of_int (10))) + (Obj.magic + (FStar_Tactics_Effect.tac_bind + (Prims.mk_range "FStar.Tactics.Derived.fst" + (Prims.of_int (289)) (Prims.of_int (18)) + (Prims.of_int (289)) (Prims.of_int (26))) + (Prims.mk_range "FStar.Tactics.Derived.fst" + (Prims.of_int (289)) (Prims.of_int (18)) + (Prims.of_int (289)) (Prims.of_int (40))) + (Obj.magic (goals ())) + (fun uu___1 -> + (fun uu___1 -> + Obj.magic + (FStar_Tactics_Effect.tac_bind + (Prims.mk_range + "FStar.Tactics.Derived.fst" + (Prims.of_int (289)) + (Prims.of_int (28)) + (Prims.of_int (289)) + (Prims.of_int (40))) + (Prims.mk_range + "FStar.Tactics.Derived.fst" + (Prims.of_int (289)) + (Prims.of_int (18)) + (Prims.of_int (289)) + (Prims.of_int (40))) + (Obj.magic (smt_goals ())) + (fun uu___2 -> + FStar_Tactics_Effect.lift_div_tac + (fun uu___3 -> (uu___1, uu___2))))) + uu___1))) + (fun uu___1 -> + (fun uu___1 -> + match uu___1 with + | (gs, sgs) -> + Obj.magic + (FStar_Tactics_Effect.tac_bind + (Prims.mk_range + "FStar.Tactics.Derived.fst" + (Prims.of_int (290)) + (Prims.of_int (19)) + (Prims.of_int (290)) + (Prims.of_int (45))) + (Prims.mk_range + "FStar.Tactics.Derived.fst" + (Prims.of_int (290)) + (Prims.of_int (4)) + (Prims.of_int (301)) + (Prims.of_int (10))) + (FStar_Tactics_Effect.lift_div_tac + (fun uu___2 -> + FStar_List_Tot_Base.splitAt n gs)) + (fun uu___2 -> + (fun uu___2 -> + match uu___2 with + | (gs1, gs2) -> + Obj.magic + (FStar_Tactics_Effect.tac_bind + (Prims.mk_range + "FStar.Tactics.Derived.fst" + (Prims.of_int (292)) + (Prims.of_int (4)) + (Prims.of_int (292)) + (Prims.of_int (17))) + (Prims.mk_range + "FStar.Tactics.Derived.fst" + (Prims.of_int (292)) + (Prims.of_int (19)) + (Prims.of_int (301)) + (Prims.of_int (10))) + (Obj.magic + (FStar_Tactics_Builtins.set_goals + gs1)) + (fun uu___3 -> + (fun uu___3 -> + Obj.magic + (FStar_Tactics_Effect.tac_bind + (Prims.mk_range + "FStar.Tactics.Derived.fst" + (Prims.of_int (292)) + (Prims.of_int (19)) + (Prims.of_int (292)) + (Prims.of_int (35))) + (Prims.mk_range + "FStar.Tactics.Derived.fst" + (Prims.of_int (293)) + (Prims.of_int (4)) + (Prims.of_int (301)) + (Prims.of_int (10))) + (Obj.magic + (FStar_Tactics_Builtins.set_smt_goals + [])) + (fun uu___4 -> + (fun uu___4 + -> + Obj.magic + (FStar_Tactics_Effect.tac_bind + (Prims.mk_range + "FStar.Tactics.Derived.fst" + (Prims.of_int (293)) + (Prims.of_int (12)) + (Prims.of_int (293)) + (Prims.of_int (16))) + (Prims.mk_range + "FStar.Tactics.Derived.fst" + (Prims.of_int (294)) + (Prims.of_int (4)) + (Prims.of_int (301)) + (Prims.of_int (10))) + (Obj.magic + (l ())) + (fun + uu___5 -> + (fun x -> + Obj.magic + (FStar_Tactics_Effect.tac_bind + (Prims.mk_range + "FStar.Tactics.Derived.fst" + (Prims.of_int (294)) + (Prims.of_int (20)) + (Prims.of_int (294)) + (Prims.of_int (42))) + (Prims.mk_range + "FStar.Tactics.Derived.fst" + (Prims.of_int (294)) + (Prims.of_int (4)) + (Prims.of_int (301)) + (Prims.of_int (10))) + (Obj.magic + (FStar_Tactics_Effect.tac_bind + (Prims.mk_range + "FStar.Tactics.Derived.fst" + (Prims.of_int (294)) + (Prims.of_int (20)) + (Prims.of_int (294)) + (Prims.of_int (28))) + (Prims.mk_range + "FStar.Tactics.Derived.fst" + (Prims.of_int (294)) + (Prims.of_int (20)) + (Prims.of_int (294)) + (Prims.of_int (42))) + (Obj.magic + (goals ())) + (fun + uu___5 -> + (fun + uu___5 -> + Obj.magic + (FStar_Tactics_Effect.tac_bind + (Prims.mk_range + "FStar.Tactics.Derived.fst" + (Prims.of_int (294)) + (Prims.of_int (30)) + (Prims.of_int (294)) + (Prims.of_int (42))) + (Prims.mk_range + "FStar.Tactics.Derived.fst" + (Prims.of_int (294)) + (Prims.of_int (20)) + (Prims.of_int (294)) + (Prims.of_int (42))) + (Obj.magic + (smt_goals + ())) + (fun + uu___6 -> + FStar_Tactics_Effect.lift_div_tac + (fun + uu___7 -> + (uu___5, + uu___6))))) + uu___5))) + (fun + uu___5 -> + (fun + uu___5 -> + match uu___5 + with + | + (gsl, + sgsl) -> + Obj.magic + (FStar_Tactics_Effect.tac_bind + (Prims.mk_range + "FStar.Tactics.Derived.fst" + (Prims.of_int (296)) + (Prims.of_int (4)) + (Prims.of_int (296)) + (Prims.of_int (17))) + (Prims.mk_range + "FStar.Tactics.Derived.fst" + (Prims.of_int (296)) + (Prims.of_int (19)) + (Prims.of_int (301)) + (Prims.of_int (10))) + (Obj.magic + (FStar_Tactics_Builtins.set_goals + gs2)) + (fun + uu___6 -> + (fun + uu___6 -> + Obj.magic + (FStar_Tactics_Effect.tac_bind + (Prims.mk_range + "FStar.Tactics.Derived.fst" + (Prims.of_int (296)) + (Prims.of_int (19)) + (Prims.of_int (296)) + (Prims.of_int (35))) + (Prims.mk_range + "FStar.Tactics.Derived.fst" + (Prims.of_int (297)) + (Prims.of_int (4)) + (Prims.of_int (301)) + (Prims.of_int (10))) + (Obj.magic + (FStar_Tactics_Builtins.set_smt_goals + [])) + (fun + uu___7 -> + (fun + uu___7 -> + Obj.magic + (FStar_Tactics_Effect.tac_bind + (Prims.mk_range + "FStar.Tactics.Derived.fst" + (Prims.of_int (297)) + (Prims.of_int (12)) + (Prims.of_int (297)) + (Prims.of_int (16))) + (Prims.mk_range + "FStar.Tactics.Derived.fst" + (Prims.of_int (298)) + (Prims.of_int (4)) + (Prims.of_int (301)) + (Prims.of_int (10))) + (Obj.magic + (r ())) + (fun + uu___8 -> + (fun y -> + Obj.magic + (FStar_Tactics_Effect.tac_bind + (Prims.mk_range + "FStar.Tactics.Derived.fst" + (Prims.of_int (298)) + (Prims.of_int (20)) + (Prims.of_int (298)) + (Prims.of_int (42))) + (Prims.mk_range + "FStar.Tactics.Derived.fst" + (Prims.of_int (298)) + (Prims.of_int (4)) + (Prims.of_int (301)) + (Prims.of_int (10))) + (Obj.magic + (FStar_Tactics_Effect.tac_bind + (Prims.mk_range + "FStar.Tactics.Derived.fst" + (Prims.of_int (298)) + (Prims.of_int (20)) + (Prims.of_int (298)) + (Prims.of_int (28))) + (Prims.mk_range + "FStar.Tactics.Derived.fst" + (Prims.of_int (298)) + (Prims.of_int (20)) + (Prims.of_int (298)) + (Prims.of_int (42))) + (Obj.magic + (goals ())) + (fun + uu___8 -> + (fun + uu___8 -> + Obj.magic + (FStar_Tactics_Effect.tac_bind + (Prims.mk_range + "FStar.Tactics.Derived.fst" + (Prims.of_int (298)) + (Prims.of_int (30)) + (Prims.of_int (298)) + (Prims.of_int (42))) + (Prims.mk_range + "FStar.Tactics.Derived.fst" + (Prims.of_int (298)) + (Prims.of_int (20)) + (Prims.of_int (298)) + (Prims.of_int (42))) + (Obj.magic + (smt_goals + ())) + (fun + uu___9 -> + FStar_Tactics_Effect.lift_div_tac + (fun + uu___10 + -> + (uu___8, + uu___9))))) + uu___8))) + (fun + uu___8 -> + (fun + uu___8 -> + match uu___8 + with + | + (gsr, + sgsr) -> + Obj.magic + (FStar_Tactics_Effect.tac_bind + (Prims.mk_range + "FStar.Tactics.Derived.fst" + (Prims.of_int (300)) + (Prims.of_int (4)) + (Prims.of_int (300)) + (Prims.of_int (25))) + (Prims.mk_range + "FStar.Tactics.Derived.fst" + (Prims.of_int (300)) + (Prims.of_int (27)) + (Prims.of_int (301)) + (Prims.of_int (10))) + (Obj.magic + (FStar_Tactics_Builtins.set_goals + (FStar_List_Tot_Base.op_At + gsl gsr))) + (fun + uu___9 -> + (fun + uu___9 -> + Obj.magic + (FStar_Tactics_Effect.tac_bind + (Prims.mk_range + "FStar.Tactics.Derived.fst" + (Prims.of_int (300)) + (Prims.of_int (27)) + (Prims.of_int (300)) + (Prims.of_int (60))) + (Prims.mk_range + "FStar.Tactics.Derived.fst" + (Prims.of_int (301)) + (Prims.of_int (4)) + (Prims.of_int (301)) + (Prims.of_int (10))) + (Obj.magic + (FStar_Tactics_Builtins.set_smt_goals + (FStar_List_Tot_Base.op_At + sgs + (FStar_List_Tot_Base.op_At + sgsl sgsr)))) + (fun + uu___10 + -> + FStar_Tactics_Effect.lift_div_tac + (fun + uu___11 + -> (x, y))))) + uu___9))) + uu___8))) + uu___8))) + uu___7))) + uu___6))) + uu___5))) + uu___5))) + uu___4))) + uu___3))) uu___2))) + uu___1))) uu___) +let rec (iseq : + (unit -> (unit, unit) FStar_Tactics_Effect.tac_repr) Prims.list -> + (unit, unit) FStar_Tactics_Effect.tac_repr) + = + fun uu___ -> + (fun ts -> + match ts with + | t::ts1 -> + Obj.magic + (Obj.repr + (FStar_Tactics_Effect.tac_bind + (Prims.mk_range "FStar.Tactics.Derived.fst" + (Prims.of_int (305)) (Prims.of_int (23)) + (Prims.of_int (305)) (Prims.of_int (53))) + (Prims.mk_range "FStar.Tactics.Derived.fst" + (Prims.of_int (305)) (Prims.of_int (57)) + (Prims.of_int (305)) (Prims.of_int (59))) + (Obj.magic + (divide Prims.int_one t (fun uu___ -> iseq ts1))) + (fun uu___ -> + FStar_Tactics_Effect.lift_div_tac (fun uu___1 -> ())))) + | [] -> + Obj.magic + (Obj.repr (FStar_Tactics_Effect.lift_div_tac (fun uu___ -> ())))) + uu___ +let focus : + 'a . + (unit -> ('a, unit) FStar_Tactics_Effect.tac_repr) -> + ('a, unit) FStar_Tactics_Effect.tac_repr + = + fun t -> + FStar_Tactics_Effect.tac_bind + (Prims.mk_range "FStar.Tactics.Derived.fst" (Prims.of_int (311)) + (Prims.of_int (10)) (Prims.of_int (311)) (Prims.of_int (18))) + (Prims.mk_range "FStar.Tactics.Derived.fst" (Prims.of_int (311)) + (Prims.of_int (4)) (Prims.of_int (318)) (Prims.of_int (9))) + (Obj.magic (goals ())) + (fun uu___ -> + (fun uu___ -> + match uu___ with + | [] -> Obj.magic (fail "focus: no goals") + | g::gs -> + Obj.magic + (FStar_Tactics_Effect.tac_bind + (Prims.mk_range "FStar.Tactics.Derived.fst" + (Prims.of_int (314)) (Prims.of_int (18)) + (Prims.of_int (314)) (Prims.of_int (30))) + (Prims.mk_range "FStar.Tactics.Derived.fst" + (Prims.of_int (315)) (Prims.of_int (8)) + (Prims.of_int (318)) (Prims.of_int (9))) + (Obj.magic (smt_goals ())) + (fun uu___1 -> + (fun sgs -> + Obj.magic + (FStar_Tactics_Effect.tac_bind + (Prims.mk_range "FStar.Tactics.Derived.fst" + (Prims.of_int (315)) (Prims.of_int (8)) + (Prims.of_int (315)) (Prims.of_int (21))) + (Prims.mk_range "FStar.Tactics.Derived.fst" + (Prims.of_int (315)) (Prims.of_int (23)) + (Prims.of_int (318)) (Prims.of_int (9))) + (Obj.magic + (FStar_Tactics_Builtins.set_goals [g])) + (fun uu___1 -> + (fun uu___1 -> + Obj.magic + (FStar_Tactics_Effect.tac_bind + (Prims.mk_range + "FStar.Tactics.Derived.fst" + (Prims.of_int (315)) + (Prims.of_int (23)) + (Prims.of_int (315)) + (Prims.of_int (39))) + (Prims.mk_range + "FStar.Tactics.Derived.fst" + (Prims.of_int (316)) + (Prims.of_int (8)) + (Prims.of_int (318)) + (Prims.of_int (9))) + (Obj.magic + (FStar_Tactics_Builtins.set_smt_goals + [])) + (fun uu___2 -> + (fun uu___2 -> + Obj.magic + (FStar_Tactics_Effect.tac_bind + (Prims.mk_range + "FStar.Tactics.Derived.fst" + (Prims.of_int (316)) + (Prims.of_int (16)) + (Prims.of_int (316)) + (Prims.of_int (20))) + (Prims.mk_range + "FStar.Tactics.Derived.fst" + (Prims.of_int (317)) + (Prims.of_int (8)) + (Prims.of_int (318)) + (Prims.of_int (9))) + (Obj.magic (t ())) + (fun uu___3 -> + (fun x -> + Obj.magic + (FStar_Tactics_Effect.tac_bind + (Prims.mk_range + "FStar.Tactics.Derived.fst" + (Prims.of_int (317)) + (Prims.of_int (8)) + (Prims.of_int (317)) + (Prims.of_int (33))) + (Prims.mk_range + "FStar.Tactics.Derived.fst" + (Prims.of_int (317)) + (Prims.of_int (35)) + (Prims.of_int (318)) + (Prims.of_int (9))) + (Obj.magic + ( + FStar_Tactics_Effect.tac_bind + (Prims.mk_range + "FStar.Tactics.Derived.fst" + (Prims.of_int (317)) + (Prims.of_int (18)) + (Prims.of_int (317)) + (Prims.of_int (33))) + (Prims.mk_range + "FStar.Tactics.Derived.fst" + (Prims.of_int (317)) + (Prims.of_int (8)) + (Prims.of_int (317)) + (Prims.of_int (33))) + (Obj.magic + (FStar_Tactics_Effect.tac_bind + (Prims.mk_range + "FStar.Tactics.Derived.fst" + (Prims.of_int (317)) + (Prims.of_int (19)) + (Prims.of_int (317)) + (Prims.of_int (27))) + (Prims.mk_range + "FStar.Tactics.Derived.fst" + (Prims.of_int (317)) + (Prims.of_int (18)) + (Prims.of_int (317)) + (Prims.of_int (33))) + (Obj.magic + (goals ())) + (fun + uu___3 -> + FStar_Tactics_Effect.lift_div_tac + (fun + uu___4 -> + FStar_List_Tot_Base.op_At + uu___3 gs)))) + (fun + uu___3 -> + (fun + uu___3 -> + Obj.magic + (FStar_Tactics_Builtins.set_goals + uu___3)) + uu___3))) + (fun uu___3 + -> + (fun + uu___3 -> + Obj.magic + (FStar_Tactics_Effect.tac_bind + (Prims.mk_range + "FStar.Tactics.Derived.fst" + (Prims.of_int (317)) + (Prims.of_int (35)) + (Prims.of_int (317)) + (Prims.of_int (69))) + (Prims.mk_range + "FStar.Tactics.Derived.fst" + (Prims.of_int (316)) + (Prims.of_int (12)) + (Prims.of_int (316)) + (Prims.of_int (13))) + (Obj.magic + (FStar_Tactics_Effect.tac_bind + (Prims.mk_range + "FStar.Tactics.Derived.fst" + (Prims.of_int (317)) + (Prims.of_int (49)) + (Prims.of_int (317)) + (Prims.of_int (69))) + (Prims.mk_range + "FStar.Tactics.Derived.fst" + (Prims.of_int (317)) + (Prims.of_int (35)) + (Prims.of_int (317)) + (Prims.of_int (69))) + (Obj.magic + (FStar_Tactics_Effect.tac_bind + (Prims.mk_range + "FStar.Tactics.Derived.fst" + (Prims.of_int (317)) + (Prims.of_int (50)) + (Prims.of_int (317)) + (Prims.of_int (62))) + (Prims.mk_range + "FStar.Tactics.Derived.fst" + (Prims.of_int (317)) + (Prims.of_int (49)) + (Prims.of_int (317)) + (Prims.of_int (69))) + (Obj.magic + (smt_goals + ())) + (fun + uu___4 -> + FStar_Tactics_Effect.lift_div_tac + (fun + uu___5 -> + FStar_List_Tot_Base.op_At + uu___4 + sgs)))) + (fun + uu___4 -> + (fun + uu___4 -> + Obj.magic + (FStar_Tactics_Builtins.set_smt_goals + uu___4)) + uu___4))) + (fun + uu___4 -> + FStar_Tactics_Effect.lift_div_tac + (fun + uu___5 -> + x)))) + uu___3))) + uu___3))) uu___2))) + uu___1))) uu___1))) uu___) +let (dump1 : Prims.string -> (unit, unit) FStar_Tactics_Effect.tac_repr) = + fun m -> focus (fun uu___ -> FStar_Tactics_Builtins.dump m) +let rec mapAll : + 'a . + (unit -> ('a, unit) FStar_Tactics_Effect.tac_repr) -> + ('a Prims.list, unit) FStar_Tactics_Effect.tac_repr + = + fun t -> + FStar_Tactics_Effect.tac_bind + (Prims.mk_range "FStar.Tactics.Derived.fst" (Prims.of_int (324)) + (Prims.of_int (10)) (Prims.of_int (324)) (Prims.of_int (18))) + (Prims.mk_range "FStar.Tactics.Derived.fst" (Prims.of_int (324)) + (Prims.of_int (4)) (Prims.of_int (326)) (Prims.of_int (66))) + (Obj.magic (goals ())) + (fun uu___ -> + (fun uu___ -> + match uu___ with + | [] -> + Obj.magic + (Obj.repr + (FStar_Tactics_Effect.lift_div_tac (fun uu___1 -> []))) + | uu___1::uu___2 -> + Obj.magic + (Obj.repr + (FStar_Tactics_Effect.tac_bind + (Prims.mk_range "FStar.Tactics.Derived.fst" + (Prims.of_int (326)) (Prims.of_int (27)) + (Prims.of_int (326)) (Prims.of_int (58))) + (Prims.mk_range "FStar.Tactics.Derived.fst" + (Prims.of_int (326)) (Prims.of_int (14)) + (Prims.of_int (326)) (Prims.of_int (66))) + (Obj.magic + (divide Prims.int_one t (fun uu___3 -> mapAll t))) + (fun uu___3 -> + FStar_Tactics_Effect.lift_div_tac + (fun uu___4 -> + match uu___3 with | (h, t1) -> h :: t1))))) + uu___) +let rec (iterAll : + (unit -> (unit, unit) FStar_Tactics_Effect.tac_repr) -> + (unit, unit) FStar_Tactics_Effect.tac_repr) + = + fun t -> + FStar_Tactics_Effect.tac_bind + (Prims.mk_range "FStar.Tactics.Derived.fst" (Prims.of_int (330)) + (Prims.of_int (10)) (Prims.of_int (330)) (Prims.of_int (18))) + (Prims.mk_range "FStar.Tactics.Derived.fst" (Prims.of_int (330)) + (Prims.of_int (4)) (Prims.of_int (332)) (Prims.of_int (60))) + (Obj.magic (goals ())) + (fun uu___ -> + (fun uu___ -> + match uu___ with + | [] -> + Obj.magic + (Obj.repr + (FStar_Tactics_Effect.lift_div_tac (fun uu___1 -> ()))) + | uu___1::uu___2 -> + Obj.magic + (Obj.repr + (FStar_Tactics_Effect.tac_bind + (Prims.mk_range "FStar.Tactics.Derived.fst" + (Prims.of_int (332)) (Prims.of_int (22)) + (Prims.of_int (332)) (Prims.of_int (54))) + (Prims.mk_range "FStar.Tactics.Derived.fst" + (Prims.of_int (332)) (Prims.of_int (58)) + (Prims.of_int (332)) (Prims.of_int (60))) + (Obj.magic + (divide Prims.int_one t (fun uu___3 -> iterAll t))) + (fun uu___3 -> + FStar_Tactics_Effect.lift_div_tac + (fun uu___4 -> ()))))) uu___) +let (iterAllSMT : + (unit -> (unit, unit) FStar_Tactics_Effect.tac_repr) -> + (unit, unit) FStar_Tactics_Effect.tac_repr) + = + fun t -> + FStar_Tactics_Effect.tac_bind + (Prims.mk_range "FStar.Tactics.Derived.fst" (Prims.of_int (335)) + (Prims.of_int (18)) (Prims.of_int (335)) (Prims.of_int (40))) + (Prims.mk_range "FStar.Tactics.Derived.fst" (Prims.of_int (335)) + (Prims.of_int (4)) (Prims.of_int (341)) (Prims.of_int (28))) + (Obj.magic + (FStar_Tactics_Effect.tac_bind + (Prims.mk_range "FStar.Tactics.Derived.fst" (Prims.of_int (335)) + (Prims.of_int (18)) (Prims.of_int (335)) (Prims.of_int (26))) + (Prims.mk_range "FStar.Tactics.Derived.fst" (Prims.of_int (335)) + (Prims.of_int (18)) (Prims.of_int (335)) (Prims.of_int (40))) + (Obj.magic (goals ())) + (fun uu___ -> + (fun uu___ -> + Obj.magic + (FStar_Tactics_Effect.tac_bind + (Prims.mk_range "FStar.Tactics.Derived.fst" + (Prims.of_int (335)) (Prims.of_int (28)) + (Prims.of_int (335)) (Prims.of_int (40))) + (Prims.mk_range "FStar.Tactics.Derived.fst" + (Prims.of_int (335)) (Prims.of_int (18)) + (Prims.of_int (335)) (Prims.of_int (40))) + (Obj.magic (smt_goals ())) + (fun uu___1 -> + FStar_Tactics_Effect.lift_div_tac + (fun uu___2 -> (uu___, uu___1))))) uu___))) + (fun uu___ -> + (fun uu___ -> + match uu___ with + | (gs, sgs) -> + Obj.magic + (FStar_Tactics_Effect.tac_bind + (Prims.mk_range "FStar.Tactics.Derived.fst" + (Prims.of_int (336)) (Prims.of_int (4)) + (Prims.of_int (336)) (Prims.of_int (17))) + (Prims.mk_range "FStar.Tactics.Derived.fst" + (Prims.of_int (337)) (Prims.of_int (4)) + (Prims.of_int (341)) (Prims.of_int (28))) + (Obj.magic (FStar_Tactics_Builtins.set_goals sgs)) + (fun uu___1 -> + (fun uu___1 -> + Obj.magic + (FStar_Tactics_Effect.tac_bind + (Prims.mk_range "FStar.Tactics.Derived.fst" + (Prims.of_int (337)) (Prims.of_int (4)) + (Prims.of_int (337)) (Prims.of_int (20))) + (Prims.mk_range "FStar.Tactics.Derived.fst" + (Prims.of_int (338)) (Prims.of_int (4)) + (Prims.of_int (341)) (Prims.of_int (28))) + (Obj.magic + (FStar_Tactics_Builtins.set_smt_goals [])) + (fun uu___2 -> + (fun uu___2 -> + Obj.magic + (FStar_Tactics_Effect.tac_bind + (Prims.mk_range + "FStar.Tactics.Derived.fst" + (Prims.of_int (338)) + (Prims.of_int (4)) + (Prims.of_int (338)) + (Prims.of_int (13))) + (Prims.mk_range + "FStar.Tactics.Derived.fst" + (Prims.of_int (339)) + (Prims.of_int (4)) + (Prims.of_int (341)) + (Prims.of_int (28))) + (Obj.magic (iterAll t)) + (fun uu___3 -> + (fun uu___3 -> + Obj.magic + (FStar_Tactics_Effect.tac_bind + (Prims.mk_range + "FStar.Tactics.Derived.fst" + (Prims.of_int (339)) + (Prims.of_int (20)) + (Prims.of_int (339)) + (Prims.of_int (42))) + (Prims.mk_range + "FStar.Tactics.Derived.fst" + (Prims.of_int (339)) + (Prims.of_int (4)) + (Prims.of_int (341)) + (Prims.of_int (28))) + (Obj.magic + (FStar_Tactics_Effect.tac_bind + (Prims.mk_range + "FStar.Tactics.Derived.fst" + (Prims.of_int (339)) + (Prims.of_int (20)) + (Prims.of_int (339)) + (Prims.of_int (28))) + (Prims.mk_range + "FStar.Tactics.Derived.fst" + (Prims.of_int (339)) + (Prims.of_int (20)) + (Prims.of_int (339)) + (Prims.of_int (42))) + (Obj.magic + (goals ())) + (fun uu___4 -> + (fun uu___4 -> + Obj.magic + ( + FStar_Tactics_Effect.tac_bind + (Prims.mk_range + "FStar.Tactics.Derived.fst" + (Prims.of_int (339)) + (Prims.of_int (30)) + (Prims.of_int (339)) + (Prims.of_int (42))) + (Prims.mk_range + "FStar.Tactics.Derived.fst" + (Prims.of_int (339)) + (Prims.of_int (20)) + (Prims.of_int (339)) + (Prims.of_int (42))) + (Obj.magic + (smt_goals + ())) + (fun + uu___5 -> + FStar_Tactics_Effect.lift_div_tac + (fun + uu___6 -> + (uu___4, + uu___5))))) + uu___4))) + (fun uu___4 -> + (fun uu___4 -> + match uu___4 with + | (gs', sgs') -> + Obj.magic + (FStar_Tactics_Effect.tac_bind + (Prims.mk_range + "FStar.Tactics.Derived.fst" + (Prims.of_int (340)) + (Prims.of_int (4)) + (Prims.of_int (340)) + (Prims.of_int (16))) + (Prims.mk_range + "FStar.Tactics.Derived.fst" + (Prims.of_int (341)) + (Prims.of_int (4)) + (Prims.of_int (341)) + (Prims.of_int (28))) + (Obj.magic + (FStar_Tactics_Builtins.set_goals + gs)) + (fun + uu___5 -> + (fun + uu___5 -> + Obj.magic + (FStar_Tactics_Builtins.set_smt_goals + (FStar_List_Tot_Base.op_At + gs' sgs'))) + uu___5))) + uu___4))) uu___3))) + uu___2))) uu___1))) uu___) +let (seq : + (unit -> (unit, unit) FStar_Tactics_Effect.tac_repr) -> + (unit -> (unit, unit) FStar_Tactics_Effect.tac_repr) -> + (unit, unit) FStar_Tactics_Effect.tac_repr) + = + fun f -> + fun g -> + focus + (fun uu___ -> + FStar_Tactics_Effect.tac_bind + (Prims.mk_range "FStar.Tactics.Derived.fst" (Prims.of_int (347)) + (Prims.of_int (21)) (Prims.of_int (347)) (Prims.of_int (25))) + (Prims.mk_range "FStar.Tactics.Derived.fst" (Prims.of_int (347)) + (Prims.of_int (27)) (Prims.of_int (347)) (Prims.of_int (36))) + (Obj.magic (f ())) + (fun uu___1 -> (fun uu___1 -> Obj.magic (iterAll g)) uu___1)) +let (exact_args : + FStar_Reflection_Data.aqualv Prims.list -> + FStar_Reflection_Types.term -> (unit, unit) FStar_Tactics_Effect.tac_repr) + = + fun qs -> + fun t -> + focus + (fun uu___ -> + FStar_Tactics_Effect.tac_bind + (Prims.mk_range "FStar.Tactics.Derived.fst" (Prims.of_int (351)) + (Prims.of_int (16)) (Prims.of_int (351)) (Prims.of_int (39))) + (Prims.mk_range "FStar.Tactics.Derived.fst" (Prims.of_int (352)) + (Prims.of_int (8)) (Prims.of_int (357)) (Prims.of_int (44))) + (FStar_Tactics_Effect.lift_div_tac + (fun uu___1 -> FStar_List_Tot_Base.length qs)) + (fun uu___1 -> + (fun n -> + Obj.magic + (FStar_Tactics_Effect.tac_bind + (Prims.mk_range "FStar.Tactics.Derived.fst" + (Prims.of_int (352)) (Prims.of_int (18)) + (Prims.of_int (352)) (Prims.of_int (55))) + (Prims.mk_range "FStar.Tactics.Derived.fst" + (Prims.of_int (353)) (Prims.of_int (8)) + (Prims.of_int (357)) (Prims.of_int (44))) + (Obj.magic + (FStar_Tactics_Util.repeatn n + (fun uu___1 -> + fresh_uvar FStar_Pervasives_Native.None))) + (fun uu___1 -> + (fun uvs -> + Obj.magic + (FStar_Tactics_Effect.tac_bind + (Prims.mk_range + "FStar.Tactics.Derived.fst" + (Prims.of_int (353)) + (Prims.of_int (17)) + (Prims.of_int (353)) + (Prims.of_int (38))) + (Prims.mk_range + "FStar.Tactics.Derived.fst" + (Prims.of_int (354)) (Prims.of_int (8)) + (Prims.of_int (357)) + (Prims.of_int (44))) + (Obj.magic + (FStar_Tactics_Effect.tac_bind + (Prims.mk_range + "FStar.Tactics.Derived.fst" + (Prims.of_int (353)) + (Prims.of_int (26)) + (Prims.of_int (353)) + (Prims.of_int (38))) + (Prims.mk_range + "FStar.Tactics.Derived.fst" + (Prims.of_int (353)) + (Prims.of_int (17)) + (Prims.of_int (353)) + (Prims.of_int (38))) + (Obj.magic + (FStar_Tactics_Util.zip uvs qs)) + (fun uu___1 -> + FStar_Tactics_Effect.lift_div_tac + (fun uu___2 -> + FStar_Reflection_Derived.mk_app + t uu___1)))) + (fun uu___1 -> + (fun t' -> + Obj.magic + (FStar_Tactics_Effect.tac_bind + (Prims.mk_range + "FStar.Tactics.Derived.fst" + (Prims.of_int (354)) + (Prims.of_int (8)) + (Prims.of_int (354)) + (Prims.of_int (16))) + (Prims.mk_range + "FStar.Tactics.Derived.fst" + (Prims.of_int (355)) + (Prims.of_int (8)) + (Prims.of_int (357)) + (Prims.of_int (44))) + (Obj.magic (exact t')) + (fun uu___1 -> + (fun uu___1 -> + Obj.magic + (FStar_Tactics_Util.iter + (fun uu___2 -> + (fun uv -> + if + FStar_Reflection_Derived.is_uvar + uv + then + Obj.magic + (Obj.repr + (FStar_Tactics_Builtins.unshelve + uv)) + else + Obj.magic + (Obj.repr + (FStar_Tactics_Effect.lift_div_tac + (fun + uu___3 -> + ())))) + uu___2) + (FStar_List_Tot_Base.rev + uvs))) uu___1))) + uu___1))) uu___1))) uu___1)) +let (exact_n : + Prims.int -> + FStar_Reflection_Types.term -> (unit, unit) FStar_Tactics_Effect.tac_repr) + = + fun n -> + fun t -> + FStar_Tactics_Effect.tac_bind + (Prims.mk_range "FStar.Tactics.Derived.fst" (Prims.of_int (361)) + (Prims.of_int (15)) (Prims.of_int (361)) (Prims.of_int (49))) + (Prims.mk_range "FStar.Tactics.Derived.fst" (Prims.of_int (361)) + (Prims.of_int (4)) (Prims.of_int (361)) (Prims.of_int (51))) + (Obj.magic + (FStar_Tactics_Util.repeatn n + (fun uu___ -> + (fun uu___ -> + Obj.magic + (FStar_Tactics_Effect.lift_div_tac + (fun uu___1 -> FStar_Reflection_Data.Q_Explicit))) + uu___))) + (fun uu___ -> (fun uu___ -> Obj.magic (exact_args uu___ t)) uu___) +let (ngoals : unit -> (Prims.int, unit) FStar_Tactics_Effect.tac_repr) = + fun uu___ -> + FStar_Tactics_Effect.tac_bind + (Prims.mk_range "FStar.Tactics.Derived.fst" (Prims.of_int (364)) + (Prims.of_int (47)) (Prims.of_int (364)) (Prims.of_int (57))) + (Prims.mk_range "FStar.Tactics.Derived.fst" (Prims.of_int (364)) + (Prims.of_int (26)) (Prims.of_int (364)) (Prims.of_int (57))) + (Obj.magic (goals ())) + (fun uu___1 -> + FStar_Tactics_Effect.lift_div_tac + (fun uu___2 -> FStar_List_Tot_Base.length uu___1)) +let (ngoals_smt : unit -> (Prims.int, unit) FStar_Tactics_Effect.tac_repr) = + fun uu___ -> + FStar_Tactics_Effect.tac_bind + (Prims.mk_range "FStar.Tactics.Derived.fst" (Prims.of_int (367)) + (Prims.of_int (51)) (Prims.of_int (367)) (Prims.of_int (65))) + (Prims.mk_range "FStar.Tactics.Derived.fst" (Prims.of_int (367)) + (Prims.of_int (30)) (Prims.of_int (367)) (Prims.of_int (65))) + (Obj.magic (smt_goals ())) + (fun uu___1 -> + FStar_Tactics_Effect.lift_div_tac + (fun uu___2 -> FStar_List_Tot_Base.length uu___1)) +let (fresh_bv : + FStar_Reflection_Types.typ -> + (FStar_Reflection_Types.bv, unit) FStar_Tactics_Effect.tac_repr) + = + fun t -> + FStar_Tactics_Effect.tac_bind + (Prims.mk_range "FStar.Tactics.Derived.fst" (Prims.of_int (375)) + (Prims.of_int (12)) (Prims.of_int (375)) (Prims.of_int (20))) + (Prims.mk_range "FStar.Tactics.Derived.fst" (Prims.of_int (376)) + (Prims.of_int (4)) (Prims.of_int (376)) (Prims.of_int (44))) + (Obj.magic (FStar_Tactics_Builtins.fresh ())) + (fun uu___ -> + (fun i -> + Obj.magic + (FStar_Tactics_Builtins.fresh_bv_named + (Prims.strcat "x" (Prims.string_of_int i)) t)) uu___) +let (fresh_binder_named : + Prims.string -> + FStar_Reflection_Types.typ -> + (FStar_Reflection_Types.binder, unit) FStar_Tactics_Effect.tac_repr) + = + fun nm -> + fun t -> + FStar_Tactics_Effect.tac_bind + (Prims.mk_range "FStar.Tactics.Derived.fst" (Prims.of_int (379)) + (Prims.of_int (14)) (Prims.of_int (379)) (Prims.of_int (35))) + (Prims.mk_range "FStar.Tactics.Derived.fst" (Prims.of_int (379)) + (Prims.of_int (4)) (Prims.of_int (379)) (Prims.of_int (35))) + (Obj.magic (FStar_Tactics_Builtins.fresh_bv_named nm t)) + (fun uu___ -> + FStar_Tactics_Effect.lift_div_tac + (fun uu___1 -> FStar_Reflection_Derived.mk_binder uu___)) +let (fresh_binder : + FStar_Reflection_Types.typ -> + (FStar_Reflection_Types.binder, unit) FStar_Tactics_Effect.tac_repr) + = + fun t -> + FStar_Tactics_Effect.tac_bind + (Prims.mk_range "FStar.Tactics.Derived.fst" (Prims.of_int (383)) + (Prims.of_int (12)) (Prims.of_int (383)) (Prims.of_int (20))) + (Prims.mk_range "FStar.Tactics.Derived.fst" (Prims.of_int (384)) + (Prims.of_int (4)) (Prims.of_int (384)) (Prims.of_int (48))) + (Obj.magic (FStar_Tactics_Builtins.fresh ())) + (fun uu___ -> + (fun i -> + Obj.magic + (fresh_binder_named (Prims.strcat "x" (Prims.string_of_int i)) + t)) uu___) +let (fresh_implicit_binder_named : + Prims.string -> + FStar_Reflection_Types.typ -> + (FStar_Reflection_Types.binder, unit) FStar_Tactics_Effect.tac_repr) + = + fun nm -> + fun t -> + FStar_Tactics_Effect.tac_bind + (Prims.mk_range "FStar.Tactics.Derived.fst" (Prims.of_int (387)) + (Prims.of_int (23)) (Prims.of_int (387)) (Prims.of_int (44))) + (Prims.mk_range "FStar.Tactics.Derived.fst" (Prims.of_int (387)) + (Prims.of_int (4)) (Prims.of_int (387)) (Prims.of_int (44))) + (Obj.magic (FStar_Tactics_Builtins.fresh_bv_named nm t)) + (fun uu___ -> + FStar_Tactics_Effect.lift_div_tac + (fun uu___1 -> FStar_Reflection_Derived.mk_implicit_binder uu___)) +let (fresh_implicit_binder : + FStar_Reflection_Types.typ -> + (FStar_Reflection_Types.binder, unit) FStar_Tactics_Effect.tac_repr) + = + fun t -> + FStar_Tactics_Effect.tac_bind + (Prims.mk_range "FStar.Tactics.Derived.fst" (Prims.of_int (391)) + (Prims.of_int (12)) (Prims.of_int (391)) (Prims.of_int (20))) + (Prims.mk_range "FStar.Tactics.Derived.fst" (Prims.of_int (392)) + (Prims.of_int (4)) (Prims.of_int (392)) (Prims.of_int (57))) + (Obj.magic (FStar_Tactics_Builtins.fresh ())) + (fun uu___ -> + (fun i -> + Obj.magic + (fresh_implicit_binder_named + (Prims.strcat "x" (Prims.string_of_int i)) t)) uu___) +let (guard : Prims.bool -> (unit, unit) FStar_Tactics_Effect.tac_repr) = + fun uu___ -> + (fun b -> + if Prims.op_Negation b + then Obj.magic (Obj.repr (fail "guard failed")) + else + Obj.magic + (Obj.repr (FStar_Tactics_Effect.lift_div_tac (fun uu___1 -> ())))) + uu___ +let try_with : + 'a . + (unit -> ('a, unit) FStar_Tactics_Effect.tac_repr) -> + (Prims.exn -> ('a, unit) FStar_Tactics_Effect.tac_repr) -> + ('a, unit) FStar_Tactics_Effect.tac_repr + = + fun f -> + fun h -> + FStar_Tactics_Effect.tac_bind + (Prims.mk_range "FStar.Tactics.Derived.fst" (Prims.of_int (405)) + (Prims.of_int (10)) (Prims.of_int (405)) (Prims.of_int (17))) + (Prims.mk_range "FStar.Tactics.Derived.fst" (Prims.of_int (405)) + (Prims.of_int (4)) (Prims.of_int (407)) (Prims.of_int (16))) + (Obj.magic (FStar_Tactics_Builtins.catch f)) + (fun uu___ -> + (fun uu___ -> + match uu___ with + | FStar_Pervasives.Inl e -> Obj.magic (Obj.repr (h e)) + | FStar_Pervasives.Inr x -> + Obj.magic + (Obj.repr + (FStar_Tactics_Effect.lift_div_tac (fun uu___1 -> x)))) + uu___) +let trytac : + 'a . + (unit -> ('a, unit) FStar_Tactics_Effect.tac_repr) -> + ('a FStar_Pervasives_Native.option, unit) FStar_Tactics_Effect.tac_repr + = + fun t -> + try_with + (fun uu___ -> + match () with + | () -> + FStar_Tactics_Effect.tac_bind + (Prims.mk_range "FStar.Tactics.Derived.fst" + (Prims.of_int (410)) (Prims.of_int (13)) + (Prims.of_int (410)) (Prims.of_int (19))) + (Prims.mk_range "FStar.Tactics.Derived.fst" + (Prims.of_int (410)) (Prims.of_int (8)) + (Prims.of_int (410)) (Prims.of_int (19))) + (Obj.magic (t ())) + (fun uu___1 -> + FStar_Tactics_Effect.lift_div_tac + (fun uu___2 -> FStar_Pervasives_Native.Some uu___1))) + (fun uu___ -> + (fun uu___ -> + Obj.magic + (FStar_Tactics_Effect.lift_div_tac + (fun uu___1 -> FStar_Pervasives_Native.None))) uu___) +let or_else : + 'a . + (unit -> ('a, unit) FStar_Tactics_Effect.tac_repr) -> + (unit -> ('a, unit) FStar_Tactics_Effect.tac_repr) -> + ('a, unit) FStar_Tactics_Effect.tac_repr + = + fun t1 -> + fun t2 -> + try_with (fun uu___ -> match () with | () -> t1 ()) + (fun uu___ -> t2 ()) +let op_Less_Bar_Greater : + 'a . + (unit -> ('a, unit) FStar_Tactics_Effect.tac_repr) -> + (unit -> ('a, unit) FStar_Tactics_Effect.tac_repr) -> + unit -> ('a, unit) FStar_Tactics_Effect.tac_repr + = fun t1 -> fun t2 -> fun uu___ -> or_else t1 t2 +let first : + 'a . + (unit -> ('a, unit) FStar_Tactics_Effect.tac_repr) Prims.list -> + ('a, unit) FStar_Tactics_Effect.tac_repr + = + fun ts -> + FStar_List_Tot_Base.fold_right op_Less_Bar_Greater ts + (fun uu___ -> fail "no tactics to try") () +let rec repeat : + 'a . + (unit -> ('a, unit) FStar_Tactics_Effect.tac_repr) -> + ('a Prims.list, unit) FStar_Tactics_Effect.tac_repr + = + fun t -> + FStar_Tactics_Effect.tac_bind + (Prims.mk_range "FStar.Tactics.Derived.fst" (Prims.of_int (427)) + (Prims.of_int (10)) (Prims.of_int (427)) (Prims.of_int (17))) + (Prims.mk_range "FStar.Tactics.Derived.fst" (Prims.of_int (427)) + (Prims.of_int (4)) (Prims.of_int (429)) (Prims.of_int (28))) + (Obj.magic (FStar_Tactics_Builtins.catch t)) + (fun uu___ -> + (fun uu___ -> + match uu___ with + | FStar_Pervasives.Inl uu___1 -> + Obj.magic + (Obj.repr + (FStar_Tactics_Effect.lift_div_tac (fun uu___2 -> []))) + | FStar_Pervasives.Inr x -> + Obj.magic + (Obj.repr + (FStar_Tactics_Effect.tac_bind + (Prims.mk_range "FStar.Tactics.Derived.fst" + (Prims.of_int (429)) (Prims.of_int (20)) + (Prims.of_int (429)) (Prims.of_int (28))) + (Prims.mk_range "FStar.Tactics.Derived.fst" + (Prims.of_int (429)) (Prims.of_int (17)) + (Prims.of_int (429)) (Prims.of_int (19))) + (Obj.magic (repeat t)) + (fun uu___1 -> + FStar_Tactics_Effect.lift_div_tac + (fun uu___2 -> x :: uu___1))))) uu___) +let repeat1 : + 'a . + (unit -> ('a, unit) FStar_Tactics_Effect.tac_repr) -> + ('a Prims.list, unit) FStar_Tactics_Effect.tac_repr + = + fun t -> + FStar_Tactics_Effect.tac_bind + (Prims.mk_range "FStar.Tactics.Derived.fst" (Prims.of_int (432)) + (Prims.of_int (4)) (Prims.of_int (432)) (Prims.of_int (8))) + (Prims.mk_range "FStar.Tactics.Derived.fst" (Prims.of_int (432)) + (Prims.of_int (9)) (Prims.of_int (432)) (Prims.of_int (11))) + (Obj.magic (t ())) + (fun uu___ -> + (fun uu___ -> + Obj.magic + (FStar_Tactics_Effect.tac_bind + (Prims.mk_range "FStar.Tactics.Derived.fst" + (Prims.of_int (432)) (Prims.of_int (12)) + (Prims.of_int (432)) (Prims.of_int (20))) + (Prims.mk_range "FStar.Tactics.Derived.fst" + (Prims.of_int (432)) (Prims.of_int (9)) + (Prims.of_int (432)) (Prims.of_int (11))) + (Obj.magic (repeat t)) + (fun uu___1 -> + FStar_Tactics_Effect.lift_div_tac + (fun uu___2 -> uu___ :: uu___1)))) uu___) +let repeat' : + 'a . + (unit -> ('a, unit) FStar_Tactics_Effect.tac_repr) -> + (unit, unit) FStar_Tactics_Effect.tac_repr + = + fun f -> + FStar_Tactics_Effect.tac_bind + (Prims.mk_range "FStar.Tactics.Derived.fst" (Prims.of_int (435)) + (Prims.of_int (12)) (Prims.of_int (435)) (Prims.of_int (20))) + (Prims.mk_range "FStar.Tactics.Derived.fst" (Prims.of_int (435)) + (Prims.of_int (24)) (Prims.of_int (435)) (Prims.of_int (26))) + (Obj.magic (repeat f)) + (fun uu___ -> FStar_Tactics_Effect.lift_div_tac (fun uu___1 -> ())) +let (norm_term : + FStar_Pervasives.norm_step Prims.list -> + FStar_Reflection_Types.term -> + (FStar_Reflection_Types.term, unit) FStar_Tactics_Effect.tac_repr) + = + fun s -> + fun t -> + FStar_Tactics_Effect.tac_bind + (Prims.mk_range "FStar.Tactics.Derived.fst" (Prims.of_int (439)) + (Prims.of_int (8)) (Prims.of_int (440)) (Prims.of_int (30))) + (Prims.mk_range "FStar.Tactics.Derived.fst" (Prims.of_int (442)) + (Prims.of_int (4)) (Prims.of_int (442)) (Prims.of_int (23))) + (Obj.magic + (try_with (fun uu___ -> match () with | () -> cur_env ()) + (fun uu___ -> FStar_Tactics_Builtins.top_env ()))) + (fun uu___ -> + (fun e -> Obj.magic (FStar_Tactics_Builtins.norm_term_env e s t)) + uu___) +let (join_all_smt_goals : unit -> (unit, unit) FStar_Tactics_Effect.tac_repr) + = + fun uu___ -> + FStar_Tactics_Effect.tac_bind + (Prims.mk_range "FStar.Tactics.Derived.fst" (Prims.of_int (449)) + (Prims.of_int (16)) (Prims.of_int (449)) (Prims.of_int (38))) + (Prims.mk_range "FStar.Tactics.Derived.fst" (Prims.of_int (449)) + (Prims.of_int (2)) (Prims.of_int (455)) (Prims.of_int (20))) + (Obj.magic + (FStar_Tactics_Effect.tac_bind + (Prims.mk_range "FStar.Tactics.Derived.fst" (Prims.of_int (449)) + (Prims.of_int (16)) (Prims.of_int (449)) (Prims.of_int (24))) + (Prims.mk_range "FStar.Tactics.Derived.fst" (Prims.of_int (449)) + (Prims.of_int (16)) (Prims.of_int (449)) (Prims.of_int (38))) + (Obj.magic (goals ())) + (fun uu___1 -> + (fun uu___1 -> + Obj.magic + (FStar_Tactics_Effect.tac_bind + (Prims.mk_range "FStar.Tactics.Derived.fst" + (Prims.of_int (449)) (Prims.of_int (26)) + (Prims.of_int (449)) (Prims.of_int (38))) + (Prims.mk_range "FStar.Tactics.Derived.fst" + (Prims.of_int (449)) (Prims.of_int (16)) + (Prims.of_int (449)) (Prims.of_int (38))) + (Obj.magic (smt_goals ())) + (fun uu___2 -> + FStar_Tactics_Effect.lift_div_tac + (fun uu___3 -> (uu___1, uu___2))))) uu___1))) + (fun uu___1 -> + (fun uu___1 -> + match uu___1 with + | (gs, sgs) -> + Obj.magic + (FStar_Tactics_Effect.tac_bind + (Prims.mk_range "FStar.Tactics.Derived.fst" + (Prims.of_int (450)) (Prims.of_int (2)) + (Prims.of_int (450)) (Prims.of_int (18))) + (Prims.mk_range "FStar.Tactics.Derived.fst" + (Prims.of_int (451)) (Prims.of_int (2)) + (Prims.of_int (455)) (Prims.of_int (20))) + (Obj.magic (FStar_Tactics_Builtins.set_smt_goals [])) + (fun uu___2 -> + (fun uu___2 -> + Obj.magic + (FStar_Tactics_Effect.tac_bind + (Prims.mk_range "FStar.Tactics.Derived.fst" + (Prims.of_int (451)) (Prims.of_int (2)) + (Prims.of_int (451)) (Prims.of_int (15))) + (Prims.mk_range "FStar.Tactics.Derived.fst" + (Prims.of_int (452)) (Prims.of_int (2)) + (Prims.of_int (455)) (Prims.of_int (20))) + (Obj.magic + (FStar_Tactics_Builtins.set_goals sgs)) + (fun uu___3 -> + (fun uu___3 -> + Obj.magic + (FStar_Tactics_Effect.tac_bind + (Prims.mk_range + "FStar.Tactics.Derived.fst" + (Prims.of_int (452)) + (Prims.of_int (2)) + (Prims.of_int (452)) + (Prims.of_int (14))) + (Prims.mk_range + "FStar.Tactics.Derived.fst" + (Prims.of_int (453)) + (Prims.of_int (2)) + (Prims.of_int (455)) + (Prims.of_int (20))) + (Obj.magic + (repeat' + FStar_Tactics_Builtins.join)) + (fun uu___4 -> + (fun uu___4 -> + Obj.magic + (FStar_Tactics_Effect.tac_bind + (Prims.mk_range + "FStar.Tactics.Derived.fst" + (Prims.of_int (453)) + (Prims.of_int (13)) + (Prims.of_int (453)) + (Prims.of_int (21))) + (Prims.mk_range + "FStar.Tactics.Derived.fst" + (Prims.of_int (454)) + (Prims.of_int (2)) + (Prims.of_int (455)) + (Prims.of_int (20))) + (Obj.magic (goals ())) + (fun uu___5 -> + (fun sgs' -> + Obj.magic + (FStar_Tactics_Effect.tac_bind + (Prims.mk_range + "FStar.Tactics.Derived.fst" + (Prims.of_int (454)) + (Prims.of_int (2)) + (Prims.of_int (454)) + (Prims.of_int (14))) + (Prims.mk_range + "FStar.Tactics.Derived.fst" + (Prims.of_int (455)) + (Prims.of_int (2)) + (Prims.of_int (455)) + (Prims.of_int (20))) + (Obj.magic + ( + FStar_Tactics_Builtins.set_goals + gs)) + (fun uu___5 + -> + (fun + uu___5 -> + Obj.magic + (FStar_Tactics_Builtins.set_smt_goals + sgs')) + uu___5))) + uu___5))) uu___4))) + uu___3))) uu___2))) uu___1) +let discard : + 'a . + (unit -> ('a, unit) FStar_Tactics_Effect.tac_repr) -> + unit -> (unit, unit) FStar_Tactics_Effect.tac_repr + = + fun tau -> + fun uu___ -> + FStar_Tactics_Effect.tac_bind + (Prims.mk_range "FStar.Tactics.Derived.fst" (Prims.of_int (458)) + (Prims.of_int (22)) (Prims.of_int (458)) (Prims.of_int (28))) + (Prims.mk_range "FStar.Tactics.Derived.fst" (Prims.of_int (458)) + (Prims.of_int (32)) (Prims.of_int (458)) (Prims.of_int (34))) + (Obj.magic (tau ())) + (fun uu___1 -> FStar_Tactics_Effect.lift_div_tac (fun uu___2 -> ())) +let rec repeatseq : + 'a . + (unit -> ('a, unit) FStar_Tactics_Effect.tac_repr) -> + (unit, unit) FStar_Tactics_Effect.tac_repr + = + fun t -> + FStar_Tactics_Effect.tac_bind + (Prims.mk_range "FStar.Tactics.Derived.fst" (Prims.of_int (462)) + (Prims.of_int (12)) (Prims.of_int (462)) (Prims.of_int (82))) + (Prims.mk_range "FStar.Tactics.Derived.fst" (Prims.of_int (462)) + (Prims.of_int (86)) (Prims.of_int (462)) (Prims.of_int (88))) + (Obj.magic + (trytac + (fun uu___ -> + seq (discard t) (discard (fun uu___1 -> repeatseq t))))) + (fun uu___ -> FStar_Tactics_Effect.lift_div_tac (fun uu___1 -> ())) +let (tadmit : unit -> (unit, unit) FStar_Tactics_Effect.tac_repr) = + fun uu___ -> + FStar_Tactics_Builtins.tadmit_t + (FStar_Reflection_Builtins.pack_ln + (FStar_Reflection_Data.Tv_Const FStar_Reflection_Data.C_Unit)) +let (admit1 : unit -> (unit, unit) FStar_Tactics_Effect.tac_repr) = + fun uu___ -> tadmit () +let (admit_all : unit -> (unit, unit) FStar_Tactics_Effect.tac_repr) = + fun uu___ -> + FStar_Tactics_Effect.tac_bind + (Prims.mk_range "FStar.Tactics.Derived.fst" (Prims.of_int (470)) + (Prims.of_int (12)) (Prims.of_int (470)) (Prims.of_int (25))) + (Prims.mk_range "FStar.Tactics.Derived.fst" (Prims.of_int (471)) + (Prims.of_int (4)) (Prims.of_int (471)) (Prims.of_int (6))) + (Obj.magic (repeat tadmit)) + (fun uu___1 -> FStar_Tactics_Effect.lift_div_tac (fun uu___2 -> ())) +let (is_guard : unit -> (Prims.bool, unit) FStar_Tactics_Effect.tac_repr) = + fun uu___ -> + FStar_Tactics_Effect.tac_bind + (Prims.mk_range "FStar.Tactics.Derived.fst" (Prims.of_int (475)) + (Prims.of_int (27)) (Prims.of_int (475)) (Prims.of_int (41))) + (Prims.mk_range "FStar.Tactics.Derived.fst" (Prims.of_int (475)) + (Prims.of_int (4)) (Prims.of_int (475)) (Prims.of_int (41))) + (Obj.magic (_cur_goal ())) + (fun uu___1 -> + FStar_Tactics_Effect.lift_div_tac + (fun uu___2 -> FStar_Tactics_Types.is_guard uu___1)) +let (skip_guard : unit -> (unit, unit) FStar_Tactics_Effect.tac_repr) = + fun uu___ -> + FStar_Tactics_Effect.tac_bind + (Prims.mk_range "FStar.Tactics.Derived.fst" (Prims.of_int (478)) + (Prims.of_int (7)) (Prims.of_int (478)) (Prims.of_int (18))) + (Prims.mk_range "FStar.Tactics.Derived.fst" (Prims.of_int (478)) + (Prims.of_int (4)) (Prims.of_int (480)) (Prims.of_int (16))) + (Obj.magic (is_guard ())) + (fun uu___1 -> + (fun uu___1 -> + if uu___1 then Obj.magic (smt ()) else Obj.magic (fail "")) + uu___1) +let (guards_to_smt : unit -> (unit, unit) FStar_Tactics_Effect.tac_repr) = + fun uu___ -> + FStar_Tactics_Effect.tac_bind + (Prims.mk_range "FStar.Tactics.Derived.fst" (Prims.of_int (483)) + (Prims.of_int (12)) (Prims.of_int (483)) (Prims.of_int (29))) + (Prims.mk_range "FStar.Tactics.Derived.fst" (Prims.of_int (484)) + (Prims.of_int (4)) (Prims.of_int (484)) (Prims.of_int (6))) + (Obj.magic (repeat skip_guard)) + (fun uu___1 -> FStar_Tactics_Effect.lift_div_tac (fun uu___2 -> ())) +let (simpl : unit -> (unit, unit) FStar_Tactics_Effect.tac_repr) = + fun uu___ -> + FStar_Tactics_Builtins.norm + [FStar_Pervasives.simplify; FStar_Pervasives.primops] +let (whnf : unit -> (unit, unit) FStar_Tactics_Effect.tac_repr) = + fun uu___ -> + FStar_Tactics_Builtins.norm + [FStar_Pervasives.weak; + FStar_Pervasives.hnf; + FStar_Pervasives.primops; + FStar_Pervasives.delta] +let (compute : unit -> (unit, unit) FStar_Tactics_Effect.tac_repr) = + fun uu___ -> + FStar_Tactics_Builtins.norm + [FStar_Pervasives.primops; + FStar_Pervasives.iota; + FStar_Pervasives.delta; + FStar_Pervasives.zeta] +let (intros : + unit -> + (FStar_Reflection_Types.binder Prims.list, unit) + FStar_Tactics_Effect.tac_repr) + = fun uu___ -> repeat FStar_Tactics_Builtins.intro +let (intros' : unit -> (unit, unit) FStar_Tactics_Effect.tac_repr) = + fun uu___ -> + FStar_Tactics_Effect.tac_bind + (Prims.mk_range "FStar.Tactics.Derived.fst" (Prims.of_int (492)) + (Prims.of_int (36)) (Prims.of_int (492)) (Prims.of_int (45))) + (Prims.mk_range "FStar.Tactics.Derived.fst" (Prims.of_int (492)) + (Prims.of_int (49)) (Prims.of_int (492)) (Prims.of_int (51))) + (Obj.magic (intros ())) + (fun uu___1 -> FStar_Tactics_Effect.lift_div_tac (fun uu___2 -> ())) +let (destruct : + FStar_Reflection_Types.term -> (unit, unit) FStar_Tactics_Effect.tac_repr) + = + fun tm -> + FStar_Tactics_Effect.tac_bind + (Prims.mk_range "FStar.Tactics.Derived.fst" (Prims.of_int (493)) + (Prims.of_int (37)) (Prims.of_int (493)) (Prims.of_int (50))) + (Prims.mk_range "FStar.Tactics.Derived.fst" (Prims.of_int (493)) + (Prims.of_int (54)) (Prims.of_int (493)) (Prims.of_int (56))) + (Obj.magic (FStar_Tactics_Builtins.t_destruct tm)) + (fun uu___ -> FStar_Tactics_Effect.lift_div_tac (fun uu___1 -> ())) +let (destruct_intros : + FStar_Reflection_Types.term -> (unit, unit) FStar_Tactics_Effect.tac_repr) + = + fun tm -> + seq + (fun uu___ -> + FStar_Tactics_Effect.tac_bind + (Prims.mk_range "FStar.Tactics.Derived.fst" (Prims.of_int (494)) + (Prims.of_int (59)) (Prims.of_int (494)) (Prims.of_int (72))) + (Prims.mk_range "FStar.Tactics.Derived.fst" (Prims.of_int (494)) + (Prims.of_int (76)) (Prims.of_int (494)) (Prims.of_int (78))) + (Obj.magic (FStar_Tactics_Builtins.t_destruct tm)) + (fun uu___1 -> + FStar_Tactics_Effect.lift_div_tac (fun uu___2 -> ()))) intros' +let __cut : 'a 'b . ('a -> 'b) -> 'a -> 'b = fun f -> fun x -> f x +let (tcut : + FStar_Reflection_Types.term -> + (FStar_Reflection_Types.binder, unit) FStar_Tactics_Effect.tac_repr) + = + fun t -> + FStar_Tactics_Effect.tac_bind + (Prims.mk_range "FStar.Tactics.Derived.fst" (Prims.of_int (500)) + (Prims.of_int (12)) (Prims.of_int (500)) (Prims.of_int (23))) + (Prims.mk_range "FStar.Tactics.Derived.fst" (Prims.of_int (501)) + (Prims.of_int (4)) (Prims.of_int (503)) (Prims.of_int (12))) + (Obj.magic (cur_goal ())) + (fun uu___ -> + (fun g -> + Obj.magic + (FStar_Tactics_Effect.tac_bind + (Prims.mk_range "FStar.Tactics.Derived.fst" + (Prims.of_int (501)) (Prims.of_int (13)) + (Prims.of_int (501)) (Prims.of_int (37))) + (Prims.mk_range "FStar.Tactics.Derived.fst" + (Prims.of_int (502)) (Prims.of_int (4)) + (Prims.of_int (503)) (Prims.of_int (12))) + (FStar_Tactics_Effect.lift_div_tac + (fun uu___ -> + FStar_Reflection_Derived.mk_e_app + (FStar_Reflection_Builtins.pack_ln + (FStar_Reflection_Data.Tv_FVar + (FStar_Reflection_Builtins.pack_fv + ["FStar"; "Tactics"; "Derived"; "__cut"]))) + [t; g])) + (fun uu___ -> + (fun tt -> + Obj.magic + (FStar_Tactics_Effect.tac_bind + (Prims.mk_range "FStar.Tactics.Derived.fst" + (Prims.of_int (502)) (Prims.of_int (4)) + (Prims.of_int (502)) (Prims.of_int (12))) + (Prims.mk_range "FStar.Tactics.Derived.fst" + (Prims.of_int (503)) (Prims.of_int (4)) + (Prims.of_int (503)) (Prims.of_int (12))) + (Obj.magic (apply tt)) + (fun uu___ -> + (fun uu___ -> + Obj.magic (FStar_Tactics_Builtins.intro ())) + uu___))) uu___))) uu___) +let (pose : + FStar_Reflection_Types.term -> + (FStar_Reflection_Types.binder, unit) FStar_Tactics_Effect.tac_repr) + = + fun t -> + FStar_Tactics_Effect.tac_bind + (Prims.mk_range "FStar.Tactics.Derived.fst" (Prims.of_int (506)) + (Prims.of_int (4)) (Prims.of_int (506)) (Prims.of_int (18))) + (Prims.mk_range "FStar.Tactics.Derived.fst" (Prims.of_int (507)) + (Prims.of_int (4)) (Prims.of_int (509)) (Prims.of_int (12))) + (Obj.magic + (apply + (FStar_Reflection_Builtins.pack_ln + (FStar_Reflection_Data.Tv_FVar + (FStar_Reflection_Builtins.pack_fv + ["FStar"; "Tactics"; "Derived"; "__cut"]))))) + (fun uu___ -> + (fun uu___ -> + Obj.magic + (FStar_Tactics_Effect.tac_bind + (Prims.mk_range "FStar.Tactics.Derived.fst" + (Prims.of_int (507)) (Prims.of_int (4)) + (Prims.of_int (507)) (Prims.of_int (11))) + (Prims.mk_range "FStar.Tactics.Derived.fst" + (Prims.of_int (508)) (Prims.of_int (4)) + (Prims.of_int (509)) (Prims.of_int (12))) + (Obj.magic (flip ())) + (fun uu___1 -> + (fun uu___1 -> + Obj.magic + (FStar_Tactics_Effect.tac_bind + (Prims.mk_range "FStar.Tactics.Derived.fst" + (Prims.of_int (508)) (Prims.of_int (4)) + (Prims.of_int (508)) (Prims.of_int (11))) + (Prims.mk_range "FStar.Tactics.Derived.fst" + (Prims.of_int (509)) (Prims.of_int (4)) + (Prims.of_int (509)) (Prims.of_int (12))) + (Obj.magic (exact t)) + (fun uu___2 -> + (fun uu___2 -> + Obj.magic (FStar_Tactics_Builtins.intro ())) + uu___2))) uu___1))) uu___) +let (intro_as : + Prims.string -> + (FStar_Reflection_Types.binder, unit) FStar_Tactics_Effect.tac_repr) + = + fun s -> + FStar_Tactics_Effect.tac_bind + (Prims.mk_range "FStar.Tactics.Derived.fst" (Prims.of_int (512)) + (Prims.of_int (12)) (Prims.of_int (512)) (Prims.of_int (20))) + (Prims.mk_range "FStar.Tactics.Derived.fst" (Prims.of_int (513)) + (Prims.of_int (4)) (Prims.of_int (513)) (Prims.of_int (17))) + (Obj.magic (FStar_Tactics_Builtins.intro ())) + (fun uu___ -> + (fun b -> Obj.magic (FStar_Tactics_Builtins.rename_to b s)) uu___) +let (pose_as : + Prims.string -> + FStar_Reflection_Types.term -> + (FStar_Reflection_Types.binder, unit) FStar_Tactics_Effect.tac_repr) + = + fun s -> + fun t -> + FStar_Tactics_Effect.tac_bind + (Prims.mk_range "FStar.Tactics.Derived.fst" (Prims.of_int (516)) + (Prims.of_int (12)) (Prims.of_int (516)) (Prims.of_int (18))) + (Prims.mk_range "FStar.Tactics.Derived.fst" (Prims.of_int (517)) + (Prims.of_int (4)) (Prims.of_int (517)) (Prims.of_int (17))) + (Obj.magic (pose t)) + (fun uu___ -> + (fun b -> Obj.magic (FStar_Tactics_Builtins.rename_to b s)) uu___) +let for_each_binder : + 'a . + (FStar_Reflection_Types.binder -> + ('a, unit) FStar_Tactics_Effect.tac_repr) + -> ('a Prims.list, unit) FStar_Tactics_Effect.tac_repr + = + fun f -> + FStar_Tactics_Effect.tac_bind + (Prims.mk_range "FStar.Tactics.Derived.fst" (Prims.of_int (520)) + (Prims.of_int (10)) (Prims.of_int (520)) (Prims.of_int (26))) + (Prims.mk_range "FStar.Tactics.Derived.fst" (Prims.of_int (520)) + (Prims.of_int (4)) (Prims.of_int (520)) (Prims.of_int (26))) + (Obj.magic (cur_binders ())) + (fun uu___ -> + (fun uu___ -> Obj.magic (FStar_Tactics_Util.map f uu___)) uu___) +let rec (revert_all : + FStar_Reflection_Types.binders -> + (unit, unit) FStar_Tactics_Effect.tac_repr) + = + fun uu___ -> + (fun bs -> + match bs with + | [] -> + Obj.magic + (Obj.repr (FStar_Tactics_Effect.lift_div_tac (fun uu___ -> ()))) + | uu___::tl -> + Obj.magic + (Obj.repr + (FStar_Tactics_Effect.tac_bind + (Prims.mk_range "FStar.Tactics.Derived.fst" + (Prims.of_int (525)) (Prims.of_int (15)) + (Prims.of_int (525)) (Prims.of_int (24))) + (Prims.mk_range "FStar.Tactics.Derived.fst" + (Prims.of_int (526)) (Prims.of_int (15)) + (Prims.of_int (526)) (Prims.of_int (28))) + (Obj.magic (FStar_Tactics_Builtins.revert ())) + (fun uu___1 -> + (fun uu___1 -> Obj.magic (revert_all tl)) uu___1)))) + uu___ +let (bv_to_term : + FStar_Reflection_Types.bv -> + (FStar_Reflection_Types.term, unit) FStar_Tactics_Effect.tac_repr) + = fun bv -> FStar_Tactics_Builtins.pack (FStar_Reflection_Data.Tv_Var bv) +let (binder_to_term : + FStar_Reflection_Types.binder -> + (FStar_Reflection_Types.term, unit) FStar_Tactics_Effect.tac_repr) + = + fun b -> + FStar_Tactics_Effect.tac_bind + (Prims.mk_range "FStar.Tactics.Derived.fst" (Prims.of_int (530)) + (Prims.of_int (57)) (Prims.of_int (530)) (Prims.of_int (73))) + (Prims.mk_range "FStar.Tactics.Derived.fst" (Prims.of_int (530)) + (Prims.of_int (45)) (Prims.of_int (530)) (Prims.of_int (90))) + (FStar_Tactics_Effect.lift_div_tac + (fun uu___ -> FStar_Reflection_Builtins.inspect_binder b)) + (fun uu___ -> + (fun uu___ -> + match uu___ with | (bv, uu___1) -> Obj.magic (bv_to_term bv)) + uu___) +let rec (__assumption_aux : + FStar_Reflection_Types.binders -> + (unit, unit) FStar_Tactics_Effect.tac_repr) + = + fun bs -> + match bs with + | [] -> fail "no assumption matches goal" + | b::bs1 -> + FStar_Tactics_Effect.tac_bind + (Prims.mk_range "FStar.Tactics.Derived.fst" (Prims.of_int (539)) + (Prims.of_int (16)) (Prims.of_int (539)) (Prims.of_int (32))) + (Prims.mk_range "FStar.Tactics.Derived.fst" (Prims.of_int (540)) + (Prims.of_int (8)) (Prims.of_int (543)) (Prims.of_int (27))) + (Obj.magic (binder_to_term b)) + (fun uu___ -> + (fun t -> + Obj.magic + (try_with (fun uu___ -> match () with | () -> exact t) + (fun uu___ -> + try_with + (fun uu___1 -> + match () with + | () -> + FStar_Tactics_Effect.tac_bind + (Prims.mk_range + "FStar.Tactics.Derived.fst" + (Prims.of_int (541)) + (Prims.of_int (13)) + (Prims.of_int (541)) + (Prims.of_int (48))) + (Prims.mk_range + "FStar.Tactics.Derived.fst" + (Prims.of_int (542)) + (Prims.of_int (13)) + (Prims.of_int (542)) + (Prims.of_int (20))) + (Obj.magic + (apply + (FStar_Reflection_Builtins.pack_ln + (FStar_Reflection_Data.Tv_FVar + (FStar_Reflection_Builtins.pack_fv + ["FStar"; + "Squash"; + "return_squash"]))))) + (fun uu___2 -> + (fun uu___2 -> Obj.magic (exact t)) + uu___2)) + (fun uu___1 -> __assumption_aux bs1)))) uu___) +let (assumption : unit -> (unit, unit) FStar_Tactics_Effect.tac_repr) = + fun uu___ -> + FStar_Tactics_Effect.tac_bind + (Prims.mk_range "FStar.Tactics.Derived.fst" (Prims.of_int (546)) + (Prims.of_int (21)) (Prims.of_int (546)) (Prims.of_int (37))) + (Prims.mk_range "FStar.Tactics.Derived.fst" (Prims.of_int (546)) + (Prims.of_int (4)) (Prims.of_int (546)) (Prims.of_int (37))) + (Obj.magic (cur_binders ())) + (fun uu___1 -> + (fun uu___1 -> Obj.magic (__assumption_aux uu___1)) uu___1) +let (destruct_equality_implication : + FStar_Reflection_Types.term -> + ((FStar_Reflection_Formula.formula * FStar_Reflection_Types.term) + FStar_Pervasives_Native.option, + unit) FStar_Tactics_Effect.tac_repr) + = + fun t -> + FStar_Tactics_Effect.tac_bind + (Prims.mk_range "FStar.Tactics.Derived.fst" (Prims.of_int (549)) + (Prims.of_int (10)) (Prims.of_int (549)) (Prims.of_int (27))) + (Prims.mk_range "FStar.Tactics.Derived.fst" (Prims.of_int (549)) + (Prims.of_int (4)) (Prims.of_int (556)) (Prims.of_int (15))) + (Obj.magic (FStar_Reflection_Formula.term_as_formula t)) + (fun uu___ -> + (fun uu___ -> + match uu___ with + | FStar_Reflection_Formula.Implies (lhs, rhs) -> + Obj.magic + (Obj.repr + (FStar_Tactics_Effect.tac_bind + (Prims.mk_range "FStar.Tactics.Derived.fst" + (Prims.of_int (551)) (Prims.of_int (18)) + (Prims.of_int (551)) (Prims.of_int (38))) + (Prims.mk_range "FStar.Tactics.Derived.fst" + (Prims.of_int (552)) (Prims.of_int (14)) + (Prims.of_int (554)) (Prims.of_int (19))) + (Obj.magic + (FStar_Reflection_Formula.term_as_formula' lhs)) + (fun lhs1 -> + FStar_Tactics_Effect.lift_div_tac + (fun uu___1 -> + match lhs1 with + | FStar_Reflection_Formula.Comp + (FStar_Reflection_Formula.Eq uu___2, + uu___3, uu___4) + -> + FStar_Pervasives_Native.Some (lhs1, rhs) + | uu___2 -> FStar_Pervasives_Native.None)))) + | uu___1 -> + Obj.magic + (Obj.repr + (FStar_Tactics_Effect.lift_div_tac + (fun uu___2 -> FStar_Pervasives_Native.None)))) uu___) +let (rewrite' : + FStar_Reflection_Types.binder -> (unit, unit) FStar_Tactics_Effect.tac_repr) + = + fun b -> + op_Less_Bar_Greater + (op_Less_Bar_Greater (fun uu___ -> FStar_Tactics_Builtins.rewrite b) + (fun uu___ -> + FStar_Tactics_Effect.tac_bind + (Prims.mk_range "FStar.Tactics.Derived.fst" + (Prims.of_int (565)) (Prims.of_int (20)) + (Prims.of_int (565)) (Prims.of_int (35))) + (Prims.mk_range "FStar.Tactics.Derived.fst" + (Prims.of_int (566)) (Prims.of_int (20)) + (Prims.of_int (567)) (Prims.of_int (29))) + (Obj.magic (FStar_Tactics_Builtins.binder_retype b)) + (fun uu___1 -> + (fun uu___1 -> + Obj.magic + (FStar_Tactics_Effect.tac_bind + (Prims.mk_range "FStar.Tactics.Derived.fst" + (Prims.of_int (566)) (Prims.of_int (20)) + (Prims.of_int (566)) (Prims.of_int (43))) + (Prims.mk_range "FStar.Tactics.Derived.fst" + (Prims.of_int (567)) (Prims.of_int (20)) + (Prims.of_int (567)) (Prims.of_int (29))) + (Obj.magic + (apply_lemma + (FStar_Reflection_Builtins.pack_ln + (FStar_Reflection_Data.Tv_FVar + (FStar_Reflection_Builtins.pack_fv + ["FStar"; + "Tactics"; + "Derived"; + "__eq_sym"]))))) + (fun uu___2 -> + (fun uu___2 -> + Obj.magic (FStar_Tactics_Builtins.rewrite b)) + uu___2))) uu___1))) + (fun uu___ -> fail "rewrite' failed") () +let rec (try_rewrite_equality : + FStar_Reflection_Types.term -> + FStar_Reflection_Types.binders -> + (unit, unit) FStar_Tactics_Effect.tac_repr) + = + fun uu___1 -> + fun uu___ -> + (fun x -> + fun bs -> + match bs with + | [] -> + Obj.magic + (Obj.repr + (FStar_Tactics_Effect.lift_div_tac (fun uu___ -> ()))) + | x_t::bs1 -> + Obj.magic + (Obj.repr + (FStar_Tactics_Effect.tac_bind + (Prims.mk_range "FStar.Tactics.Derived.fst" + (Prims.of_int (575)) (Prims.of_int (20)) + (Prims.of_int (575)) (Prims.of_int (56))) + (Prims.mk_range "FStar.Tactics.Derived.fst" + (Prims.of_int (575)) (Prims.of_int (14)) + (Prims.of_int (581)) (Prims.of_int (37))) + (Obj.magic + (FStar_Reflection_Formula.term_as_formula + (FStar_Reflection_Derived.type_of_binder x_t))) + (fun uu___ -> + (fun uu___ -> + match uu___ with + | FStar_Reflection_Formula.Comp + (FStar_Reflection_Formula.Eq uu___1, y, + uu___2) + -> + if FStar_Reflection_Builtins.term_eq x y + then + Obj.magic + (FStar_Tactics_Builtins.rewrite x_t) + else Obj.magic (try_rewrite_equality x bs1) + | uu___1 -> + Obj.magic (try_rewrite_equality x bs1)) + uu___)))) uu___1 uu___ +let rec (rewrite_all_context_equalities : + FStar_Reflection_Types.binders -> + (unit, unit) FStar_Tactics_Effect.tac_repr) + = + fun uu___ -> + (fun bs -> + match bs with + | [] -> + Obj.magic + (Obj.repr (FStar_Tactics_Effect.lift_div_tac (fun uu___ -> ()))) + | x_t::bs1 -> + Obj.magic + (Obj.repr + (FStar_Tactics_Effect.tac_bind + (Prims.mk_range "FStar.Tactics.Derived.fst" + (Prims.of_int (588)) (Prims.of_int (8)) + (Prims.of_int (588)) (Prims.of_int (40))) + (Prims.mk_range "FStar.Tactics.Derived.fst" + (Prims.of_int (589)) (Prims.of_int (8)) + (Prims.of_int (589)) (Prims.of_int (41))) + (Obj.magic + (try_with + (fun uu___ -> + match () with + | () -> FStar_Tactics_Builtins.rewrite x_t) + (fun uu___ -> + (fun uu___ -> + Obj.magic + (FStar_Tactics_Effect.lift_div_tac + (fun uu___1 -> ()))) uu___))) + (fun uu___ -> + (fun uu___ -> + Obj.magic (rewrite_all_context_equalities bs1)) + uu___)))) uu___ +let (rewrite_eqs_from_context : + unit -> (unit, unit) FStar_Tactics_Effect.tac_repr) = + fun uu___ -> + FStar_Tactics_Effect.tac_bind + (Prims.mk_range "FStar.Tactics.Derived.fst" (Prims.of_int (593)) + (Prims.of_int (35)) (Prims.of_int (593)) (Prims.of_int (51))) + (Prims.mk_range "FStar.Tactics.Derived.fst" (Prims.of_int (593)) + (Prims.of_int (4)) (Prims.of_int (593)) (Prims.of_int (51))) + (Obj.magic (cur_binders ())) + (fun uu___1 -> + (fun uu___1 -> Obj.magic (rewrite_all_context_equalities uu___1)) + uu___1) +let (rewrite_equality : + FStar_Reflection_Types.term -> (unit, unit) FStar_Tactics_Effect.tac_repr) + = + fun t -> + FStar_Tactics_Effect.tac_bind + (Prims.mk_range "FStar.Tactics.Derived.fst" (Prims.of_int (596)) + (Prims.of_int (27)) (Prims.of_int (596)) (Prims.of_int (43))) + (Prims.mk_range "FStar.Tactics.Derived.fst" (Prims.of_int (596)) + (Prims.of_int (4)) (Prims.of_int (596)) (Prims.of_int (43))) + (Obj.magic (cur_binders ())) + (fun uu___ -> + (fun uu___ -> Obj.magic (try_rewrite_equality t uu___)) uu___) +let (unfold_def : + FStar_Reflection_Types.term -> (unit, unit) FStar_Tactics_Effect.tac_repr) + = + fun t -> + FStar_Tactics_Effect.tac_bind + (Prims.mk_range "FStar.Tactics.Derived.fst" (Prims.of_int (599)) + (Prims.of_int (10)) (Prims.of_int (599)) (Prims.of_int (19))) + (Prims.mk_range "FStar.Tactics.Derived.fst" (Prims.of_int (599)) + (Prims.of_int (4)) (Prims.of_int (603)) (Prims.of_int (46))) + (Obj.magic (FStar_Tactics_Builtins.inspect t)) + (fun uu___ -> + (fun uu___ -> + match uu___ with + | FStar_Reflection_Data.Tv_FVar fv -> + Obj.magic + (FStar_Tactics_Effect.tac_bind + (Prims.mk_range "FStar.Tactics.Derived.fst" + (Prims.of_int (601)) (Prims.of_int (16)) + (Prims.of_int (601)) (Prims.of_int (42))) + (Prims.mk_range "FStar.Tactics.Derived.fst" + (Prims.of_int (602)) (Prims.of_int (8)) + (Prims.of_int (602)) (Prims.of_int (30))) + (FStar_Tactics_Effect.lift_div_tac + (fun uu___1 -> + FStar_Reflection_Builtins.implode_qn + (FStar_Reflection_Builtins.inspect_fv fv))) + (fun uu___1 -> + (fun n -> + Obj.magic + (FStar_Tactics_Builtins.norm + [FStar_Pervasives.delta_fully [n]])) uu___1)) + | uu___1 -> Obj.magic (fail "unfold_def: term is not a fv")) + uu___) +let (l_to_r : + FStar_Reflection_Types.term Prims.list -> + (unit, unit) FStar_Tactics_Effect.tac_repr) + = + fun lems -> + FStar_Tactics_Effect.tac_bind + (Prims.mk_range "FStar.Tactics.Derived.fst" (Prims.of_int (610)) + (Prims.of_int (8)) (Prims.of_int (613)) (Prims.of_int (31))) + (Prims.mk_range "FStar.Tactics.Derived.fst" (Prims.of_int (614)) + (Prims.of_int (4)) (Prims.of_int (614)) (Prims.of_int (28))) + (FStar_Tactics_Effect.lift_div_tac + (fun uu___ -> + fun uu___1 -> + FStar_Tactics_Effect.tac_bind + (Prims.mk_range "FStar.Tactics.Derived.fst" + (Prims.of_int (610)) (Prims.of_int (8)) + (Prims.of_int (613)) (Prims.of_int (31))) + (Prims.mk_range "FStar.Tactics.Derived.fst" + (Prims.of_int (610)) (Prims.of_int (8)) + (Prims.of_int (613)) (Prims.of_int (31))) + (Obj.magic + (FStar_Tactics_Util.fold_left + (fun uu___3 -> + fun uu___2 -> + (fun k -> + fun l -> + Obj.magic + (FStar_Tactics_Effect.lift_div_tac + (fun uu___2 -> + fun uu___3 -> + or_else + (fun uu___4 -> apply_lemma_rw l) + k))) uu___3 uu___2) trefl lems)) + (fun uu___2 -> (fun uu___2 -> Obj.magic (uu___2 ())) uu___2))) + (fun uu___ -> + (fun first_or_trefl -> Obj.magic (pointwise first_or_trefl)) uu___) +let (mk_squash : FStar_Reflection_Types.term -> FStar_Reflection_Types.term) + = + fun t -> + let sq = + FStar_Reflection_Builtins.pack_ln + (FStar_Reflection_Data.Tv_FVar + (FStar_Reflection_Builtins.pack_fv + FStar_Reflection_Const.squash_qn)) in + FStar_Reflection_Derived.mk_e_app sq [t] +let (mk_sq_eq : + FStar_Reflection_Types.term -> + FStar_Reflection_Types.term -> FStar_Reflection_Types.term) + = + fun t1 -> + fun t2 -> + let eq = + FStar_Reflection_Builtins.pack_ln + (FStar_Reflection_Data.Tv_FVar + (FStar_Reflection_Builtins.pack_fv FStar_Reflection_Const.eq2_qn)) in + mk_squash (FStar_Reflection_Derived.mk_e_app eq [t1; t2]) +let (grewrite : + FStar_Reflection_Types.term -> + FStar_Reflection_Types.term -> (unit, unit) FStar_Tactics_Effect.tac_repr) + = + fun t1 -> + fun t2 -> + FStar_Tactics_Effect.tac_bind + (Prims.mk_range "FStar.Tactics.Derived.fst" (Prims.of_int (627)) + (Prims.of_int (12)) (Prims.of_int (627)) (Prims.of_int (33))) + (Prims.mk_range "FStar.Tactics.Derived.fst" (Prims.of_int (628)) + (Prims.of_int (4)) (Prims.of_int (641)) (Prims.of_int (44))) + (Obj.magic (tcut (mk_sq_eq t1 t2))) + (fun uu___ -> + (fun e -> + Obj.magic + (FStar_Tactics_Effect.tac_bind + (Prims.mk_range "FStar.Tactics.Derived.fst" + (Prims.of_int (628)) (Prims.of_int (12)) + (Prims.of_int (628)) (Prims.of_int (45))) + (Prims.mk_range "FStar.Tactics.Derived.fst" + (Prims.of_int (629)) (Prims.of_int (4)) + (Prims.of_int (641)) (Prims.of_int (44))) + (FStar_Tactics_Effect.lift_div_tac + (fun uu___ -> + FStar_Reflection_Builtins.pack_ln + (FStar_Reflection_Data.Tv_Var + (FStar_Reflection_Derived.bv_of_binder e)))) + (fun uu___ -> + (fun e1 -> + Obj.magic + (pointwise + (fun uu___ -> + FStar_Tactics_Effect.tac_bind + (Prims.mk_range + "FStar.Tactics.Derived.fst" + (Prims.of_int (632)) (Prims.of_int (8)) + (Prims.of_int (637)) + (Prims.of_int (20))) + (Prims.mk_range + "FStar.Tactics.Derived.fst" + (Prims.of_int (639)) (Prims.of_int (6)) + (Prims.of_int (641)) + (Prims.of_int (43))) + (Obj.magic + (FStar_Tactics_Effect.tac_bind + (Prims.mk_range + "FStar.Tactics.Derived.fst" + (Prims.of_int (632)) + (Prims.of_int (14)) + (Prims.of_int (632)) + (Prims.of_int (42))) + (Prims.mk_range + "FStar.Tactics.Derived.fst" + (Prims.of_int (632)) + (Prims.of_int (8)) + (Prims.of_int (637)) + (Prims.of_int (20))) + (Obj.magic + (FStar_Tactics_Effect.tac_bind + (Prims.mk_range + "FStar.Tactics.Derived.fst" + (Prims.of_int (632)) + (Prims.of_int (30)) + (Prims.of_int (632)) + (Prims.of_int (42))) + (Prims.mk_range + "FStar.Tactics.Derived.fst" + (Prims.of_int (632)) + (Prims.of_int (14)) + (Prims.of_int (632)) + (Prims.of_int (42))) + (Obj.magic (cur_goal ())) + (fun uu___1 -> + (fun uu___1 -> + Obj.magic + (FStar_Reflection_Formula.term_as_formula + uu___1)) uu___1))) + (fun uu___1 -> + FStar_Tactics_Effect.lift_div_tac + (fun uu___2 -> + match uu___1 with + | FStar_Reflection_Formula.Comp + (FStar_Reflection_Formula.Eq + uu___3, lhs, rhs) + -> + (match FStar_Reflection_Builtins.inspect_ln + lhs + with + | FStar_Reflection_Data.Tv_Uvar + (uu___4, uu___5) -> + true + | uu___4 -> false) + | uu___3 -> false)))) + (fun uu___1 -> + (fun is_uvar -> + if is_uvar + then Obj.magic (trefl ()) + else + Obj.magic + (try_with + (fun uu___2 -> + match () with + | () -> exact e1) + (fun uu___2 -> trefl ()))) + uu___1)))) uu___))) uu___) +let (grewrite_eq : + FStar_Reflection_Types.binder -> (unit, unit) FStar_Tactics_Effect.tac_repr) + = + fun b -> + FStar_Tactics_Effect.tac_bind + (Prims.mk_range "FStar.Tactics.Derived.fst" (Prims.of_int (648)) + (Prims.of_int (8)) (Prims.of_int (648)) (Prims.of_int (42))) + (Prims.mk_range "FStar.Tactics.Derived.fst" (Prims.of_int (648)) + (Prims.of_int (2)) (Prims.of_int (660)) (Prims.of_int (7))) + (Obj.magic + (FStar_Reflection_Formula.term_as_formula + (FStar_Reflection_Derived.type_of_binder b))) + (fun uu___ -> + (fun uu___ -> + match uu___ with + | FStar_Reflection_Formula.Comp + (FStar_Reflection_Formula.Eq uu___1, l, r) -> + Obj.magic + (FStar_Tactics_Effect.tac_bind + (Prims.mk_range "FStar.Tactics.Derived.fst" + (Prims.of_int (650)) (Prims.of_int (4)) + (Prims.of_int (650)) (Prims.of_int (16))) + (Prims.mk_range "FStar.Tactics.Derived.fst" + (Prims.of_int (651)) (Prims.of_int (4)) + (Prims.of_int (651)) (Prims.of_int (54))) + (Obj.magic (grewrite l r)) + (fun uu___2 -> + (fun uu___2 -> + Obj.magic + (iseq + [idtac; + (fun uu___3 -> + FStar_Tactics_Effect.tac_bind + (Prims.mk_range + "FStar.Tactics.Derived.fst" + (Prims.of_int (651)) + (Prims.of_int (34)) + (Prims.of_int (651)) + (Prims.of_int (52))) + (Prims.mk_range + "FStar.Tactics.Derived.fst" + (Prims.of_int (651)) + (Prims.of_int (28)) + (Prims.of_int (651)) + (Prims.of_int (52))) + (Obj.magic (binder_to_term b)) + (fun uu___4 -> + (fun uu___4 -> + Obj.magic (exact uu___4)) uu___4))])) + uu___2)) + | uu___1 -> + Obj.magic + (FStar_Tactics_Effect.tac_bind + (Prims.mk_range "FStar.Tactics.Derived.fst" + (Prims.of_int (653)) (Prims.of_int (16)) + (Prims.of_int (653)) (Prims.of_int (51))) + (Prims.mk_range "FStar.Tactics.Derived.fst" + (Prims.of_int (653)) (Prims.of_int (10)) + (Prims.of_int (659)) (Prims.of_int (56))) + (Obj.magic + (FStar_Reflection_Formula.term_as_formula' + (FStar_Reflection_Derived.type_of_binder b))) + (fun uu___2 -> + (fun uu___2 -> + match uu___2 with + | FStar_Reflection_Formula.Comp + (FStar_Reflection_Formula.Eq uu___3, l, r) -> + Obj.magic + (FStar_Tactics_Effect.tac_bind + (Prims.mk_range + "FStar.Tactics.Derived.fst" + (Prims.of_int (655)) + (Prims.of_int (6)) + (Prims.of_int (655)) + (Prims.of_int (18))) + (Prims.mk_range + "FStar.Tactics.Derived.fst" + (Prims.of_int (656)) + (Prims.of_int (6)) + (Prims.of_int (657)) + (Prims.of_int (56))) + (Obj.magic (grewrite l r)) + (fun uu___4 -> + (fun uu___4 -> + Obj.magic + (iseq + [idtac; + (fun uu___5 -> + FStar_Tactics_Effect.tac_bind + (Prims.mk_range + "FStar.Tactics.Derived.fst" + (Prims.of_int (656)) + (Prims.of_int (30)) + (Prims.of_int (656)) + (Prims.of_int (55))) + (Prims.mk_range + "FStar.Tactics.Derived.fst" + (Prims.of_int (657)) + (Prims.of_int (30)) + (Prims.of_int (657)) + (Prims.of_int (54))) + (Obj.magic + (apply_lemma + (FStar_Reflection_Builtins.pack_ln + (FStar_Reflection_Data.Tv_FVar + (FStar_Reflection_Builtins.pack_fv + ["FStar"; + "Tactics"; + "Derived"; + "__un_sq_eq"]))))) + (fun uu___6 -> + (fun uu___6 -> + Obj.magic + (FStar_Tactics_Effect.tac_bind + (Prims.mk_range + "FStar.Tactics.Derived.fst" + (Prims.of_int (657)) + (Prims.of_int (36)) + (Prims.of_int (657)) + (Prims.of_int (54))) + (Prims.mk_range + "FStar.Tactics.Derived.fst" + (Prims.of_int (657)) + (Prims.of_int (30)) + (Prims.of_int (657)) + (Prims.of_int (54))) + (Obj.magic + (binder_to_term + b)) + (fun uu___7 -> + (fun uu___7 + -> + Obj.magic + (exact + uu___7)) + uu___7))) + uu___6))])) uu___4)) + | uu___3 -> + Obj.magic + (fail + "grewrite_eq: binder type is not an equality")) + uu___2))) uu___) +let rec (apply_squash_or_lem : + Prims.nat -> + FStar_Reflection_Types.term -> (unit, unit) FStar_Tactics_Effect.tac_repr) + = + fun d -> + fun t -> + try_with (fun uu___ -> match () with | () -> apply t) + (fun uu___ -> + try_with + (fun uu___1 -> + match () with + | () -> + FStar_Tactics_Effect.tac_bind + (Prims.mk_range "FStar.Tactics.Derived.fst" + (Prims.of_int (682)) (Prims.of_int (8)) + (Prims.of_int (682)) (Prims.of_int (43))) + (Prims.mk_range "FStar.Tactics.Derived.fst" + (Prims.of_int (682)) (Prims.of_int (45)) + (Prims.of_int (682)) (Prims.of_int (52))) + (Obj.magic + (apply + (FStar_Reflection_Builtins.pack_ln + (FStar_Reflection_Data.Tv_FVar + (FStar_Reflection_Builtins.pack_fv + ["FStar"; "Squash"; "return_squash"]))))) + (fun uu___2 -> + (fun uu___2 -> Obj.magic (apply t)) uu___2)) + (fun uu___1 -> + try_with (fun uu___2 -> match () with | () -> apply_lemma t) + (fun uu___2 -> + if d <= Prims.int_zero + then fail "mapply: out of fuel" + else + FStar_Tactics_Effect.tac_bind + (Prims.mk_range "FStar.Tactics.Derived.fst" + (Prims.of_int (688)) (Prims.of_int (13)) + (Prims.of_int (688)) (Prims.of_int (30))) + (Prims.mk_range "FStar.Tactics.Derived.fst" + (Prims.of_int (689)) (Prims.of_int (4)) + (Prims.of_int (737)) (Prims.of_int (41))) + (Obj.magic + (FStar_Tactics_Effect.tac_bind + (Prims.mk_range "FStar.Tactics.Derived.fst" + (Prims.of_int (688)) (Prims.of_int (16)) + (Prims.of_int (688)) (Prims.of_int (28))) + (Prims.mk_range "FStar.Tactics.Derived.fst" + (Prims.of_int (688)) (Prims.of_int (13)) + (Prims.of_int (688)) (Prims.of_int (30))) + (Obj.magic (cur_env ())) + (fun uu___4 -> + (fun uu___4 -> + Obj.magic + (FStar_Tactics_Builtins.tc uu___4 t)) + uu___4))) + (fun uu___4 -> + (fun ty -> + Obj.magic + (FStar_Tactics_Effect.tac_bind + (Prims.mk_range + "FStar.Tactics.Derived.fst" + (Prims.of_int (689)) + (Prims.of_int (17)) + (Prims.of_int (689)) + (Prims.of_int (31))) + (Prims.mk_range + "FStar.Tactics.Derived.fst" + (Prims.of_int (689)) + (Prims.of_int (4)) + (Prims.of_int (737)) + (Prims.of_int (41))) + (Obj.magic + (FStar_Tactics_SyntaxHelpers.collect_arr + ty)) + (fun uu___4 -> + (fun uu___4 -> + match uu___4 with + | (tys, c) -> + (match FStar_Reflection_Builtins.inspect_comp + c + with + | FStar_Reflection_Data.C_Lemma + (pre, post, uu___5) -> + Obj.magic + (FStar_Tactics_Effect.tac_bind + (Prims.mk_range + "FStar.Tactics.Derived.fst" + (Prims.of_int (693)) + (Prims.of_int (18)) + (Prims.of_int (693)) + (Prims.of_int (32))) + (Prims.mk_range + "FStar.Tactics.Derived.fst" + (Prims.of_int (694)) + (Prims.of_int (7)) + (Prims.of_int (702)) + (Prims.of_int (41))) + (FStar_Tactics_Effect.lift_div_tac + (fun uu___6 -> + FStar_Reflection_Builtins.pack_ln + (FStar_Reflection_Data.Tv_App + (post, + ((FStar_Reflection_Builtins.pack_ln + (FStar_Reflection_Data.Tv_Const + FStar_Reflection_Data.C_Unit)), + FStar_Reflection_Data.Q_Explicit))))) + (fun uu___6 -> + (fun post1 -> + Obj.magic + (FStar_Tactics_Effect.tac_bind + (Prims.mk_range + "FStar.Tactics.Derived.fst" + (Prims.of_int (694)) + (Prims.of_int (18)) + (Prims.of_int (694)) + (Prims.of_int (35))) + (Prims.mk_range + "FStar.Tactics.Derived.fst" + (Prims.of_int (696)) + (Prims.of_int (7)) + (Prims.of_int (702)) + (Prims.of_int (41))) + (Obj.magic + (norm_term + [] post1)) + (fun + uu___6 -> + (fun + post2 -> + Obj.magic + (FStar_Tactics_Effect.tac_bind + (Prims.mk_range + "FStar.Tactics.Derived.fst" + (Prims.of_int (696)) + (Prims.of_int (13)) + (Prims.of_int (696)) + (Prims.of_int (34))) + (Prims.mk_range + "FStar.Tactics.Derived.fst" + (Prims.of_int (696)) + (Prims.of_int (7)) + (Prims.of_int (702)) + (Prims.of_int (41))) + (Obj.magic + (FStar_Reflection_Formula.term_as_formula' + post2)) + (fun + uu___6 -> + (fun + uu___6 -> + match uu___6 + with + | + FStar_Reflection_Formula.Implies + (p, q) -> + Obj.magic + (FStar_Tactics_Effect.tac_bind + (Prims.mk_range + "FStar.Tactics.Derived.fst" + (Prims.of_int (698)) + (Prims.of_int (11)) + (Prims.of_int (698)) + (Prims.of_int (31))) + (Prims.mk_range + "FStar.Tactics.Derived.fst" + (Prims.of_int (699)) + (Prims.of_int (11)) + (Prims.of_int (699)) + (Prims.of_int (38))) + (Obj.magic + (apply_lemma + (FStar_Reflection_Builtins.pack_ln + (FStar_Reflection_Data.Tv_FVar + (FStar_Reflection_Builtins.pack_fv + ["FStar"; + "Tactics"; + "Derived"; + "push1"]))))) + (fun + uu___7 -> + (fun + uu___7 -> + Obj.magic + (apply_squash_or_lem + (d - + Prims.int_one) + t)) + uu___7)) + | + uu___7 -> + Obj.magic + (fail + "mapply: can't apply (1)")) + uu___6))) + uu___6))) + uu___6)) + | FStar_Reflection_Data.C_Total + rt -> + (match FStar_Reflection_Derived.unsquash_term + rt + with + | FStar_Pervasives_Native.Some + rt1 -> + Obj.magic + (FStar_Tactics_Effect.tac_bind + (Prims.mk_range + "FStar.Tactics.Derived.fst" + (Prims.of_int (710)) + (Prims.of_int (18)) + (Prims.of_int (710)) + (Prims.of_int (33))) + (Prims.mk_range + "FStar.Tactics.Derived.fst" + (Prims.of_int (712)) + (Prims.of_int (9)) + (Prims.of_int (718)) + (Prims.of_int (43))) + (Obj.magic + (norm_term [] + rt1)) + (fun uu___5 -> + (fun rt2 -> + Obj.magic + (FStar_Tactics_Effect.tac_bind + (Prims.mk_range + "FStar.Tactics.Derived.fst" + (Prims.of_int (712)) + (Prims.of_int (15)) + (Prims.of_int (712)) + (Prims.of_int (34))) + (Prims.mk_range + "FStar.Tactics.Derived.fst" + (Prims.of_int (712)) + (Prims.of_int (9)) + (Prims.of_int (718)) + (Prims.of_int (43))) + (Obj.magic + (FStar_Reflection_Formula.term_as_formula' + rt2)) + (fun + uu___5 -> + (fun + uu___5 -> + match uu___5 + with + | + FStar_Reflection_Formula.Implies + (p, q) -> + Obj.magic + (FStar_Tactics_Effect.tac_bind + (Prims.mk_range + "FStar.Tactics.Derived.fst" + (Prims.of_int (714)) + (Prims.of_int (13)) + (Prims.of_int (714)) + (Prims.of_int (33))) + (Prims.mk_range + "FStar.Tactics.Derived.fst" + (Prims.of_int (715)) + (Prims.of_int (13)) + (Prims.of_int (715)) + (Prims.of_int (40))) + (Obj.magic + (apply_lemma + (FStar_Reflection_Builtins.pack_ln + (FStar_Reflection_Data.Tv_FVar + (FStar_Reflection_Builtins.pack_fv + ["FStar"; + "Tactics"; + "Derived"; + "push1"]))))) + (fun + uu___6 -> + (fun + uu___6 -> + Obj.magic + (apply_squash_or_lem + (d - + Prims.int_one) + t)) + uu___6)) + | + uu___6 -> + Obj.magic + (fail + "mapply: can't apply (1)")) + uu___5))) + uu___5)) + | FStar_Pervasives_Native.None + -> + Obj.magic + (FStar_Tactics_Effect.tac_bind + (Prims.mk_range + "FStar.Tactics.Derived.fst" + (Prims.of_int (725)) + (Prims.of_int (18)) + (Prims.of_int (725)) + (Prims.of_int (33))) + (Prims.mk_range + "FStar.Tactics.Derived.fst" + (Prims.of_int (727)) + (Prims.of_int (9)) + (Prims.of_int (734)) + (Prims.of_int (20))) + (Obj.magic + (norm_term [] + rt)) + (fun uu___5 -> + (fun rt1 -> + Obj.magic + (FStar_Tactics_Effect.tac_bind + (Prims.mk_range + "FStar.Tactics.Derived.fst" + (Prims.of_int (727)) + (Prims.of_int (15)) + (Prims.of_int (727)) + (Prims.of_int (34))) + (Prims.mk_range + "FStar.Tactics.Derived.fst" + (Prims.of_int (727)) + (Prims.of_int (9)) + (Prims.of_int (734)) + (Prims.of_int (20))) + (Obj.magic + (FStar_Reflection_Formula.term_as_formula' + rt1)) + (fun + uu___5 -> + (fun + uu___5 -> + match uu___5 + with + | + FStar_Reflection_Formula.Implies + (p, q) -> + Obj.magic + (FStar_Tactics_Effect.tac_bind + (Prims.mk_range + "FStar.Tactics.Derived.fst" + (Prims.of_int (729)) + (Prims.of_int (13)) + (Prims.of_int (729)) + (Prims.of_int (33))) + (Prims.mk_range + "FStar.Tactics.Derived.fst" + (Prims.of_int (730)) + (Prims.of_int (13)) + (Prims.of_int (730)) + (Prims.of_int (40))) + (Obj.magic + (apply_lemma + (FStar_Reflection_Builtins.pack_ln + (FStar_Reflection_Data.Tv_FVar + (FStar_Reflection_Builtins.pack_fv + ["FStar"; + "Tactics"; + "Derived"; + "push1"]))))) + (fun + uu___6 -> + (fun + uu___6 -> + Obj.magic + (apply_squash_or_lem + (d - + Prims.int_one) + t)) + uu___6)) + | + uu___6 -> + Obj.magic + (FStar_Tactics_Effect.tac_bind + (Prims.mk_range + "FStar.Tactics.Derived.fst" + (Prims.of_int (733)) + (Prims.of_int (13)) + (Prims.of_int (733)) + (Prims.of_int (48))) + (Prims.mk_range + "FStar.Tactics.Derived.fst" + (Prims.of_int (734)) + (Prims.of_int (13)) + (Prims.of_int (734)) + (Prims.of_int (20))) + (Obj.magic + (apply + (FStar_Reflection_Builtins.pack_ln + (FStar_Reflection_Data.Tv_FVar + (FStar_Reflection_Builtins.pack_fv + ["FStar"; + "Squash"; + "return_squash"]))))) + (fun + uu___7 -> + (fun + uu___7 -> + Obj.magic + (apply t)) + uu___7))) + uu___5))) + uu___5))) + | uu___5 -> + Obj.magic + (fail + "mapply: can't apply (2)"))) + uu___4))) uu___4)))) +let (mapply : + FStar_Reflection_Types.term -> (unit, unit) FStar_Tactics_Effect.tac_repr) + = fun t -> apply_squash_or_lem (Prims.of_int (10)) t +let (admit_dump_t : unit -> (unit, unit) FStar_Tactics_Effect.tac_repr) = + fun uu___ -> + FStar_Tactics_Effect.tac_bind + (Prims.mk_range "FStar.Tactics.Derived.fst" (Prims.of_int (747)) + (Prims.of_int (2)) (Prims.of_int (747)) (Prims.of_int (18))) + (Prims.mk_range "FStar.Tactics.Derived.fst" (Prims.of_int (748)) + (Prims.of_int (2)) (Prims.of_int (748)) (Prims.of_int (16))) + (Obj.magic (FStar_Tactics_Builtins.dump "Admitting")) + (fun uu___1 -> + (fun uu___1 -> + Obj.magic + (apply + (FStar_Reflection_Builtins.pack_ln + (FStar_Reflection_Data.Tv_FVar + (FStar_Reflection_Builtins.pack_fv ["Prims"; "admit"]))))) + uu___1) +let admit_dump : 'a . (unit -> 'a) -> unit -> 'a = fun x -> fun uu___ -> x () +let (magic_dump_t : unit -> (unit, unit) FStar_Tactics_Effect.tac_repr) = + fun uu___ -> + FStar_Tactics_Effect.tac_bind + (Prims.mk_range "FStar.Tactics.Derived.fst" (Prims.of_int (755)) + (Prims.of_int (2)) (Prims.of_int (755)) (Prims.of_int (18))) + (Prims.mk_range "FStar.Tactics.Derived.fst" (Prims.of_int (756)) + (Prims.of_int (2)) (Prims.of_int (758)) (Prims.of_int (4))) + (Obj.magic (FStar_Tactics_Builtins.dump "Admitting")) + (fun uu___1 -> + (fun uu___1 -> + Obj.magic + (FStar_Tactics_Effect.tac_bind + (Prims.mk_range "FStar.Tactics.Derived.fst" + (Prims.of_int (756)) (Prims.of_int (2)) + (Prims.of_int (756)) (Prims.of_int (16))) + (Prims.mk_range "FStar.Tactics.Derived.fst" + (Prims.of_int (757)) (Prims.of_int (2)) + (Prims.of_int (758)) (Prims.of_int (4))) + (Obj.magic + (apply + (FStar_Reflection_Builtins.pack_ln + (FStar_Reflection_Data.Tv_FVar + (FStar_Reflection_Builtins.pack_fv + ["Prims"; "magic"]))))) + (fun uu___2 -> + (fun uu___2 -> + Obj.magic + (FStar_Tactics_Effect.tac_bind + (Prims.mk_range "FStar.Tactics.Derived.fst" + (Prims.of_int (757)) (Prims.of_int (2)) + (Prims.of_int (757)) (Prims.of_int (13))) + (Prims.mk_range "FStar.Tactics.Derived.fst" + (Prims.of_int (758)) (Prims.of_int (2)) + (Prims.of_int (758)) (Prims.of_int (4))) + (Obj.magic + (exact + (FStar_Reflection_Builtins.pack_ln + (FStar_Reflection_Data.Tv_Const + FStar_Reflection_Data.C_Unit)))) + (fun uu___3 -> + FStar_Tactics_Effect.lift_div_tac + (fun uu___4 -> ())))) uu___2))) uu___1) +let magic_dump : 'a . 'a -> unit -> 'a = fun x -> fun uu___ -> x +let (change_with : + FStar_Reflection_Types.term -> + FStar_Reflection_Types.term -> (unit, unit) FStar_Tactics_Effect.tac_repr) + = + fun t1 -> + fun t2 -> + focus + (fun uu___ -> + FStar_Tactics_Effect.tac_bind + (Prims.mk_range "FStar.Tactics.Derived.fst" (Prims.of_int (765)) + (Prims.of_int (8)) (Prims.of_int (765)) (Prims.of_int (22))) + (Prims.mk_range "FStar.Tactics.Derived.fst" (Prims.of_int (766)) + (Prims.of_int (8)) (Prims.of_int (766)) (Prims.of_int (29))) + (Obj.magic (grewrite t1 t2)) + (fun uu___1 -> + (fun uu___1 -> Obj.magic (iseq [idtac; trivial])) uu___1)) +let (change_sq : + FStar_Reflection_Types.term -> (unit, unit) FStar_Tactics_Effect.tac_repr) + = + fun t1 -> + FStar_Tactics_Builtins.change + (FStar_Reflection_Derived.mk_e_app + (FStar_Reflection_Builtins.pack_ln + (FStar_Reflection_Data.Tv_FVar + (FStar_Reflection_Builtins.pack_fv ["Prims"; "squash"]))) + [t1]) +let finish_by : + 'a . + (unit -> ('a, unit) FStar_Tactics_Effect.tac_repr) -> + ('a, unit) FStar_Tactics_Effect.tac_repr + = + fun t -> + FStar_Tactics_Effect.tac_bind + (Prims.mk_range "FStar.Tactics.Derived.fst" (Prims.of_int (773)) + (Prims.of_int (12)) (Prims.of_int (773)) (Prims.of_int (16))) + (Prims.mk_range "FStar.Tactics.Derived.fst" (Prims.of_int (774)) + (Prims.of_int (4)) (Prims.of_int (775)) (Prims.of_int (5))) + (Obj.magic (t ())) + (fun uu___ -> + (fun x -> + Obj.magic + (FStar_Tactics_Effect.tac_bind + (Prims.mk_range "FStar.Tactics.Derived.fst" + (Prims.of_int (774)) (Prims.of_int (4)) + (Prims.of_int (774)) (Prims.of_int (58))) + (Prims.mk_range "FStar.Tactics.Derived.fst" + (Prims.of_int (773)) (Prims.of_int (8)) + (Prims.of_int (773)) (Prims.of_int (9))) + (Obj.magic + (or_else qed + (fun uu___ -> fail "finish_by: not finished"))) + (fun uu___ -> + FStar_Tactics_Effect.lift_div_tac (fun uu___1 -> x)))) + uu___) +let solve_then : + 'a 'b . + (unit -> ('a, unit) FStar_Tactics_Effect.tac_repr) -> + ('a -> ('b, unit) FStar_Tactics_Effect.tac_repr) -> + ('b, unit) FStar_Tactics_Effect.tac_repr + = + fun t1 -> + fun t2 -> + FStar_Tactics_Effect.tac_bind + (Prims.mk_range "FStar.Tactics.Derived.fst" (Prims.of_int (778)) + (Prims.of_int (4)) (Prims.of_int (778)) (Prims.of_int (10))) + (Prims.mk_range "FStar.Tactics.Derived.fst" (Prims.of_int (779)) + (Prims.of_int (4)) (Prims.of_int (782)) (Prims.of_int (5))) + (Obj.magic (FStar_Tactics_Builtins.dup ())) + (fun uu___ -> + (fun uu___ -> + Obj.magic + (FStar_Tactics_Effect.tac_bind + (Prims.mk_range "FStar.Tactics.Derived.fst" + (Prims.of_int (779)) (Prims.of_int (12)) + (Prims.of_int (779)) (Prims.of_int (42))) + (Prims.mk_range "FStar.Tactics.Derived.fst" + (Prims.of_int (780)) (Prims.of_int (4)) + (Prims.of_int (782)) (Prims.of_int (5))) + (Obj.magic (focus (fun uu___1 -> finish_by t1))) + (fun uu___1 -> + (fun x -> + Obj.magic + (FStar_Tactics_Effect.tac_bind + (Prims.mk_range "FStar.Tactics.Derived.fst" + (Prims.of_int (780)) (Prims.of_int (12)) + (Prims.of_int (780)) (Prims.of_int (16))) + (Prims.mk_range "FStar.Tactics.Derived.fst" + (Prims.of_int (781)) (Prims.of_int (4)) + (Prims.of_int (782)) (Prims.of_int (5))) + (Obj.magic (t2 x)) + (fun uu___1 -> + (fun y -> + Obj.magic + (FStar_Tactics_Effect.tac_bind + (Prims.mk_range + "FStar.Tactics.Derived.fst" + (Prims.of_int (781)) + (Prims.of_int (4)) + (Prims.of_int (781)) + (Prims.of_int (12))) + (Prims.mk_range + "FStar.Tactics.Derived.fst" + (Prims.of_int (780)) + (Prims.of_int (8)) + (Prims.of_int (780)) + (Prims.of_int (9))) + (Obj.magic (trefl ())) + (fun uu___1 -> + FStar_Tactics_Effect.lift_div_tac + (fun uu___2 -> y)))) uu___1))) + uu___1))) uu___) +let add_elem : + 'a . + (unit -> ('a, unit) FStar_Tactics_Effect.tac_repr) -> + ('a, unit) FStar_Tactics_Effect.tac_repr + = + fun t -> + focus + (fun uu___ -> + FStar_Tactics_Effect.tac_bind + (Prims.mk_range "FStar.Tactics.Derived.fst" (Prims.of_int (785)) + (Prims.of_int (4)) (Prims.of_int (785)) (Prims.of_int (17))) + (Prims.mk_range "FStar.Tactics.Derived.fst" (Prims.of_int (786)) + (Prims.of_int (4)) (Prims.of_int (790)) (Prims.of_int (5))) + (Obj.magic + (apply + (FStar_Reflection_Builtins.pack_ln + (FStar_Reflection_Data.Tv_FVar + (FStar_Reflection_Builtins.pack_fv ["Prims"; "Cons"]))))) + (fun uu___1 -> + (fun uu___1 -> + Obj.magic + (focus + (fun uu___2 -> + FStar_Tactics_Effect.tac_bind + (Prims.mk_range "FStar.Tactics.Derived.fst" + (Prims.of_int (787)) (Prims.of_int (14)) + (Prims.of_int (787)) (Prims.of_int (18))) + (Prims.mk_range "FStar.Tactics.Derived.fst" + (Prims.of_int (788)) (Prims.of_int (6)) + (Prims.of_int (789)) (Prims.of_int (7))) + (Obj.magic (t ())) + (fun uu___3 -> + (fun x -> + Obj.magic + (FStar_Tactics_Effect.tac_bind + (Prims.mk_range + "FStar.Tactics.Derived.fst" + (Prims.of_int (788)) + (Prims.of_int (6)) + (Prims.of_int (788)) + (Prims.of_int (12))) + (Prims.mk_range + "FStar.Tactics.Derived.fst" + (Prims.of_int (787)) + (Prims.of_int (10)) + (Prims.of_int (787)) + (Prims.of_int (11))) + (Obj.magic (qed ())) + (fun uu___3 -> + FStar_Tactics_Effect.lift_div_tac + (fun uu___4 -> x)))) uu___3)))) + uu___1)) +let specialize : + 'a . + 'a -> + Prims.string Prims.list -> + unit -> (unit, unit) FStar_Tactics_Effect.tac_repr + = + fun f -> + fun l -> + fun uu___ -> + solve_then + (fun uu___1 -> + FStar_Tactics_Effect.tac_bind + (Prims.mk_range "FStar.Tactics.Derived.fst" + (Prims.of_int (809)) (Prims.of_int (42)) + (Prims.of_int (809)) (Prims.of_int (51))) + (Prims.mk_range "FStar.Tactics.Derived.fst" + (Prims.of_int (809)) (Prims.of_int (36)) + (Prims.of_int (809)) (Prims.of_int (51))) + (FStar_Tactics_Effect.lift_div_tac + (fun uu___2 -> + (fun uu___2 -> + Obj.magic + (failwith + "Cannot evaluate open quotation at runtime")) + uu___2)) + (fun uu___2 -> (fun uu___2 -> Obj.magic (exact uu___2)) uu___2)) + (fun uu___1 -> + FStar_Tactics_Builtins.norm + [FStar_Pervasives.delta_only l; + FStar_Pervasives.iota; + FStar_Pervasives.zeta]) +let (tlabel : Prims.string -> (unit, unit) FStar_Tactics_Effect.tac_repr) = + fun l -> + FStar_Tactics_Effect.tac_bind + (Prims.mk_range "FStar.Tactics.Derived.fst" (Prims.of_int (812)) + (Prims.of_int (10)) (Prims.of_int (812)) (Prims.of_int (18))) + (Prims.mk_range "FStar.Tactics.Derived.fst" (Prims.of_int (812)) + (Prims.of_int (4)) (Prims.of_int (815)) (Prims.of_int (38))) + (Obj.magic (goals ())) + (fun uu___ -> + (fun uu___ -> + match uu___ with + | [] -> Obj.magic (fail "tlabel: no goals") + | h::t -> + Obj.magic + (FStar_Tactics_Builtins.set_goals + ((FStar_Tactics_Types.set_label l h) :: t))) uu___) +let (tlabel' : Prims.string -> (unit, unit) FStar_Tactics_Effect.tac_repr) = + fun l -> + FStar_Tactics_Effect.tac_bind + (Prims.mk_range "FStar.Tactics.Derived.fst" (Prims.of_int (818)) + (Prims.of_int (10)) (Prims.of_int (818)) (Prims.of_int (18))) + (Prims.mk_range "FStar.Tactics.Derived.fst" (Prims.of_int (818)) + (Prims.of_int (4)) (Prims.of_int (822)) (Prims.of_int (26))) + (Obj.magic (goals ())) + (fun uu___ -> + (fun uu___ -> + match uu___ with + | [] -> Obj.magic (fail "tlabel': no goals") + | h::t -> + Obj.magic + (FStar_Tactics_Effect.tac_bind + (Prims.mk_range "FStar.Tactics.Derived.fst" + (Prims.of_int (821)) (Prims.of_int (16)) + (Prims.of_int (821)) (Prims.of_int (45))) + (Prims.mk_range "FStar.Tactics.Derived.fst" + (Prims.of_int (822)) (Prims.of_int (8)) + (Prims.of_int (822)) (Prims.of_int (26))) + (FStar_Tactics_Effect.lift_div_tac + (fun uu___1 -> + FStar_Tactics_Types.set_label + (Prims.strcat l + (FStar_Tactics_Types.get_label h)) h)) + (fun uu___1 -> + (fun h1 -> + Obj.magic + (FStar_Tactics_Builtins.set_goals (h1 :: t))) + uu___1))) uu___) +let (focus_all : unit -> (unit, unit) FStar_Tactics_Effect.tac_repr) = + fun uu___ -> + FStar_Tactics_Effect.tac_bind + (Prims.mk_range "FStar.Tactics.Derived.fst" (Prims.of_int (825)) + (Prims.of_int (4)) (Prims.of_int (825)) (Prims.of_int (39))) + (Prims.mk_range "FStar.Tactics.Derived.fst" (Prims.of_int (826)) + (Prims.of_int (4)) (Prims.of_int (826)) (Prims.of_int (20))) + (Obj.magic + (FStar_Tactics_Effect.tac_bind + (Prims.mk_range "FStar.Tactics.Derived.fst" (Prims.of_int (825)) + (Prims.of_int (14)) (Prims.of_int (825)) (Prims.of_int (39))) + (Prims.mk_range "FStar.Tactics.Derived.fst" (Prims.of_int (825)) + (Prims.of_int (4)) (Prims.of_int (825)) (Prims.of_int (39))) + (Obj.magic + (FStar_Tactics_Effect.tac_bind + (Prims.mk_range "FStar.Tactics.Derived.fst" + (Prims.of_int (825)) (Prims.of_int (15)) + (Prims.of_int (825)) (Prims.of_int (23))) + (Prims.mk_range "FStar.Tactics.Derived.fst" + (Prims.of_int (825)) (Prims.of_int (14)) + (Prims.of_int (825)) (Prims.of_int (39))) + (Obj.magic (goals ())) + (fun uu___1 -> + (fun uu___1 -> + Obj.magic + (FStar_Tactics_Effect.tac_bind + (Prims.mk_range "FStar.Tactics.Derived.fst" + (Prims.of_int (825)) (Prims.of_int (26)) + (Prims.of_int (825)) (Prims.of_int (38))) + (Prims.mk_range "FStar.Tactics.Derived.fst" + (Prims.of_int (825)) (Prims.of_int (14)) + (Prims.of_int (825)) (Prims.of_int (39))) + (Obj.magic (smt_goals ())) + (fun uu___2 -> + FStar_Tactics_Effect.lift_div_tac + (fun uu___3 -> + FStar_List_Tot_Base.op_At uu___1 uu___2)))) + uu___1))) + (fun uu___1 -> + (fun uu___1 -> + Obj.magic (FStar_Tactics_Builtins.set_goals uu___1)) uu___1))) + (fun uu___1 -> + (fun uu___1 -> Obj.magic (FStar_Tactics_Builtins.set_smt_goals [])) + uu___1) +let rec extract_nth : + 'a . + Prims.nat -> + 'a Prims.list -> ('a * 'a Prims.list) FStar_Pervasives_Native.option + = + fun n -> + fun l -> + match (n, l) with + | (uu___, []) -> FStar_Pervasives_Native.None + | (uu___, hd::tl) when uu___ = Prims.int_zero -> + FStar_Pervasives_Native.Some (hd, tl) + | (uu___, hd::tl) -> + (match extract_nth (n - Prims.int_one) tl with + | FStar_Pervasives_Native.Some (hd', tl') -> + FStar_Pervasives_Native.Some (hd', (hd :: tl')) + | FStar_Pervasives_Native.None -> FStar_Pervasives_Native.None) +let (bump_nth : Prims.pos -> (unit, unit) FStar_Tactics_Effect.tac_repr) = + fun n -> + FStar_Tactics_Effect.tac_bind + (Prims.mk_range "FStar.Tactics.Derived.fst" (Prims.of_int (841)) + (Prims.of_int (8)) (Prims.of_int (841)) (Prims.of_int (38))) + (Prims.mk_range "FStar.Tactics.Derived.fst" (Prims.of_int (841)) + (Prims.of_int (2)) (Prims.of_int (843)) (Prims.of_int (37))) + (Obj.magic + (FStar_Tactics_Effect.tac_bind + (Prims.mk_range "FStar.Tactics.Derived.fst" (Prims.of_int (841)) + (Prims.of_int (28)) (Prims.of_int (841)) (Prims.of_int (38))) + (Prims.mk_range "FStar.Tactics.Derived.fst" (Prims.of_int (841)) + (Prims.of_int (8)) (Prims.of_int (841)) (Prims.of_int (38))) + (Obj.magic (goals ())) + (fun uu___ -> + FStar_Tactics_Effect.lift_div_tac + (fun uu___1 -> extract_nth (n - Prims.int_one) uu___)))) + (fun uu___ -> + (fun uu___ -> + match uu___ with + | FStar_Pervasives_Native.None -> + Obj.magic (fail "bump_nth: not that many goals") + | FStar_Pervasives_Native.Some (h, t) -> + Obj.magic (FStar_Tactics_Builtins.set_goals (h :: t))) uu___) +let rec (destruct_list : + FStar_Reflection_Types.term -> + (FStar_Reflection_Types.term Prims.list, unit) + FStar_Tactics_Effect.tac_repr) + = + fun t -> + FStar_Tactics_Effect.tac_bind + (Prims.mk_range "FStar.Tactics.Derived.fst" (Prims.of_int (846)) + (Prims.of_int (21)) (Prims.of_int (846)) (Prims.of_int (34))) + (Prims.mk_range "FStar.Tactics.Derived.fst" (Prims.of_int (846)) + (Prims.of_int (4)) (Prims.of_int (858)) (Prims.of_int (27))) + (FStar_Tactics_Effect.lift_div_tac + (fun uu___ -> FStar_Reflection_Derived.collect_app t)) + (fun uu___ -> + (fun uu___ -> + match uu___ with + | (head, args) -> + (match ((FStar_Reflection_Builtins.inspect_ln head), args) + with + | (FStar_Reflection_Data.Tv_FVar fv, + (a1, FStar_Reflection_Data.Q_Explicit)::(a2, + FStar_Reflection_Data.Q_Explicit)::[]) + -> + Obj.magic + (Obj.repr + (if + (FStar_Reflection_Builtins.inspect_fv fv) = + FStar_Reflection_Const.cons_qn + then + FStar_Tactics_Effect.tac_bind + (Prims.mk_range "FStar.Tactics.Derived.fst" + (Prims.of_int (851)) (Prims.of_int (17)) + (Prims.of_int (851)) (Prims.of_int (33))) + (Prims.mk_range "FStar.Tactics.Derived.fst" + (Prims.of_int (851)) (Prims.of_int (14)) + (Prims.of_int (851)) (Prims.of_int (16))) + (Obj.magic (destruct_list a2)) + (fun uu___1 -> + FStar_Tactics_Effect.lift_div_tac + (fun uu___2 -> a1 :: uu___1)) + else + FStar_Tactics_Effect.raise + FStar_Tactics_Common.NotAListLiteral)) + | (FStar_Reflection_Data.Tv_FVar fv, + (uu___1, FStar_Reflection_Data.Q_Implicit)::(a1, + FStar_Reflection_Data.Q_Explicit):: + (a2, FStar_Reflection_Data.Q_Explicit)::[]) -> + Obj.magic + (Obj.repr + (if + (FStar_Reflection_Builtins.inspect_fv fv) = + FStar_Reflection_Const.cons_qn + then + FStar_Tactics_Effect.tac_bind + (Prims.mk_range "FStar.Tactics.Derived.fst" + (Prims.of_int (851)) (Prims.of_int (17)) + (Prims.of_int (851)) (Prims.of_int (33))) + (Prims.mk_range "FStar.Tactics.Derived.fst" + (Prims.of_int (851)) (Prims.of_int (14)) + (Prims.of_int (851)) (Prims.of_int (16))) + (Obj.magic (destruct_list a2)) + (fun uu___2 -> + FStar_Tactics_Effect.lift_div_tac + (fun uu___3 -> a1 :: uu___2)) + else + FStar_Tactics_Effect.raise + FStar_Tactics_Common.NotAListLiteral)) + | (FStar_Reflection_Data.Tv_FVar fv, uu___1) -> + Obj.magic + (Obj.repr + (if + (FStar_Reflection_Builtins.inspect_fv fv) = + FStar_Reflection_Const.nil_qn + then + Obj.repr + (FStar_Tactics_Effect.lift_div_tac + (fun uu___2 -> [])) + else + Obj.repr + (FStar_Tactics_Effect.raise + FStar_Tactics_Common.NotAListLiteral))) + | uu___1 -> + Obj.magic + (Obj.repr + (FStar_Tactics_Effect.raise + FStar_Tactics_Common.NotAListLiteral)))) uu___) +let (get_match_body : + unit -> (FStar_Reflection_Types.term, unit) FStar_Tactics_Effect.tac_repr) + = + fun uu___ -> + FStar_Tactics_Effect.tac_bind + (Prims.mk_range "FStar.Tactics.Derived.fst" (Prims.of_int (861)) + (Prims.of_int (8)) (Prims.of_int (861)) (Prims.of_int (35))) + (Prims.mk_range "FStar.Tactics.Derived.fst" (Prims.of_int (861)) + (Prims.of_int (2)) (Prims.of_int (865)) (Prims.of_int (46))) + (Obj.magic + (FStar_Tactics_Effect.tac_bind + (Prims.mk_range "FStar.Tactics.Derived.fst" (Prims.of_int (861)) + (Prims.of_int (22)) (Prims.of_int (861)) (Prims.of_int (35))) + (Prims.mk_range "FStar.Tactics.Derived.fst" (Prims.of_int (861)) + (Prims.of_int (8)) (Prims.of_int (861)) (Prims.of_int (35))) + (Obj.magic (cur_goal ())) + (fun uu___1 -> + FStar_Tactics_Effect.lift_div_tac + (fun uu___2 -> FStar_Reflection_Derived.unsquash_term uu___1)))) + (fun uu___1 -> + (fun uu___1 -> + match uu___1 with + | FStar_Pervasives_Native.None -> Obj.magic (fail "") + | FStar_Pervasives_Native.Some t -> + Obj.magic + (FStar_Tactics_Effect.tac_bind + (Prims.mk_range "FStar.Tactics.Derived.fst" + (Prims.of_int (863)) (Prims.of_int (20)) + (Prims.of_int (863)) (Prims.of_int (39))) + (Prims.mk_range "FStar.Tactics.Derived.fst" + (Prims.of_int (863)) (Prims.of_int (14)) + (Prims.of_int (865)) (Prims.of_int (46))) + (Obj.magic (inspect_unascribe t)) + (fun uu___2 -> + (fun uu___2 -> + match uu___2 with + | FStar_Reflection_Data.Tv_Match + (sc, uu___3, uu___4) -> + Obj.magic + (Obj.repr + (FStar_Tactics_Effect.lift_div_tac + (fun uu___5 -> sc))) + | uu___3 -> + Obj.magic + (Obj.repr (fail "Goal is not a match"))) + uu___2))) uu___1) +let rec last : 'a . 'a Prims.list -> ('a, unit) FStar_Tactics_Effect.tac_repr + = + fun uu___ -> + (fun x -> + match x with + | [] -> Obj.magic (Obj.repr (fail "last: empty list")) + | x1::[] -> + Obj.magic + (Obj.repr (FStar_Tactics_Effect.lift_div_tac (fun uu___ -> x1))) + | uu___::xs -> Obj.magic (Obj.repr (last xs))) uu___ +let (branch_on_match : unit -> (unit, unit) FStar_Tactics_Effect.tac_repr) = + fun uu___ -> + focus + (fun uu___1 -> + FStar_Tactics_Effect.tac_bind + (Prims.mk_range "FStar.Tactics.Derived.fst" (Prims.of_int (878)) + (Prims.of_int (14)) (Prims.of_int (878)) (Prims.of_int (31))) + (Prims.mk_range "FStar.Tactics.Derived.fst" (Prims.of_int (879)) + (Prims.of_int (6)) (Prims.of_int (884)) (Prims.of_int (20))) + (Obj.magic (get_match_body ())) + (fun uu___2 -> + (fun x -> + Obj.magic + (FStar_Tactics_Effect.tac_bind + (Prims.mk_range "FStar.Tactics.Derived.fst" + (Prims.of_int (879)) (Prims.of_int (14)) + (Prims.of_int (879)) (Prims.of_int (26))) + (Prims.mk_range "FStar.Tactics.Derived.fst" + (Prims.of_int (880)) (Prims.of_int (6)) + (Prims.of_int (884)) (Prims.of_int (20))) + (Obj.magic (FStar_Tactics_Builtins.t_destruct x)) + (fun uu___2 -> + (fun uu___2 -> + Obj.magic + (iterAll + (fun uu___3 -> + FStar_Tactics_Effect.tac_bind + (Prims.mk_range + "FStar.Tactics.Derived.fst" + (Prims.of_int (881)) + (Prims.of_int (17)) + (Prims.of_int (881)) + (Prims.of_int (29))) + (Prims.mk_range + "FStar.Tactics.Derived.fst" + (Prims.of_int (882)) + (Prims.of_int (8)) + (Prims.of_int (884)) + (Prims.of_int (19))) + (Obj.magic + (repeat FStar_Tactics_Builtins.intro)) + (fun uu___4 -> + (fun bs -> + Obj.magic + (FStar_Tactics_Effect.tac_bind + (Prims.mk_range + "FStar.Tactics.Derived.fst" + (Prims.of_int (882)) + (Prims.of_int (16)) + (Prims.of_int (882)) + (Prims.of_int (23))) + (Prims.mk_range + "FStar.Tactics.Derived.fst" + (Prims.of_int (883)) + (Prims.of_int (8)) + (Prims.of_int (884)) + (Prims.of_int (19))) + (Obj.magic (last bs)) + (fun uu___4 -> + (fun b -> + Obj.magic + (FStar_Tactics_Effect.tac_bind + (Prims.mk_range + "FStar.Tactics.Derived.fst" + (Prims.of_int (883)) + (Prims.of_int (8)) + (Prims.of_int (883)) + (Prims.of_int (21))) + (Prims.mk_range + "FStar.Tactics.Derived.fst" + (Prims.of_int (884)) + (Prims.of_int (8)) + (Prims.of_int (884)) + (Prims.of_int (19))) + (Obj.magic + (grewrite_eq b)) + (fun uu___4 -> + (fun uu___4 -> + Obj.magic + ( + FStar_Tactics_Builtins.norm + [FStar_Pervasives.iota])) + uu___4))) + uu___4))) uu___4)))) + uu___2))) uu___2)) +let (nth_binder : + Prims.int -> + (FStar_Reflection_Types.binder, unit) FStar_Tactics_Effect.tac_repr) + = + fun i -> + FStar_Tactics_Effect.tac_bind + (Prims.mk_range "FStar.Tactics.Derived.fst" (Prims.of_int (893)) + (Prims.of_int (11)) (Prims.of_int (893)) (Prims.of_int (25))) + (Prims.mk_range "FStar.Tactics.Derived.fst" (Prims.of_int (894)) + (Prims.of_int (2)) (Prims.of_int (898)) (Prims.of_int (15))) + (Obj.magic (cur_binders ())) + (fun uu___ -> + (fun bs -> + Obj.magic + (FStar_Tactics_Effect.tac_bind + (Prims.mk_range "FStar.Tactics.Derived.fst" + (Prims.of_int (894)) (Prims.of_int (16)) + (Prims.of_int (894)) (Prims.of_int (65))) + (Prims.mk_range "FStar.Tactics.Derived.fst" + (Prims.of_int (895)) (Prims.of_int (2)) + (Prims.of_int (898)) (Prims.of_int (15))) + (FStar_Tactics_Effect.lift_div_tac + (fun uu___ -> + if i >= Prims.int_zero + then i + else (FStar_List_Tot_Base.length bs) + i)) + (fun uu___ -> + (fun k -> + Obj.magic + (FStar_Tactics_Effect.tac_bind + (Prims.mk_range "FStar.Tactics.Derived.fst" + (Prims.of_int (895)) (Prims.of_int (16)) + (Prims.of_int (895)) (Prims.of_int (62))) + (Prims.mk_range "FStar.Tactics.Derived.fst" + (Prims.of_int (896)) (Prims.of_int (2)) + (Prims.of_int (898)) (Prims.of_int (15))) + (if k < Prims.int_zero + then + Obj.magic + (Obj.repr (fail "not enough binders")) + else + Obj.magic + (Obj.repr + (FStar_Tactics_Effect.lift_div_tac + (fun uu___1 -> k)))) + (fun uu___ -> + (fun k1 -> + match FStar_List_Tot_Base.nth bs k1 with + | FStar_Pervasives_Native.None -> + Obj.magic + (Obj.repr (fail "not enough binders")) + | FStar_Pervasives_Native.Some b -> + Obj.magic + (Obj.repr + (FStar_Tactics_Effect.lift_div_tac + (fun uu___ -> b)))) uu___))) + uu___))) uu___) +exception Appears +let (uu___is_Appears : Prims.exn -> Prims.bool) = + fun projectee -> match projectee with | Appears -> true | uu___ -> false +let (name_appears_in : + FStar_Reflection_Types.name -> + FStar_Reflection_Types.term -> + (Prims.bool, unit) FStar_Tactics_Effect.tac_repr) + = + fun nm -> + fun t -> + FStar_Tactics_Effect.tac_bind + (Prims.mk_range "FStar.Tactics.Derived.fst" (Prims.of_int (906)) + (Prims.of_int (4)) (Prims.of_int (911)) (Prims.of_int (12))) + (Prims.mk_range "FStar.Tactics.Derived.fst" (Prims.of_int (913)) + (Prims.of_int (2)) (Prims.of_int (915)) (Prims.of_int (16))) + (FStar_Tactics_Effect.lift_div_tac + (fun uu___ -> + fun t1 -> + FStar_Tactics_Effect.tac_bind + (Prims.mk_range "FStar.Tactics.Derived.fst" + (Prims.of_int (905)) (Prims.of_int (10)) + (Prims.of_int (905)) (Prims.of_int (11))) + (Prims.mk_range "FStar.Tactics.Derived.fst" + (Prims.of_int (906)) (Prims.of_int (4)) + (Prims.of_int (911)) (Prims.of_int (12))) + (Obj.magic (FStar_Tactics_Builtins.inspect t1)) + (fun uu___1 -> + (fun uu___1 -> + match uu___1 with + | FStar_Reflection_Data.Tv_FVar fv -> + Obj.magic + (FStar_Tactics_Effect.tac_bind + (Prims.mk_range "FStar.Tactics.Derived.fst" + (Prims.of_int (908)) (Prims.of_int (6)) + (Prims.of_int (909)) (Prims.of_int (21))) + (Prims.mk_range "FStar.Tactics.Derived.fst" + (Prims.of_int (905)) (Prims.of_int (10)) + (Prims.of_int (905)) (Prims.of_int (11))) + (if + (FStar_Reflection_Builtins.inspect_fv fv) + = nm + then + Obj.magic + (Obj.repr + (FStar_Tactics_Effect.raise Appears)) + else + Obj.magic + (Obj.repr + (FStar_Tactics_Effect.lift_div_tac + (fun uu___3 -> ())))) + (fun uu___2 -> + FStar_Tactics_Effect.lift_div_tac + (fun uu___3 -> t1))) + | t2 -> Obj.magic (FStar_Tactics_Builtins.pack t2)) + uu___1))) + (fun uu___ -> + (fun ff -> + Obj.magic + (try_with + (fun uu___ -> + match () with + | () -> + FStar_Tactics_Effect.tac_bind + (Prims.mk_range "FStar.Tactics.Derived.fst" + (Prims.of_int (913)) (Prims.of_int (6)) + (Prims.of_int (913)) (Prims.of_int (30))) + (Prims.mk_range "FStar.Tactics.Derived.fst" + (Prims.of_int (913)) (Prims.of_int (32)) + (Prims.of_int (913)) (Prims.of_int (37))) + (Obj.magic + (FStar_Tactics_Effect.tac_bind + (Prims.mk_range "FStar.Tactics.Derived.fst" + (Prims.of_int (913)) (Prims.of_int (13)) + (Prims.of_int (913)) (Prims.of_int (30))) + (Prims.mk_range "FStar.Tactics.Derived.fst" + (Prims.of_int (913)) (Prims.of_int (6)) + (Prims.of_int (913)) (Prims.of_int (30))) + (Obj.magic + (FStar_Tactics_Visit.visit_tm ff t)) + (fun uu___1 -> + FStar_Tactics_Effect.lift_div_tac + (fun uu___2 -> ())))) + (fun uu___1 -> + FStar_Tactics_Effect.lift_div_tac + (fun uu___2 -> false))) + (fun uu___ -> + (fun uu___ -> + match uu___ with + | Appears -> + Obj.magic + (Obj.repr + (FStar_Tactics_Effect.lift_div_tac + (fun uu___1 -> true))) + | e -> + Obj.magic + (Obj.repr (FStar_Tactics_Effect.raise e))) + uu___))) uu___) +let rec (mk_abs : + FStar_Reflection_Types.binder Prims.list -> + FStar_Reflection_Types.term -> + (FStar_Reflection_Types.term, unit) FStar_Tactics_Effect.tac_repr) + = + fun uu___1 -> + fun uu___ -> + (fun args -> + fun t -> + match args with + | [] -> + Obj.magic + (Obj.repr + (FStar_Tactics_Effect.lift_div_tac (fun uu___ -> t))) + | a::args' -> + Obj.magic + (Obj.repr + (FStar_Tactics_Effect.tac_bind + (Prims.mk_range "FStar.Tactics.Derived.fst" + (Prims.of_int (922)) (Prims.of_int (13)) + (Prims.of_int (922)) (Prims.of_int (27))) + (Prims.mk_range "FStar.Tactics.Derived.fst" + (Prims.of_int (923)) (Prims.of_int (4)) + (Prims.of_int (923)) (Prims.of_int (22))) + (Obj.magic (mk_abs args' t)) + (fun uu___ -> + (fun t' -> + Obj.magic + (FStar_Tactics_Builtins.pack + (FStar_Reflection_Data.Tv_Abs (a, t')))) + uu___)))) uu___1 uu___ +let (string_to_term_with_lb : + (Prims.string * FStar_Reflection_Types.term) Prims.list -> + FStar_Reflection_Types.env -> + Prims.string -> + (FStar_Reflection_Types.term, unit) FStar_Tactics_Effect.tac_repr) + = + fun letbindings -> + fun e -> + fun t -> + FStar_Tactics_Effect.tac_bind + (Prims.mk_range "FStar.Tactics.Derived.fst" (Prims.of_int (931)) + (Prims.of_int (20)) (Prims.of_int (934)) (Prims.of_int (27))) + (Prims.mk_range "FStar.Tactics.Derived.fst" (Prims.of_int (931)) + (Prims.of_int (4)) (Prims.of_int (936)) (Prims.of_int (71))) + (Obj.magic + (FStar_Tactics_Util.fold_left + (fun uu___ -> + fun uu___1 -> + match (uu___, uu___1) with + | ((e1, lb_bvs), (i, v)) -> + FStar_Tactics_Effect.tac_bind + (Prims.mk_range "FStar.Tactics.Derived.fst" + (Prims.of_int (932)) (Prims.of_int (20)) + (Prims.of_int (932)) (Prims.of_int (37))) + (Prims.mk_range "FStar.Tactics.Derived.fst" + (Prims.of_int (932)) (Prims.of_int (8)) + (Prims.of_int (933)) (Prims.of_int (25))) + (Obj.magic + (FStar_Tactics_Builtins.push_bv_dsenv e1 i)) + (fun uu___2 -> + FStar_Tactics_Effect.lift_div_tac + (fun uu___3 -> + match uu___2 with + | (e2, bv) -> (e2, ((v, bv) :: lb_bvs))))) + (e, []) letbindings)) + (fun uu___ -> + (fun uu___ -> + match uu___ with + | (e1, lb_bvs) -> + Obj.magic + (FStar_Tactics_Effect.tac_bind + (Prims.mk_range "FStar.Tactics.Derived.fst" + (Prims.of_int (935)) (Prims.of_int (12)) + (Prims.of_int (935)) (Prims.of_int (30))) + (Prims.mk_range "FStar.Tactics.Derived.fst" + (Prims.of_int (936)) (Prims.of_int (4)) + (Prims.of_int (936)) (Prims.of_int (71))) + (Obj.magic + (FStar_Tactics_Builtins.string_to_term e1 t)) + (fun uu___1 -> + (fun t1 -> + Obj.magic + (FStar_Tactics_Util.fold_left + (fun t2 -> + fun uu___1 -> + match uu___1 with + | (i, bv) -> + FStar_Tactics_Builtins.pack + (FStar_Reflection_Data.Tv_Let + (false, [], bv, i, t2))) t1 + lb_bvs)) uu___1))) uu___) +let (trans : unit -> (unit, unit) FStar_Tactics_Effect.tac_repr) = + fun uu___ -> + apply_lemma + (FStar_Reflection_Builtins.pack_ln + (FStar_Reflection_Data.Tv_FVar + (FStar_Reflection_Builtins.pack_fv + ["FStar"; "Tactics"; "Derived"; "lem_trans"]))) \ No newline at end of file diff --git a/ocaml/fstar-lib/generated/FStar_Tactics_Effect.ml b/ocaml/fstar-lib/generated/FStar_Tactics_Effect.ml new file mode 100644 index 00000000000..226dda9374b --- /dev/null +++ b/ocaml/fstar-lib/generated/FStar_Tactics_Effect.ml @@ -0,0 +1,65 @@ +open Prims +type 'a tac_wp_t0 = unit +type ('a, 'wp) tac_wp_monotonic = unit +type 'a tac_wp_t = unit +type ('a, 'wp) tac_repr = + FStar_Tactics_Types.proofstate -> 'a FStar_Tactics_Result.__result +type ('a, 'x, 'ps, 'post) tac_return_wp = 'post +let tac_return : 'a . 'a -> ('a, Obj.t) tac_repr = + fun x -> fun s -> FStar_Tactics_Result.Success (x, s) +type ('a, 'b, 'wpuf, 'wpug, 'ps, 'post) tac_bind_wp = 'wpuf +type ('a, 'wp, 'ps, 'post) tac_wp_compact = unit +let tac_bind : + 'a 'b 'wpuf 'wpug . + Prims.range -> + Prims.range -> + ('a, 'wpuf) tac_repr -> + ('a -> ('b, 'wpug) tac_repr) -> ('b, unit) tac_repr + = + fun r1 -> + fun r2 -> + fun t1 -> + fun t2 -> + fun ps -> + match t1 + (FStar_Tactics_Types.incr_depth + (FStar_Tactics_Types.set_proofstate_range ps + (FStar_Range.prims_to_fstar_range r1))) + with + | FStar_Tactics_Result.Success (a1, ps') -> + (match FStar_Tactics_Types.tracepoint + (FStar_Tactics_Types.set_proofstate_range ps' + (FStar_Range.prims_to_fstar_range r2)) + with + | true -> + t2 a1 + (FStar_Tactics_Types.decr_depth + (FStar_Tactics_Types.set_proofstate_range ps' + (FStar_Range.prims_to_fstar_range r2)))) + | FStar_Tactics_Result.Failed (e, ps') -> + FStar_Tactics_Result.Failed (e, ps') +type ('a, 'wputhen, 'wpuelse, 'b, 'ps, 'post) tac_if_then_else_wp = unit +type ('a, 'wputhen, 'wpuelse, 'f, 'g, 'b) tac_if_then_else = + ('a, unit) tac_repr +let tac_subcomp : + 'a 'wpuf 'wpug . ('a, 'wpuf) tac_repr -> ('a, 'wpug) tac_repr = + fun uu___ -> (fun f -> Obj.magic f) uu___ +let __proj__TAC__item__return = tac_return +let __proj__TAC__item__bind = tac_bind +type ('a, 'wp, 'uuuuu, 'uuuuu1) lift_div_tac_wp = 'wp +let lift_div_tac : 'a 'wp . (unit -> 'a) -> ('a, 'wp) tac_repr = + fun f -> fun ps -> FStar_Tactics_Result.Success ((f ()), ps) +let (get : unit -> (FStar_Tactics_Types.proofstate, unit) tac_repr) = + fun uu___ -> fun ps -> FStar_Tactics_Result.Success (ps, ps) +let raise : 'a . Prims.exn -> ('a, unit) tac_repr = + fun e -> fun ps -> FStar_Tactics_Result.Failed (e, ps) +type ('uuuuu, 'p) with_tactic = 'p +let (rewrite_with_tactic : + (unit -> (unit, unit) tac_repr) -> unit -> Obj.t -> Obj.t) = + fun uu___ -> fun uu___1 -> fun p -> p +let synth_by_tactic : 'uuuuu . (unit -> (unit, unit) tac_repr) -> 'uuuuu = + fun uu___ -> Prims.admit () +let assume_safe : 'a . (unit -> ('a, unit) tac_repr) -> ('a, unit) tac_repr = + fun tau -> tau () +type ('a, 'b) tac = 'a -> ('b, unit) tac_repr +type 'a tactic = (unit, 'a) tac \ No newline at end of file diff --git a/src/ocaml-output/FStar_Tactics_Embedding.ml b/ocaml/fstar-lib/generated/FStar_Tactics_Embedding.ml similarity index 100% rename from src/ocaml-output/FStar_Tactics_Embedding.ml rename to ocaml/fstar-lib/generated/FStar_Tactics_Embedding.ml diff --git a/src/ocaml-output/FStar_Tactics_Hooks.ml b/ocaml/fstar-lib/generated/FStar_Tactics_Hooks.ml similarity index 100% rename from src/ocaml-output/FStar_Tactics_Hooks.ml rename to ocaml/fstar-lib/generated/FStar_Tactics_Hooks.ml diff --git a/src/ocaml-output/FStar_Tactics_InterpFuns.ml b/ocaml/fstar-lib/generated/FStar_Tactics_InterpFuns.ml similarity index 100% rename from src/ocaml-output/FStar_Tactics_InterpFuns.ml rename to ocaml/fstar-lib/generated/FStar_Tactics_InterpFuns.ml diff --git a/src/ocaml-output/FStar_Tactics_Interpreter.ml b/ocaml/fstar-lib/generated/FStar_Tactics_Interpreter.ml similarity index 100% rename from src/ocaml-output/FStar_Tactics_Interpreter.ml rename to ocaml/fstar-lib/generated/FStar_Tactics_Interpreter.ml diff --git a/ocaml/fstar-lib/generated/FStar_Tactics_Logic.ml b/ocaml/fstar-lib/generated/FStar_Tactics_Logic.ml new file mode 100644 index 00000000000..9848dd07536 --- /dev/null +++ b/ocaml/fstar-lib/generated/FStar_Tactics_Logic.ml @@ -0,0 +1,1572 @@ +open Prims +let (cur_formula : + unit -> + (FStar_Reflection_Formula.formula, unit) FStar_Tactics_Effect.tac_repr) + = + fun uu___ -> + FStar_Tactics_Effect.tac_bind + (Prims.mk_range "FStar.Tactics.Logic.fst" (Prims.of_int (26)) + (Prims.of_int (51)) (Prims.of_int (26)) (Prims.of_int (64))) + (Prims.mk_range "FStar.Tactics.Logic.fst" (Prims.of_int (26)) + (Prims.of_int (35)) (Prims.of_int (26)) (Prims.of_int (64))) + (Obj.magic (FStar_Tactics_Derived.cur_goal ())) + (fun uu___1 -> + (fun uu___1 -> + Obj.magic (FStar_Reflection_Formula.term_as_formula uu___1)) + uu___1) +let (l_revert : unit -> (unit, unit) FStar_Tactics_Effect.tac_repr) = + fun uu___ -> + FStar_Tactics_Effect.tac_bind + (Prims.mk_range "FStar.Tactics.Logic.fst" (Prims.of_int (35)) + (Prims.of_int (4)) (Prims.of_int (35)) (Prims.of_int (13))) + (Prims.mk_range "FStar.Tactics.Logic.fst" (Prims.of_int (36)) + (Prims.of_int (4)) (Prims.of_int (36)) (Prims.of_int (26))) + (Obj.magic (FStar_Tactics_Builtins.revert ())) + (fun uu___1 -> + (fun uu___1 -> + Obj.magic + (FStar_Tactics_Derived.apply + (FStar_Reflection_Builtins.pack_ln + (FStar_Reflection_Data.Tv_FVar + (FStar_Reflection_Builtins.pack_fv + ["FStar"; "Tactics"; "Logic"; "revert_squash"]))))) + uu___1) +let rec (l_revert_all : + FStar_Reflection_Types.binders -> + (unit, unit) FStar_Tactics_Effect.tac_repr) + = + fun uu___ -> + (fun bs -> + match bs with + | [] -> + Obj.magic + (Obj.repr (FStar_Tactics_Effect.lift_div_tac (fun uu___ -> ()))) + | uu___::tl -> + Obj.magic + (Obj.repr + (FStar_Tactics_Effect.tac_bind + (Prims.mk_range "FStar.Tactics.Logic.fst" + (Prims.of_int (42)) (Prims.of_int (21)) + (Prims.of_int (42)) (Prims.of_int (32))) + (Prims.mk_range "FStar.Tactics.Logic.fst" + (Prims.of_int (42)) (Prims.of_int (34)) + (Prims.of_int (42)) (Prims.of_int (49))) + (Obj.magic (l_revert ())) + (fun uu___1 -> + (fun uu___1 -> Obj.magic (l_revert_all tl)) uu___1)))) + uu___ +let (forall_intro : + unit -> (FStar_Reflection_Types.binder, unit) FStar_Tactics_Effect.tac_repr) + = + fun uu___ -> + FStar_Tactics_Effect.tac_bind + (Prims.mk_range "FStar.Tactics.Logic.fst" (Prims.of_int (50)) + (Prims.of_int (4)) (Prims.of_int (50)) (Prims.of_int (31))) + (Prims.mk_range "FStar.Tactics.Logic.fst" (Prims.of_int (51)) + (Prims.of_int (4)) (Prims.of_int (51)) (Prims.of_int (12))) + (Obj.magic + (FStar_Tactics_Derived.apply_lemma + (FStar_Reflection_Builtins.pack_ln + (FStar_Reflection_Data.Tv_FVar + (FStar_Reflection_Builtins.pack_fv + ["FStar"; "Tactics"; "Logic"; "fa_intro_lem"]))))) + (fun uu___1 -> + (fun uu___1 -> Obj.magic (FStar_Tactics_Builtins.intro ())) uu___1) +let (forall_intro_as : + Prims.string -> + (FStar_Reflection_Types.binder, unit) FStar_Tactics_Effect.tac_repr) + = + fun s -> + FStar_Tactics_Effect.tac_bind + (Prims.mk_range "FStar.Tactics.Logic.fst" (Prims.of_int (55)) + (Prims.of_int (4)) (Prims.of_int (55)) (Prims.of_int (31))) + (Prims.mk_range "FStar.Tactics.Logic.fst" (Prims.of_int (56)) + (Prims.of_int (4)) (Prims.of_int (56)) (Prims.of_int (14))) + (Obj.magic + (FStar_Tactics_Derived.apply_lemma + (FStar_Reflection_Builtins.pack_ln + (FStar_Reflection_Data.Tv_FVar + (FStar_Reflection_Builtins.pack_fv + ["FStar"; "Tactics"; "Logic"; "fa_intro_lem"]))))) + (fun uu___ -> + (fun uu___ -> Obj.magic (FStar_Tactics_Derived.intro_as s)) uu___) +let (forall_intros : + unit -> + (FStar_Reflection_Types.binders, unit) FStar_Tactics_Effect.tac_repr) + = fun uu___ -> FStar_Tactics_Derived.repeat1 forall_intro +let (split : unit -> (unit, unit) FStar_Tactics_Effect.tac_repr) = + fun uu___ -> + FStar_Tactics_Derived.try_with + (fun uu___1 -> + match () with + | () -> + FStar_Tactics_Derived.apply_lemma + (FStar_Reflection_Builtins.pack_ln + (FStar_Reflection_Data.Tv_FVar + (FStar_Reflection_Builtins.pack_fv + ["FStar"; "Tactics"; "Logic"; "split_lem"])))) + (fun uu___1 -> FStar_Tactics_Derived.fail "Could not split goal") +let (implies_intro : + unit -> (FStar_Reflection_Types.binder, unit) FStar_Tactics_Effect.tac_repr) + = + fun uu___ -> + FStar_Tactics_Effect.tac_bind + (Prims.mk_range "FStar.Tactics.Logic.fst" (Prims.of_int (78)) + (Prims.of_int (4)) (Prims.of_int (78)) (Prims.of_int (32))) + (Prims.mk_range "FStar.Tactics.Logic.fst" (Prims.of_int (79)) + (Prims.of_int (4)) (Prims.of_int (79)) (Prims.of_int (12))) + (Obj.magic + (FStar_Tactics_Derived.apply_lemma + (FStar_Reflection_Builtins.pack_ln + (FStar_Reflection_Data.Tv_FVar + (FStar_Reflection_Builtins.pack_fv + ["FStar"; "Tactics"; "Logic"; "imp_intro_lem"]))))) + (fun uu___1 -> + (fun uu___1 -> Obj.magic (FStar_Tactics_Builtins.intro ())) uu___1) +let (implies_intro_as : + Prims.string -> + (FStar_Reflection_Types.binder, unit) FStar_Tactics_Effect.tac_repr) + = + fun s -> + FStar_Tactics_Effect.tac_bind + (Prims.mk_range "FStar.Tactics.Logic.fst" (Prims.of_int (82)) + (Prims.of_int (4)) (Prims.of_int (82)) (Prims.of_int (32))) + (Prims.mk_range "FStar.Tactics.Logic.fst" (Prims.of_int (83)) + (Prims.of_int (4)) (Prims.of_int (83)) (Prims.of_int (14))) + (Obj.magic + (FStar_Tactics_Derived.apply_lemma + (FStar_Reflection_Builtins.pack_ln + (FStar_Reflection_Data.Tv_FVar + (FStar_Reflection_Builtins.pack_fv + ["FStar"; "Tactics"; "Logic"; "imp_intro_lem"]))))) + (fun uu___ -> + (fun uu___ -> Obj.magic (FStar_Tactics_Derived.intro_as s)) uu___) +let (implies_intros : + unit -> + (FStar_Reflection_Types.binders, unit) FStar_Tactics_Effect.tac_repr) + = fun uu___ -> FStar_Tactics_Derived.repeat1 implies_intro +let (l_intro : + unit -> (FStar_Reflection_Types.binder, unit) FStar_Tactics_Effect.tac_repr) + = fun uu___ -> FStar_Tactics_Derived.or_else forall_intro implies_intro +let (l_intros : + unit -> + (FStar_Reflection_Types.binder Prims.list, unit) + FStar_Tactics_Effect.tac_repr) + = fun uu___ -> FStar_Tactics_Derived.repeat l_intro +let (squash_intro : unit -> (unit, unit) FStar_Tactics_Effect.tac_repr) = + fun uu___ -> + FStar_Tactics_Derived.apply + (FStar_Reflection_Builtins.pack_ln + (FStar_Reflection_Data.Tv_FVar + (FStar_Reflection_Builtins.pack_fv + ["FStar"; "Squash"; "return_squash"]))) +let (l_exact : + FStar_Reflection_Types.term -> (unit, unit) FStar_Tactics_Effect.tac_repr) + = + fun t -> + FStar_Tactics_Derived.try_with + (fun uu___ -> match () with | () -> FStar_Tactics_Derived.exact t) + (fun uu___ -> + FStar_Tactics_Effect.tac_bind + (Prims.mk_range "FStar.Tactics.Logic.fst" (Prims.of_int (99)) + (Prims.of_int (12)) (Prims.of_int (99)) (Prims.of_int (27))) + (Prims.mk_range "FStar.Tactics.Logic.fst" (Prims.of_int (99)) + (Prims.of_int (29)) (Prims.of_int (99)) (Prims.of_int (36))) + (Obj.magic (squash_intro ())) + (fun uu___1 -> + (fun uu___1 -> Obj.magic (FStar_Tactics_Derived.exact t)) + uu___1)) +let (hyp : + FStar_Reflection_Types.binder -> (unit, unit) FStar_Tactics_Effect.tac_repr) + = + fun b -> + FStar_Tactics_Effect.tac_bind + (Prims.mk_range "FStar.Tactics.Logic.fst" (Prims.of_int (101)) + (Prims.of_int (40)) (Prims.of_int (101)) (Prims.of_int (58))) + (Prims.mk_range "FStar.Tactics.Logic.fst" (Prims.of_int (101)) + (Prims.of_int (32)) (Prims.of_int (101)) (Prims.of_int (58))) + (Obj.magic (FStar_Tactics_Derived.binder_to_term b)) + (fun uu___ -> (fun uu___ -> Obj.magic (l_exact uu___)) uu___) +let (pose_lemma : + FStar_Reflection_Types.term -> + (FStar_Reflection_Types.binder, unit) FStar_Tactics_Effect.tac_repr) + = + fun t -> + FStar_Tactics_Effect.tac_bind + (Prims.mk_range "FStar.Tactics.Logic.fst" (Prims.of_int (108)) + (Prims.of_int (10)) (Prims.of_int (108)) (Prims.of_int (28))) + (Prims.mk_range "FStar.Tactics.Logic.fst" (Prims.of_int (109)) + (Prims.of_int (2)) (Prims.of_int (126)) (Prims.of_int (5))) + (Obj.magic + (FStar_Tactics_Effect.tac_bind + (Prims.mk_range "FStar.Tactics.Logic.fst" (Prims.of_int (108)) + (Prims.of_int (14)) (Prims.of_int (108)) (Prims.of_int (26))) + (Prims.mk_range "FStar.Tactics.Logic.fst" (Prims.of_int (108)) + (Prims.of_int (10)) (Prims.of_int (108)) (Prims.of_int (28))) + (Obj.magic (FStar_Tactics_Derived.cur_env ())) + (fun uu___ -> + (fun uu___ -> Obj.magic (FStar_Tactics_Builtins.tcc uu___ t)) + uu___))) + (fun uu___ -> + (fun c -> + Obj.magic + (FStar_Tactics_Effect.tac_bind + (Prims.mk_range "FStar.Tactics.Logic.fst" + (Prims.of_int (110)) (Prims.of_int (4)) + (Prims.of_int (112)) (Prims.of_int (18))) + (Prims.mk_range "FStar.Tactics.Logic.fst" + (Prims.of_int (109)) (Prims.of_int (2)) + (Prims.of_int (126)) (Prims.of_int (5))) + (match FStar_Reflection_Builtins.inspect_comp c with + | FStar_Reflection_Data.C_Lemma (pre, post, uu___) -> + Obj.magic + (Obj.repr + (FStar_Tactics_Effect.lift_div_tac + (fun uu___1 -> (pre, post)))) + | uu___ -> + Obj.magic (Obj.repr (FStar_Tactics_Derived.fail ""))) + (fun uu___ -> + (fun uu___ -> + match uu___ with + | (pre, post) -> + Obj.magic + (FStar_Tactics_Effect.tac_bind + (Prims.mk_range "FStar.Tactics.Logic.fst" + (Prims.of_int (114)) (Prims.of_int (13)) + (Prims.of_int (114)) (Prims.of_int (27))) + (Prims.mk_range "FStar.Tactics.Logic.fst" + (Prims.of_int (115)) (Prims.of_int (2)) + (Prims.of_int (126)) (Prims.of_int (5))) + (FStar_Tactics_Effect.lift_div_tac + (fun uu___1 -> + FStar_Reflection_Builtins.pack_ln + (FStar_Reflection_Data.Tv_App + (post, + ((FStar_Reflection_Builtins.pack_ln + (FStar_Reflection_Data.Tv_Const + FStar_Reflection_Data.C_Unit)), + FStar_Reflection_Data.Q_Explicit))))) + (fun uu___1 -> + (fun post1 -> + Obj.magic + (FStar_Tactics_Effect.tac_bind + (Prims.mk_range + "FStar.Tactics.Logic.fst" + (Prims.of_int (115)) + (Prims.of_int (13)) + (Prims.of_int (115)) + (Prims.of_int (30))) + (Prims.mk_range + "FStar.Tactics.Logic.fst" + (Prims.of_int (117)) + (Prims.of_int (2)) + (Prims.of_int (126)) + (Prims.of_int (5))) + (Obj.magic + (FStar_Tactics_Derived.norm_term + [] post1)) + (fun uu___1 -> + (fun post2 -> + Obj.magic + (FStar_Tactics_Effect.tac_bind + (Prims.mk_range + "FStar.Tactics.Logic.fst" + (Prims.of_int (117)) + (Prims.of_int (8)) + (Prims.of_int (117)) + (Prims.of_int (28))) + (Prims.mk_range + "FStar.Tactics.Logic.fst" + (Prims.of_int (117)) + (Prims.of_int (2)) + (Prims.of_int (126)) + (Prims.of_int (5))) + (Obj.magic + (FStar_Reflection_Formula.term_as_formula' + pre)) + (fun uu___1 -> + (fun uu___1 -> + match uu___1 with + | FStar_Reflection_Formula.True_ + -> + Obj.magic + (FStar_Tactics_Derived.pose + (FStar_Reflection_Builtins.pack_ln + (FStar_Reflection_Data.Tv_App + ((FStar_Reflection_Builtins.pack_ln + (FStar_Reflection_Data.Tv_App + ((FStar_Reflection_Builtins.pack_ln + (FStar_Reflection_Data.Tv_App + ((FStar_Reflection_Builtins.pack_ln + (FStar_Reflection_Data.Tv_App + ((FStar_Reflection_Builtins.pack_ln + (FStar_Reflection_Data.Tv_FVar + (FStar_Reflection_Builtins.pack_fv + ["FStar"; + "Tactics"; + "Logic"; + "__lemma_to_squash"]))), + (pre, + FStar_Reflection_Data.Q_Implicit)))), + (post2, + FStar_Reflection_Data.Q_Implicit)))), + ((FStar_Reflection_Builtins.pack_ln + (FStar_Reflection_Data.Tv_Const + FStar_Reflection_Data.C_Unit)), + FStar_Reflection_Data.Q_Explicit)))), + ((FStar_Reflection_Builtins.pack_ln + (FStar_Reflection_Data.Tv_Abs + ((FStar_Reflection_Builtins.pack_binder + (FStar_Reflection_Builtins.pack_bv + { + FStar_Reflection_Data.bv_ppname + = "uu___"; + FStar_Reflection_Data.bv_index + = + (Prims.of_int (100)); + FStar_Reflection_Data.bv_sort + = + (FStar_Reflection_Builtins.pack_ln + (FStar_Reflection_Data.Tv_FVar + (FStar_Reflection_Builtins.pack_fv + ["Prims"; + "unit"]))) + }) + FStar_Reflection_Data.Q_Explicit + []), t))), + FStar_Reflection_Data.Q_Explicit))))) + | uu___2 -> + Obj.magic + (FStar_Tactics_Effect.tac_bind + (Prims.mk_range + "FStar.Tactics.Logic.fst" + (Prims.of_int (121)) + (Prims.of_int (15)) + (Prims.of_int (121)) + (Prims.of_int (37))) + (Prims.mk_range + "FStar.Tactics.Logic.fst" + (Prims.of_int (123)) + (Prims.of_int (4)) + (Prims.of_int (126)) + (Prims.of_int (5))) + (Obj.magic + (FStar_Tactics_Derived.tcut + (FStar_Reflection_Builtins.pack_ln + (FStar_Reflection_Data.Tv_App + ((FStar_Reflection_Builtins.pack_ln + (FStar_Reflection_Data.Tv_FVar + (FStar_Reflection_Builtins.pack_fv + ["Prims"; + "squash"]))), + (pre, + FStar_Reflection_Data.Q_Explicit)))))) + (fun + uu___3 -> + (fun reqb + -> + Obj.magic + (FStar_Tactics_Effect.tac_bind + (Prims.mk_range + "FStar.Tactics.Logic.fst" + (Prims.of_int (123)) + (Prims.of_int (12)) + (Prims.of_int (123)) + (Prims.of_int (102))) + (Prims.mk_range + "FStar.Tactics.Logic.fst" + (Prims.of_int (124)) + (Prims.of_int (4)) + (Prims.of_int (126)) + (Prims.of_int (5))) + (Obj.magic + (FStar_Tactics_Effect.tac_bind + (Prims.mk_range + "FStar.Tactics.Logic.fst" + (Prims.of_int (123)) + (Prims.of_int (17)) + (Prims.of_int (123)) + (Prims.of_int (102))) + (Prims.mk_range + "FStar.Tactics.Logic.fst" + (Prims.of_int (123)) + (Prims.of_int (12)) + (Prims.of_int (123)) + (Prims.of_int (102))) + (Obj.magic + (FStar_Tactics_Effect.tac_bind + (Prims.mk_range + "FStar.Tactics.Logic.fst" + (Prims.of_int (123)) + (Prims.of_int (97)) + (Prims.of_int (123)) + (Prims.of_int (98))) + (Prims.mk_range + "FStar.Tactics.Logic.fst" + (Prims.of_int (123)) + (Prims.of_int (17)) + (Prims.of_int (123)) + (Prims.of_int (102))) + (FStar_Tactics_Effect.lift_div_tac + (fun + uu___3 -> + t)) + (fun + uu___3 -> + (fun + uu___3 -> + Obj.magic + (FStar_Tactics_Effect.tac_bind + (Prims.mk_range + "FStar.Tactics.Logic.fst" + (Prims.of_int (123)) + (Prims.of_int (60)) + (Prims.of_int (123)) + (Prims.of_int (81))) + (Prims.mk_range + "FStar.Tactics.Logic.fst" + (Prims.of_int (123)) + (Prims.of_int (17)) + (Prims.of_int (123)) + (Prims.of_int (102))) + (Obj.magic + (FStar_Tactics_Derived.binder_to_term + reqb)) + (fun + uu___4 -> + FStar_Tactics_Effect.lift_div_tac + (fun + uu___5 -> + FStar_Reflection_Builtins.pack_ln + (FStar_Reflection_Data.Tv_App + ((FStar_Reflection_Builtins.pack_ln + (FStar_Reflection_Data.Tv_App + ((FStar_Reflection_Builtins.pack_ln + (FStar_Reflection_Data.Tv_App + ((FStar_Reflection_Builtins.pack_ln + (FStar_Reflection_Data.Tv_App + ((FStar_Reflection_Builtins.pack_ln + (FStar_Reflection_Data.Tv_FVar + (FStar_Reflection_Builtins.pack_fv + ["FStar"; + "Tactics"; + "Logic"; + "__lemma_to_squash"]))), + (pre, + FStar_Reflection_Data.Q_Implicit)))), + (post2, + FStar_Reflection_Data.Q_Implicit)))), + (uu___4, + FStar_Reflection_Data.Q_Explicit)))), + ((FStar_Reflection_Builtins.pack_ln + (FStar_Reflection_Data.Tv_Abs + ((FStar_Reflection_Builtins.pack_binder + (FStar_Reflection_Builtins.pack_bv + { + FStar_Reflection_Data.bv_ppname + = "uu___"; + FStar_Reflection_Data.bv_index + = + (Prims.of_int (107)); + FStar_Reflection_Data.bv_sort + = + (FStar_Reflection_Builtins.pack_ln + (FStar_Reflection_Data.Tv_FVar + (FStar_Reflection_Builtins.pack_fv + ["Prims"; + "unit"]))) + }) + FStar_Reflection_Data.Q_Explicit + []), + uu___3))), + FStar_Reflection_Data.Q_Explicit))))))) + uu___3))) + (fun + uu___3 -> + (fun + uu___3 -> + Obj.magic + (FStar_Tactics_Derived.pose + uu___3)) + uu___3))) + (fun + uu___3 -> + (fun b -> + Obj.magic + (FStar_Tactics_Effect.tac_bind + (Prims.mk_range + "FStar.Tactics.Logic.fst" + (Prims.of_int (124)) + (Prims.of_int (4)) + (Prims.of_int (124)) + (Prims.of_int (11))) + (Prims.mk_range + "FStar.Tactics.Logic.fst" + (Prims.of_int (125)) + (Prims.of_int (4)) + (Prims.of_int (126)) + (Prims.of_int (5))) + (Obj.magic + (FStar_Tactics_Derived.flip + ())) + (fun + uu___3 -> + (fun + uu___3 -> + Obj.magic + (FStar_Tactics_Effect.tac_bind + (Prims.mk_range + "FStar.Tactics.Logic.fst" + (Prims.of_int (125)) + (Prims.of_int (4)) + (Prims.of_int (125)) + (Prims.of_int (27))) + (Prims.mk_range + "FStar.Tactics.Logic.fst" + (Prims.of_int (123)) + (Prims.of_int (8)) + (Prims.of_int (123)) + (Prims.of_int (9))) + (Obj.magic + (FStar_Tactics_Effect.tac_bind + (Prims.mk_range + "FStar.Tactics.Logic.fst" + (Prims.of_int (125)) + (Prims.of_int (11)) + (Prims.of_int (125)) + (Prims.of_int (27))) + (Prims.mk_range + "FStar.Tactics.Logic.fst" + (Prims.of_int (125)) + (Prims.of_int (4)) + (Prims.of_int (125)) + (Prims.of_int (27))) + (Obj.magic + (FStar_Tactics_Derived.trytac + FStar_Tactics_Derived.trivial)) + (fun + uu___4 -> + FStar_Tactics_Effect.lift_div_tac + (fun + uu___5 -> + ())))) + (fun + uu___4 -> + FStar_Tactics_Effect.lift_div_tac + (fun + uu___5 -> + b)))) + uu___3))) + uu___3))) + uu___3))) + uu___1))) uu___1))) + uu___1))) uu___))) uu___) +let (explode : unit -> (unit, unit) FStar_Tactics_Effect.tac_repr) = + fun uu___ -> + FStar_Tactics_Effect.tac_bind + (Prims.mk_range "FStar.Tactics.Logic.fst" (Prims.of_int (129)) + (Prims.of_int (11)) (Prims.of_int (131)) (Prims.of_int (64))) + (Prims.mk_range "FStar.Tactics.Logic.fst" (Prims.of_int (129)) + (Prims.of_int (4)) (Prims.of_int (131)) (Prims.of_int (64))) + (Obj.magic + (FStar_Tactics_Derived.repeatseq + (fun uu___1 -> + FStar_Tactics_Derived.first + [(fun uu___2 -> + FStar_Tactics_Effect.tac_bind + (Prims.mk_range "FStar.Tactics.Logic.fst" + (Prims.of_int (130)) (Prims.of_int (50)) + (Prims.of_int (130)) (Prims.of_int (62))) + (Prims.mk_range "FStar.Tactics.Logic.fst" + (Prims.of_int (130)) (Prims.of_int (43)) + (Prims.of_int (130)) (Prims.of_int (62))) + (Obj.magic (l_intro ())) + (fun uu___3 -> + FStar_Tactics_Effect.lift_div_tac + (fun uu___4 -> ()))); + (fun uu___2 -> + FStar_Tactics_Effect.tac_bind + (Prims.mk_range "FStar.Tactics.Logic.fst" + (Prims.of_int (131)) (Prims.of_int (50)) + (Prims.of_int (131)) (Prims.of_int (60))) + (Prims.mk_range "FStar.Tactics.Logic.fst" + (Prims.of_int (131)) (Prims.of_int (43)) + (Prims.of_int (131)) (Prims.of_int (60))) + (Obj.magic (split ())) + (fun uu___3 -> + FStar_Tactics_Effect.lift_div_tac (fun uu___4 -> ())))]))) + (fun uu___1 -> FStar_Tactics_Effect.lift_div_tac (fun uu___2 -> ())) +let rec (visit : + (unit -> (unit, unit) FStar_Tactics_Effect.tac_repr) -> + (unit, unit) FStar_Tactics_Effect.tac_repr) + = + fun callback -> + FStar_Tactics_Derived.focus + (fun uu___ -> + FStar_Tactics_Derived.or_else callback + (fun uu___1 -> + FStar_Tactics_Effect.tac_bind + (Prims.mk_range "FStar.Tactics.Logic.fst" + (Prims.of_int (137)) (Prims.of_int (28)) + (Prims.of_int (137)) (Prims.of_int (39))) + (Prims.mk_range "FStar.Tactics.Logic.fst" + (Prims.of_int (138)) (Prims.of_int (20)) + (Prims.of_int (148)) (Prims.of_int (26))) + (Obj.magic (FStar_Tactics_Derived.cur_goal ())) + (fun uu___2 -> + (fun g -> + Obj.magic + (FStar_Tactics_Effect.tac_bind + (Prims.mk_range "FStar.Tactics.Logic.fst" + (Prims.of_int (138)) (Prims.of_int (26)) + (Prims.of_int (138)) (Prims.of_int (43))) + (Prims.mk_range "FStar.Tactics.Logic.fst" + (Prims.of_int (138)) (Prims.of_int (20)) + (Prims.of_int (148)) (Prims.of_int (26))) + (Obj.magic + (FStar_Reflection_Formula.term_as_formula g)) + (fun uu___2 -> + (fun uu___2 -> + match uu___2 with + | FStar_Reflection_Formula.Forall (b, phi) + -> + Obj.magic + (Obj.repr + (FStar_Tactics_Effect.tac_bind + (Prims.mk_range + "FStar.Tactics.Logic.fst" + (Prims.of_int (140)) + (Prims.of_int (38)) + (Prims.of_int (140)) + (Prims.of_int (54))) + (Prims.mk_range + "FStar.Tactics.Logic.fst" + (Prims.of_int (141)) + (Prims.of_int (24)) + (Prims.of_int (141)) + (Prims.of_int (87))) + (Obj.magic (forall_intros ())) + (fun uu___3 -> + (fun binders -> + Obj.magic + (FStar_Tactics_Derived.seq + (fun uu___3 -> + visit callback) + (fun uu___3 -> + l_revert_all + binders))) + uu___3))) + | FStar_Reflection_Formula.And (p, q) -> + Obj.magic + (Obj.repr + (FStar_Tactics_Derived.seq split + (fun uu___3 -> visit callback))) + | FStar_Reflection_Formula.Implies (p, q) -> + Obj.magic + (Obj.repr + (FStar_Tactics_Effect.tac_bind + (Prims.mk_range + "FStar.Tactics.Logic.fst" + (Prims.of_int (145)) + (Prims.of_int (32)) + (Prims.of_int (145)) + (Prims.of_int (48))) + (Prims.mk_range + "FStar.Tactics.Logic.fst" + (Prims.of_int (146)) + (Prims.of_int (24)) + (Prims.of_int (146)) + (Prims.of_int (63))) + (Obj.magic (implies_intro ())) + (fun uu___3 -> + (fun uu___3 -> + Obj.magic + (FStar_Tactics_Derived.seq + (fun uu___4 -> + visit callback) + l_revert)) uu___3))) + | uu___3 -> + Obj.magic + (Obj.repr + (FStar_Tactics_Effect.lift_div_tac + (fun uu___4 -> ())))) uu___2))) + uu___2))) +let rec (simplify_eq_implication : + unit -> (unit, unit) FStar_Tactics_Effect.tac_repr) = + fun uu___ -> + FStar_Tactics_Effect.tac_bind + (Prims.mk_range "FStar.Tactics.Logic.fst" (Prims.of_int (153)) + (Prims.of_int (12)) (Prims.of_int (153)) (Prims.of_int (22))) + (Prims.mk_range "FStar.Tactics.Logic.fst" (Prims.of_int (154)) + (Prims.of_int (4)) (Prims.of_int (163)) (Prims.of_int (37))) + (Obj.magic (FStar_Tactics_Derived.cur_env ())) + (fun uu___1 -> + (fun e -> + Obj.magic + (FStar_Tactics_Effect.tac_bind + (Prims.mk_range "FStar.Tactics.Logic.fst" + (Prims.of_int (154)) (Prims.of_int (12)) + (Prims.of_int (154)) (Prims.of_int (23))) + (Prims.mk_range "FStar.Tactics.Logic.fst" + (Prims.of_int (155)) (Prims.of_int (4)) + (Prims.of_int (163)) (Prims.of_int (37))) + (Obj.magic (FStar_Tactics_Derived.cur_goal ())) + (fun uu___1 -> + (fun g -> + Obj.magic + (FStar_Tactics_Effect.tac_bind + (Prims.mk_range "FStar.Tactics.Logic.fst" + (Prims.of_int (155)) (Prims.of_int (12)) + (Prims.of_int (155)) (Prims.of_int (43))) + (Prims.mk_range "FStar.Tactics.Logic.fst" + (Prims.of_int (156)) (Prims.of_int (4)) + (Prims.of_int (163)) (Prims.of_int (37))) + (Obj.magic + (FStar_Tactics_Derived.destruct_equality_implication + g)) + (fun uu___1 -> + (fun r -> + match r with + | FStar_Pervasives_Native.None -> + Obj.magic + (FStar_Tactics_Derived.fail + "Not an equality implication") + | FStar_Pervasives_Native.Some + (uu___1, rhs) -> + Obj.magic + (FStar_Tactics_Effect.tac_bind + (Prims.mk_range + "FStar.Tactics.Logic.fst" + (Prims.of_int (160)) + (Prims.of_int (19)) + (Prims.of_int (160)) + (Prims.of_int (35))) + (Prims.mk_range + "FStar.Tactics.Logic.fst" + (Prims.of_int (161)) + (Prims.of_int (8)) + (Prims.of_int (163)) + (Prims.of_int (37))) + (Obj.magic (implies_intro ())) + (fun uu___2 -> + (fun eq_h -> + Obj.magic + (FStar_Tactics_Effect.tac_bind + (Prims.mk_range + "FStar.Tactics.Logic.fst" + (Prims.of_int (161)) + (Prims.of_int (8)) + (Prims.of_int (161)) + (Prims.of_int (20))) + (Prims.mk_range + "FStar.Tactics.Logic.fst" + (Prims.of_int (162)) + (Prims.of_int (8)) + (Prims.of_int (163)) + (Prims.of_int (37))) + (Obj.magic + (FStar_Tactics_Builtins.rewrite + eq_h)) + (fun uu___2 -> + (fun uu___2 -> + Obj.magic + (FStar_Tactics_Effect.tac_bind + (Prims.mk_range + "FStar.Tactics.Logic.fst" + (Prims.of_int (162)) + (Prims.of_int (8)) + (Prims.of_int (162)) + (Prims.of_int (20))) + (Prims.mk_range + "FStar.Tactics.Logic.fst" + (Prims.of_int (163)) + (Prims.of_int (8)) + (Prims.of_int (163)) + (Prims.of_int (37))) + (Obj.magic + ( + FStar_Tactics_Builtins.clear_top + ())) + (fun uu___3 + -> + (fun + uu___3 -> + Obj.magic + (visit + simplify_eq_implication)) + uu___3))) + uu___2))) uu___2))) + uu___1))) uu___1))) uu___1) +let (rewrite_all_equalities : + unit -> (unit, unit) FStar_Tactics_Effect.tac_repr) = + fun uu___ -> visit simplify_eq_implication +let rec (unfold_definition_and_simplify_eq : + FStar_Reflection_Types.term -> (unit, unit) FStar_Tactics_Effect.tac_repr) + = + fun tm -> + FStar_Tactics_Effect.tac_bind + (Prims.mk_range "FStar.Tactics.Logic.fst" (Prims.of_int (169)) + (Prims.of_int (12)) (Prims.of_int (169)) (Prims.of_int (23))) + (Prims.mk_range "FStar.Tactics.Logic.fst" (Prims.of_int (170)) + (Prims.of_int (4)) (Prims.of_int (184)) (Prims.of_int (11))) + (Obj.magic (FStar_Tactics_Derived.cur_goal ())) + (fun uu___ -> + (fun g -> + Obj.magic + (FStar_Tactics_Effect.tac_bind + (Prims.mk_range "FStar.Tactics.Logic.fst" + (Prims.of_int (170)) (Prims.of_int (10)) + (Prims.of_int (170)) (Prims.of_int (27))) + (Prims.mk_range "FStar.Tactics.Logic.fst" + (Prims.of_int (170)) (Prims.of_int (4)) + (Prims.of_int (184)) (Prims.of_int (11))) + (Obj.magic (FStar_Reflection_Formula.term_as_formula g)) + (fun uu___ -> + (fun uu___ -> + match uu___ with + | FStar_Reflection_Formula.App (hd, arg) -> + Obj.magic + (Obj.repr + (if FStar_Reflection_Builtins.term_eq hd tm + then + Obj.repr + (FStar_Tactics_Derived.trivial ()) + else + Obj.repr + (FStar_Tactics_Effect.lift_div_tac + (fun uu___2 -> ())))) + | uu___1 -> + Obj.magic + (Obj.repr + (FStar_Tactics_Effect.tac_bind + (Prims.mk_range "FStar.Tactics.Logic.fst" + (Prims.of_int (176)) + (Prims.of_int (16)) + (Prims.of_int (176)) + (Prims.of_int (47))) + (Prims.mk_range "FStar.Tactics.Logic.fst" + (Prims.of_int (177)) (Prims.of_int (8)) + (Prims.of_int (183)) + (Prims.of_int (66))) + (Obj.magic + (FStar_Tactics_Derived.destruct_equality_implication + g)) + (fun uu___2 -> + (fun r -> + match r with + | FStar_Pervasives_Native.None -> + Obj.magic + (FStar_Tactics_Derived.fail + "Not an equality implication") + | FStar_Pervasives_Native.Some + (uu___2, rhs) -> + Obj.magic + (FStar_Tactics_Effect.tac_bind + (Prims.mk_range + "FStar.Tactics.Logic.fst" + (Prims.of_int (180)) + (Prims.of_int (23)) + (Prims.of_int (180)) + (Prims.of_int (39))) + (Prims.mk_range + "FStar.Tactics.Logic.fst" + (Prims.of_int (181)) + (Prims.of_int (12)) + (Prims.of_int (183)) + (Prims.of_int (66))) + (Obj.magic + (implies_intro ())) + (fun uu___3 -> + (fun eq_h -> + Obj.magic + (FStar_Tactics_Effect.tac_bind + (Prims.mk_range + "FStar.Tactics.Logic.fst" + (Prims.of_int (181)) + (Prims.of_int (12)) + (Prims.of_int (181)) + (Prims.of_int (24))) + (Prims.mk_range + "FStar.Tactics.Logic.fst" + (Prims.of_int (182)) + (Prims.of_int (12)) + (Prims.of_int (183)) + (Prims.of_int (66))) + (Obj.magic + (FStar_Tactics_Builtins.rewrite + eq_h)) + (fun uu___3 -> + (fun uu___3 + -> + Obj.magic + (FStar_Tactics_Effect.tac_bind + (Prims.mk_range + "FStar.Tactics.Logic.fst" + (Prims.of_int (182)) + (Prims.of_int (12)) + (Prims.of_int (182)) + (Prims.of_int (24))) + (Prims.mk_range + "FStar.Tactics.Logic.fst" + (Prims.of_int (183)) + (Prims.of_int (12)) + (Prims.of_int (183)) + (Prims.of_int (66))) + (Obj.magic + (FStar_Tactics_Builtins.clear_top + ())) + (fun + uu___4 -> + (fun + uu___4 -> + Obj.magic + (visit + (fun + uu___5 -> + unfold_definition_and_simplify_eq + tm))) + uu___4))) + uu___3))) + uu___3))) uu___2)))) + uu___))) uu___) +let (unsquash : + FStar_Reflection_Types.term -> + (FStar_Reflection_Types.term, unit) FStar_Tactics_Effect.tac_repr) + = + fun t -> + FStar_Tactics_Effect.tac_bind + (Prims.mk_range "FStar.Tactics.Logic.fst" (Prims.of_int (192)) + (Prims.of_int (12)) (Prims.of_int (192)) (Prims.of_int (18))) + (Prims.mk_range "FStar.Tactics.Logic.fst" (Prims.of_int (193)) + (Prims.of_int (4)) (Prims.of_int (195)) (Prims.of_int (37))) + (FStar_Tactics_Effect.lift_div_tac + (fun uu___ -> + FStar_Reflection_Builtins.pack_ln + (FStar_Reflection_Data.Tv_FVar + (FStar_Reflection_Builtins.pack_fv + ["FStar"; "Tactics"; "Logic"; "vbind"])))) + (fun uu___ -> + (fun v -> + Obj.magic + (FStar_Tactics_Effect.tac_bind + (Prims.mk_range "FStar.Tactics.Logic.fst" + (Prims.of_int (193)) (Prims.of_int (4)) + (Prims.of_int (193)) (Prims.of_int (32))) + (Prims.mk_range "FStar.Tactics.Logic.fst" + (Prims.of_int (194)) (Prims.of_int (4)) + (Prims.of_int (195)) (Prims.of_int (37))) + (Obj.magic + (FStar_Tactics_Derived.apply_lemma + (FStar_Reflection_Derived.mk_e_app v [t]))) + (fun uu___ -> + (fun uu___ -> + Obj.magic + (FStar_Tactics_Effect.tac_bind + (Prims.mk_range "FStar.Tactics.Logic.fst" + (Prims.of_int (194)) (Prims.of_int (12)) + (Prims.of_int (194)) (Prims.of_int (20))) + (Prims.mk_range "FStar.Tactics.Logic.fst" + (Prims.of_int (195)) (Prims.of_int (4)) + (Prims.of_int (195)) (Prims.of_int (37))) + (Obj.magic (FStar_Tactics_Builtins.intro ())) + (fun b -> + FStar_Tactics_Effect.lift_div_tac + (fun uu___1 -> + FStar_Reflection_Builtins.pack_ln + (FStar_Reflection_Data.Tv_Var + (FStar_Reflection_Derived.bv_of_binder + b)))))) uu___))) uu___) +let (cases_or : + FStar_Reflection_Types.term -> (unit, unit) FStar_Tactics_Effect.tac_repr) + = + fun o -> + FStar_Tactics_Derived.apply_lemma + (FStar_Reflection_Derived.mk_e_app + (FStar_Reflection_Builtins.pack_ln + (FStar_Reflection_Data.Tv_FVar + (FStar_Reflection_Builtins.pack_fv + ["FStar"; "Tactics"; "Logic"; "or_ind"]))) [o]) +let (cases_bool : + FStar_Reflection_Types.term -> (unit, unit) FStar_Tactics_Effect.tac_repr) + = + fun b -> + FStar_Tactics_Effect.tac_bind + (Prims.mk_range "FStar.Tactics.Logic.fst" (Prims.of_int (213)) + (Prims.of_int (13)) (Prims.of_int (213)) (Prims.of_int (22))) + (Prims.mk_range "FStar.Tactics.Logic.fst" (Prims.of_int (214)) + (Prims.of_int (4)) (Prims.of_int (215)) (Prims.of_int (104))) + (FStar_Tactics_Effect.lift_div_tac + (fun uu___ -> + FStar_Reflection_Builtins.pack_ln + (FStar_Reflection_Data.Tv_FVar + (FStar_Reflection_Builtins.pack_fv + ["FStar"; "Tactics"; "Logic"; "bool_ind"])))) + (fun uu___ -> + (fun bi -> + Obj.magic + (FStar_Tactics_Derived.seq + (fun uu___ -> + FStar_Tactics_Derived.apply_lemma + (FStar_Reflection_Derived.mk_e_app bi [b])) + (fun uu___ -> + FStar_Tactics_Effect.tac_bind + (Prims.mk_range "FStar.Tactics.Logic.fst" + (Prims.of_int (215)) (Prims.of_int (27)) + (Prims.of_int (215)) (Prims.of_int (97))) + (Prims.mk_range "FStar.Tactics.Logic.fst" + (Prims.of_int (215)) (Prims.of_int (101)) + (Prims.of_int (215)) (Prims.of_int (103))) + (Obj.magic + (FStar_Tactics_Derived.trytac + (fun uu___1 -> + FStar_Tactics_Effect.tac_bind + (Prims.mk_range "FStar.Tactics.Logic.fst" + (Prims.of_int (215)) (Prims.of_int (53)) + (Prims.of_int (215)) (Prims.of_int (69))) + (Prims.mk_range "FStar.Tactics.Logic.fst" + (Prims.of_int (215)) (Prims.of_int (73)) + (Prims.of_int (215)) (Prims.of_int (96))) + (Obj.magic (implies_intro ())) + (fun uu___2 -> + (fun b1 -> + Obj.magic + (FStar_Tactics_Effect.tac_bind + (Prims.mk_range + "FStar.Tactics.Logic.fst" + (Prims.of_int (215)) + (Prims.of_int (73)) + (Prims.of_int (215)) + (Prims.of_int (82))) + (Prims.mk_range + "FStar.Tactics.Logic.fst" + (Prims.of_int (215)) + (Prims.of_int (84)) + (Prims.of_int (215)) + (Prims.of_int (96))) + (Obj.magic + (FStar_Tactics_Builtins.rewrite + b1)) + (fun uu___2 -> + (fun uu___2 -> + Obj.magic + (FStar_Tactics_Builtins.clear_top + ())) uu___2))) uu___2)))) + (fun uu___1 -> + FStar_Tactics_Effect.lift_div_tac (fun uu___2 -> ()))))) + uu___) +let (left : unit -> (unit, unit) FStar_Tactics_Effect.tac_repr) = + fun uu___ -> + FStar_Tactics_Derived.apply_lemma + (FStar_Reflection_Builtins.pack_ln + (FStar_Reflection_Data.Tv_FVar + (FStar_Reflection_Builtins.pack_fv + ["FStar"; "Tactics"; "Logic"; "or_intro_1"]))) +let (right : unit -> (unit, unit) FStar_Tactics_Effect.tac_repr) = + fun uu___ -> + FStar_Tactics_Derived.apply_lemma + (FStar_Reflection_Builtins.pack_ln + (FStar_Reflection_Data.Tv_FVar + (FStar_Reflection_Builtins.pack_fv + ["FStar"; "Tactics"; "Logic"; "or_intro_2"]))) +let (and_elim : + FStar_Reflection_Types.term -> (unit, unit) FStar_Tactics_Effect.tac_repr) + = + fun t -> + FStar_Tactics_Derived.try_with + (fun uu___ -> + match () with + | () -> + FStar_Tactics_Derived.apply_lemma + (FStar_Reflection_Builtins.pack_ln + (FStar_Reflection_Data.Tv_App + ((FStar_Reflection_Builtins.pack_ln + (FStar_Reflection_Data.Tv_FVar + (FStar_Reflection_Builtins.pack_fv + ["FStar"; "Tactics"; "Logic"; "__and_elim"]))), + (t, FStar_Reflection_Data.Q_Explicit))))) + (fun uu___ -> + FStar_Tactics_Derived.apply_lemma + (FStar_Reflection_Builtins.pack_ln + (FStar_Reflection_Data.Tv_App + ((FStar_Reflection_Builtins.pack_ln + (FStar_Reflection_Data.Tv_FVar + (FStar_Reflection_Builtins.pack_fv + ["FStar"; "Tactics"; "Logic"; "__and_elim'"]))), + (t, FStar_Reflection_Data.Q_Explicit))))) +let (destruct_and : + FStar_Reflection_Types.term -> + ((FStar_Reflection_Types.binder * FStar_Reflection_Types.binder), + unit) FStar_Tactics_Effect.tac_repr) + = + fun t -> + FStar_Tactics_Effect.tac_bind + (Prims.mk_range "FStar.Tactics.Logic.fst" (Prims.of_int (248)) + (Prims.of_int (4)) (Prims.of_int (248)) (Prims.of_int (14))) + (Prims.mk_range "FStar.Tactics.Logic.fst" (Prims.of_int (249)) + (Prims.of_int (4)) (Prims.of_int (249)) (Prims.of_int (40))) + (Obj.magic (and_elim t)) + (fun uu___ -> + (fun uu___ -> + Obj.magic + (FStar_Tactics_Effect.tac_bind + (Prims.mk_range "FStar.Tactics.Logic.fst" + (Prims.of_int (249)) (Prims.of_int (5)) + (Prims.of_int (249)) (Prims.of_int (21))) + (Prims.mk_range "FStar.Tactics.Logic.fst" + (Prims.of_int (249)) (Prims.of_int (4)) + (Prims.of_int (249)) (Prims.of_int (40))) + (Obj.magic (implies_intro ())) + (fun uu___1 -> + (fun uu___1 -> + Obj.magic + (FStar_Tactics_Effect.tac_bind + (Prims.mk_range "FStar.Tactics.Logic.fst" + (Prims.of_int (249)) (Prims.of_int (23)) + (Prims.of_int (249)) (Prims.of_int (39))) + (Prims.mk_range "FStar.Tactics.Logic.fst" + (Prims.of_int (249)) (Prims.of_int (4)) + (Prims.of_int (249)) (Prims.of_int (40))) + (Obj.magic (implies_intro ())) + (fun uu___2 -> + FStar_Tactics_Effect.lift_div_tac + (fun uu___3 -> (uu___1, uu___2))))) uu___1))) + uu___) +let (witness : + FStar_Reflection_Types.term -> (unit, unit) FStar_Tactics_Effect.tac_repr) + = + fun t -> + FStar_Tactics_Effect.tac_bind + (Prims.mk_range "FStar.Tactics.Logic.fst" (Prims.of_int (255)) + (Prims.of_int (4)) (Prims.of_int (255)) (Prims.of_int (26))) + (Prims.mk_range "FStar.Tactics.Logic.fst" (Prims.of_int (256)) + (Prims.of_int (4)) (Prims.of_int (256)) (Prims.of_int (11))) + (Obj.magic + (FStar_Tactics_Derived.apply_raw + (FStar_Reflection_Builtins.pack_ln + (FStar_Reflection_Data.Tv_FVar + (FStar_Reflection_Builtins.pack_fv + ["FStar"; "Tactics"; "Logic"; "__witness"]))))) + (fun uu___ -> + (fun uu___ -> Obj.magic (FStar_Tactics_Derived.exact t)) uu___) +let (elim_exists : + FStar_Reflection_Types.term -> + ((FStar_Reflection_Types.binder * FStar_Reflection_Types.binder), + unit) FStar_Tactics_Effect.tac_repr) + = + fun t -> + FStar_Tactics_Effect.tac_bind + (Prims.mk_range "FStar.Tactics.Logic.fst" (Prims.of_int (265)) + (Prims.of_int (2)) (Prims.of_int (265)) (Prims.of_int (41))) + (Prims.mk_range "FStar.Tactics.Logic.fst" (Prims.of_int (266)) + (Prims.of_int (2)) (Prims.of_int (268)) (Prims.of_int (9))) + (Obj.magic + (FStar_Tactics_Derived.apply_lemma + (FStar_Reflection_Builtins.pack_ln + (FStar_Reflection_Data.Tv_App + ((FStar_Reflection_Builtins.pack_ln + (FStar_Reflection_Data.Tv_FVar + (FStar_Reflection_Builtins.pack_fv + ["FStar"; "Tactics"; "Logic"; "__elim_exists'"]))), + (t, FStar_Reflection_Data.Q_Explicit)))))) + (fun uu___ -> + (fun uu___ -> + Obj.magic + (FStar_Tactics_Effect.tac_bind + (Prims.mk_range "FStar.Tactics.Logic.fst" + (Prims.of_int (266)) (Prims.of_int (10)) + (Prims.of_int (266)) (Prims.of_int (18))) + (Prims.mk_range "FStar.Tactics.Logic.fst" + (Prims.of_int (267)) (Prims.of_int (2)) + (Prims.of_int (268)) (Prims.of_int (9))) + (Obj.magic (FStar_Tactics_Builtins.intro ())) + (fun uu___1 -> + (fun x -> + Obj.magic + (FStar_Tactics_Effect.tac_bind + (Prims.mk_range "FStar.Tactics.Logic.fst" + (Prims.of_int (267)) (Prims.of_int (11)) + (Prims.of_int (267)) (Prims.of_int (19))) + (Prims.mk_range "FStar.Tactics.Logic.fst" + (Prims.of_int (268)) (Prims.of_int (2)) + (Prims.of_int (268)) (Prims.of_int (9))) + (Obj.magic (FStar_Tactics_Builtins.intro ())) + (fun pf -> + FStar_Tactics_Effect.lift_div_tac + (fun uu___1 -> (x, pf))))) uu___1))) uu___) +let (instantiate : + FStar_Reflection_Types.term -> + FStar_Reflection_Types.term -> + (FStar_Reflection_Types.binder, unit) FStar_Tactics_Effect.tac_repr) + = + fun fa -> + fun x -> + FStar_Tactics_Derived.try_with + (fun uu___ -> + match () with + | () -> + FStar_Tactics_Derived.pose + (FStar_Reflection_Builtins.pack_ln + (FStar_Reflection_Data.Tv_App + ((FStar_Reflection_Builtins.pack_ln + (FStar_Reflection_Data.Tv_App + ((FStar_Reflection_Builtins.pack_ln + (FStar_Reflection_Data.Tv_FVar + (FStar_Reflection_Builtins.pack_fv + ["FStar"; + "Tactics"; + "Logic"; + "__forall_inst_sq"]))), + (fa, FStar_Reflection_Data.Q_Explicit)))), + (x, FStar_Reflection_Data.Q_Explicit))))) + (fun uu___ -> + FStar_Tactics_Derived.try_with + (fun uu___1 -> + match () with + | () -> + FStar_Tactics_Derived.pose + (FStar_Reflection_Builtins.pack_ln + (FStar_Reflection_Data.Tv_App + ((FStar_Reflection_Builtins.pack_ln + (FStar_Reflection_Data.Tv_App + ((FStar_Reflection_Builtins.pack_ln + (FStar_Reflection_Data.Tv_FVar + (FStar_Reflection_Builtins.pack_fv + ["FStar"; + "Tactics"; + "Logic"; + "__forall_inst"]))), + (fa, FStar_Reflection_Data.Q_Explicit)))), + (x, FStar_Reflection_Data.Q_Explicit))))) + (fun uu___1 -> + FStar_Tactics_Derived.fail "could not instantiate")) +let (instantiate_as : + FStar_Reflection_Types.term -> + FStar_Reflection_Types.term -> + Prims.string -> + (FStar_Reflection_Types.binder, unit) FStar_Tactics_Effect.tac_repr) + = + fun fa -> + fun x -> + fun s -> + FStar_Tactics_Effect.tac_bind + (Prims.mk_range "FStar.Tactics.Logic.fst" (Prims.of_int (285)) + (Prims.of_int (12)) (Prims.of_int (285)) (Prims.of_int (28))) + (Prims.mk_range "FStar.Tactics.Logic.fst" (Prims.of_int (286)) + (Prims.of_int (4)) (Prims.of_int (286)) (Prims.of_int (17))) + (Obj.magic (instantiate fa x)) + (fun uu___ -> + (fun b -> Obj.magic (FStar_Tactics_Builtins.rename_to b s)) + uu___) +let rec (sk_binder' : + FStar_Reflection_Types.binders -> + FStar_Reflection_Types.binder -> + ((FStar_Reflection_Types.binders * FStar_Reflection_Types.binder), + unit) FStar_Tactics_Effect.tac_repr) + = + fun acc -> + fun b -> + FStar_Tactics_Derived.focus + (fun uu___ -> + FStar_Tactics_Derived.try_with + (fun uu___1 -> + match () with + | () -> + FStar_Tactics_Effect.tac_bind + (Prims.mk_range "FStar.Tactics.Logic.fst" + (Prims.of_int (297)) (Prims.of_int (6)) + (Prims.of_int (297)) (Prims.of_int (52))) + (Prims.mk_range "FStar.Tactics.Logic.fst" + (Prims.of_int (298)) (Prims.of_int (6)) + (Prims.of_int (302)) (Prims.of_int (29))) + (Obj.magic + (FStar_Tactics_Effect.tac_bind + (Prims.mk_range "FStar.Tactics.Logic.fst" + (Prims.of_int (297)) (Prims.of_int (18)) + (Prims.of_int (297)) (Prims.of_int (52))) + (Prims.mk_range "FStar.Tactics.Logic.fst" + (Prims.of_int (297)) (Prims.of_int (6)) + (Prims.of_int (297)) (Prims.of_int (52))) + (Obj.magic + (FStar_Tactics_Effect.tac_bind + (Prims.mk_range "FStar.Tactics.Logic.fst" + (Prims.of_int (297)) (Prims.of_int (31)) + (Prims.of_int (297)) (Prims.of_int (49))) + (Prims.mk_range "FStar.Tactics.Logic.fst" + (Prims.of_int (297)) (Prims.of_int (18)) + (Prims.of_int (297)) (Prims.of_int (52))) + (Obj.magic + (FStar_Tactics_Derived.binder_to_term b)) + (fun uu___2 -> + FStar_Tactics_Effect.lift_div_tac + (fun uu___3 -> + FStar_Reflection_Builtins.pack_ln + (FStar_Reflection_Data.Tv_App + ((FStar_Reflection_Builtins.pack_ln + (FStar_Reflection_Data.Tv_FVar + (FStar_Reflection_Builtins.pack_fv + ["FStar"; + "Tactics"; + "Logic"; + "sklem0"]))), + (uu___2, + FStar_Reflection_Data.Q_Explicit))))))) + (fun uu___2 -> + (fun uu___2 -> + Obj.magic + (FStar_Tactics_Derived.apply_lemma uu___2)) + uu___2))) + (fun uu___2 -> + (fun uu___2 -> + Obj.magic + (FStar_Tactics_Effect.tac_bind + (Prims.mk_range "FStar.Tactics.Logic.fst" + (Prims.of_int (298)) (Prims.of_int (6)) + (Prims.of_int (298)) (Prims.of_int (38))) + (Prims.mk_range "FStar.Tactics.Logic.fst" + (Prims.of_int (299)) (Prims.of_int (6)) + (Prims.of_int (302)) (Prims.of_int (29))) + (Obj.magic + (FStar_Tactics_Effect.tac_bind + (Prims.mk_range + "FStar.Tactics.Logic.fst" + (Prims.of_int (298)) + (Prims.of_int (9)) + (Prims.of_int (298)) + (Prims.of_int (23))) + (Prims.mk_range + "FStar.Tactics.Logic.fst" + (Prims.of_int (298)) + (Prims.of_int (6)) + (Prims.of_int (298)) + (Prims.of_int (38))) + (Obj.magic + (FStar_Tactics_Effect.tac_bind + (Prims.mk_range + "FStar.Tactics.Logic.fst" + (Prims.of_int (298)) + (Prims.of_int (9)) + (Prims.of_int (298)) + (Prims.of_int (18))) + (Prims.mk_range + "FStar.Tactics.Logic.fst" + (Prims.of_int (298)) + (Prims.of_int (9)) + (Prims.of_int (298)) + (Prims.of_int (23))) + (Obj.magic + (FStar_Tactics_Derived.ngoals + ())) + (fun uu___3 -> + FStar_Tactics_Effect.lift_div_tac + (fun uu___4 -> + uu___3 <> Prims.int_one)))) + (fun uu___3 -> + (fun uu___3 -> + if uu___3 + then + Obj.magic + (Obj.repr + (FStar_Tactics_Derived.fail + "no")) + else + Obj.magic + (Obj.repr + (FStar_Tactics_Effect.lift_div_tac + (fun uu___5 -> ())))) + uu___3))) + (fun uu___3 -> + (fun uu___3 -> + Obj.magic + (FStar_Tactics_Effect.tac_bind + (Prims.mk_range + "FStar.Tactics.Logic.fst" + (Prims.of_int (299)) + (Prims.of_int (6)) + (Prims.of_int (299)) + (Prims.of_int (13))) + (Prims.mk_range + "FStar.Tactics.Logic.fst" + (Prims.of_int (300)) + (Prims.of_int (6)) + (Prims.of_int (302)) + (Prims.of_int (29))) + (Obj.magic + (FStar_Tactics_Builtins.clear + b)) + (fun uu___4 -> + (fun uu___4 -> + Obj.magic + (FStar_Tactics_Effect.tac_bind + (Prims.mk_range + "FStar.Tactics.Logic.fst" + (Prims.of_int (300)) + (Prims.of_int (15)) + (Prims.of_int (300)) + (Prims.of_int (30))) + (Prims.mk_range + "FStar.Tactics.Logic.fst" + (Prims.of_int (301)) + (Prims.of_int (6)) + (Prims.of_int (302)) + (Prims.of_int (29))) + (Obj.magic + (forall_intro ())) + (fun uu___5 -> + (fun bx -> + Obj.magic + (FStar_Tactics_Effect.tac_bind + (Prims.mk_range + "FStar.Tactics.Logic.fst" + (Prims.of_int (301)) + (Prims.of_int (15)) + (Prims.of_int (301)) + (Prims.of_int (31))) + (Prims.mk_range + "FStar.Tactics.Logic.fst" + (Prims.of_int (302)) + (Prims.of_int (6)) + (Prims.of_int (302)) + (Prims.of_int (29))) + (Obj.magic + (implies_intro + ())) + (fun uu___5 + -> + (fun b' + -> + Obj.magic + (sk_binder' + (bx :: + acc) b')) + uu___5))) + uu___5))) uu___4))) + uu___3))) uu___2)) + (fun uu___1 -> + (fun uu___1 -> + Obj.magic + (FStar_Tactics_Effect.lift_div_tac + (fun uu___2 -> (acc, b)))) uu___1)) +let (sk_binder : + FStar_Reflection_Types.binder -> + ((FStar_Reflection_Types.binders * FStar_Reflection_Types.binder), + unit) FStar_Tactics_Effect.tac_repr) + = fun b -> sk_binder' [] b +let (skolem : + unit -> + ((FStar_Reflection_Types.binders * FStar_Reflection_Types.binder) + Prims.list, + unit) FStar_Tactics_Effect.tac_repr) + = + fun uu___ -> + FStar_Tactics_Effect.tac_bind + (Prims.mk_range "FStar.Tactics.Logic.fst" (Prims.of_int (311)) + (Prims.of_int (11)) (Prims.of_int (311)) (Prims.of_int (38))) + (Prims.mk_range "FStar.Tactics.Logic.fst" (Prims.of_int (312)) + (Prims.of_int (2)) (Prims.of_int (312)) (Prims.of_int (18))) + (Obj.magic + (FStar_Tactics_Effect.tac_bind + (Prims.mk_range "FStar.Tactics.Logic.fst" (Prims.of_int (311)) + (Prims.of_int (26)) (Prims.of_int (311)) (Prims.of_int (38))) + (Prims.mk_range "FStar.Tactics.Logic.fst" (Prims.of_int (311)) + (Prims.of_int (11)) (Prims.of_int (311)) (Prims.of_int (38))) + (Obj.magic (FStar_Tactics_Derived.cur_env ())) + (fun uu___1 -> + FStar_Tactics_Effect.lift_div_tac + (fun uu___2 -> + FStar_Reflection_Builtins.binders_of_env uu___1)))) + (fun uu___1 -> + (fun bs -> Obj.magic (FStar_Tactics_Util.map sk_binder bs)) uu___1) +let (easy_fill : unit -> (unit, unit) FStar_Tactics_Effect.tac_repr) = + fun uu___ -> + FStar_Tactics_Effect.tac_bind + (Prims.mk_range "FStar.Tactics.Logic.fst" (Prims.of_int (321)) + (Prims.of_int (12)) (Prims.of_int (321)) (Prims.of_int (24))) + (Prims.mk_range "FStar.Tactics.Logic.fst" (Prims.of_int (323)) + (Prims.of_int (4)) (Prims.of_int (324)) (Prims.of_int (10))) + (Obj.magic (FStar_Tactics_Derived.repeat FStar_Tactics_Builtins.intro)) + (fun uu___1 -> + (fun uu___1 -> + Obj.magic + (FStar_Tactics_Effect.tac_bind + (Prims.mk_range "FStar.Tactics.Logic.fst" + (Prims.of_int (323)) (Prims.of_int (12)) + (Prims.of_int (323)) (Prims.of_int (67))) + (Prims.mk_range "FStar.Tactics.Logic.fst" + (Prims.of_int (324)) (Prims.of_int (4)) + (Prims.of_int (324)) (Prims.of_int (10))) + (Obj.magic + (FStar_Tactics_Derived.trytac + (fun uu___2 -> + FStar_Tactics_Effect.tac_bind + (Prims.mk_range "FStar.Tactics.Logic.fst" + (Prims.of_int (323)) (Prims.of_int (30)) + (Prims.of_int (323)) (Prims.of_int (56))) + (Prims.mk_range "FStar.Tactics.Logic.fst" + (Prims.of_int (323)) (Prims.of_int (58)) + (Prims.of_int (323)) (Prims.of_int (66))) + (Obj.magic + (FStar_Tactics_Derived.apply + (FStar_Reflection_Builtins.pack_ln + (FStar_Reflection_Data.Tv_FVar + (FStar_Reflection_Builtins.pack_fv + ["FStar"; + "Tactics"; + "Logic"; + "lemma_from_squash"]))))) + (fun uu___3 -> + (fun uu___3 -> + Obj.magic (FStar_Tactics_Builtins.intro ())) + uu___3)))) + (fun uu___2 -> + (fun uu___2 -> Obj.magic (FStar_Tactics_Derived.smt ())) + uu___2))) uu___1) +let easy : 'a . 'a -> 'a = fun x -> x +let (using_lemma : + FStar_Reflection_Types.term -> + (FStar_Reflection_Types.binder, unit) FStar_Tactics_Effect.tac_repr) + = + fun t -> + FStar_Tactics_Derived.try_with + (fun uu___ -> + match () with + | () -> + pose_lemma + (FStar_Reflection_Builtins.pack_ln + (FStar_Reflection_Data.Tv_App + ((FStar_Reflection_Builtins.pack_ln + (FStar_Reflection_Data.Tv_FVar + (FStar_Reflection_Builtins.pack_fv + ["FStar"; "Tactics"; "Logic"; "lem1_fa"]))), + (t, FStar_Reflection_Data.Q_Explicit))))) + (fun uu___ -> + FStar_Tactics_Derived.try_with + (fun uu___1 -> + match () with + | () -> + pose_lemma + (FStar_Reflection_Builtins.pack_ln + (FStar_Reflection_Data.Tv_App + ((FStar_Reflection_Builtins.pack_ln + (FStar_Reflection_Data.Tv_FVar + (FStar_Reflection_Builtins.pack_fv + ["FStar"; "Tactics"; "Logic"; "lem2_fa"]))), + (t, FStar_Reflection_Data.Q_Explicit))))) + (fun uu___1 -> + FStar_Tactics_Derived.try_with + (fun uu___2 -> + match () with + | () -> + pose_lemma + (FStar_Reflection_Builtins.pack_ln + (FStar_Reflection_Data.Tv_App + ((FStar_Reflection_Builtins.pack_ln + (FStar_Reflection_Data.Tv_FVar + (FStar_Reflection_Builtins.pack_fv + ["FStar"; + "Tactics"; + "Logic"; + "lem3_fa"]))), + (t, FStar_Reflection_Data.Q_Explicit))))) + (fun uu___2 -> + FStar_Tactics_Derived.fail + "using_lemma: failed to instantiate"))) \ No newline at end of file diff --git a/src/ocaml-output/FStar_Tactics_Monad.ml b/ocaml/fstar-lib/generated/FStar_Tactics_Monad.ml similarity index 100% rename from src/ocaml-output/FStar_Tactics_Monad.ml rename to ocaml/fstar-lib/generated/FStar_Tactics_Monad.ml diff --git a/ocaml/fstar-lib/generated/FStar_Tactics_PatternMatching.ml b/ocaml/fstar-lib/generated/FStar_Tactics_PatternMatching.ml new file mode 100644 index 00000000000..de9f29a87f5 --- /dev/null +++ b/ocaml/fstar-lib/generated/FStar_Tactics_PatternMatching.ml @@ -0,0 +1,3868 @@ +open Prims +let (fetch_eq_side : + unit -> + ((FStar_Reflection_Types.term * FStar_Reflection_Types.term), unit) + FStar_Tactics_Effect.tac_repr) + = + fun uu___ -> + FStar_Tactics_Effect.tac_bind + (Prims.mk_range "FStar.Tactics.PatternMatching.fst" (Prims.of_int (63)) + (Prims.of_int (10)) (Prims.of_int (63)) (Prims.of_int (21))) + (Prims.mk_range "FStar.Tactics.PatternMatching.fst" (Prims.of_int (64)) + (Prims.of_int (2)) (Prims.of_int (88)) (Prims.of_int (39))) + (Obj.magic (FStar_Tactics_Derived.cur_goal ())) + (fun uu___1 -> + (fun g -> + Obj.magic + (FStar_Tactics_Effect.tac_bind + (Prims.mk_range "FStar.Tactics.PatternMatching.fst" + (Prims.of_int (64)) (Prims.of_int (8)) + (Prims.of_int (64)) (Prims.of_int (17))) + (Prims.mk_range "FStar.Tactics.PatternMatching.fst" + (Prims.of_int (64)) (Prims.of_int (2)) + (Prims.of_int (88)) (Prims.of_int (39))) + (Obj.magic (FStar_Tactics_Builtins.inspect g)) + (fun uu___1 -> + (fun uu___1 -> + match uu___1 with + | FStar_Reflection_Data.Tv_App (squash, (g1, uu___2)) + -> + Obj.magic + (FStar_Tactics_Effect.tac_bind + (Prims.mk_range + "FStar.Tactics.PatternMatching.fst" + (Prims.of_int (66)) (Prims.of_int (11)) + (Prims.of_int (66)) (Prims.of_int (25))) + (Prims.mk_range + "FStar.Tactics.PatternMatching.fst" + (Prims.of_int (66)) (Prims.of_int (4)) + (Prims.of_int (87)) (Prims.of_int (51))) + (Obj.magic + (FStar_Tactics_Builtins.inspect squash)) + (fun uu___3 -> + (fun uu___3 -> + match uu___3 with + | FStar_Reflection_Data.Tv_UInst + (squash1, uu___4) -> + if + (FStar_Reflection_Derived.fv_to_string + squash1) + = + (FStar_Reflection_Derived.flatten_name + FStar_Reflection_Const.squash_qn) + then + Obj.magic + (FStar_Tactics_Effect.tac_bind + (Prims.mk_range + "FStar.Tactics.PatternMatching.fst" + (Prims.of_int (70)) + (Prims.of_int (16)) + (Prims.of_int (70)) + (Prims.of_int (25))) + (Prims.mk_range + "FStar.Tactics.PatternMatching.fst" + (Prims.of_int (70)) + (Prims.of_int (9)) + (Prims.of_int (85)) + (Prims.of_int (48))) + (Obj.magic + (FStar_Tactics_Builtins.inspect + g1)) + (fun uu___5 -> + (fun uu___5 -> + match uu___5 with + | FStar_Reflection_Data.Tv_App + (eq_type_x, + (y, uu___6)) + -> + Obj.magic + (FStar_Tactics_Effect.tac_bind + (Prims.mk_range + "FStar.Tactics.PatternMatching.fst" + (Prims.of_int (72)) + (Prims.of_int (19)) + (Prims.of_int (72)) + (Prims.of_int (36))) + (Prims.mk_range + "FStar.Tactics.PatternMatching.fst" + (Prims.of_int (72)) + (Prims.of_int (12)) + (Prims.of_int (84)) + (Prims.of_int (39))) + (Obj.magic + (FStar_Tactics_Builtins.inspect + eq_type_x)) + (fun uu___7 + -> + (fun + uu___7 -> + match uu___7 + with + | + FStar_Reflection_Data.Tv_App + (eq_type, + (x, + uu___8)) + -> + Obj.magic + (FStar_Tactics_Effect.tac_bind + (Prims.mk_range + "FStar.Tactics.PatternMatching.fst" + (Prims.of_int (74)) + (Prims.of_int (22)) + (Prims.of_int (74)) + (Prims.of_int (37))) + (Prims.mk_range + "FStar.Tactics.PatternMatching.fst" + (Prims.of_int (74)) + (Prims.of_int (15)) + (Prims.of_int (83)) + (Prims.of_int (42))) + (Obj.magic + (FStar_Tactics_Builtins.inspect + eq_type)) + (fun + uu___9 -> + (fun + uu___9 -> + match uu___9 + with + | + FStar_Reflection_Data.Tv_App + (eq, + (typ, + uu___10)) + -> + Obj.magic + (FStar_Tactics_Effect.tac_bind + (Prims.mk_range + "FStar.Tactics.PatternMatching.fst" + (Prims.of_int (76)) + (Prims.of_int (25)) + (Prims.of_int (76)) + (Prims.of_int (35))) + (Prims.mk_range + "FStar.Tactics.PatternMatching.fst" + (Prims.of_int (76)) + (Prims.of_int (18)) + (Prims.of_int (82)) + (Prims.of_int (55))) + (Obj.magic + (FStar_Tactics_Builtins.inspect + eq)) + (fun + uu___11 + -> + (fun + uu___11 + -> + match uu___11 + with + | + FStar_Reflection_Data.Tv_UInst + (eq1, + uu___12) + -> + Obj.magic + (Obj.repr + (if + (FStar_Reflection_Derived.fv_to_string + eq1) = + (FStar_Reflection_Derived.flatten_name + FStar_Reflection_Const.eq2_qn) + then + Obj.repr + (FStar_Tactics_Effect.lift_div_tac + (fun + uu___13 + -> (x, y))) + else + Obj.repr + (FStar_Tactics_Derived.fail + "not an equality"))) + | + FStar_Reflection_Data.Tv_FVar + eq1 -> + Obj.magic + (Obj.repr + (if + (FStar_Reflection_Derived.fv_to_string + eq1) = + (FStar_Reflection_Derived.flatten_name + FStar_Reflection_Const.eq2_qn) + then + Obj.repr + (FStar_Tactics_Effect.lift_div_tac + (fun + uu___12 + -> (x, y))) + else + Obj.repr + (FStar_Tactics_Derived.fail + "not an equality"))) + | + uu___12 + -> + Obj.magic + (Obj.repr + (FStar_Tactics_Derived.fail + "not an app2 of fvar: "))) + uu___11)) + | + uu___10 + -> + Obj.magic + (FStar_Tactics_Derived.fail + "not an app3")) + uu___9)) + | + uu___8 -> + Obj.magic + (FStar_Tactics_Derived.fail + "not an app2")) + uu___7)) + | uu___6 -> + Obj.magic + (FStar_Tactics_Derived.fail + "not an app under squash")) + uu___5)) + else + Obj.magic + (FStar_Tactics_Derived.fail + "not a squash") + | FStar_Reflection_Data.Tv_FVar squash1 + -> + if + (FStar_Reflection_Derived.fv_to_string + squash1) + = + (FStar_Reflection_Derived.flatten_name + FStar_Reflection_Const.squash_qn) + then + Obj.magic + (FStar_Tactics_Effect.tac_bind + (Prims.mk_range + "FStar.Tactics.PatternMatching.fst" + (Prims.of_int (70)) + (Prims.of_int (16)) + (Prims.of_int (70)) + (Prims.of_int (25))) + (Prims.mk_range + "FStar.Tactics.PatternMatching.fst" + (Prims.of_int (70)) + (Prims.of_int (9)) + (Prims.of_int (85)) + (Prims.of_int (48))) + (Obj.magic + (FStar_Tactics_Builtins.inspect + g1)) + (fun uu___4 -> + (fun uu___4 -> + match uu___4 with + | FStar_Reflection_Data.Tv_App + (eq_type_x, + (y, uu___5)) + -> + Obj.magic + (FStar_Tactics_Effect.tac_bind + (Prims.mk_range + "FStar.Tactics.PatternMatching.fst" + (Prims.of_int (72)) + (Prims.of_int (19)) + (Prims.of_int (72)) + (Prims.of_int (36))) + (Prims.mk_range + "FStar.Tactics.PatternMatching.fst" + (Prims.of_int (72)) + (Prims.of_int (12)) + (Prims.of_int (84)) + (Prims.of_int (39))) + (Obj.magic + (FStar_Tactics_Builtins.inspect + eq_type_x)) + (fun uu___6 + -> + (fun + uu___6 -> + match uu___6 + with + | + FStar_Reflection_Data.Tv_App + (eq_type, + (x, + uu___7)) + -> + Obj.magic + (FStar_Tactics_Effect.tac_bind + (Prims.mk_range + "FStar.Tactics.PatternMatching.fst" + (Prims.of_int (74)) + (Prims.of_int (22)) + (Prims.of_int (74)) + (Prims.of_int (37))) + (Prims.mk_range + "FStar.Tactics.PatternMatching.fst" + (Prims.of_int (74)) + (Prims.of_int (15)) + (Prims.of_int (83)) + (Prims.of_int (42))) + (Obj.magic + (FStar_Tactics_Builtins.inspect + eq_type)) + (fun + uu___8 -> + (fun + uu___8 -> + match uu___8 + with + | + FStar_Reflection_Data.Tv_App + (eq, + (typ, + uu___9)) + -> + Obj.magic + (FStar_Tactics_Effect.tac_bind + (Prims.mk_range + "FStar.Tactics.PatternMatching.fst" + (Prims.of_int (76)) + (Prims.of_int (25)) + (Prims.of_int (76)) + (Prims.of_int (35))) + (Prims.mk_range + "FStar.Tactics.PatternMatching.fst" + (Prims.of_int (76)) + (Prims.of_int (18)) + (Prims.of_int (82)) + (Prims.of_int (55))) + (Obj.magic + (FStar_Tactics_Builtins.inspect + eq)) + (fun + uu___10 + -> + (fun + uu___10 + -> + match uu___10 + with + | + FStar_Reflection_Data.Tv_UInst + (eq1, + uu___11) + -> + Obj.magic + (Obj.repr + (if + (FStar_Reflection_Derived.fv_to_string + eq1) = + (FStar_Reflection_Derived.flatten_name + FStar_Reflection_Const.eq2_qn) + then + Obj.repr + (FStar_Tactics_Effect.lift_div_tac + (fun + uu___12 + -> (x, y))) + else + Obj.repr + (FStar_Tactics_Derived.fail + "not an equality"))) + | + FStar_Reflection_Data.Tv_FVar + eq1 -> + Obj.magic + (Obj.repr + (if + (FStar_Reflection_Derived.fv_to_string + eq1) = + (FStar_Reflection_Derived.flatten_name + FStar_Reflection_Const.eq2_qn) + then + Obj.repr + (FStar_Tactics_Effect.lift_div_tac + (fun + uu___11 + -> (x, y))) + else + Obj.repr + (FStar_Tactics_Derived.fail + "not an equality"))) + | + uu___11 + -> + Obj.magic + (Obj.repr + (FStar_Tactics_Derived.fail + "not an app2 of fvar: "))) + uu___10)) + | + uu___9 -> + Obj.magic + (FStar_Tactics_Derived.fail + "not an app3")) + uu___8)) + | + uu___7 -> + Obj.magic + (FStar_Tactics_Derived.fail + "not an app2")) + uu___6)) + | uu___5 -> + Obj.magic + (FStar_Tactics_Derived.fail + "not an app under squash")) + uu___4)) + else + Obj.magic + (FStar_Tactics_Derived.fail + "not a squash") + | uu___4 -> + Obj.magic + (FStar_Tactics_Derived.fail + "not an app of fvar at top level")) + uu___3)) + | uu___2 -> + Obj.magic + (FStar_Tactics_Derived.fail + "not an app at top level")) uu___1))) uu___1) +let mustfail : + 'a . + (unit -> ('a, unit) FStar_Tactics_Effect.tac_repr) -> + Prims.string -> (unit, unit) FStar_Tactics_Effect.tac_repr + = + fun t -> + fun message -> + FStar_Tactics_Effect.tac_bind + (Prims.mk_range "FStar.Tactics.PatternMatching.fst" + (Prims.of_int (130)) (Prims.of_int (10)) (Prims.of_int (130)) + (Prims.of_int (18))) + (Prims.mk_range "FStar.Tactics.PatternMatching.fst" + (Prims.of_int (130)) (Prims.of_int (4)) (Prims.of_int (132)) + (Prims.of_int (16))) (Obj.magic (FStar_Tactics_Derived.trytac t)) + (fun uu___ -> + (fun uu___ -> + match uu___ with + | FStar_Pervasives_Native.Some uu___1 -> + Obj.magic (Obj.repr (FStar_Tactics_Derived.fail message)) + | FStar_Pervasives_Native.None -> + Obj.magic + (Obj.repr + (FStar_Tactics_Effect.lift_div_tac (fun uu___1 -> ())))) + uu___) +let (implies_intro' : unit -> (unit, unit) FStar_Tactics_Effect.tac_repr) = + fun uu___ -> + FStar_Tactics_Effect.tac_bind + (Prims.mk_range "FStar.Tactics.PatternMatching.fst" + (Prims.of_int (138)) (Prims.of_int (10)) (Prims.of_int (138)) + (Prims.of_int (26))) + (Prims.mk_range "FStar.Tactics.PatternMatching.fst" + (Prims.of_int (138)) (Prims.of_int (30)) (Prims.of_int (138)) + (Prims.of_int (32))) + (Obj.magic (FStar_Tactics_Logic.implies_intro ())) + (fun uu___1 -> FStar_Tactics_Effect.lift_div_tac (fun uu___2 -> ())) +let repeat' : + 'a . + (unit -> ('a, unit) FStar_Tactics_Effect.tac_repr) -> + (unit, unit) FStar_Tactics_Effect.tac_repr + = + fun f -> + FStar_Tactics_Effect.tac_bind + (Prims.mk_range "FStar.Tactics.PatternMatching.fst" + (Prims.of_int (141)) (Prims.of_int (10)) (Prims.of_int (141)) + (Prims.of_int (18))) + (Prims.mk_range "FStar.Tactics.PatternMatching.fst" + (Prims.of_int (141)) (Prims.of_int (22)) (Prims.of_int (141)) + (Prims.of_int (24))) (Obj.magic (FStar_Tactics_Derived.repeat f)) + (fun uu___ -> FStar_Tactics_Effect.lift_div_tac (fun uu___1 -> ())) +let (and_elim' : + FStar_Reflection_Types.binder -> (unit, unit) FStar_Tactics_Effect.tac_repr) + = + fun h -> + FStar_Tactics_Effect.tac_bind + (Prims.mk_range "FStar.Tactics.PatternMatching.fst" + (Prims.of_int (144)) (Prims.of_int (2)) (Prims.of_int (144)) + (Prims.of_int (43))) + (Prims.mk_range "FStar.Tactics.PatternMatching.fst" + (Prims.of_int (145)) (Prims.of_int (2)) (Prims.of_int (145)) + (Prims.of_int (9))) + (Obj.magic + (FStar_Tactics_Effect.tac_bind + (Prims.mk_range "FStar.Tactics.PatternMatching.fst" + (Prims.of_int (144)) (Prims.of_int (11)) (Prims.of_int (144)) + (Prims.of_int (43))) + (Prims.mk_range "FStar.Tactics.PatternMatching.fst" + (Prims.of_int (144)) (Prims.of_int (2)) (Prims.of_int (144)) + (Prims.of_int (43))) + (Obj.magic + (FStar_Tactics_Builtins.pack + (FStar_Reflection_Data.Tv_Var + (FStar_Reflection_Derived.bv_of_binder h)))) + (fun uu___ -> + (fun uu___ -> Obj.magic (FStar_Tactics_Logic.and_elim uu___)) + uu___))) + (fun uu___ -> + (fun uu___ -> Obj.magic (FStar_Tactics_Builtins.clear h)) uu___) +let exact_hyp : + 'a . + FStar_Reflection_Types.binder -> + (unit, unit) FStar_Tactics_Effect.tac_repr + = + fun h -> + FStar_Tactics_Effect.tac_bind + (Prims.mk_range "FStar.Tactics.PatternMatching.fst" + (Prims.of_int (149)) (Prims.of_int (11)) (Prims.of_int (149)) + (Prims.of_int (48))) + (Prims.mk_range "FStar.Tactics.PatternMatching.fst" + (Prims.of_int (150)) (Prims.of_int (2)) (Prims.of_int (150)) + (Prims.of_int (68))) + (FStar_Tactics_Effect.lift_div_tac + (fun uu___ -> + (fun uu___ -> + Obj.magic + (failwith "Cannot evaluate open quotation at runtime")) + uu___)) + (fun uu___ -> + (fun hd -> + Obj.magic + (FStar_Tactics_Effect.tac_bind + (Prims.mk_range "FStar.Tactics.PatternMatching.fst" + (Prims.of_int (150)) (Prims.of_int (8)) + (Prims.of_int (150)) (Prims.of_int (68))) + (Prims.mk_range "FStar.Tactics.PatternMatching.fst" + (Prims.of_int (150)) (Prims.of_int (2)) + (Prims.of_int (150)) (Prims.of_int (68))) + (Obj.magic + (FStar_Tactics_Effect.tac_bind + (Prims.mk_range "FStar.Tactics.PatternMatching.fst" + (Prims.of_int (150)) (Prims.of_int (19)) + (Prims.of_int (150)) (Prims.of_int (67))) + (Prims.mk_range "FStar.Tactics.PatternMatching.fst" + (Prims.of_int (150)) (Prims.of_int (8)) + (Prims.of_int (150)) (Prims.of_int (68))) + (Obj.magic + (FStar_Tactics_Effect.tac_bind + (Prims.mk_range + "FStar.Tactics.PatternMatching.fst" + (Prims.of_int (150)) (Prims.of_int (20)) + (Prims.of_int (150)) (Prims.of_int (66))) + (Prims.mk_range + "FStar.Tactics.PatternMatching.fst" + (Prims.of_int (150)) (Prims.of_int (19)) + (Prims.of_int (150)) (Prims.of_int (67))) + (Obj.magic + (FStar_Tactics_Effect.tac_bind + (Prims.mk_range + "FStar.Tactics.PatternMatching.fst" + (Prims.of_int (150)) + (Prims.of_int (21)) + (Prims.of_int (150)) + (Prims.of_int (53))) + (Prims.mk_range + "FStar.Tactics.PatternMatching.fst" + (Prims.of_int (150)) + (Prims.of_int (20)) + (Prims.of_int (150)) + (Prims.of_int (66))) + (Obj.magic + (FStar_Tactics_Builtins.pack + (FStar_Reflection_Data.Tv_Var + (FStar_Reflection_Derived.bv_of_binder + h)))) + (fun uu___ -> + FStar_Tactics_Effect.lift_div_tac + (fun uu___1 -> + (uu___, + FStar_Reflection_Data.Q_Explicit))))) + (fun uu___ -> + FStar_Tactics_Effect.lift_div_tac + (fun uu___1 -> [uu___])))) + (fun uu___ -> + FStar_Tactics_Effect.lift_div_tac + (fun uu___1 -> + FStar_Reflection_Derived.mk_app hd uu___)))) + (fun uu___ -> + (fun uu___ -> + Obj.magic (FStar_Tactics_Derived.exact uu___)) uu___))) + uu___) +let (exact_hyp' : + FStar_Reflection_Types.binder -> (unit, unit) FStar_Tactics_Effect.tac_repr) + = + fun h -> + FStar_Tactics_Effect.tac_bind + (Prims.mk_range "FStar.Tactics.PatternMatching.fst" + (Prims.of_int (154)) (Prims.of_int (8)) (Prims.of_int (154)) + (Prims.of_int (40))) + (Prims.mk_range "FStar.Tactics.PatternMatching.fst" + (Prims.of_int (154)) (Prims.of_int (2)) (Prims.of_int (154)) + (Prims.of_int (40))) + (Obj.magic + (FStar_Tactics_Builtins.pack + (FStar_Reflection_Data.Tv_Var + (FStar_Reflection_Derived.bv_of_binder h)))) + (fun uu___ -> + (fun uu___ -> Obj.magic (FStar_Tactics_Derived.exact uu___)) uu___) +type varname = Prims.string +type qn = Prims.string +type pattern = + | PVar of varname + | PQn of qn + | PType + | PApp of pattern * pattern +let (uu___is_PVar : pattern -> Prims.bool) = + fun projectee -> match projectee with | PVar name -> true | uu___ -> false +let (__proj__PVar__item__name : pattern -> varname) = + fun projectee -> match projectee with | PVar name -> name +let (uu___is_PQn : pattern -> Prims.bool) = + fun projectee -> match projectee with | PQn qn1 -> true | uu___ -> false +let (__proj__PQn__item__qn : pattern -> qn) = + fun projectee -> match projectee with | PQn qn1 -> qn1 +let (uu___is_PType : pattern -> Prims.bool) = + fun projectee -> match projectee with | PType -> true | uu___ -> false +let (uu___is_PApp : pattern -> Prims.bool) = + fun projectee -> + match projectee with | PApp (hd, arg) -> true | uu___ -> false +let (__proj__PApp__item__hd : pattern -> pattern) = + fun projectee -> match projectee with | PApp (hd, arg) -> hd +let (__proj__PApp__item__arg : pattern -> pattern) = + fun projectee -> match projectee with | PApp (hd, arg) -> arg +let (desc_of_pattern : pattern -> Prims.string) = + fun uu___ -> + match uu___ with + | PVar uu___1 -> "a variable" + | PQn qn1 -> Prims.strcat "a constant (" (Prims.strcat qn1 ")") + | PType -> "Type" + | PApp (uu___1, uu___2) -> "a function application" +let rec (string_of_pattern : pattern -> Prims.string) = + fun uu___ -> + match uu___ with + | PVar x -> Prims.strcat "?" x + | PQn qn1 -> qn1 + | PType -> "Type" + | PApp (l, r) -> + Prims.strcat "(" + (Prims.strcat (string_of_pattern l) + (Prims.strcat " " (Prims.strcat (string_of_pattern r) ")"))) +type match_exception = + | NameMismatch of (qn * qn) + | SimpleMismatch of (pattern * FStar_Reflection_Types.term) + | NonLinearMismatch of (varname * FStar_Reflection_Types.term * + FStar_Reflection_Types.term) + | UnsupportedTermInPattern of FStar_Reflection_Types.term + | IncorrectTypeInAbsPatBinder of FStar_Reflection_Types.typ +let (uu___is_NameMismatch : match_exception -> Prims.bool) = + fun projectee -> + match projectee with | NameMismatch _0 -> true | uu___ -> false +let (__proj__NameMismatch__item___0 : match_exception -> (qn * qn)) = + fun projectee -> match projectee with | NameMismatch _0 -> _0 +let (uu___is_SimpleMismatch : match_exception -> Prims.bool) = + fun projectee -> + match projectee with | SimpleMismatch _0 -> true | uu___ -> false +let (__proj__SimpleMismatch__item___0 : + match_exception -> (pattern * FStar_Reflection_Types.term)) = + fun projectee -> match projectee with | SimpleMismatch _0 -> _0 +let (uu___is_NonLinearMismatch : match_exception -> Prims.bool) = + fun projectee -> + match projectee with | NonLinearMismatch _0 -> true | uu___ -> false +let (__proj__NonLinearMismatch__item___0 : + match_exception -> + (varname * FStar_Reflection_Types.term * FStar_Reflection_Types.term)) + = fun projectee -> match projectee with | NonLinearMismatch _0 -> _0 +let (uu___is_UnsupportedTermInPattern : match_exception -> Prims.bool) = + fun projectee -> + match projectee with + | UnsupportedTermInPattern _0 -> true + | uu___ -> false +let (__proj__UnsupportedTermInPattern__item___0 : + match_exception -> FStar_Reflection_Types.term) = + fun projectee -> match projectee with | UnsupportedTermInPattern _0 -> _0 +let (uu___is_IncorrectTypeInAbsPatBinder : match_exception -> Prims.bool) = + fun projectee -> + match projectee with + | IncorrectTypeInAbsPatBinder _0 -> true + | uu___ -> false +let (__proj__IncorrectTypeInAbsPatBinder__item___0 : + match_exception -> FStar_Reflection_Types.typ) = + fun projectee -> + match projectee with | IncorrectTypeInAbsPatBinder _0 -> _0 +let (term_head : + FStar_Reflection_Types.term -> + (Prims.string, unit) FStar_Tactics_Effect.tac_repr) + = + fun t -> + FStar_Tactics_Effect.tac_bind + (Prims.mk_range "FStar.Tactics.PatternMatching.fst" + (Prims.of_int (203)) (Prims.of_int (8)) (Prims.of_int (203)) + (Prims.of_int (17))) + (Prims.mk_range "FStar.Tactics.PatternMatching.fst" + (Prims.of_int (203)) (Prims.of_int (2)) (Prims.of_int (219)) + (Prims.of_int (30))) (Obj.magic (FStar_Tactics_Builtins.inspect t)) + (fun uu___ -> + FStar_Tactics_Effect.lift_div_tac + (fun uu___1 -> + match uu___ with + | FStar_Reflection_Data.Tv_Var bv -> "Tv_Var" + | FStar_Reflection_Data.Tv_BVar fv -> "Tv_BVar" + | FStar_Reflection_Data.Tv_FVar fv -> "Tv_FVar" + | FStar_Reflection_Data.Tv_UInst (uu___2, uu___3) -> "Tv_UInst" + | FStar_Reflection_Data.Tv_App (f, x) -> "Tv_App" + | FStar_Reflection_Data.Tv_Abs (x, t1) -> "Tv_Abs" + | FStar_Reflection_Data.Tv_Arrow (x, t1) -> "Tv_Arrow" + | FStar_Reflection_Data.Tv_Type uu___2 -> "Tv_Type" + | FStar_Reflection_Data.Tv_Refine (x, t1) -> "Tv_Refine" + | FStar_Reflection_Data.Tv_Const cst -> "Tv_Const" + | FStar_Reflection_Data.Tv_Uvar (i, t1) -> "Tv_Uvar" + | FStar_Reflection_Data.Tv_Let (r, attrs, b, t1, t2) -> + "Tv_Let" + | FStar_Reflection_Data.Tv_Match (t1, uu___2, branches) -> + "Tv_Match" + | FStar_Reflection_Data.Tv_AscribedT + (uu___2, uu___3, uu___4, uu___5) -> "Tv_AscribedT" + | FStar_Reflection_Data.Tv_AscribedC + (uu___2, uu___3, uu___4, uu___5) -> "Tv_AscribedC" + | FStar_Reflection_Data.Tv_Unknown -> "Tv_Unknown")) +let (string_of_match_exception : + match_exception -> (Prims.string, unit) FStar_Tactics_Effect.tac_repr) = + fun uu___ -> + (fun uu___ -> + match uu___ with + | NameMismatch (qn1, qn2) -> + Obj.magic + (Obj.repr + (FStar_Tactics_Effect.lift_div_tac + (fun uu___1 -> + Prims.strcat + "Match failure (name mismatch): expecting " + (Prims.strcat qn1 (Prims.strcat ", found " qn2))))) + | SimpleMismatch (pat, tm) -> + Obj.magic + (Obj.repr + (FStar_Tactics_Effect.tac_bind + (Prims.mk_range "FStar.Tactics.PatternMatching.fst" + (Prims.of_int (227)) (Prims.of_int (4)) + (Prims.of_int (227)) (Prims.of_int (54))) + (Prims.mk_range "prims.fst" (Prims.of_int (606)) + (Prims.of_int (19)) (Prims.of_int (606)) + (Prims.of_int (31))) + (Obj.magic + (FStar_Tactics_Effect.tac_bind + (Prims.mk_range "FStar.Tactics.PatternMatching.fst" + (Prims.of_int (227)) (Prims.of_int (26)) + (Prims.of_int (227)) (Prims.of_int (54))) + (Prims.mk_range "prims.fst" (Prims.of_int (606)) + (Prims.of_int (19)) (Prims.of_int (606)) + (Prims.of_int (31))) + (Obj.magic + (FStar_Tactics_Effect.tac_bind + (Prims.mk_range + "FStar.Tactics.PatternMatching.fst" + (Prims.of_int (227)) (Prims.of_int (37)) + (Prims.of_int (227)) (Prims.of_int (54))) + (Prims.mk_range "prims.fst" + (Prims.of_int (606)) (Prims.of_int (19)) + (Prims.of_int (606)) (Prims.of_int (31))) + (Obj.magic + (FStar_Tactics_Builtins.term_to_string tm)) + (fun uu___1 -> + FStar_Tactics_Effect.lift_div_tac + (fun uu___2 -> + Prims.strcat ", got " uu___1)))) + (fun uu___1 -> + FStar_Tactics_Effect.lift_div_tac + (fun uu___2 -> + Prims.strcat (desc_of_pattern pat) uu___1)))) + (fun uu___1 -> + FStar_Tactics_Effect.lift_div_tac + (fun uu___2 -> + Prims.strcat + "Match failure (sort mismatch): expecting " + uu___1)))) + | NonLinearMismatch (nm, t1, t2) -> + Obj.magic + (Obj.repr + (FStar_Tactics_Effect.tac_bind + (Prims.mk_range "FStar.Tactics.PatternMatching.fst" + (Prims.of_int (229)) (Prims.of_int (54)) + (Prims.of_int (231)) (Prims.of_int (33))) + (Prims.mk_range "prims.fst" (Prims.of_int (606)) + (Prims.of_int (19)) (Prims.of_int (606)) + (Prims.of_int (31))) + (Obj.magic + (FStar_Tactics_Effect.tac_bind + (Prims.mk_range "FStar.Tactics.PatternMatching.fst" + (Prims.of_int (230)) (Prims.of_int (4)) + (Prims.of_int (231)) (Prims.of_int (33))) + (Prims.mk_range "prims.fst" (Prims.of_int (606)) + (Prims.of_int (19)) (Prims.of_int (606)) + (Prims.of_int (31))) + (Obj.magic + (FStar_Tactics_Effect.tac_bind + (Prims.mk_range + "FStar.Tactics.PatternMatching.fst" + (Prims.of_int (230)) (Prims.of_int (30)) + (Prims.of_int (231)) (Prims.of_int (33))) + (Prims.mk_range "prims.fst" + (Prims.of_int (606)) (Prims.of_int (19)) + (Prims.of_int (606)) (Prims.of_int (31))) + (Obj.magic + (FStar_Tactics_Effect.tac_bind + (Prims.mk_range + "FStar.Tactics.PatternMatching.fst" + (Prims.of_int (230)) + (Prims.of_int (30)) + (Prims.of_int (230)) + (Prims.of_int (49))) + (Prims.mk_range + "FStar.Tactics.PatternMatching.fst" + (Prims.of_int (230)) + (Prims.of_int (30)) + (Prims.of_int (231)) + (Prims.of_int (33))) + (Obj.magic + (FStar_Tactics_Builtins.term_to_string + t1)) + (fun uu___1 -> + (fun uu___1 -> + Obj.magic + (FStar_Tactics_Effect.tac_bind + (Prims.mk_range + "FStar.Tactics.PatternMatching.fst" + (Prims.of_int (231)) + (Prims.of_int (4)) + (Prims.of_int (231)) + (Prims.of_int (33))) + (Prims.mk_range "prims.fst" + (Prims.of_int (606)) + (Prims.of_int (19)) + (Prims.of_int (606)) + (Prims.of_int (31))) + (Obj.magic + (FStar_Tactics_Effect.tac_bind + (Prims.mk_range + "FStar.Tactics.PatternMatching.fst" + (Prims.of_int (231)) + (Prims.of_int (14)) + (Prims.of_int (231)) + (Prims.of_int (33))) + (Prims.mk_range + "prims.fst" + (Prims.of_int (606)) + (Prims.of_int (19)) + (Prims.of_int (606)) + (Prims.of_int (31))) + (Obj.magic + (FStar_Tactics_Builtins.term_to_string + t2)) + (fun uu___2 -> + FStar_Tactics_Effect.lift_div_tac + (fun uu___3 -> + Prims.strcat + " and " + uu___2)))) + (fun uu___2 -> + FStar_Tactics_Effect.lift_div_tac + (fun uu___3 -> + Prims.strcat uu___1 + uu___2)))) uu___1))) + (fun uu___1 -> + FStar_Tactics_Effect.lift_div_tac + (fun uu___2 -> + Prims.strcat " needs to match both " + uu___1)))) + (fun uu___1 -> + FStar_Tactics_Effect.lift_div_tac + (fun uu___2 -> Prims.strcat nm uu___1)))) + (fun uu___1 -> + FStar_Tactics_Effect.lift_div_tac + (fun uu___2 -> + Prims.strcat + "Match failure (nonlinear mismatch): variable " + uu___1)))) + | UnsupportedTermInPattern tm -> + Obj.magic + (Obj.repr + (FStar_Tactics_Effect.tac_bind + (Prims.mk_range "FStar.Tactics.PatternMatching.fst" + (Prims.of_int (234)) (Prims.of_int (4)) + (Prims.of_int (234)) (Prims.of_int (49))) + (Prims.mk_range "prims.fst" (Prims.of_int (606)) + (Prims.of_int (19)) (Prims.of_int (606)) + (Prims.of_int (31))) + (Obj.magic + (FStar_Tactics_Effect.tac_bind + (Prims.mk_range "FStar.Tactics.PatternMatching.fst" + (Prims.of_int (234)) (Prims.of_int (4)) + (Prims.of_int (234)) (Prims.of_int (21))) + (Prims.mk_range "FStar.Tactics.PatternMatching.fst" + (Prims.of_int (234)) (Prims.of_int (4)) + (Prims.of_int (234)) (Prims.of_int (49))) + (Obj.magic + (FStar_Tactics_Builtins.term_to_string tm)) + (fun uu___1 -> + (fun uu___1 -> + Obj.magic + (FStar_Tactics_Effect.tac_bind + (Prims.mk_range + "FStar.Tactics.PatternMatching.fst" + (Prims.of_int (234)) + (Prims.of_int (24)) + (Prims.of_int (234)) + (Prims.of_int (49))) + (Prims.mk_range "prims.fst" + (Prims.of_int (606)) + (Prims.of_int (19)) + (Prims.of_int (606)) + (Prims.of_int (31))) + (Obj.magic + (FStar_Tactics_Effect.tac_bind + (Prims.mk_range + "FStar.Tactics.PatternMatching.fst" + (Prims.of_int (234)) + (Prims.of_int (31)) + (Prims.of_int (234)) + (Prims.of_int (49))) + (Prims.mk_range "prims.fst" + (Prims.of_int (606)) + (Prims.of_int (19)) + (Prims.of_int (606)) + (Prims.of_int (31))) + (Obj.magic + (FStar_Tactics_Effect.tac_bind + (Prims.mk_range + "FStar.Tactics.PatternMatching.fst" + (Prims.of_int (234)) + (Prims.of_int (31)) + (Prims.of_int (234)) + (Prims.of_int (43))) + (Prims.mk_range "prims.fst" + (Prims.of_int (606)) + (Prims.of_int (19)) + (Prims.of_int (606)) + (Prims.of_int (31))) + (Obj.magic (term_head tm)) + (fun uu___2 -> + FStar_Tactics_Effect.lift_div_tac + (fun uu___3 -> + Prims.strcat uu___2 + ")")))) + (fun uu___2 -> + FStar_Tactics_Effect.lift_div_tac + (fun uu___3 -> + Prims.strcat " (" uu___2)))) + (fun uu___2 -> + FStar_Tactics_Effect.lift_div_tac + (fun uu___3 -> + Prims.strcat uu___1 uu___2)))) + uu___1))) + (fun uu___1 -> + FStar_Tactics_Effect.lift_div_tac + (fun uu___2 -> + Prims.strcat + "Match failure (unsupported term in pattern): " + uu___1)))) + | IncorrectTypeInAbsPatBinder typ -> + Obj.magic + (Obj.repr + (FStar_Tactics_Effect.tac_bind + (Prims.mk_range "FStar.Tactics.PatternMatching.fst" + (Prims.of_int (237)) (Prims.of_int (4)) + (Prims.of_int (237)) (Prims.of_int (74))) + (Prims.mk_range "prims.fst" (Prims.of_int (606)) + (Prims.of_int (19)) (Prims.of_int (606)) + (Prims.of_int (31))) + (Obj.magic + (FStar_Tactics_Effect.tac_bind + (Prims.mk_range "FStar.Tactics.PatternMatching.fst" + (Prims.of_int (237)) (Prims.of_int (4)) + (Prims.of_int (237)) (Prims.of_int (22))) + (Prims.mk_range "prims.fst" (Prims.of_int (606)) + (Prims.of_int (19)) (Prims.of_int (606)) + (Prims.of_int (31))) + (Obj.magic + (FStar_Tactics_Builtins.term_to_string typ)) + (fun uu___1 -> + FStar_Tactics_Effect.lift_div_tac + (fun uu___2 -> + Prims.strcat uu___1 + " (use one of ``var``, ``hyp \226\128\166``, or ``goal \226\128\166``)")))) + (fun uu___1 -> + FStar_Tactics_Effect.lift_div_tac + (fun uu___2 -> + Prims.strcat + "Incorrect type in pattern-matching binder: " + uu___1))))) uu___ +type 'a match_res = + | Success of 'a + | Failure of match_exception +let uu___is_Success : 'a . 'a match_res -> Prims.bool = + fun projectee -> match projectee with | Success _0 -> true | uu___ -> false +let __proj__Success__item___0 : 'a . 'a match_res -> 'a = + fun projectee -> match projectee with | Success _0 -> _0 +let uu___is_Failure : 'a . 'a match_res -> Prims.bool = + fun projectee -> match projectee with | Failure _0 -> true | uu___ -> false +let __proj__Failure__item___0 : 'a . 'a match_res -> match_exception = + fun projectee -> match projectee with | Failure _0 -> _0 +let return : 'a . 'a -> 'a match_res = fun x -> Success x +let op_let_Question : + 'a 'b . + 'a match_res -> + ('a -> ('b match_res, unit) FStar_Tactics_Effect.tac_repr) -> + ('b match_res, unit) FStar_Tactics_Effect.tac_repr + = + fun uu___1 -> + fun uu___ -> + (fun f -> + fun g -> + match f with + | Success aa -> Obj.magic (Obj.repr (g aa)) + | Failure ex -> + Obj.magic + (Obj.repr + (FStar_Tactics_Effect.lift_div_tac + (fun uu___ -> Failure ex)))) uu___1 uu___ +let raise : 'a . match_exception -> 'a match_res = fun ex -> Failure ex +let lift_exn_tac : + 'a 'b . + ('a -> 'b match_res) -> 'a -> ('b, unit) FStar_Tactics_Effect.tac_repr + = + fun uu___1 -> + fun uu___ -> + (fun f -> + fun aa -> + match f aa with + | Success bb -> + Obj.magic + (Obj.repr + (FStar_Tactics_Effect.lift_div_tac (fun uu___ -> bb))) + | Failure ex -> + Obj.magic + (Obj.repr + (FStar_Tactics_Effect.tac_bind + (Prims.mk_range "FStar.Tactics.PatternMatching.fst" + (Prims.of_int (268)) (Prims.of_int (31)) + (Prims.of_int (268)) (Prims.of_int (61))) + (Prims.mk_range "FStar.Tactics.PatternMatching.fst" + (Prims.of_int (268)) (Prims.of_int (18)) + (Prims.of_int (268)) (Prims.of_int (61))) + (Obj.magic (string_of_match_exception ex)) + (fun uu___ -> + (fun uu___ -> + Obj.magic (FStar_Tactics_Derived.fail uu___)) + uu___)))) uu___1 uu___ +let lift_exn_tactic : + 'a 'b . + ('a -> 'b match_res) -> 'a -> ('b, unit) FStar_Tactics_Effect.tac_repr + = + fun uu___1 -> + fun uu___ -> + (fun f -> + fun aa -> + match f aa with + | Success bb -> + Obj.magic + (Obj.repr + (FStar_Tactics_Effect.lift_div_tac (fun uu___ -> bb))) + | Failure ex -> + Obj.magic + (Obj.repr + (FStar_Tactics_Effect.tac_bind + (Prims.mk_range "FStar.Tactics.PatternMatching.fst" + (Prims.of_int (273)) (Prims.of_int (31)) + (Prims.of_int (273)) (Prims.of_int (61))) + (Prims.mk_range "FStar.Tactics.PatternMatching.fst" + (Prims.of_int (273)) (Prims.of_int (18)) + (Prims.of_int (273)) (Prims.of_int (61))) + (Obj.magic (string_of_match_exception ex)) + (fun uu___ -> + (fun uu___ -> + Obj.magic (FStar_Tactics_Derived.fail uu___)) + uu___)))) uu___1 uu___ +type bindings = (varname * FStar_Reflection_Types.term) Prims.list +let (string_of_bindings : + bindings -> (Prims.string, unit) FStar_Tactics_Effect.tac_repr) = + fun bindings1 -> + FStar_Tactics_Effect.tac_bind + (Prims.mk_range "FStar.Tactics.PatternMatching.fst" + (Prims.of_int (285)) (Prims.of_int (4)) (Prims.of_int (286)) + (Prims.of_int (27))) + (Prims.mk_range "FStar.Tactics.PatternMatching.fst" + (Prims.of_int (284)) (Prims.of_int (2)) (Prims.of_int (286)) + (Prims.of_int (27))) + (Obj.magic + (FStar_Tactics_Util.map + (fun uu___ -> + match uu___ with + | (nm, tm) -> + FStar_Tactics_Effect.tac_bind + (Prims.mk_range "FStar.Tactics.PatternMatching.fst" + (Prims.of_int (285)) (Prims.of_int (35)) + (Prims.of_int (285)) (Prims.of_int (64))) + (Prims.mk_range "prims.fst" (Prims.of_int (606)) + (Prims.of_int (19)) (Prims.of_int (606)) + (Prims.of_int (31))) + (Obj.magic + (FStar_Tactics_Effect.tac_bind + (Prims.mk_range + "FStar.Tactics.PatternMatching.fst" + (Prims.of_int (285)) (Prims.of_int (40)) + (Prims.of_int (285)) (Prims.of_int (64))) + (Prims.mk_range "prims.fst" (Prims.of_int (606)) + (Prims.of_int (19)) (Prims.of_int (606)) + (Prims.of_int (31))) + (Obj.magic + (FStar_Tactics_Effect.tac_bind + (Prims.mk_range + "FStar.Tactics.PatternMatching.fst" + (Prims.of_int (285)) (Prims.of_int (47)) + (Prims.of_int (285)) (Prims.of_int (64))) + (Prims.mk_range "prims.fst" + (Prims.of_int (606)) (Prims.of_int (19)) + (Prims.of_int (606)) (Prims.of_int (31))) + (Obj.magic + (FStar_Tactics_Builtins.term_to_string tm)) + (fun uu___1 -> + FStar_Tactics_Effect.lift_div_tac + (fun uu___2 -> Prims.strcat ": " uu___1)))) + (fun uu___1 -> + FStar_Tactics_Effect.lift_div_tac + (fun uu___2 -> Prims.strcat nm uu___1)))) + (fun uu___1 -> + FStar_Tactics_Effect.lift_div_tac + (fun uu___2 -> Prims.strcat ">> " uu___1))) + bindings1)) + (fun uu___ -> + FStar_Tactics_Effect.lift_div_tac + (fun uu___1 -> FStar_String.concat "\n" uu___)) +let rec (interp_pattern_aux : + pattern -> + bindings -> + FStar_Reflection_Types.term -> + (bindings match_res, unit) FStar_Tactics_Effect.tac_repr) + = + fun pat -> + fun cur_bindings -> + fun tm -> + FStar_Tactics_Effect.tac_bind + (Prims.mk_range "FStar.Tactics.PatternMatching.fst" + (Prims.of_int (294)) (Prims.of_int (4)) (Prims.of_int (297)) + (Prims.of_int (46))) + (Prims.mk_range "FStar.Tactics.PatternMatching.fst" + (Prims.of_int (298)) (Prims.of_int (2)) (Prims.of_int (323)) + (Prims.of_int (19))) + (FStar_Tactics_Effect.lift_div_tac + (fun uu___ -> + fun v -> + fun cur_bindings1 -> + fun tm1 -> + match FStar_List_Tot_Base.assoc v cur_bindings1 with + | FStar_Pervasives_Native.Some tm' -> + if FStar_Reflection_Builtins.term_eq tm1 tm' + then return cur_bindings1 + else raise (NonLinearMismatch (v, tm1, tm')) + | FStar_Pervasives_Native.None -> + return ((v, tm1) :: cur_bindings1))) + (fun uu___ -> + (fun interp_var -> + Obj.magic + (FStar_Tactics_Effect.tac_bind + (Prims.mk_range "FStar.Tactics.PatternMatching.fst" + (Prims.of_int (299)) (Prims.of_int (4)) + (Prims.of_int (304)) (Prims.of_int (43))) + (Prims.mk_range "FStar.Tactics.PatternMatching.fst" + (Prims.of_int (305)) (Prims.of_int (2)) + (Prims.of_int (323)) (Prims.of_int (19))) + (FStar_Tactics_Effect.lift_div_tac + (fun uu___ -> + fun qn1 -> + fun cur_bindings1 -> + fun tm1 -> + FStar_Tactics_Effect.tac_bind + (Prims.mk_range + "FStar.Tactics.PatternMatching.fst" + (Prims.of_int (299)) + (Prims.of_int (10)) + (Prims.of_int (299)) + (Prims.of_int (20))) + (Prims.mk_range + "FStar.Tactics.PatternMatching.fst" + (Prims.of_int (299)) (Prims.of_int (4)) + (Prims.of_int (304)) + (Prims.of_int (43))) + (Obj.magic + (FStar_Tactics_Builtins.inspect tm1)) + (fun uu___1 -> + FStar_Tactics_Effect.lift_div_tac + (fun uu___2 -> + match uu___1 with + | FStar_Reflection_Data.Tv_UInst + (fv, uu___3) -> + if + (FStar_Reflection_Derived.fv_to_string + fv) + = qn1 + then return cur_bindings1 + else + raise + (NameMismatch + (qn1, + (FStar_Reflection_Derived.fv_to_string + fv))) + | FStar_Reflection_Data.Tv_FVar fv + -> + if + (FStar_Reflection_Derived.fv_to_string + fv) + = qn1 + then return cur_bindings1 + else + raise + (NameMismatch + (qn1, + (FStar_Reflection_Derived.fv_to_string + fv))) + | uu___3 -> + raise + (SimpleMismatch (pat, tm1)))))) + (fun uu___ -> + (fun interp_qn -> + Obj.magic + (FStar_Tactics_Effect.tac_bind + (Prims.mk_range + "FStar.Tactics.PatternMatching.fst" + (Prims.of_int (306)) (Prims.of_int (4)) + (Prims.of_int (308)) (Prims.of_int (43))) + (Prims.mk_range + "FStar.Tactics.PatternMatching.fst" + (Prims.of_int (309)) (Prims.of_int (2)) + (Prims.of_int (323)) (Prims.of_int (19))) + (FStar_Tactics_Effect.lift_div_tac + (fun uu___ -> + fun cur_bindings1 -> + fun tm1 -> + FStar_Tactics_Effect.tac_bind + (Prims.mk_range + "FStar.Tactics.PatternMatching.fst" + (Prims.of_int (306)) + (Prims.of_int (10)) + (Prims.of_int (306)) + (Prims.of_int (20))) + (Prims.mk_range + "FStar.Tactics.PatternMatching.fst" + (Prims.of_int (306)) + (Prims.of_int (4)) + (Prims.of_int (308)) + (Prims.of_int (43))) + (Obj.magic + (FStar_Tactics_Builtins.inspect + tm1)) + (fun uu___1 -> + FStar_Tactics_Effect.lift_div_tac + (fun uu___2 -> + match uu___1 with + | FStar_Reflection_Data.Tv_Type + uu___3 -> + return cur_bindings1 + | uu___3 -> + raise + (SimpleMismatch + (pat, tm1)))))) + (fun uu___ -> + (fun interp_type -> + Obj.magic + (FStar_Tactics_Effect.tac_bind + (Prims.mk_range + "FStar.Tactics.PatternMatching.fst" + (Prims.of_int (310)) + (Prims.of_int (4)) + (Prims.of_int (315)) + (Prims.of_int (43))) + (Prims.mk_range + "FStar.Tactics.PatternMatching.fst" + (Prims.of_int (316)) + (Prims.of_int (4)) + (Prims.of_int (323)) + (Prims.of_int (19))) + (FStar_Tactics_Effect.lift_div_tac + (fun uu___ -> + fun p_hd -> + fun p_arg -> + fun cur_bindings1 -> + fun tm1 -> + FStar_Tactics_Effect.tac_bind + (Prims.mk_range + "FStar.Tactics.PatternMatching.fst" + (Prims.of_int (310)) + (Prims.of_int (10)) + (Prims.of_int (310)) + (Prims.of_int (20))) + (Prims.mk_range + "FStar.Tactics.PatternMatching.fst" + (Prims.of_int (310)) + (Prims.of_int (4)) + (Prims.of_int (315)) + (Prims.of_int (43))) + (Obj.magic + (FStar_Tactics_Builtins.inspect + tm1)) + (fun uu___1 -> + (fun uu___1 -> + match uu___1 + with + | FStar_Reflection_Data.Tv_App + (hd, + (arg, + uu___2)) + -> + Obj.magic + (Obj.repr + (FStar_Tactics_Effect.tac_bind + (Prims.mk_range + "FStar.Tactics.PatternMatching.fst" + (Prims.of_int (312)) + (Prims.of_int (21)) + (Prims.of_int (312)) + (Prims.of_int (60))) + (Prims.mk_range + "FStar.Tactics.PatternMatching.fst" + (Prims.of_int (312)) + (Prims.of_int (6)) + (Prims.of_int (312)) + (Prims.of_int (63))) + (Obj.magic + (interp_pattern_aux + p_hd + cur_bindings1 + hd)) + (fun + uu___3 -> + (fun + uu___3 -> + Obj.magic + (op_let_Question + uu___3 + (fun + with_hd + -> + FStar_Tactics_Effect.tac_bind + (Prims.mk_range + "FStar.Tactics.PatternMatching.fst" + (Prims.of_int (313)) + (Prims.of_int (22)) + (Prims.of_int (313)) + (Prims.of_int (58))) + (Prims.mk_range + "FStar.Tactics.PatternMatching.fst" + (Prims.of_int (313)) + (Prims.of_int (6)) + (Prims.of_int (313)) + (Prims.of_int (61))) + (Obj.magic + (interp_pattern_aux + p_arg + with_hd + arg)) + (fun + uu___4 -> + (fun + uu___4 -> + Obj.magic + (op_let_Question + uu___4 + (fun + uu___5 -> + (fun + with_arg + -> + Obj.magic + (FStar_Tactics_Effect.lift_div_tac + (fun + uu___5 -> + return + with_arg))) + uu___5))) + uu___4)))) + uu___3))) + | uu___2 -> + Obj.magic + (Obj.repr + (FStar_Tactics_Effect.lift_div_tac + (fun + uu___3 -> + raise + (SimpleMismatch + (pat, + tm1)))))) + uu___1))) + (fun uu___ -> + (fun interp_app -> + match pat with + | PVar var -> + Obj.magic + (Obj.repr + (FStar_Tactics_Effect.lift_div_tac + (fun uu___ -> + interp_var + var + cur_bindings + tm))) + | PQn qn1 -> + Obj.magic + (Obj.repr + (interp_qn qn1 + cur_bindings tm)) + | PType -> + Obj.magic + (Obj.repr + (interp_type + cur_bindings tm)) + | PApp (p_hd, p_arg) -> + Obj.magic + (Obj.repr + (interp_app p_hd + p_arg + cur_bindings tm)) + | uu___ -> + Obj.magic + (Obj.repr + (FStar_Tactics_Derived.fail + "?"))) uu___))) + uu___))) uu___))) uu___) +let (interp_pattern : + pattern -> + FStar_Reflection_Types.term -> + (bindings match_res, unit) FStar_Tactics_Effect.tac_repr) + = + fun pat -> + fun tm -> + FStar_Tactics_Effect.tac_bind + (Prims.mk_range "FStar.Tactics.PatternMatching.fst" + (Prims.of_int (329)) (Prims.of_int (24)) (Prims.of_int (329)) + (Prims.of_int (52))) + (Prims.mk_range "FStar.Tactics.PatternMatching.fst" + (Prims.of_int (329)) (Prims.of_int (4)) (Prims.of_int (329)) + (Prims.of_int (55))) (Obj.magic (interp_pattern_aux pat [] tm)) + (fun uu___ -> + (fun uu___ -> + Obj.magic + (op_let_Question uu___ + (fun uu___1 -> + (fun rev_bindings -> + Obj.magic + (FStar_Tactics_Effect.lift_div_tac + (fun uu___1 -> + return + (FStar_List_Tot_Base.rev rev_bindings)))) + uu___1))) uu___) +let (match_term : + pattern -> + FStar_Reflection_Types.term -> + (bindings, unit) FStar_Tactics_Effect.tac_repr) + = + fun pat -> + fun tm -> + FStar_Tactics_Effect.tac_bind + (Prims.mk_range "FStar.Tactics.PatternMatching.fst" + (Prims.of_int (336)) (Prims.of_int (10)) (Prims.of_int (336)) + (Prims.of_int (46))) + (Prims.mk_range "FStar.Tactics.PatternMatching.fst" + (Prims.of_int (336)) (Prims.of_int (4)) (Prims.of_int (338)) + (Prims.of_int (63))) + (Obj.magic + (FStar_Tactics_Effect.tac_bind + (Prims.mk_range "FStar.Tactics.PatternMatching.fst" + (Prims.of_int (336)) (Prims.of_int (29)) + (Prims.of_int (336)) (Prims.of_int (46))) + (Prims.mk_range "FStar.Tactics.PatternMatching.fst" + (Prims.of_int (336)) (Prims.of_int (10)) + (Prims.of_int (336)) (Prims.of_int (46))) + (Obj.magic (FStar_Tactics_Derived.norm_term [] tm)) + (fun uu___ -> + (fun uu___ -> Obj.magic (interp_pattern pat uu___)) uu___))) + (fun uu___ -> + (fun uu___ -> + match uu___ with + | Success bb -> + Obj.magic + (Obj.repr + (FStar_Tactics_Effect.lift_div_tac (fun uu___1 -> bb))) + | Failure ex -> + Obj.magic + (Obj.repr + (FStar_Tactics_Effect.tac_bind + (Prims.mk_range "FStar.Tactics.PatternMatching.fst" + (Prims.of_int (338)) (Prims.of_int (33)) + (Prims.of_int (338)) (Prims.of_int (63))) + (Prims.mk_range "FStar.Tactics.PatternMatching.fst" + (Prims.of_int (338)) (Prims.of_int (20)) + (Prims.of_int (338)) (Prims.of_int (63))) + (Obj.magic (string_of_match_exception ex)) + (fun uu___1 -> + (fun uu___1 -> + Obj.magic (FStar_Tactics_Derived.fail uu___1)) + uu___1)))) uu___) +let debug : 'uuuuu . 'uuuuu -> (unit, unit) FStar_Tactics_Effect.tac_repr = + fun uu___ -> + (fun msg -> + Obj.magic (FStar_Tactics_Effect.lift_div_tac (fun uu___ -> ()))) uu___ +type absvar = FStar_Reflection_Types.binder +type hypothesis = FStar_Reflection_Types.binder +type matching_problem = + { + mp_vars: varname Prims.list ; + mp_hyps: (varname * pattern) Prims.list ; + mp_goal: pattern FStar_Pervasives_Native.option } +let (__proj__Mkmatching_problem__item__mp_vars : + matching_problem -> varname Prims.list) = + fun projectee -> + match projectee with | { mp_vars; mp_hyps; mp_goal;_} -> mp_vars +let (__proj__Mkmatching_problem__item__mp_hyps : + matching_problem -> (varname * pattern) Prims.list) = + fun projectee -> + match projectee with | { mp_vars; mp_hyps; mp_goal;_} -> mp_hyps +let (__proj__Mkmatching_problem__item__mp_goal : + matching_problem -> pattern FStar_Pervasives_Native.option) = + fun projectee -> + match projectee with | { mp_vars; mp_hyps; mp_goal;_} -> mp_goal +let (string_of_matching_problem : matching_problem -> Prims.string) = + fun mp -> + let vars = FStar_String.concat ", " mp.mp_vars in + let hyps = + FStar_String.concat "\n " + (FStar_List_Tot_Base.map + (fun uu___ -> + match uu___ with + | (nm, pat) -> + Prims.strcat nm (Prims.strcat ": " (string_of_pattern pat))) + mp.mp_hyps) in + let goal = + match mp.mp_goal with + | FStar_Pervasives_Native.None -> "_" + | FStar_Pervasives_Native.Some pat -> string_of_pattern pat in + Prims.strcat "\n{ vars: " + (Prims.strcat vars + (Prims.strcat "\n" + (Prims.strcat " hyps: " + (Prims.strcat hyps + (Prims.strcat "\n" + (Prims.strcat " goal: " (Prims.strcat goal " }"))))))) +type matching_solution = + { + ms_vars: (varname * FStar_Reflection_Types.term) Prims.list ; + ms_hyps: (varname * hypothesis) Prims.list } +let (__proj__Mkmatching_solution__item__ms_vars : + matching_solution -> (varname * FStar_Reflection_Types.term) Prims.list) = + fun projectee -> match projectee with | { ms_vars; ms_hyps;_} -> ms_vars +let (__proj__Mkmatching_solution__item__ms_hyps : + matching_solution -> (varname * hypothesis) Prims.list) = + fun projectee -> match projectee with | { ms_vars; ms_hyps;_} -> ms_hyps +let (string_of_matching_solution : + matching_solution -> (Prims.string, unit) FStar_Tactics_Effect.tac_repr) = + fun ms -> + FStar_Tactics_Effect.tac_bind + (Prims.mk_range "FStar.Tactics.PatternMatching.fst" + (Prims.of_int (385)) (Prims.of_int (4)) (Prims.of_int (387)) + (Prims.of_int (57))) + (Prims.mk_range "FStar.Tactics.PatternMatching.fst" + (Prims.of_int (388)) (Prims.of_int (2)) (Prims.of_int (393)) + (Prims.of_int (26))) + (Obj.magic + (FStar_Tactics_Effect.tac_bind + (Prims.mk_range "FStar.Tactics.PatternMatching.fst" + (Prims.of_int (386)) (Prims.of_int (6)) (Prims.of_int (387)) + (Prims.of_int (57))) + (Prims.mk_range "FStar.Tactics.PatternMatching.fst" + (Prims.of_int (385)) (Prims.of_int (4)) (Prims.of_int (387)) + (Prims.of_int (57))) + (Obj.magic + (FStar_Tactics_Util.map + (fun uu___ -> + match uu___ with + | (varname1, tm) -> + FStar_Tactics_Effect.tac_bind + (Prims.mk_range + "FStar.Tactics.PatternMatching.fst" + (Prims.of_int (387)) (Prims.of_int (18)) + (Prims.of_int (387)) (Prims.of_int (44))) + (Prims.mk_range "prims.fst" (Prims.of_int (606)) + (Prims.of_int (19)) (Prims.of_int (606)) + (Prims.of_int (31))) + (Obj.magic + (FStar_Tactics_Effect.tac_bind + (Prims.mk_range + "FStar.Tactics.PatternMatching.fst" + (Prims.of_int (387)) (Prims.of_int (25)) + (Prims.of_int (387)) (Prims.of_int (44))) + (Prims.mk_range "prims.fst" + (Prims.of_int (606)) (Prims.of_int (19)) + (Prims.of_int (606)) (Prims.of_int (31))) + (Obj.magic + (FStar_Tactics_Builtins.term_to_string tm)) + (fun uu___1 -> + FStar_Tactics_Effect.lift_div_tac + (fun uu___2 -> Prims.strcat ": " uu___1)))) + (fun uu___1 -> + FStar_Tactics_Effect.lift_div_tac + (fun uu___2 -> Prims.strcat varname1 uu___1))) + ms.ms_vars)) + (fun uu___ -> + FStar_Tactics_Effect.lift_div_tac + (fun uu___1 -> FStar_String.concat "\n " uu___)))) + (fun uu___ -> + (fun vars -> + Obj.magic + (FStar_Tactics_Effect.tac_bind + (Prims.mk_range "FStar.Tactics.PatternMatching.fst" + (Prims.of_int (389)) (Prims.of_int (4)) + (Prims.of_int (391)) (Prims.of_int (58))) + (Prims.mk_range "prims.fst" (Prims.of_int (606)) + (Prims.of_int (19)) (Prims.of_int (606)) + (Prims.of_int (31))) + (Obj.magic + (FStar_Tactics_Effect.tac_bind + (Prims.mk_range "FStar.Tactics.PatternMatching.fst" + (Prims.of_int (390)) (Prims.of_int (6)) + (Prims.of_int (391)) (Prims.of_int (58))) + (Prims.mk_range "FStar.Tactics.PatternMatching.fst" + (Prims.of_int (389)) (Prims.of_int (4)) + (Prims.of_int (391)) (Prims.of_int (58))) + (Obj.magic + (FStar_Tactics_Util.map + (fun uu___ -> + (fun uu___ -> + Obj.magic + (FStar_Tactics_Effect.lift_div_tac + (fun uu___1 -> + match uu___ with + | (nm, binder) -> + Prims.strcat nm + (Prims.strcat ": " + (FStar_Reflection_Derived.binder_to_string + binder))))) uu___) + ms.ms_hyps)) + (fun uu___ -> + FStar_Tactics_Effect.lift_div_tac + (fun uu___1 -> + FStar_String.concat "\n " uu___)))) + (fun hyps -> + FStar_Tactics_Effect.lift_div_tac + (fun uu___ -> + Prims.strcat "\n{ vars: " + (Prims.strcat vars + (Prims.strcat "\n" + (Prims.strcat " hyps: " + (Prims.strcat hyps " }")))))))) uu___) +let assoc_varname_fail : + 'b . + varname -> + (varname * 'b) Prims.list -> ('b, unit) FStar_Tactics_Effect.tac_repr + = + fun uu___1 -> + fun uu___ -> + (fun key -> + fun ls -> + match FStar_List_Tot_Base.assoc key ls with + | FStar_Pervasives_Native.None -> + Obj.magic + (Obj.repr + (FStar_Tactics_Derived.fail + (Prims.strcat "Not found: " key))) + | FStar_Pervasives_Native.Some x -> + Obj.magic + (Obj.repr + (FStar_Tactics_Effect.lift_div_tac (fun uu___ -> x)))) + uu___1 uu___ +let ms_locate_hyp : + 'a . + matching_solution -> + varname -> + (FStar_Reflection_Types.binder, unit) FStar_Tactics_Effect.tac_repr + = fun solution -> fun name -> assoc_varname_fail name solution.ms_hyps +let ms_locate_var : + 'a . + matching_solution -> varname -> ('a, unit) FStar_Tactics_Effect.tac_repr + = + fun solution -> + fun name -> + FStar_Tactics_Effect.tac_bind + (Prims.mk_range "FStar.Tactics.PatternMatching.fst" + (Prims.of_int (408)) (Prims.of_int (13)) (Prims.of_int (408)) + (Prims.of_int (55))) + (Prims.mk_range "FStar.Tactics.PatternMatching.fst" + (Prims.of_int (408)) (Prims.of_int (2)) (Prims.of_int (408)) + (Prims.of_int (55))) + (Obj.magic (assoc_varname_fail name solution.ms_vars)) + (fun uu___ -> + (fun uu___ -> Obj.magic (FStar_Tactics_Builtins.unquote uu___)) + uu___) +let ms_locate_unit : + 'uuuuu 'uuuuu1 'a . + 'uuuuu -> 'uuuuu1 -> (unit, unit) FStar_Tactics_Effect.tac_repr + = + fun uu___1 -> + fun uu___ -> + (fun _solution -> + fun _binder_name -> + Obj.magic (FStar_Tactics_Effect.lift_div_tac (fun uu___ -> ()))) + uu___1 uu___ +let rec solve_mp_for_single_hyp : + 'a . + varname -> + pattern -> + hypothesis Prims.list -> + (matching_solution -> ('a, unit) FStar_Tactics_Effect.tac_repr) -> + matching_solution -> ('a, unit) FStar_Tactics_Effect.tac_repr + = + fun name -> + fun pat -> + fun hypotheses -> + fun body -> + fun part_sol -> + match hypotheses with + | [] -> FStar_Tactics_Derived.fail "No matching hypothesis" + | h::hs -> + FStar_Tactics_Derived.or_else + (fun uu___ -> + FStar_Tactics_Effect.tac_bind + (Prims.mk_range "FStar.Tactics.PatternMatching.fst" + (Prims.of_int (448)) (Prims.of_int (15)) + (Prims.of_int (448)) (Prims.of_int (73))) + (Prims.mk_range "FStar.Tactics.PatternMatching.fst" + (Prims.of_int (448)) (Prims.of_int (9)) + (Prims.of_int (453)) (Prims.of_int (73))) + (Obj.magic + (interp_pattern_aux pat part_sol.ms_vars + (FStar_Reflection_Derived.type_of_binder h))) + (fun uu___1 -> + (fun uu___1 -> + match uu___1 with + | Failure ex -> + Obj.magic + (FStar_Tactics_Effect.tac_bind + (Prims.mk_range + "FStar.Tactics.PatternMatching.fst" + (Prims.of_int (450)) + (Prims.of_int (16)) + (Prims.of_int (450)) + (Prims.of_int (74))) + (Prims.mk_range + "FStar.Tactics.PatternMatching.fst" + (Prims.of_int (450)) + (Prims.of_int (11)) + (Prims.of_int (450)) + (Prims.of_int (74))) + (Obj.magic + (FStar_Tactics_Effect.tac_bind + (Prims.mk_range + "FStar.Tactics.PatternMatching.fst" + (Prims.of_int (450)) + (Prims.of_int (43)) + (Prims.of_int (450)) + (Prims.of_int (73))) + (Prims.mk_range "prims.fst" + (Prims.of_int (606)) + (Prims.of_int (19)) + (Prims.of_int (606)) + (Prims.of_int (31))) + (Obj.magic + (string_of_match_exception ex)) + (fun uu___2 -> + FStar_Tactics_Effect.lift_div_tac + (fun uu___3 -> + Prims.strcat + "Failed to match hyp: " + uu___2)))) + (fun uu___2 -> + (fun uu___2 -> + Obj.magic + (FStar_Tactics_Derived.fail + uu___2)) uu___2)) + | Success bindings1 -> + Obj.magic + (FStar_Tactics_Effect.tac_bind + (Prims.mk_range + "FStar.Tactics.PatternMatching.fst" + (Prims.of_int (452)) + (Prims.of_int (35)) + (Prims.of_int (452)) + (Prims.of_int (37))) + (Prims.mk_range + "FStar.Tactics.PatternMatching.fst" + (Prims.of_int (453)) + (Prims.of_int (11)) + (Prims.of_int (453)) + (Prims.of_int (73))) + (FStar_Tactics_Effect.lift_div_tac + (fun uu___2 -> (name, h) :: + (part_sol.ms_hyps))) + (fun uu___2 -> + (fun ms_hyps -> + Obj.magic + (body + { + ms_vars = bindings1; + ms_hyps + })) uu___2))) uu___1)) + (fun uu___ -> + solve_mp_for_single_hyp name pat hs body part_sol) +let rec solve_mp_for_hyps : + 'a . + (varname * pattern) Prims.list -> + hypothesis Prims.list -> + (matching_solution -> ('a, unit) FStar_Tactics_Effect.tac_repr) -> + matching_solution -> ('a, unit) FStar_Tactics_Effect.tac_repr + = + fun mp_hyps -> + fun hypotheses -> + fun body -> + fun partial_solution -> + match mp_hyps with + | [] -> body partial_solution + | (name, pat)::pats -> + solve_mp_for_single_hyp name pat hypotheses + (solve_mp_for_hyps pats hypotheses body) partial_solution +let solve_mp : + 'a . + matching_problem -> + FStar_Reflection_Types.binders -> + FStar_Reflection_Types.term -> + (matching_solution -> ('a, unit) FStar_Tactics_Effect.tac_repr) -> + ('a, unit) FStar_Tactics_Effect.tac_repr + = + fun problem -> + fun hypotheses -> + fun goal -> + fun body -> + FStar_Tactics_Effect.tac_bind + (Prims.mk_range "FStar.Tactics.PatternMatching.fst" + (Prims.of_int (481)) (Prims.of_int (4)) (Prims.of_int (486)) + (Prims.of_int (64))) + (Prims.mk_range "FStar.Tactics.PatternMatching.fst" + (Prims.of_int (487)) (Prims.of_int (2)) (Prims.of_int (487)) + (Prims.of_int (62))) + (match problem.mp_goal with + | FStar_Pervasives_Native.None -> + Obj.magic + (Obj.repr + (FStar_Tactics_Effect.lift_div_tac + (fun uu___ -> { ms_vars = []; ms_hyps = [] }))) + | FStar_Pervasives_Native.Some pat -> + Obj.magic + (Obj.repr + (FStar_Tactics_Effect.tac_bind + (Prims.mk_range "FStar.Tactics.PatternMatching.fst" + (Prims.of_int (484)) (Prims.of_int (12)) + (Prims.of_int (484)) (Prims.of_int (35))) + (Prims.mk_range "FStar.Tactics.PatternMatching.fst" + (Prims.of_int (484)) (Prims.of_int (6)) + (Prims.of_int (486)) (Prims.of_int (64))) + (Obj.magic (interp_pattern pat goal)) + (fun uu___ -> + (fun uu___ -> + match uu___ with + | Failure ex -> + Obj.magic + (Obj.repr + (FStar_Tactics_Effect.tac_bind + (Prims.mk_range + "FStar.Tactics.PatternMatching.fst" + (Prims.of_int (485)) + (Prims.of_int (27)) + (Prims.of_int (485)) + (Prims.of_int (86))) + (Prims.mk_range + "FStar.Tactics.PatternMatching.fst" + (Prims.of_int (485)) + (Prims.of_int (22)) + (Prims.of_int (485)) + (Prims.of_int (86))) + (Obj.magic + (FStar_Tactics_Effect.tac_bind + (Prims.mk_range + "FStar.Tactics.PatternMatching.fst" + (Prims.of_int (485)) + (Prims.of_int (55)) + (Prims.of_int (485)) + (Prims.of_int (85))) + (Prims.mk_range "prims.fst" + (Prims.of_int (606)) + (Prims.of_int (19)) + (Prims.of_int (606)) + (Prims.of_int (31))) + (Obj.magic + (string_of_match_exception + ex)) + (fun uu___1 -> + FStar_Tactics_Effect.lift_div_tac + (fun uu___2 -> + Prims.strcat + "Failed to match goal: " + uu___1)))) + (fun uu___1 -> + (fun uu___1 -> + Obj.magic + (FStar_Tactics_Derived.fail + uu___1)) uu___1))) + | Success bindings1 -> + Obj.magic + (Obj.repr + (FStar_Tactics_Effect.lift_div_tac + (fun uu___1 -> + { + ms_vars = bindings1; + ms_hyps = [] + })))) uu___)))) + (fun uu___ -> + (fun goal_ps -> + Obj.magic + (solve_mp_for_hyps problem.mp_hyps hypotheses body + goal_ps)) uu___) +let rec (pattern_of_term_ex : + FStar_Reflection_Types.term -> + (pattern match_res, unit) FStar_Tactics_Effect.tac_repr) + = + fun tm -> + FStar_Tactics_Effect.tac_bind + (Prims.mk_range "FStar.Tactics.PatternMatching.fst" + (Prims.of_int (507)) (Prims.of_int (8)) (Prims.of_int (507)) + (Prims.of_int (18))) + (Prims.mk_range "FStar.Tactics.PatternMatching.fst" + (Prims.of_int (507)) (Prims.of_int (2)) (Prims.of_int (520)) + (Prims.of_int (44))) (Obj.magic (FStar_Tactics_Builtins.inspect tm)) + (fun uu___ -> + (fun uu___ -> + match uu___ with + | FStar_Reflection_Data.Tv_Var bv -> + Obj.magic + (Obj.repr + (FStar_Tactics_Effect.lift_div_tac + (fun uu___1 -> + return + (PVar (FStar_Reflection_Derived.name_of_bv bv))))) + | FStar_Reflection_Data.Tv_FVar fv -> + Obj.magic + (Obj.repr + (FStar_Tactics_Effect.lift_div_tac + (fun uu___1 -> + return + (PQn (FStar_Reflection_Derived.fv_to_string fv))))) + | FStar_Reflection_Data.Tv_UInst (fv, uu___1) -> + Obj.magic + (Obj.repr + (FStar_Tactics_Effect.lift_div_tac + (fun uu___2 -> + return + (PQn (FStar_Reflection_Derived.fv_to_string fv))))) + | FStar_Reflection_Data.Tv_Type uu___1 -> + Obj.magic + (Obj.repr + (FStar_Tactics_Effect.lift_div_tac + (fun uu___2 -> return PType))) + | FStar_Reflection_Data.Tv_App (f, (x, uu___1)) -> + Obj.magic + (Obj.repr + (FStar_Tactics_Effect.tac_bind + (Prims.mk_range "FStar.Tactics.PatternMatching.fst" + (Prims.of_int (517)) (Prims.of_int (17)) + (Prims.of_int (517)) (Prims.of_int (37))) + (Prims.mk_range "FStar.Tactics.PatternMatching.fst" + (Prims.of_int (517)) (Prims.of_int (5)) + (Prims.of_int (517)) (Prims.of_int (40))) + (Obj.magic (pattern_of_term_ex f)) + (fun uu___2 -> + (fun uu___2 -> + Obj.magic + (op_let_Question uu___2 + (fun fpat -> + FStar_Tactics_Effect.tac_bind + (Prims.mk_range + "FStar.Tactics.PatternMatching.fst" + (Prims.of_int (518)) + (Prims.of_int (17)) + (Prims.of_int (518)) + (Prims.of_int (37))) + (Prims.mk_range + "FStar.Tactics.PatternMatching.fst" + (Prims.of_int (518)) + (Prims.of_int (5)) + (Prims.of_int (518)) + (Prims.of_int (40))) + (Obj.magic (pattern_of_term_ex x)) + (fun uu___3 -> + (fun uu___3 -> + Obj.magic + (op_let_Question uu___3 + (fun uu___4 -> + (fun xpat -> + Obj.magic + (FStar_Tactics_Effect.lift_div_tac + (fun uu___4 -> + return + (PApp + (fpat, + xpat))))) + uu___4))) uu___3)))) + uu___2))) + | uu___1 -> + Obj.magic + (Obj.repr + (FStar_Tactics_Effect.lift_div_tac + (fun uu___2 -> raise (UnsupportedTermInPattern tm))))) + uu___) +let (beta_reduce : + FStar_Reflection_Types.term -> + (FStar_Reflection_Types.term, unit) FStar_Tactics_Effect.tac_repr) + = fun tm -> FStar_Tactics_Derived.norm_term [] tm +let (pattern_of_term : + FStar_Reflection_Types.term -> + (pattern, unit) FStar_Tactics_Effect.tac_repr) + = + fun tm -> + FStar_Tactics_Effect.tac_bind + (Prims.mk_range "FStar.Tactics.PatternMatching.fst" + (Prims.of_int (530)) (Prims.of_int (10)) (Prims.of_int (530)) + (Prims.of_int (31))) + (Prims.mk_range "FStar.Tactics.PatternMatching.fst" + (Prims.of_int (530)) (Prims.of_int (4)) (Prims.of_int (532)) + (Prims.of_int (63))) (Obj.magic (pattern_of_term_ex tm)) + (fun uu___ -> + (fun uu___ -> + match uu___ with + | Success bb -> + Obj.magic + (Obj.repr + (FStar_Tactics_Effect.lift_div_tac (fun uu___1 -> bb))) + | Failure ex -> + Obj.magic + (Obj.repr + (FStar_Tactics_Effect.tac_bind + (Prims.mk_range "FStar.Tactics.PatternMatching.fst" + (Prims.of_int (532)) (Prims.of_int (33)) + (Prims.of_int (532)) (Prims.of_int (63))) + (Prims.mk_range "FStar.Tactics.PatternMatching.fst" + (Prims.of_int (532)) (Prims.of_int (20)) + (Prims.of_int (532)) (Prims.of_int (63))) + (Obj.magic (string_of_match_exception ex)) + (fun uu___1 -> + (fun uu___1 -> + Obj.magic (FStar_Tactics_Derived.fail uu___1)) + uu___1)))) uu___) +type 'a hyp = FStar_Reflection_Types.binder +type 'a pm_goal = unit +let (hyp_qn : Prims.string) = "FStar.Tactics.PatternMatching.hyp" +let (goal_qn : Prims.string) = "FStar.Tactics.PatternMatching.pm_goal" +type abspat_binder_kind = + | ABKVar of FStar_Reflection_Types.typ + | ABKHyp + | ABKGoal +let (uu___is_ABKVar : abspat_binder_kind -> Prims.bool) = + fun projectee -> match projectee with | ABKVar _0 -> true | uu___ -> false +let (__proj__ABKVar__item___0 : + abspat_binder_kind -> FStar_Reflection_Types.typ) = + fun projectee -> match projectee with | ABKVar _0 -> _0 +let (uu___is_ABKHyp : abspat_binder_kind -> Prims.bool) = + fun projectee -> match projectee with | ABKHyp -> true | uu___ -> false +let (uu___is_ABKGoal : abspat_binder_kind -> Prims.bool) = + fun projectee -> match projectee with | ABKGoal -> true | uu___ -> false +let (string_of_abspat_binder_kind : abspat_binder_kind -> Prims.string) = + fun uu___ -> + match uu___ with + | ABKVar uu___1 -> "varname" + | ABKHyp -> "hyp" + | ABKGoal -> "goal" +type abspat_argspec = { + asa_name: absvar ; + asa_kind: abspat_binder_kind } +let (__proj__Mkabspat_argspec__item__asa_name : abspat_argspec -> absvar) = + fun projectee -> match projectee with | { asa_name; asa_kind;_} -> asa_name +let (__proj__Mkabspat_argspec__item__asa_kind : + abspat_argspec -> abspat_binder_kind) = + fun projectee -> match projectee with | { asa_name; asa_kind;_} -> asa_kind +type abspat_continuation = + (abspat_argspec Prims.list * FStar_Reflection_Types.term) +let (classify_abspat_binder : + FStar_Reflection_Types.binder -> + ((abspat_binder_kind * FStar_Reflection_Types.term), unit) + FStar_Tactics_Effect.tac_repr) + = + fun binder -> + FStar_Tactics_Effect.tac_bind + (Prims.mk_range "FStar.Tactics.PatternMatching.fst" + (Prims.of_int (584)) (Prims.of_int (16)) (Prims.of_int (584)) + (Prims.of_int (19))) + (Prims.mk_range "FStar.Tactics.PatternMatching.fst" + (Prims.of_int (585)) (Prims.of_int (2)) (Prims.of_int (596)) + (Prims.of_int (34))) + (FStar_Tactics_Effect.lift_div_tac (fun uu___ -> "v")) + (fun uu___ -> + (fun varname1 -> + Obj.magic + (FStar_Tactics_Effect.tac_bind + (Prims.mk_range "FStar.Tactics.PatternMatching.fst" + (Prims.of_int (585)) (Prims.of_int (16)) + (Prims.of_int (585)) (Prims.of_int (48))) + (Prims.mk_range "FStar.Tactics.PatternMatching.fst" + (Prims.of_int (586)) (Prims.of_int (2)) + (Prims.of_int (596)) (Prims.of_int (34))) + (FStar_Tactics_Effect.lift_div_tac + (fun uu___ -> PApp ((PQn hyp_qn), (PVar varname1)))) + (fun uu___ -> + (fun hyp_pat -> + Obj.magic + (FStar_Tactics_Effect.tac_bind + (Prims.mk_range + "FStar.Tactics.PatternMatching.fst" + (Prims.of_int (586)) (Prims.of_int (17)) + (Prims.of_int (586)) (Prims.of_int (50))) + (Prims.mk_range + "FStar.Tactics.PatternMatching.fst" + (Prims.of_int (588)) (Prims.of_int (2)) + (Prims.of_int (596)) (Prims.of_int (34))) + (FStar_Tactics_Effect.lift_div_tac + (fun uu___ -> + PApp ((PQn goal_qn), (PVar varname1)))) + (fun uu___ -> + (fun goal_pat -> + Obj.magic + (FStar_Tactics_Effect.tac_bind + (Prims.mk_range + "FStar.Tactics.PatternMatching.fst" + (Prims.of_int (588)) + (Prims.of_int (12)) + (Prims.of_int (588)) + (Prims.of_int (33))) + (Prims.mk_range + "FStar.Tactics.PatternMatching.fst" + (Prims.of_int (589)) + (Prims.of_int (2)) + (Prims.of_int (596)) + (Prims.of_int (34))) + (FStar_Tactics_Effect.lift_div_tac + (fun uu___ -> + FStar_Reflection_Derived.type_of_binder + binder)) + (fun uu___ -> + (fun typ -> + Obj.magic + (FStar_Tactics_Effect.tac_bind + (Prims.mk_range + "FStar.Tactics.PatternMatching.fst" + (Prims.of_int (589)) + (Prims.of_int (8)) + (Prims.of_int (589)) + (Prims.of_int (34))) + (Prims.mk_range + "FStar.Tactics.PatternMatching.fst" + (Prims.of_int (589)) + (Prims.of_int (2)) + (Prims.of_int (596)) + (Prims.of_int (34))) + (Obj.magic + (interp_pattern hyp_pat + typ)) + (fun uu___ -> + (fun uu___ -> + match uu___ with + | Success + ((uu___1, + hyp_typ)::[]) + -> + Obj.magic + (Obj.repr + (FStar_Tactics_Effect.lift_div_tac + ( + fun + uu___2 -> + (ABKHyp, + hyp_typ)))) + | Success uu___1 -> + Obj.magic + (Obj.repr + (FStar_Tactics_Derived.fail + "classifiy_abspat_binder: impossible (1)")) + | Failure uu___1 -> + Obj.magic + (Obj.repr + (FStar_Tactics_Effect.tac_bind + ( + Prims.mk_range + "FStar.Tactics.PatternMatching.fst" + (Prims.of_int (593)) + (Prims.of_int (10)) + (Prims.of_int (593)) + (Prims.of_int (37))) + ( + Prims.mk_range + "FStar.Tactics.PatternMatching.fst" + (Prims.of_int (593)) + (Prims.of_int (4)) + (Prims.of_int (596)) + (Prims.of_int (34))) + ( + Obj.magic + (interp_pattern + goal_pat + typ)) + ( + fun + uu___2 -> + (fun + uu___2 -> + match uu___2 + with + | + Success + ((uu___3, + goal_typ)::[]) + -> + Obj.magic + (Obj.repr + (FStar_Tactics_Effect.lift_div_tac + (fun + uu___4 -> + (ABKGoal, + goal_typ)))) + | + Success + uu___3 -> + Obj.magic + (Obj.repr + (FStar_Tactics_Derived.fail + "classifiy_abspat_binder: impossible (2)")) + | + Failure + uu___3 -> + Obj.magic + (Obj.repr + (FStar_Tactics_Effect.lift_div_tac + (fun + uu___4 -> + ((ABKVar + typ), + typ))))) + uu___2)))) + uu___))) uu___))) + uu___))) uu___))) uu___) +let rec (binders_and_body_of_abs : + FStar_Reflection_Types.term -> + ((FStar_Reflection_Types.binders * FStar_Reflection_Types.term), + unit) FStar_Tactics_Effect.tac_repr) + = + fun tm -> + FStar_Tactics_Effect.tac_bind + (Prims.mk_range "FStar.Tactics.PatternMatching.fst" + (Prims.of_int (600)) (Prims.of_int (8)) (Prims.of_int (600)) + (Prims.of_int (18))) + (Prims.mk_range "FStar.Tactics.PatternMatching.fst" + (Prims.of_int (600)) (Prims.of_int (2)) (Prims.of_int (604)) + (Prims.of_int (15))) (Obj.magic (FStar_Tactics_Builtins.inspect tm)) + (fun uu___ -> + (fun uu___ -> + match uu___ with + | FStar_Reflection_Data.Tv_Abs (binder, tm1) -> + Obj.magic + (Obj.repr + (FStar_Tactics_Effect.tac_bind + (Prims.mk_range "FStar.Tactics.PatternMatching.fst" + (Prims.of_int (602)) (Prims.of_int (24)) + (Prims.of_int (602)) (Prims.of_int (50))) + (Prims.mk_range "FStar.Tactics.PatternMatching.fst" + (Prims.of_int (602)) (Prims.of_int (4)) + (Prims.of_int (603)) (Prims.of_int (27))) + (Obj.magic (binders_and_body_of_abs tm1)) + (fun uu___1 -> + FStar_Tactics_Effect.lift_div_tac + (fun uu___2 -> + match uu___1 with + | (binders, body) -> + ((binder :: binders), body))))) + | uu___1 -> + Obj.magic + (Obj.repr + (FStar_Tactics_Effect.lift_div_tac + (fun uu___2 -> ([], tm))))) uu___) +let (cleanup_abspat : + FStar_Reflection_Types.term -> + (FStar_Reflection_Types.term, unit) FStar_Tactics_Effect.tac_repr) + = fun t -> FStar_Tactics_Derived.norm_term [] t +let (matching_problem_of_abs : + FStar_Reflection_Types.term -> + ((matching_problem * abspat_continuation), unit) + FStar_Tactics_Effect.tac_repr) + = + fun tm -> + FStar_Tactics_Effect.tac_bind + (Prims.mk_range "FStar.Tactics.PatternMatching.fst" + (Prims.of_int (626)) (Prims.of_int (22)) (Prims.of_int (626)) + (Prims.of_int (65))) + (Prims.mk_range "FStar.Tactics.PatternMatching.fst" + (Prims.of_int (626)) (Prims.of_int (2)) (Prims.of_int (665)) + (Prims.of_int (18))) + (Obj.magic + (FStar_Tactics_Effect.tac_bind + (Prims.mk_range "FStar.Tactics.PatternMatching.fst" + (Prims.of_int (626)) (Prims.of_int (46)) (Prims.of_int (626)) + (Prims.of_int (65))) + (Prims.mk_range "FStar.Tactics.PatternMatching.fst" + (Prims.of_int (626)) (Prims.of_int (22)) (Prims.of_int (626)) + (Prims.of_int (65))) (Obj.magic (cleanup_abspat tm)) + (fun uu___ -> + (fun uu___ -> Obj.magic (binders_and_body_of_abs uu___)) uu___))) + (fun uu___ -> + (fun uu___ -> + match uu___ with + | (binders, body) -> + Obj.magic + (FStar_Tactics_Effect.tac_bind + (Prims.mk_range "FStar.Tactics.PatternMatching.fst" + (Prims.of_int (627)) (Prims.of_int (2)) + (Prims.of_int (628)) (Prims.of_int (66))) + (Prims.mk_range "FStar.Tactics.PatternMatching.fst" + (Prims.of_int (630)) (Prims.of_int (2)) + (Prims.of_int (665)) (Prims.of_int (18))) + (Obj.magic + (FStar_Tactics_Effect.tac_bind + (Prims.mk_range + "FStar.Tactics.PatternMatching.fst" + (Prims.of_int (627)) (Prims.of_int (8)) + (Prims.of_int (628)) (Prims.of_int (66))) + (Prims.mk_range + "FStar.Tactics.PatternMatching.fst" + (Prims.of_int (627)) (Prims.of_int (2)) + (Prims.of_int (628)) (Prims.of_int (66))) + (Obj.magic + (FStar_Tactics_Effect.tac_bind + (Prims.mk_range + "FStar.Tactics.PatternMatching.fst" + (Prims.of_int (627)) (Prims.of_int (27)) + (Prims.of_int (628)) (Prims.of_int (65))) + (Prims.mk_range "prims.fst" + (Prims.of_int (606)) (Prims.of_int (19)) + (Prims.of_int (606)) (Prims.of_int (31))) + (Obj.magic + (FStar_Tactics_Effect.tac_bind + (Prims.mk_range + "FStar.Tactics.PatternMatching.fst" + (Prims.of_int (628)) + (Prims.of_int (9)) + (Prims.of_int (628)) + (Prims.of_int (64))) + (Prims.mk_range + "FStar.Tactics.PatternMatching.fst" + (Prims.of_int (627)) + (Prims.of_int (27)) + (Prims.of_int (628)) + (Prims.of_int (65))) + (Obj.magic + (FStar_Tactics_Util.map + (fun uu___1 -> + (fun b -> + Obj.magic + (FStar_Tactics_Effect.lift_div_tac + (fun uu___1 -> + FStar_Reflection_Derived.name_of_binder + b))) uu___1) + binders)) + (fun uu___1 -> + FStar_Tactics_Effect.lift_div_tac + (fun uu___2 -> + FStar_String.concat ", " + uu___1)))) + (fun uu___1 -> + FStar_Tactics_Effect.lift_div_tac + (fun uu___2 -> + Prims.strcat "Got binders: " uu___1)))) + (fun uu___1 -> + (fun uu___1 -> Obj.magic (debug uu___1)) uu___1))) + (fun uu___1 -> + (fun uu___1 -> + Obj.magic + (FStar_Tactics_Effect.tac_bind + (Prims.mk_range + "FStar.Tactics.PatternMatching.fst" + (Prims.of_int (631)) (Prims.of_int (4)) + (Prims.of_int (637)) (Prims.of_int (13))) + (Prims.mk_range + "FStar.Tactics.PatternMatching.fst" + (Prims.of_int (639)) (Prims.of_int (2)) + (Prims.of_int (665)) (Prims.of_int (18))) + (Obj.magic + (FStar_Tactics_Util.map + (fun binder -> + FStar_Tactics_Effect.tac_bind + (Prims.mk_range + "FStar.Tactics.PatternMatching.fst" + (Prims.of_int (632)) + (Prims.of_int (22)) + (Prims.of_int (632)) + (Prims.of_int (43))) + (Prims.mk_range + "FStar.Tactics.PatternMatching.fst" + (Prims.of_int (633)) + (Prims.of_int (8)) + (Prims.of_int (636)) + (Prims.of_int (43))) + (FStar_Tactics_Effect.lift_div_tac + (fun uu___2 -> + FStar_Reflection_Derived.name_of_binder + binder)) + (fun uu___2 -> + (fun bv_name -> + Obj.magic + (FStar_Tactics_Effect.tac_bind + (Prims.mk_range + "FStar.Tactics.PatternMatching.fst" + (Prims.of_int (633)) + (Prims.of_int (8)) + (Prims.of_int (634)) + (Prims.of_int (54))) + (Prims.mk_range + "FStar.Tactics.PatternMatching.fst" + (Prims.of_int (635)) + (Prims.of_int (8)) + (Prims.of_int (636)) + (Prims.of_int (43))) + (Obj.magic + (FStar_Tactics_Effect.tac_bind + (Prims.mk_range + "FStar.Tactics.PatternMatching.fst" + (Prims.of_int (633)) + (Prims.of_int (14)) + (Prims.of_int (634)) + (Prims.of_int (54))) + (Prims.mk_range + "FStar.Tactics.PatternMatching.fst" + (Prims.of_int (633)) + (Prims.of_int (8)) + (Prims.of_int (634)) + (Prims.of_int (54))) + (Obj.magic + (FStar_Tactics_Effect.tac_bind + (Prims.mk_range + "FStar.Tactics.PatternMatching.fst" + (Prims.of_int (633)) + (Prims.of_int (32)) + (Prims.of_int (634)) + (Prims.of_int (53))) + (Prims.mk_range + "prims.fst" + (Prims.of_int (606)) + (Prims.of_int (19)) + (Prims.of_int (606)) + (Prims.of_int (31))) + (Obj.magic + (FStar_Tactics_Effect.tac_bind + (Prims.mk_range + "FStar.Tactics.PatternMatching.fst" + (Prims.of_int (633)) + (Prims.of_int (42)) + (Prims.of_int (634)) + (Prims.of_int (53))) + (Prims.mk_range + "prims.fst" + (Prims.of_int (606)) + (Prims.of_int (19)) + (Prims.of_int (606)) + (Prims.of_int (31))) + (Obj.magic + (FStar_Tactics_Effect.tac_bind + (Prims.mk_range + "FStar.Tactics.PatternMatching.fst" + (Prims.of_int (634)) + (Prims.of_int (15)) + (Prims.of_int (634)) + (Prims.of_int (53))) + (Prims.mk_range + "prims.fst" + (Prims.of_int (606)) + (Prims.of_int (19)) + (Prims.of_int (606)) + (Prims.of_int (31))) + (Obj.magic + (FStar_Tactics_Builtins.term_to_string + (FStar_Reflection_Derived.type_of_binder + binder))) + (fun + uu___2 -> + FStar_Tactics_Effect.lift_div_tac + (fun + uu___3 -> + Prims.strcat + "; type is " + uu___2)))) + (fun + uu___2 -> + FStar_Tactics_Effect.lift_div_tac + (fun + uu___3 -> + Prims.strcat + bv_name + uu___2)))) + (fun uu___2 + -> + FStar_Tactics_Effect.lift_div_tac + (fun + uu___3 -> + Prims.strcat + "Got binder: " + uu___2)))) + (fun uu___2 -> + (fun uu___2 -> + Obj.magic + ( + debug + uu___2)) + uu___2))) + (fun uu___2 -> + (fun uu___2 -> + Obj.magic + (FStar_Tactics_Effect.tac_bind + (Prims.mk_range + "FStar.Tactics.PatternMatching.fst" + (Prims.of_int (635)) + (Prims.of_int (31)) + (Prims.of_int (635)) + (Prims.of_int (60))) + (Prims.mk_range + "FStar.Tactics.PatternMatching.fst" + (Prims.of_int (635)) + (Prims.of_int (8)) + (Prims.of_int (636)) + (Prims.of_int (43))) + (Obj.magic + ( + classify_abspat_binder + binder)) + (fun uu___3 + -> + FStar_Tactics_Effect.lift_div_tac + (fun + uu___4 -> + match uu___3 + with + | + (binder_kind, + typ) -> + (binder, + bv_name, + binder_kind, + typ))))) + uu___2))) uu___2)) + binders)) + (fun uu___2 -> + (fun classified_binders -> + Obj.magic + (FStar_Tactics_Effect.tac_bind + (Prims.mk_range + "FStar.Tactics.PatternMatching.fst" + (Prims.of_int (640)) + (Prims.of_int (4)) + (Prims.of_int (651)) + (Prims.of_int (24))) + (Prims.mk_range + "FStar.Tactics.PatternMatching.fst" + (Prims.of_int (653)) + (Prims.of_int (2)) + (Prims.of_int (665)) + (Prims.of_int (18))) + (Obj.magic + (FStar_Tactics_Util.fold_left + (fun problem -> + fun uu___2 -> + match uu___2 with + | (binder, bv_name, + binder_kind, typ) -> + FStar_Tactics_Effect.tac_bind + (Prims.mk_range + "FStar.Tactics.PatternMatching.fst" + (Prims.of_int (642)) + (Prims.of_int (9)) + (Prims.of_int (644)) + (Prims.of_int (52))) + (Prims.mk_range + "FStar.Tactics.PatternMatching.fst" + (Prims.of_int (645)) + (Prims.of_int (9)) + (Prims.of_int (649)) + (Prims.of_int (75))) + (Obj.magic + (FStar_Tactics_Effect.tac_bind + (Prims.mk_range + "FStar.Tactics.PatternMatching.fst" + (Prims.of_int (642)) + (Prims.of_int (15)) + (Prims.of_int (644)) + (Prims.of_int (52))) + (Prims.mk_range + "FStar.Tactics.PatternMatching.fst" + (Prims.of_int (642)) + (Prims.of_int (9)) + (Prims.of_int (644)) + (Prims.of_int (52))) + (Obj.magic + (FStar_Tactics_Effect.tac_bind + (Prims.mk_range + "FStar.Tactics.PatternMatching.fst" + (Prims.of_int (642)) + (Prims.of_int (38)) + (Prims.of_int (644)) + (Prims.of_int (51))) + (Prims.mk_range + "prims.fst" + (Prims.of_int (606)) + (Prims.of_int (19)) + (Prims.of_int (606)) + (Prims.of_int (31))) + (Obj.magic + (FStar_Tactics_Effect.tac_bind + (Prims.mk_range + "FStar.Tactics.PatternMatching.fst" + (Prims.of_int (643)) + (Prims.of_int (16)) + (Prims.of_int (644)) + (Prims.of_int (51))) + (Prims.mk_range + "prims.fst" + (Prims.of_int (606)) + (Prims.of_int (19)) + (Prims.of_int (606)) + (Prims.of_int (31))) + (Obj.magic + (FStar_Tactics_Effect.tac_bind + (Prims.mk_range + "FStar.Tactics.PatternMatching.fst" + (Prims.of_int (643)) + (Prims.of_int (37)) + (Prims.of_int (644)) + (Prims.of_int (51))) + (Prims.mk_range + "prims.fst" + (Prims.of_int (606)) + (Prims.of_int (19)) + (Prims.of_int (606)) + (Prims.of_int (31))) + (Obj.magic + (FStar_Tactics_Effect.tac_bind + (Prims.mk_range + "FStar.Tactics.PatternMatching.fst" + (Prims.of_int (644)) + (Prims.of_int (16)) + (Prims.of_int (644)) + (Prims.of_int (51))) + (Prims.mk_range + "prims.fst" + (Prims.of_int (606)) + (Prims.of_int (19)) + (Prims.of_int (606)) + (Prims.of_int (31))) + (Obj.magic + (FStar_Tactics_Effect.tac_bind + (Prims.mk_range + "FStar.Tactics.PatternMatching.fst" + (Prims.of_int (644)) + (Prims.of_int (33)) + (Prims.of_int (644)) + (Prims.of_int (51))) + (Prims.mk_range + "prims.fst" + (Prims.of_int (606)) + (Prims.of_int (19)) + (Prims.of_int (606)) + (Prims.of_int (31))) + (Obj.magic + (FStar_Tactics_Builtins.term_to_string + typ)) + (fun + uu___3 -> + FStar_Tactics_Effect.lift_div_tac + (fun + uu___4 -> + Prims.strcat + ", with type " + uu___3)))) + (fun + uu___3 -> + FStar_Tactics_Effect.lift_div_tac + (fun + uu___4 -> + Prims.strcat + (string_of_abspat_binder_kind + binder_kind) + uu___3)))) + (fun + uu___3 -> + FStar_Tactics_Effect.lift_div_tac + (fun + uu___4 -> + Prims.strcat + ", classified as " + uu___3)))) + (fun + uu___3 -> + FStar_Tactics_Effect.lift_div_tac + (fun + uu___4 -> + Prims.strcat + (FStar_Reflection_Derived.name_of_binder + binder) + uu___3)))) + (fun + uu___3 -> + FStar_Tactics_Effect.lift_div_tac + (fun + uu___4 -> + Prims.strcat + "Compiling binder " + uu___3)))) + (fun uu___3 + -> + (fun + uu___3 -> + Obj.magic + (debug + uu___3)) + uu___3))) + (fun uu___3 -> + (fun uu___3 -> + match binder_kind + with + | ABKVar + uu___4 -> + Obj.magic + (Obj.repr + (FStar_Tactics_Effect.lift_div_tac + (fun + uu___5 -> + { + mp_vars = + (bv_name + :: + (problem.mp_vars)); + mp_hyps = + (problem.mp_hyps); + mp_goal = + (problem.mp_goal) + }))) + | ABKHyp -> + Obj.magic + (Obj.repr + (FStar_Tactics_Effect.tac_bind + (Prims.mk_range + "FStar.Tactics.PatternMatching.fst" + (Prims.of_int (648)) + (Prims.of_int (45)) + (Prims.of_int (648)) + (Prims.of_int (47))) + (Prims.mk_range + "FStar.Tactics.PatternMatching.fst" + (Prims.of_int (647)) + (Prims.of_int (23)) + (Prims.of_int (648)) + (Prims.of_int (63))) + (Obj.magic + (FStar_Tactics_Effect.tac_bind + (Prims.mk_range + "FStar.Tactics.PatternMatching.fst" + (Prims.of_int (647)) + (Prims.of_int (46)) + (Prims.of_int (647)) + (Prims.of_int (78))) + (Prims.mk_range + "FStar.Tactics.PatternMatching.fst" + (Prims.of_int (648)) + (Prims.of_int (45)) + (Prims.of_int (648)) + (Prims.of_int (47))) + (Obj.magic + (FStar_Tactics_Effect.tac_bind + (Prims.mk_range + "FStar.Tactics.PatternMatching.fst" + (Prims.of_int (647)) + (Prims.of_int (56)) + (Prims.of_int (647)) + (Prims.of_int (77))) + (Prims.mk_range + "FStar.Tactics.PatternMatching.fst" + (Prims.of_int (647)) + (Prims.of_int (46)) + (Prims.of_int (647)) + (Prims.of_int (78))) + (Obj.magic + (pattern_of_term + typ)) + (fun + uu___4 -> + FStar_Tactics_Effect.lift_div_tac + (fun + uu___5 -> + (bv_name, + uu___4))))) + (fun + uu___4 -> + FStar_Tactics_Effect.lift_div_tac + (fun + uu___5 -> + uu___4 :: + (problem.mp_hyps))))) + (fun + uu___4 -> + FStar_Tactics_Effect.lift_div_tac + (fun + uu___5 -> + { + mp_vars = + (problem.mp_vars); + mp_hyps = + uu___4; + mp_goal = + (problem.mp_goal) + })))) + | ABKGoal + -> + Obj.magic + (Obj.repr + (FStar_Tactics_Effect.tac_bind + (Prims.mk_range + "FStar.Tactics.PatternMatching.fst" + (Prims.of_int (649)) + (Prims.of_int (47)) + (Prims.of_int (649)) + (Prims.of_int (73))) + (Prims.mk_range + "FStar.Tactics.PatternMatching.fst" + (Prims.of_int (649)) + (Prims.of_int (24)) + (Prims.of_int (649)) + (Prims.of_int (73))) + (Obj.magic + (FStar_Tactics_Effect.tac_bind + (Prims.mk_range + "FStar.Tactics.PatternMatching.fst" + (Prims.of_int (649)) + (Prims.of_int (52)) + (Prims.of_int (649)) + (Prims.of_int (73))) + (Prims.mk_range + "FStar.Tactics.PatternMatching.fst" + (Prims.of_int (649)) + (Prims.of_int (47)) + (Prims.of_int (649)) + (Prims.of_int (73))) + (Obj.magic + (pattern_of_term + typ)) + (fun + uu___4 -> + FStar_Tactics_Effect.lift_div_tac + (fun + uu___5 -> + FStar_Pervasives_Native.Some + uu___4)))) + (fun + uu___4 -> + FStar_Tactics_Effect.lift_div_tac + (fun + uu___5 -> + { + mp_vars = + (problem.mp_vars); + mp_hyps = + (problem.mp_hyps); + mp_goal = + uu___4 + }))))) + uu___3)) + { + mp_vars = []; + mp_hyps = []; + mp_goal = + FStar_Pervasives_Native.None + } classified_binders)) + (fun uu___2 -> + (fun problem -> + Obj.magic + (FStar_Tactics_Effect.tac_bind + (Prims.mk_range + "FStar.Tactics.PatternMatching.fst" + (Prims.of_int (654)) + (Prims.of_int (4)) + (Prims.of_int (657)) + (Prims.of_int (57))) + (Prims.mk_range + "FStar.Tactics.PatternMatching.fst" + (Prims.of_int (659)) + (Prims.of_int (2)) + (Prims.of_int (665)) + (Prims.of_int (18))) + (Obj.magic + (FStar_Tactics_Effect.tac_bind + (Prims.mk_range + "FStar.Tactics.PatternMatching.fst" + (Prims.of_int (655)) + (Prims.of_int (4)) + (Prims.of_int (656)) + (Prims.of_int (51))) + (Prims.mk_range + "FStar.Tactics.PatternMatching.fst" + (Prims.of_int (657)) + (Prims.of_int (4)) + (Prims.of_int (657)) + (Prims.of_int (57))) + (FStar_Tactics_Effect.lift_div_tac + (fun uu___3 -> + fun uu___2 + -> + (fun + uu___2 -> + fun xx -> + Obj.magic + (FStar_Tactics_Effect.lift_div_tac + (fun + uu___3 -> + match xx + with + | + (binder, + xx1, + binder_kind, + yy) -> + { + asa_name + = binder; + asa_kind + = + binder_kind + }))) + uu___3 + uu___2)) + (fun uu___2 -> + (fun + abspat_argspec_of_binder + -> + Obj.magic + ( + FStar_Tactics_Effect.tac_bind + (Prims.mk_range + "FStar.Tactics.PatternMatching.fst" + (Prims.of_int (657)) + (Prims.of_int (5)) + (Prims.of_int (657)) + (Prims.of_int (52))) + (Prims.mk_range + "FStar.Tactics.PatternMatching.fst" + (Prims.of_int (657)) + (Prims.of_int (4)) + (Prims.of_int (657)) + (Prims.of_int (57))) + (Obj.magic + (FStar_Tactics_Util.map + abspat_argspec_of_binder + classified_binders)) + (fun + uu___2 -> + FStar_Tactics_Effect.lift_div_tac + (fun + uu___3 -> + (uu___2, + tm))))) + uu___2))) + (fun uu___2 -> + (fun continuation -> + Obj.magic + (FStar_Tactics_Effect.tac_bind + (Prims.mk_range + "FStar.Tactics.PatternMatching.fst" + (Prims.of_int (660)) + (Prims.of_int (6)) + (Prims.of_int (662)) + (Prims.of_int (31))) + (Prims.mk_range + "FStar.Tactics.PatternMatching.fst" + (Prims.of_int (664)) + (Prims.of_int (2)) + (Prims.of_int (665)) + (Prims.of_int (18))) + (FStar_Tactics_Effect.lift_div_tac + ( + fun + uu___2 -> + { + mp_vars = + (FStar_List_Tot_Base.rev + problem.mp_vars); + mp_hyps = + (FStar_List_Tot_Base.rev + problem.mp_hyps); + mp_goal = + (problem.mp_goal) + })) + (fun uu___2 + -> + (fun mp + -> + Obj.magic + (FStar_Tactics_Effect.tac_bind + (Prims.mk_range + "FStar.Tactics.PatternMatching.fst" + (Prims.of_int (664)) + (Prims.of_int (2)) + (Prims.of_int (664)) + (Prims.of_int (68))) + (Prims.mk_range + "FStar.Tactics.PatternMatching.fst" + (Prims.of_int (665)) + (Prims.of_int (2)) + (Prims.of_int (665)) + (Prims.of_int (18))) + (Obj.magic + (debug + (Prims.strcat + "Got matching problem: " + (string_of_matching_problem + mp)))) + (fun + uu___2 -> + FStar_Tactics_Effect.lift_div_tac + (fun + uu___3 -> + (mp, + continuation))))) + uu___2))) + uu___2))) uu___2))) + uu___2))) uu___1))) uu___) +let (arg_type_of_binder_kind : + abspat_binder_kind -> + (FStar_Reflection_Types.term, unit) FStar_Tactics_Effect.tac_repr) + = + fun uu___ -> + (fun binder_kind -> + Obj.magic + (FStar_Tactics_Effect.lift_div_tac + (fun uu___ -> + match binder_kind with + | ABKVar typ -> typ + | ABKHyp -> + FStar_Reflection_Builtins.pack_ln + (FStar_Reflection_Data.Tv_FVar + (FStar_Reflection_Builtins.pack_fv + ["FStar"; "Reflection"; "Types"; "binder"])) + | ABKGoal -> + FStar_Reflection_Builtins.pack_ln + (FStar_Reflection_Data.Tv_FVar + (FStar_Reflection_Builtins.pack_fv ["Prims"; "unit"]))))) + uu___ +let (locate_fn_of_binder_kind : + abspat_binder_kind -> FStar_Reflection_Types.term) = + fun binder_kind -> + match binder_kind with + | ABKVar uu___ -> + FStar_Reflection_Builtins.pack_ln + (FStar_Reflection_Data.Tv_FVar + (FStar_Reflection_Builtins.pack_fv + ["FStar"; "Tactics"; "PatternMatching"; "ms_locate_var"])) + | ABKHyp -> + FStar_Reflection_Builtins.pack_ln + (FStar_Reflection_Data.Tv_FVar + (FStar_Reflection_Builtins.pack_fv + ["FStar"; "Tactics"; "PatternMatching"; "ms_locate_hyp"])) + | ABKGoal -> + FStar_Reflection_Builtins.pack_ln + (FStar_Reflection_Data.Tv_FVar + (FStar_Reflection_Builtins.pack_fv + ["FStar"; "Tactics"; "PatternMatching"; "ms_locate_unit"])) +let (abspat_arg_of_abspat_argspec : + FStar_Reflection_Types.term -> + abspat_argspec -> + (FStar_Reflection_Types.term, unit) FStar_Tactics_Effect.tac_repr) + = + fun solution_term -> + fun argspec -> + FStar_Tactics_Effect.tac_bind + (Prims.mk_range "FStar.Tactics.PatternMatching.fst" + (Prims.of_int (692)) (Prims.of_int (15)) (Prims.of_int (692)) + (Prims.of_int (56))) + (Prims.mk_range "FStar.Tactics.PatternMatching.fst" + (Prims.of_int (693)) (Prims.of_int (2)) (Prims.of_int (696)) + (Prims.of_int (27))) + (FStar_Tactics_Effect.lift_div_tac + (fun uu___ -> locate_fn_of_binder_kind argspec.asa_kind)) + (fun uu___ -> + (fun loc_fn -> + Obj.magic + (FStar_Tactics_Effect.tac_bind + (Prims.mk_range "FStar.Tactics.PatternMatching.fst" + (Prims.of_int (693)) (Prims.of_int (16)) + (Prims.of_int (693)) (Prims.of_int (76))) + (Prims.mk_range "FStar.Tactics.PatternMatching.fst" + (Prims.of_int (694)) (Prims.of_int (2)) + (Prims.of_int (696)) (Prims.of_int (27))) + (Obj.magic + (FStar_Tactics_Builtins.pack + (FStar_Reflection_Data.Tv_Const + (FStar_Reflection_Data.C_String + (FStar_Reflection_Derived.name_of_binder + argspec.asa_name))))) + (fun uu___ -> + (fun name_tm -> + Obj.magic + (FStar_Tactics_Effect.tac_bind + (Prims.mk_range + "FStar.Tactics.PatternMatching.fst" + (Prims.of_int (694)) (Prims.of_int (20)) + (Prims.of_int (695)) (Prims.of_int (72))) + (Prims.mk_range + "FStar.Tactics.PatternMatching.fst" + (Prims.of_int (696)) (Prims.of_int (2)) + (Prims.of_int (696)) (Prims.of_int (27))) + (Obj.magic + (FStar_Tactics_Effect.tac_bind + (Prims.mk_range + "FStar.Tactics.PatternMatching.fst" + (Prims.of_int (694)) + (Prims.of_int (21)) + (Prims.of_int (694)) + (Prims.of_int (75))) + (Prims.mk_range + "FStar.Tactics.PatternMatching.fst" + (Prims.of_int (694)) + (Prims.of_int (20)) + (Prims.of_int (695)) + (Prims.of_int (72))) + (Obj.magic + (FStar_Tactics_Effect.tac_bind + (Prims.mk_range + "FStar.Tactics.PatternMatching.fst" + (Prims.of_int (694)) + (Prims.of_int (22)) + (Prims.of_int (694)) + (Prims.of_int (62))) + (Prims.mk_range + "FStar.Tactics.PatternMatching.fst" + (Prims.of_int (694)) + (Prims.of_int (21)) + (Prims.of_int (694)) + (Prims.of_int (75))) + (Obj.magic + (arg_type_of_binder_kind + argspec.asa_kind)) + (fun uu___ -> + FStar_Tactics_Effect.lift_div_tac + (fun uu___1 -> + (uu___, + FStar_Reflection_Data.Q_Explicit))))) + (fun uu___ -> + FStar_Tactics_Effect.lift_div_tac + (fun uu___1 -> + [uu___; + (solution_term, + FStar_Reflection_Data.Q_Explicit); + (name_tm, + FStar_Reflection_Data.Q_Explicit)])))) + (fun locate_args -> + FStar_Tactics_Effect.lift_div_tac + (fun uu___ -> + FStar_Reflection_Derived.mk_app loc_fn + locate_args)))) uu___))) uu___) +let rec (hoist_and_apply : + FStar_Reflection_Types.term -> + FStar_Reflection_Types.term Prims.list -> + FStar_Reflection_Data.argv Prims.list -> + (FStar_Reflection_Types.term, unit) FStar_Tactics_Effect.tac_repr) + = + fun uu___2 -> + fun uu___1 -> + fun uu___ -> + (fun head -> + fun arg_terms -> + fun hoisted_args -> + match arg_terms with + | [] -> + Obj.magic + (Obj.repr + (FStar_Tactics_Effect.lift_div_tac + (fun uu___ -> + FStar_Reflection_Derived.mk_app head + (FStar_List_Tot_Base.rev hoisted_args)))) + | arg_term::rest -> + Obj.magic + (Obj.repr + (FStar_Tactics_Effect.tac_bind + (Prims.mk_range + "FStar.Tactics.PatternMatching.fst" + (Prims.of_int (707)) (Prims.of_int (12)) + (Prims.of_int (707)) (Prims.of_int (40))) + (Prims.mk_range + "FStar.Tactics.PatternMatching.fst" + (Prims.of_int (708)) (Prims.of_int (4)) + (Prims.of_int (709)) (Prims.of_int (113))) + (FStar_Tactics_Effect.lift_div_tac + (fun uu___ -> + FStar_List_Tot_Base.length hoisted_args)) + (fun uu___ -> + (fun n -> + Obj.magic + (FStar_Tactics_Effect.tac_bind + (Prims.mk_range + "FStar.Tactics.PatternMatching.fst" + (Prims.of_int (708)) + (Prims.of_int (13)) + (Prims.of_int (708)) + (Prims.of_int (71))) + (Prims.mk_range + "FStar.Tactics.PatternMatching.fst" + (Prims.of_int (709)) + (Prims.of_int (4)) + (Prims.of_int (709)) + (Prims.of_int (113))) + (Obj.magic + (FStar_Tactics_Effect.tac_bind + (Prims.mk_range + "FStar.Tactics.PatternMatching.fst" + (Prims.of_int (708)) + (Prims.of_int (54)) + (Prims.of_int (708)) + (Prims.of_int (71))) + (Prims.mk_range + "FStar.Tactics.PatternMatching.fst" + (Prims.of_int (708)) + (Prims.of_int (13)) + (Prims.of_int (708)) + (Prims.of_int (71))) + (Obj.magic + (FStar_Tactics_Builtins.pack + FStar_Reflection_Data.Tv_Unknown)) + (fun uu___ -> + (fun uu___ -> + Obj.magic + (FStar_Tactics_Builtins.fresh_bv_named + (Prims.strcat "x" + (Prims.string_of_int + n)) uu___)) + uu___))) + (fun uu___ -> + (fun bv -> + Obj.magic + (FStar_Tactics_Effect.tac_bind + (Prims.mk_range + "FStar.Tactics.PatternMatching.fst" + (Prims.of_int (709)) + (Prims.of_int (9)) + (Prims.of_int (709)) + (Prims.of_int (113))) + (Prims.mk_range + "FStar.Tactics.PatternMatching.fst" + (Prims.of_int (709)) + (Prims.of_int (4)) + (Prims.of_int (709)) + (Prims.of_int (113))) + (Obj.magic + (FStar_Tactics_Effect.tac_bind + (Prims.mk_range + "FStar.Tactics.PatternMatching.fst" + (Prims.of_int (709)) + (Prims.of_int (38)) + (Prims.of_int (709)) + (Prims.of_int (112))) + (Prims.mk_range + "FStar.Tactics.PatternMatching.fst" + (Prims.of_int (709)) + (Prims.of_int (9)) + (Prims.of_int (709)) + (Prims.of_int (113))) + (Obj.magic + (FStar_Tactics_Effect.tac_bind + (Prims.mk_range + "FStar.Tactics.PatternMatching.fst" + (Prims.of_int (709)) + (Prims.of_int (65)) + (Prims.of_int (709)) + (Prims.of_int (111))) + (Prims.mk_range + "FStar.Tactics.PatternMatching.fst" + (Prims.of_int (709)) + (Prims.of_int (38)) + (Prims.of_int (709)) + (Prims.of_int (112))) + (Obj.magic + (FStar_Tactics_Effect.tac_bind + (Prims.mk_range + "FStar.Tactics.PatternMatching.fst" + (Prims.of_int (709)) + (Prims.of_int (66)) + (Prims.of_int (709)) + (Prims.of_int (96))) + (Prims.mk_range + "FStar.Tactics.PatternMatching.fst" + (Prims.of_int (709)) + (Prims.of_int (65)) + (Prims.of_int (709)) + (Prims.of_int (111))) + (Obj.magic + (FStar_Tactics_Effect.tac_bind + (Prims.mk_range + "FStar.Tactics.PatternMatching.fst" + (Prims.of_int (709)) + (Prims.of_int (67)) + (Prims.of_int (709)) + (Prims.of_int (83))) + (Prims.mk_range + "FStar.Tactics.PatternMatching.fst" + (Prims.of_int (709)) + (Prims.of_int (66)) + (Prims.of_int (709)) + (Prims.of_int (96))) + (Obj.magic + (FStar_Tactics_Builtins.pack + (FStar_Reflection_Data.Tv_Var + bv))) + (fun + uu___ -> + FStar_Tactics_Effect.lift_div_tac + (fun + uu___1 -> + (uu___, + FStar_Reflection_Data.Q_Explicit))))) + (fun uu___ + -> + FStar_Tactics_Effect.lift_div_tac + (fun + uu___1 -> + uu___ :: + hoisted_args)))) + (fun uu___ -> + (fun uu___ -> + Obj.magic + (hoist_and_apply + head rest + uu___)) + uu___))) + (fun uu___ -> + FStar_Tactics_Effect.lift_div_tac + (fun uu___1 -> + FStar_Reflection_Data.Tv_Let + (false, [], + bv, + arg_term, + uu___))))) + (fun uu___ -> + (fun uu___ -> + Obj.magic + (FStar_Tactics_Builtins.pack + uu___)) uu___))) + uu___))) uu___)))) uu___2 uu___1 + uu___ +let (specialize_abspat_continuation' : + abspat_continuation -> + FStar_Reflection_Types.term -> + (FStar_Reflection_Types.term, unit) FStar_Tactics_Effect.tac_repr) + = + fun continuation -> + fun solution_term -> + FStar_Tactics_Effect.tac_bind + (Prims.mk_range "FStar.Tactics.PatternMatching.fst" + (Prims.of_int (715)) (Prims.of_int (4)) (Prims.of_int (715)) + (Prims.of_int (54))) + (Prims.mk_range "FStar.Tactics.PatternMatching.fst" + (Prims.of_int (716)) (Prims.of_int (2)) (Prims.of_int (717)) + (Prims.of_int (52))) + (FStar_Tactics_Effect.lift_div_tac + (fun uu___ -> + fun argspec -> + abspat_arg_of_abspat_argspec solution_term argspec)) + (fun uu___ -> + (fun mk_arg_term -> + Obj.magic + (FStar_Tactics_Effect.tac_bind + (Prims.mk_range "FStar.Tactics.PatternMatching.fst" + (Prims.of_int (716)) (Prims.of_int (23)) + (Prims.of_int (716)) (Prims.of_int (35))) + (Prims.mk_range "FStar.Tactics.PatternMatching.fst" + (Prims.of_int (716)) (Prims.of_int (2)) + (Prims.of_int (717)) (Prims.of_int (52))) + (FStar_Tactics_Effect.lift_div_tac + (fun uu___ -> continuation)) + (fun uu___ -> + (fun uu___ -> + match uu___ with + | (argspecs, body) -> + Obj.magic + (FStar_Tactics_Effect.tac_bind + (Prims.mk_range + "FStar.Tactics.PatternMatching.fst" + (Prims.of_int (717)) (Prims.of_int (23)) + (Prims.of_int (717)) (Prims.of_int (49))) + (Prims.mk_range + "FStar.Tactics.PatternMatching.fst" + (Prims.of_int (717)) (Prims.of_int (2)) + (Prims.of_int (717)) (Prims.of_int (52))) + (Obj.magic + (FStar_Tactics_Util.map mk_arg_term + argspecs)) + (fun uu___1 -> + (fun uu___1 -> + Obj.magic + (hoist_and_apply body uu___1 [])) + uu___1))) uu___))) uu___) +let (specialize_abspat_continuation : + abspat_continuation -> + (FStar_Reflection_Types.term, unit) FStar_Tactics_Effect.tac_repr) + = + fun continuation -> + FStar_Tactics_Effect.tac_bind + (Prims.mk_range "FStar.Tactics.PatternMatching.fst" + (Prims.of_int (724)) (Prims.of_int (24)) (Prims.of_int (724)) + (Prims.of_int (57))) + (Prims.mk_range "FStar.Tactics.PatternMatching.fst" + (Prims.of_int (725)) (Prims.of_int (2)) (Prims.of_int (731)) + (Prims.of_int (9))) + (Obj.magic + (FStar_Tactics_Derived.fresh_binder + (FStar_Reflection_Builtins.pack_ln + (FStar_Reflection_Data.Tv_FVar + (FStar_Reflection_Builtins.pack_fv + ["FStar"; + "Tactics"; + "PatternMatching"; + "matching_solution"]))))) + (fun uu___ -> + (fun solution_binder -> + Obj.magic + (FStar_Tactics_Effect.tac_bind + (Prims.mk_range "FStar.Tactics.PatternMatching.fst" + (Prims.of_int (725)) (Prims.of_int (22)) + (Prims.of_int (725)) (Prims.of_int (66))) + (Prims.mk_range "FStar.Tactics.PatternMatching.fst" + (Prims.of_int (726)) (Prims.of_int (2)) + (Prims.of_int (731)) (Prims.of_int (9))) + (Obj.magic + (FStar_Tactics_Builtins.pack + (FStar_Reflection_Data.Tv_Var + (FStar_Reflection_Derived.bv_of_binder + solution_binder)))) + (fun uu___ -> + (fun solution_term -> + Obj.magic + (FStar_Tactics_Effect.tac_bind + (Prims.mk_range + "FStar.Tactics.PatternMatching.fst" + (Prims.of_int (726)) (Prims.of_int (16)) + (Prims.of_int (726)) (Prims.of_int (74))) + (Prims.mk_range + "FStar.Tactics.PatternMatching.fst" + (Prims.of_int (727)) (Prims.of_int (2)) + (Prims.of_int (731)) (Prims.of_int (9))) + (Obj.magic + (specialize_abspat_continuation' continuation + solution_term)) + (fun uu___ -> + (fun applied -> + Obj.magic + (FStar_Tactics_Effect.tac_bind + (Prims.mk_range + "FStar.Tactics.PatternMatching.fst" + (Prims.of_int (727)) + (Prims.of_int (16)) + (Prims.of_int (727)) + (Prims.of_int (53))) + (Prims.mk_range + "FStar.Tactics.PatternMatching.fst" + (Prims.of_int (728)) + (Prims.of_int (2)) + (Prims.of_int (731)) + (Prims.of_int (9))) + (Obj.magic + (FStar_Tactics_Builtins.pack + (FStar_Reflection_Data.Tv_Abs + (solution_binder, applied)))) + (fun uu___ -> + (fun thunked -> + Obj.magic + (FStar_Tactics_Effect.tac_bind + (Prims.mk_range + "FStar.Tactics.PatternMatching.fst" + (Prims.of_int (728)) + (Prims.of_int (2)) + (Prims.of_int (728)) + (Prims.of_int (56))) + (Prims.mk_range + "FStar.Tactics.PatternMatching.fst" + (Prims.of_int (729)) + (Prims.of_int (2)) + (Prims.of_int (731)) + (Prims.of_int (9))) + (Obj.magic + (FStar_Tactics_Effect.tac_bind + (Prims.mk_range + "FStar.Tactics.PatternMatching.fst" + (Prims.of_int (728)) + (Prims.of_int (8)) + (Prims.of_int (728)) + (Prims.of_int (56))) + (Prims.mk_range + "FStar.Tactics.PatternMatching.fst" + (Prims.of_int (728)) + (Prims.of_int (2)) + (Prims.of_int (728)) + (Prims.of_int (56))) + (Obj.magic + (FStar_Tactics_Effect.tac_bind + (Prims.mk_range + "FStar.Tactics.PatternMatching.fst" + (Prims.of_int (728)) + (Prims.of_int (31)) + (Prims.of_int (728)) + (Prims.of_int (55))) + (Prims.mk_range + "prims.fst" + (Prims.of_int (606)) + (Prims.of_int (19)) + (Prims.of_int (606)) + (Prims.of_int (31))) + (Obj.magic + (FStar_Tactics_Builtins.term_to_string + thunked)) + (fun uu___ -> + FStar_Tactics_Effect.lift_div_tac + (fun + uu___1 -> + Prims.strcat + "Specialized into " + uu___)))) + (fun uu___ -> + (fun uu___ -> + Obj.magic + (debug uu___)) + uu___))) + (fun uu___ -> + (fun uu___ -> + Obj.magic + (FStar_Tactics_Effect.tac_bind + (Prims.mk_range + "FStar.Tactics.PatternMatching.fst" + (Prims.of_int (729)) + (Prims.of_int (19)) + (Prims.of_int (729)) + (Prims.of_int (38))) + (Prims.mk_range + "FStar.Tactics.PatternMatching.fst" + (Prims.of_int (730)) + (Prims.of_int (2)) + (Prims.of_int (731)) + (Prims.of_int (9))) + (Obj.magic + (beta_reduce + thunked)) + (fun uu___1 -> + (fun + normalized + -> + Obj.magic + (FStar_Tactics_Effect.tac_bind + (Prims.mk_range + "FStar.Tactics.PatternMatching.fst" + (Prims.of_int (730)) + (Prims.of_int (2)) + (Prims.of_int (730)) + (Prims.of_int (61))) + (Prims.mk_range + "FStar.Tactics.PatternMatching.fst" + (Prims.of_int (727)) + (Prims.of_int (6)) + (Prims.of_int (727)) + (Prims.of_int (13))) + (Obj.magic + (FStar_Tactics_Effect.tac_bind + (Prims.mk_range + "FStar.Tactics.PatternMatching.fst" + (Prims.of_int (730)) + (Prims.of_int (8)) + (Prims.of_int (730)) + (Prims.of_int (61))) + (Prims.mk_range + "FStar.Tactics.PatternMatching.fst" + (Prims.of_int (730)) + (Prims.of_int (2)) + (Prims.of_int (730)) + (Prims.of_int (61))) + (Obj.magic + (FStar_Tactics_Effect.tac_bind + (Prims.mk_range + "FStar.Tactics.PatternMatching.fst" + (Prims.of_int (730)) + (Prims.of_int (33)) + (Prims.of_int (730)) + (Prims.of_int (60))) + (Prims.mk_range + "prims.fst" + (Prims.of_int (606)) + (Prims.of_int (19)) + (Prims.of_int (606)) + (Prims.of_int (31))) + (Obj.magic + (FStar_Tactics_Builtins.term_to_string + normalized)) + (fun + uu___1 -> + FStar_Tactics_Effect.lift_div_tac + (fun + uu___2 -> + Prims.strcat + "\226\128\166 which reduces to " + uu___1)))) + (fun + uu___1 -> + (fun + uu___1 -> + Obj.magic + (debug + uu___1)) + uu___1))) + (fun + uu___1 -> + FStar_Tactics_Effect.lift_div_tac + (fun + uu___2 -> + thunked)))) + uu___1))) + uu___))) uu___))) + uu___))) uu___))) uu___) +let interp_abspat_continuation : + 'a . + abspat_continuation -> + (matching_solution -> ('a, unit) FStar_Tactics_Effect.tac_repr, + unit) FStar_Tactics_Effect.tac_repr + = + fun continuation -> + FStar_Tactics_Effect.tac_bind + (Prims.mk_range "FStar.Tactics.PatternMatching.fst" + (Prims.of_int (738)) (Prims.of_int (16)) (Prims.of_int (738)) + (Prims.of_int (59))) + (Prims.mk_range "FStar.Tactics.PatternMatching.fst" + (Prims.of_int (739)) (Prims.of_int (2)) (Prims.of_int (739)) + (Prims.of_int (47))) + (Obj.magic (specialize_abspat_continuation continuation)) + (fun uu___ -> + (fun applied -> Obj.magic (FStar_Tactics_Builtins.unquote applied)) + uu___) +let interp_abspat : + 'a . + 'a -> + ((matching_problem * abspat_continuation), unit) + FStar_Tactics_Effect.tac_repr + = + fun abspat -> + FStar_Tactics_Effect.tac_bind + (Prims.mk_range "FStar.Tactics.PatternMatching.fst" + (Prims.of_int (749)) (Prims.of_int (26)) (Prims.of_int (749)) + (Prims.of_int (40))) + (Prims.mk_range "FStar.Tactics.PatternMatching.fst" + (Prims.of_int (749)) (Prims.of_int (2)) (Prims.of_int (749)) + (Prims.of_int (40))) + (FStar_Tactics_Effect.lift_div_tac + (fun uu___ -> + (fun uu___ -> + Obj.magic + (failwith "Cannot evaluate open quotation at runtime")) + uu___)) + (fun uu___ -> + (fun uu___ -> Obj.magic (matching_problem_of_abs uu___)) uu___) +let match_abspat : + 'b 'a . + 'a -> + (abspat_continuation -> + (matching_solution -> ('b, unit) FStar_Tactics_Effect.tac_repr, + unit) FStar_Tactics_Effect.tac_repr) + -> ('b, unit) FStar_Tactics_Effect.tac_repr + = + fun abspat -> + fun k -> + FStar_Tactics_Effect.tac_bind + (Prims.mk_range "FStar.Tactics.PatternMatching.fst" + (Prims.of_int (757)) (Prims.of_int (13)) (Prims.of_int (757)) + (Prims.of_int (24))) + (Prims.mk_range "FStar.Tactics.PatternMatching.fst" + (Prims.of_int (758)) (Prims.of_int (2)) (Prims.of_int (760)) + (Prims.of_int (51))) + (Obj.magic (FStar_Tactics_Derived.cur_goal ())) + (fun uu___ -> + (fun goal -> + Obj.magic + (FStar_Tactics_Effect.tac_bind + (Prims.mk_range "FStar.Tactics.PatternMatching.fst" + (Prims.of_int (758)) (Prims.of_int (19)) + (Prims.of_int (758)) (Prims.of_int (46))) + (Prims.mk_range "FStar.Tactics.PatternMatching.fst" + (Prims.of_int (759)) (Prims.of_int (2)) + (Prims.of_int (760)) (Prims.of_int (51))) + (Obj.magic + (FStar_Tactics_Effect.tac_bind + (Prims.mk_range "FStar.Tactics.PatternMatching.fst" + (Prims.of_int (758)) (Prims.of_int (34)) + (Prims.of_int (758)) (Prims.of_int (46))) + (Prims.mk_range "FStar.Tactics.PatternMatching.fst" + (Prims.of_int (758)) (Prims.of_int (19)) + (Prims.of_int (758)) (Prims.of_int (46))) + (Obj.magic (FStar_Tactics_Derived.cur_env ())) + (fun uu___ -> + FStar_Tactics_Effect.lift_div_tac + (fun uu___1 -> + FStar_Reflection_Builtins.binders_of_env + uu___)))) + (fun uu___ -> + (fun hypotheses -> + Obj.magic + (FStar_Tactics_Effect.tac_bind + (Prims.mk_range + "FStar.Tactics.PatternMatching.fst" + (Prims.of_int (759)) (Prims.of_int (30)) + (Prims.of_int (759)) (Prims.of_int (50))) + (Prims.mk_range + "FStar.Tactics.PatternMatching.fst" + (Prims.of_int (759)) (Prims.of_int (2)) + (Prims.of_int (760)) (Prims.of_int (51))) + (Obj.magic (interp_abspat abspat)) + (fun uu___ -> + (fun uu___ -> + match uu___ with + | (problem, continuation) -> + Obj.magic + (FStar_Tactics_Effect.tac_bind + (Prims.mk_range + "FStar.Tactics.PatternMatching.fst" + (Prims.of_int (760)) + (Prims.of_int (35)) + (Prims.of_int (760)) + (Prims.of_int (51))) + (Prims.mk_range + "FStar.Tactics.PatternMatching.fst" + (Prims.of_int (760)) + (Prims.of_int (2)) + (Prims.of_int (760)) + (Prims.of_int (51))) + (Obj.magic (k continuation)) + (fun uu___1 -> + (fun uu___1 -> + Obj.magic + (solve_mp problem + hypotheses goal + uu___1)) uu___1))) + uu___))) uu___))) uu___) +let inspect_abspat_problem : + 'a . 'a -> (matching_problem, unit) FStar_Tactics_Effect.tac_repr = + fun abspat -> + FStar_Tactics_Effect.tac_bind + (Prims.mk_range "FStar.Tactics.PatternMatching.fst" + (Prims.of_int (764)) (Prims.of_int (6)) (Prims.of_int (764)) + (Prims.of_int (31))) + (Prims.mk_range "FStar.Tactics.PatternMatching.fst" + (Prims.of_int (764)) (Prims.of_int (2)) (Prims.of_int (764)) + (Prims.of_int (31))) (Obj.magic (interp_abspat abspat)) + (fun uu___ -> + FStar_Tactics_Effect.lift_div_tac + (fun uu___1 -> FStar_Pervasives_Native.fst uu___)) +let inspect_abspat_solution : + 'a . 'a -> (matching_solution, unit) FStar_Tactics_Effect.tac_repr = + fun abspat -> + match_abspat abspat + (fun uu___ -> + (fun uu___ -> + Obj.magic + (FStar_Tactics_Effect.lift_div_tac + (fun uu___2 -> + fun uu___1 -> + (fun uu___1 -> + fun solution -> + Obj.magic + (FStar_Tactics_Effect.lift_div_tac + (fun uu___2 -> solution))) uu___2 uu___1))) + uu___) +let tpair : + 'a 'b . + 'a -> + ('b -> (('a * 'b), unit) FStar_Tactics_Effect.tac_repr, unit) + FStar_Tactics_Effect.tac_repr + = + fun uu___ -> + (fun x -> + Obj.magic + (FStar_Tactics_Effect.lift_div_tac + (fun uu___1 -> + fun uu___ -> + (fun uu___ -> + fun y -> + Obj.magic + (FStar_Tactics_Effect.lift_div_tac + (fun uu___1 -> (x, y)))) uu___1 uu___))) uu___ +let gpm : 'b 'a . 'a -> unit -> ('b, unit) FStar_Tactics_Effect.tac_repr = + fun abspat -> + fun uu___ -> + FStar_Tactics_Effect.tac_bind + (Prims.mk_range "FStar.Tactics.PatternMatching.fst" + (Prims.of_int (788)) (Prims.of_int (31)) (Prims.of_int (788)) + (Prims.of_int (56))) + (Prims.mk_range "FStar.Tactics.PatternMatching.fst" + (Prims.of_int (788)) (Prims.of_int (2)) (Prims.of_int (789)) + (Prims.of_int (52))) (Obj.magic (match_abspat abspat tpair)) + (fun uu___1 -> + (fun uu___1 -> + match uu___1 with + | (continuation, solution) -> + Obj.magic + (FStar_Tactics_Effect.tac_bind + (Prims.mk_range "FStar.Tactics.PatternMatching.fst" + (Prims.of_int (789)) (Prims.of_int (2)) + (Prims.of_int (789)) (Prims.of_int (52))) + (Prims.mk_range "FStar.Tactics.PatternMatching.fst" + (Prims.of_int (789)) (Prims.of_int (2)) + (Prims.of_int (789)) (Prims.of_int (52))) + (Obj.magic (interp_abspat_continuation continuation)) + (fun uu___2 -> + (fun uu___2 -> Obj.magic (uu___2 solution)) uu___2))) + uu___1) +let pm : 'b 'a . 'a -> ('b, unit) FStar_Tactics_Effect.tac_repr = + fun abspat -> match_abspat abspat interp_abspat_continuation +let fetch_eq_side' : + 'a . unit -> (FStar_Reflection_Types.term * FStar_Reflection_Types.term) = + fun uu___ -> + (fun uu___ -> + Obj.magic + (gpm + (fun left -> + fun right -> + fun g -> + FStar_Tactics_Effect.tac_bind + (Prims.mk_range "FStar.Tactics.PatternMatching.fst" + (Prims.of_int (812)) (Prims.of_int (10)) + (Prims.of_int (812)) (Prims.of_int (20))) + (Prims.mk_range "FStar.Tactics.PatternMatching.fst" + (Prims.of_int (812)) (Prims.of_int (9)) + (Prims.of_int (812)) (Prims.of_int (34))) + (FStar_Tactics_Effect.lift_div_tac + (fun uu___1 -> + (fun uu___1 -> + Obj.magic + (failwith + "Cannot evaluate open quotation at runtime")) + uu___1)) + (fun uu___1 -> + (fun uu___1 -> + Obj.magic + (FStar_Tactics_Effect.tac_bind + (Prims.mk_range + "FStar.Tactics.PatternMatching.fst" + (Prims.of_int (812)) (Prims.of_int (22)) + (Prims.of_int (812)) (Prims.of_int (33))) + (Prims.mk_range + "FStar.Tactics.PatternMatching.fst" + (Prims.of_int (812)) (Prims.of_int (9)) + (Prims.of_int (812)) (Prims.of_int (34))) + (FStar_Tactics_Effect.lift_div_tac + (fun uu___2 -> + (fun uu___2 -> + Obj.magic + (failwith + "Cannot evaluate open quotation at runtime")) + uu___2)) + (fun uu___2 -> + FStar_Tactics_Effect.lift_div_tac + (fun uu___3 -> (uu___1, uu___2))))) + uu___1)) ())) uu___ \ No newline at end of file diff --git a/ocaml/fstar-lib/generated/FStar_Tactics_Print.ml b/ocaml/fstar-lib/generated/FStar_Tactics_Print.ml new file mode 100644 index 00000000000..e1f55895b79 --- /dev/null +++ b/ocaml/fstar-lib/generated/FStar_Tactics_Print.ml @@ -0,0 +1,1570 @@ +open Prims +let (paren : Prims.string -> Prims.string) = + fun s -> Prims.strcat "(" (Prims.strcat s ")") +let (bv_to_string : + FStar_Reflection_Types.bv -> + (Prims.string, unit) FStar_Tactics_Effect.tac_repr) + = + fun bv -> + FStar_Tactics_Effect.tac_bind + (Prims.mk_range "FStar.Tactics.Print.fst" (Prims.of_int (12)) + (Prims.of_int (14)) (Prims.of_int (12)) (Prims.of_int (27))) + (Prims.mk_range "FStar.Tactics.Print.fst" (Prims.of_int (13)) + (Prims.of_int (4)) (Prims.of_int (13)) (Prims.of_int (64))) + (FStar_Tactics_Effect.lift_div_tac + (fun uu___ -> FStar_Reflection_Builtins.inspect_bv bv)) + (fun uu___ -> + (fun bvv -> + Obj.magic + (FStar_Tactics_Effect.tac_bind + (Prims.mk_range "FStar.Tactics.Print.fst" + (Prims.of_int (13)) (Prims.of_int (10)) + (Prims.of_int (13)) (Prims.of_int (64))) + (Prims.mk_range "prims.fst" (Prims.of_int (606)) + (Prims.of_int (19)) (Prims.of_int (606)) + (Prims.of_int (31))) + (Obj.magic + (FStar_Tactics_Effect.tac_bind + (Prims.mk_range "FStar.Tactics.Print.fst" + (Prims.of_int (13)) (Prims.of_int (26)) + (Prims.of_int (13)) (Prims.of_int (64))) + (Prims.mk_range "prims.fst" (Prims.of_int (606)) + (Prims.of_int (19)) (Prims.of_int (606)) + (Prims.of_int (31))) + (Obj.magic + (FStar_Tactics_Effect.tac_bind + (Prims.mk_range "FStar.Tactics.Print.fst" + (Prims.of_int (13)) (Prims.of_int (32)) + (Prims.of_int (13)) (Prims.of_int (64))) + (Prims.mk_range "prims.fst" (Prims.of_int (606)) + (Prims.of_int (19)) (Prims.of_int (606)) + (Prims.of_int (31))) + (Obj.magic + (FStar_Tactics_Effect.tac_bind + (Prims.mk_range "FStar.Tactics.Print.fst" + (Prims.of_int (13)) (Prims.of_int (32)) + (Prims.of_int (13)) (Prims.of_int (58))) + (Prims.mk_range "prims.fst" + (Prims.of_int (606)) + (Prims.of_int (19)) + (Prims.of_int (606)) + (Prims.of_int (31))) + (Obj.magic + (FStar_Tactics_Builtins.term_to_string + bvv.FStar_Reflection_Data.bv_sort)) + (fun uu___ -> + FStar_Tactics_Effect.lift_div_tac + (fun uu___1 -> Prims.strcat uu___ ")")))) + (fun uu___ -> + FStar_Tactics_Effect.lift_div_tac + (fun uu___1 -> Prims.strcat ":" uu___)))) + (fun uu___ -> + FStar_Tactics_Effect.lift_div_tac + (fun uu___1 -> + Prims.strcat + bvv.FStar_Reflection_Data.bv_ppname uu___)))) + (fun uu___ -> + FStar_Tactics_Effect.lift_div_tac + (fun uu___1 -> Prims.strcat "(" uu___)))) uu___) +let rec print_list_aux : + 'a . + ('a -> (Prims.string, unit) FStar_Tactics_Effect.tac_repr) -> + 'a Prims.list -> (Prims.string, unit) FStar_Tactics_Effect.tac_repr + = + fun uu___1 -> + fun uu___ -> + (fun f -> + fun xs -> + match xs with + | [] -> + Obj.magic + (Obj.repr + (FStar_Tactics_Effect.lift_div_tac (fun uu___ -> ""))) + | x::[] -> Obj.magic (Obj.repr (f x)) + | x::xs1 -> + Obj.magic + (Obj.repr + (FStar_Tactics_Effect.tac_bind + (Prims.mk_range "FStar.Tactics.Print.fst" + (Prims.of_int (21)) (Prims.of_int (13)) + (Prims.of_int (21)) (Prims.of_int (16))) + (Prims.mk_range "FStar.Tactics.Print.fst" + (Prims.of_int (21)) (Prims.of_int (13)) + (Prims.of_int (21)) (Prims.of_int (45))) + (Obj.magic (f x)) + (fun uu___ -> + (fun uu___ -> + Obj.magic + (FStar_Tactics_Effect.tac_bind + (Prims.mk_range "FStar.Tactics.Print.fst" + (Prims.of_int (21)) (Prims.of_int (19)) + (Prims.of_int (21)) (Prims.of_int (45))) + (Prims.mk_range "prims.fst" + (Prims.of_int (606)) (Prims.of_int (19)) + (Prims.of_int (606)) (Prims.of_int (31))) + (Obj.magic + (FStar_Tactics_Effect.tac_bind + (Prims.mk_range + "FStar.Tactics.Print.fst" + (Prims.of_int (21)) + (Prims.of_int (26)) + (Prims.of_int (21)) + (Prims.of_int (45))) + (Prims.mk_range "prims.fst" + (Prims.of_int (606)) + (Prims.of_int (19)) + (Prims.of_int (606)) + (Prims.of_int (31))) + (Obj.magic (print_list_aux f xs1)) + (fun uu___1 -> + FStar_Tactics_Effect.lift_div_tac + (fun uu___2 -> + Prims.strcat "; " uu___1)))) + (fun uu___1 -> + FStar_Tactics_Effect.lift_div_tac + (fun uu___2 -> + Prims.strcat uu___ uu___1)))) uu___)))) + uu___1 uu___ +let print_list : + 'a . + ('a -> (Prims.string, unit) FStar_Tactics_Effect.tac_repr) -> + 'a Prims.list -> (Prims.string, unit) FStar_Tactics_Effect.tac_repr + = + fun f -> + fun l -> + FStar_Tactics_Effect.tac_bind + (Prims.mk_range "FStar.Tactics.Print.fst" (Prims.of_int (25)) + (Prims.of_int (9)) (Prims.of_int (25)) (Prims.of_int (33))) + (Prims.mk_range "prims.fst" (Prims.of_int (606)) (Prims.of_int (19)) + (Prims.of_int (606)) (Prims.of_int (31))) + (Obj.magic + (FStar_Tactics_Effect.tac_bind + (Prims.mk_range "FStar.Tactics.Print.fst" (Prims.of_int (25)) + (Prims.of_int (9)) (Prims.of_int (25)) (Prims.of_int (27))) + (Prims.mk_range "prims.fst" (Prims.of_int (606)) + (Prims.of_int (19)) (Prims.of_int (606)) (Prims.of_int (31))) + (Obj.magic (print_list_aux f l)) + (fun uu___ -> + FStar_Tactics_Effect.lift_div_tac + (fun uu___1 -> Prims.strcat uu___ "]")))) + (fun uu___ -> + FStar_Tactics_Effect.lift_div_tac + (fun uu___1 -> Prims.strcat "[" uu___)) +let rec (universe_to_ast_string : + FStar_Reflection_Types.universe -> + (Prims.string, unit) FStar_Tactics_Effect.tac_repr) + = + fun uu___ -> + (fun u -> + match FStar_Reflection_Builtins.inspect_universe u with + | FStar_Reflection_Data.Uv_Zero -> + Obj.magic + (Obj.repr + (FStar_Tactics_Effect.lift_div_tac (fun uu___ -> "Uv_Zero"))) + | FStar_Reflection_Data.Uv_Succ u1 -> + Obj.magic + (Obj.repr + (FStar_Tactics_Effect.tac_bind + (Prims.mk_range "FStar.Tactics.Print.fst" + (Prims.of_int (30)) (Prims.of_int (29)) + (Prims.of_int (30)) (Prims.of_int (61))) + (Prims.mk_range "prims.fst" (Prims.of_int (606)) + (Prims.of_int (19)) (Prims.of_int (606)) + (Prims.of_int (31))) + (Obj.magic + (FStar_Tactics_Effect.tac_bind + (Prims.mk_range "FStar.Tactics.Print.fst" + (Prims.of_int (30)) (Prims.of_int (35)) + (Prims.of_int (30)) (Prims.of_int (61))) + (Prims.mk_range "FStar.Tactics.Print.fst" + (Prims.of_int (30)) (Prims.of_int (29)) + (Prims.of_int (30)) (Prims.of_int (61))) + (Obj.magic (universe_to_ast_string u1)) + (fun uu___ -> + FStar_Tactics_Effect.lift_div_tac + (fun uu___1 -> paren uu___)))) + (fun uu___ -> + FStar_Tactics_Effect.lift_div_tac + (fun uu___1 -> Prims.strcat "Uv_Succ" uu___)))) + | FStar_Reflection_Data.Uv_Max us -> + Obj.magic + (Obj.repr + (FStar_Tactics_Effect.tac_bind + (Prims.mk_range "FStar.Tactics.Print.fst" + (Prims.of_int (31)) (Prims.of_int (28)) + (Prims.of_int (31)) (Prims.of_int (64))) + (Prims.mk_range "prims.fst" (Prims.of_int (606)) + (Prims.of_int (19)) (Prims.of_int (606)) + (Prims.of_int (31))) + (Obj.magic (print_list universe_to_ast_string us)) + (fun uu___ -> + FStar_Tactics_Effect.lift_div_tac + (fun uu___1 -> Prims.strcat "Uv_Max" uu___)))) + | FStar_Reflection_Data.Uv_BVar n -> + Obj.magic + (Obj.repr + (FStar_Tactics_Effect.lift_div_tac + (fun uu___ -> + Prims.strcat "Uv_BVar" (paren (Prims.string_of_int n))))) + | FStar_Reflection_Data.Uv_Name i -> + Obj.magic + (Obj.repr + (FStar_Tactics_Effect.lift_div_tac + (fun uu___ -> + Prims.strcat "Uv_Name" + (paren (FStar_Pervasives_Native.fst i))))) + | FStar_Reflection_Data.Uv_Unif uu___ -> + Obj.magic + (Obj.repr + (FStar_Tactics_Effect.lift_div_tac (fun uu___1 -> "Uv_Unif"))) + | FStar_Reflection_Data.Uv_Unk -> + Obj.magic + (Obj.repr + (FStar_Tactics_Effect.lift_div_tac (fun uu___ -> "Uv_Unk")))) + uu___ +let (universes_to_ast_string : + FStar_Reflection_Data.universes -> + (Prims.string, unit) FStar_Tactics_Effect.tac_repr) + = fun us -> print_list universe_to_ast_string us +let rec (term_to_ast_string : + FStar_Reflection_Types.term -> + (Prims.string, unit) FStar_Tactics_Effect.tac_repr) + = + fun t -> + FStar_Tactics_Effect.tac_bind + (Prims.mk_range "FStar.Tactics.Print.fst" (Prims.of_int (41)) + (Prims.of_int (8)) (Prims.of_int (41)) (Prims.of_int (17))) + (Prims.mk_range "FStar.Tactics.Print.fst" (Prims.of_int (41)) + (Prims.of_int (2)) (Prims.of_int (69)) (Prims.of_int (21))) + (Obj.magic (FStar_Tactics_Builtins.inspect t)) + (fun uu___ -> + (fun uu___ -> + match uu___ with + | FStar_Reflection_Data.Tv_Var bv -> + Obj.magic + (Obj.repr + (FStar_Tactics_Effect.tac_bind + (Prims.mk_range "FStar.Tactics.Print.fst" + (Prims.of_int (42)) (Prims.of_int (29)) + (Prims.of_int (42)) (Prims.of_int (44))) + (Prims.mk_range "prims.fst" (Prims.of_int (606)) + (Prims.of_int (19)) (Prims.of_int (606)) + (Prims.of_int (31))) (Obj.magic (bv_to_string bv)) + (fun uu___1 -> + FStar_Tactics_Effect.lift_div_tac + (fun uu___2 -> Prims.strcat "Tv_Var " uu___1)))) + | FStar_Reflection_Data.Tv_BVar bv -> + Obj.magic + (Obj.repr + (FStar_Tactics_Effect.tac_bind + (Prims.mk_range "FStar.Tactics.Print.fst" + (Prims.of_int (43)) (Prims.of_int (31)) + (Prims.of_int (43)) (Prims.of_int (46))) + (Prims.mk_range "prims.fst" (Prims.of_int (606)) + (Prims.of_int (19)) (Prims.of_int (606)) + (Prims.of_int (31))) (Obj.magic (bv_to_string bv)) + (fun uu___1 -> + FStar_Tactics_Effect.lift_div_tac + (fun uu___2 -> Prims.strcat "Tv_BVar " uu___1)))) + | FStar_Reflection_Data.Tv_FVar fv -> + Obj.magic + (Obj.repr + (FStar_Tactics_Effect.lift_div_tac + (fun uu___1 -> + Prims.strcat "Tv_FVar " + (FStar_Reflection_Derived.fv_to_string fv)))) + | FStar_Reflection_Data.Tv_UInst (fv, us) -> + Obj.magic + (Obj.repr + (FStar_Tactics_Effect.tac_bind + (Prims.mk_range "FStar.Tactics.Print.fst" + (Prims.of_int (46)) (Prims.of_int (17)) + (Prims.of_int (46)) (Prims.of_int (76))) + (Prims.mk_range "prims.fst" (Prims.of_int (606)) + (Prims.of_int (19)) (Prims.of_int (606)) + (Prims.of_int (31))) + (Obj.magic + (FStar_Tactics_Effect.tac_bind + (Prims.mk_range "FStar.Tactics.Print.fst" + (Prims.of_int (46)) (Prims.of_int (23)) + (Prims.of_int (46)) (Prims.of_int (76))) + (Prims.mk_range "FStar.Tactics.Print.fst" + (Prims.of_int (46)) (Prims.of_int (17)) + (Prims.of_int (46)) (Prims.of_int (76))) + (Obj.magic + (FStar_Tactics_Effect.tac_bind + (Prims.mk_range "FStar.Tactics.Print.fst" + (Prims.of_int (46)) + (Prims.of_int (42)) + (Prims.of_int (46)) + (Prims.of_int (75))) + (Prims.mk_range "prims.fst" + (Prims.of_int (606)) + (Prims.of_int (19)) + (Prims.of_int (606)) + (Prims.of_int (31))) + (Obj.magic + (FStar_Tactics_Effect.tac_bind + (Prims.mk_range + "FStar.Tactics.Print.fst" + (Prims.of_int (46)) + (Prims.of_int (49)) + (Prims.of_int (46)) + (Prims.of_int (75))) + (Prims.mk_range "prims.fst" + (Prims.of_int (606)) + (Prims.of_int (19)) + (Prims.of_int (606)) + (Prims.of_int (31))) + (Obj.magic + (universes_to_ast_string us)) + (fun uu___1 -> + FStar_Tactics_Effect.lift_div_tac + (fun uu___2 -> + Prims.strcat ", " uu___1)))) + (fun uu___1 -> + FStar_Tactics_Effect.lift_div_tac + (fun uu___2 -> + Prims.strcat + (FStar_Reflection_Derived.fv_to_string + fv) uu___1)))) + (fun uu___1 -> + FStar_Tactics_Effect.lift_div_tac + (fun uu___2 -> paren uu___1)))) + (fun uu___1 -> + FStar_Tactics_Effect.lift_div_tac + (fun uu___2 -> Prims.strcat "Tv_UInst" uu___1)))) + | FStar_Reflection_Data.Tv_App (hd, (a, uu___1)) -> + Obj.magic + (Obj.repr + (FStar_Tactics_Effect.tac_bind + (Prims.mk_range "FStar.Tactics.Print.fst" + (Prims.of_int (47)) (Prims.of_int (36)) + (Prims.of_int (47)) (Prims.of_int (95))) + (Prims.mk_range "prims.fst" (Prims.of_int (606)) + (Prims.of_int (19)) (Prims.of_int (606)) + (Prims.of_int (31))) + (Obj.magic + (FStar_Tactics_Effect.tac_bind + (Prims.mk_range "FStar.Tactics.Print.fst" + (Prims.of_int (47)) (Prims.of_int (42)) + (Prims.of_int (47)) (Prims.of_int (95))) + (Prims.mk_range "FStar.Tactics.Print.fst" + (Prims.of_int (47)) (Prims.of_int (36)) + (Prims.of_int (47)) (Prims.of_int (95))) + (Obj.magic + (FStar_Tactics_Effect.tac_bind + (Prims.mk_range "FStar.Tactics.Print.fst" + (Prims.of_int (47)) + (Prims.of_int (43)) + (Prims.of_int (47)) + (Prims.of_int (64))) + (Prims.mk_range "FStar.Tactics.Print.fst" + (Prims.of_int (47)) + (Prims.of_int (42)) + (Prims.of_int (47)) + (Prims.of_int (95))) + (Obj.magic (term_to_ast_string hd)) + (fun uu___2 -> + (fun uu___2 -> + Obj.magic + (FStar_Tactics_Effect.tac_bind + (Prims.mk_range + "FStar.Tactics.Print.fst" + (Prims.of_int (47)) + (Prims.of_int (67)) + (Prims.of_int (47)) + (Prims.of_int (94))) + (Prims.mk_range "prims.fst" + (Prims.of_int (606)) + (Prims.of_int (19)) + (Prims.of_int (606)) + (Prims.of_int (31))) + (Obj.magic + (FStar_Tactics_Effect.tac_bind + (Prims.mk_range + "FStar.Tactics.Print.fst" + (Prims.of_int (47)) + (Prims.of_int (74)) + (Prims.of_int (47)) + (Prims.of_int (94))) + (Prims.mk_range + "prims.fst" + (Prims.of_int (606)) + (Prims.of_int (19)) + (Prims.of_int (606)) + (Prims.of_int (31))) + (Obj.magic + (term_to_ast_string a)) + (fun uu___3 -> + FStar_Tactics_Effect.lift_div_tac + (fun uu___4 -> + Prims.strcat + ", " uu___3)))) + (fun uu___3 -> + FStar_Tactics_Effect.lift_div_tac + (fun uu___4 -> + Prims.strcat uu___2 + uu___3)))) uu___2))) + (fun uu___2 -> + FStar_Tactics_Effect.lift_div_tac + (fun uu___3 -> paren uu___2)))) + (fun uu___2 -> + FStar_Tactics_Effect.lift_div_tac + (fun uu___3 -> Prims.strcat "Tv_App " uu___2)))) + | FStar_Reflection_Data.Tv_Abs (x, e) -> + Obj.magic + (Obj.repr + (FStar_Tactics_Effect.tac_bind + (Prims.mk_range "FStar.Tactics.Print.fst" + (Prims.of_int (48)) (Prims.of_int (30)) + (Prims.of_int (48)) (Prims.of_int (86))) + (Prims.mk_range "prims.fst" (Prims.of_int (606)) + (Prims.of_int (19)) (Prims.of_int (606)) + (Prims.of_int (31))) + (Obj.magic + (FStar_Tactics_Effect.tac_bind + (Prims.mk_range "FStar.Tactics.Print.fst" + (Prims.of_int (48)) (Prims.of_int (36)) + (Prims.of_int (48)) (Prims.of_int (86))) + (Prims.mk_range "FStar.Tactics.Print.fst" + (Prims.of_int (48)) (Prims.of_int (30)) + (Prims.of_int (48)) (Prims.of_int (86))) + (Obj.magic + (FStar_Tactics_Effect.tac_bind + (Prims.mk_range "FStar.Tactics.Print.fst" + (Prims.of_int (48)) + (Prims.of_int (58)) + (Prims.of_int (48)) + (Prims.of_int (85))) + (Prims.mk_range "prims.fst" + (Prims.of_int (606)) + (Prims.of_int (19)) + (Prims.of_int (606)) + (Prims.of_int (31))) + (Obj.magic + (FStar_Tactics_Effect.tac_bind + (Prims.mk_range + "FStar.Tactics.Print.fst" + (Prims.of_int (48)) + (Prims.of_int (65)) + (Prims.of_int (48)) + (Prims.of_int (85))) + (Prims.mk_range "prims.fst" + (Prims.of_int (606)) + (Prims.of_int (19)) + (Prims.of_int (606)) + (Prims.of_int (31))) + (Obj.magic (term_to_ast_string e)) + (fun uu___1 -> + FStar_Tactics_Effect.lift_div_tac + (fun uu___2 -> + Prims.strcat ", " uu___1)))) + (fun uu___1 -> + FStar_Tactics_Effect.lift_div_tac + (fun uu___2 -> + Prims.strcat + (FStar_Reflection_Derived.binder_to_string + x) uu___1)))) + (fun uu___1 -> + FStar_Tactics_Effect.lift_div_tac + (fun uu___2 -> paren uu___1)))) + (fun uu___1 -> + FStar_Tactics_Effect.lift_div_tac + (fun uu___2 -> Prims.strcat "Tv_Abs " uu___1)))) + | FStar_Reflection_Data.Tv_Arrow (x, c) -> + Obj.magic + (Obj.repr + (FStar_Tactics_Effect.tac_bind + (Prims.mk_range "FStar.Tactics.Print.fst" + (Prims.of_int (49)) (Prims.of_int (34)) + (Prims.of_int (49)) (Prims.of_int (90))) + (Prims.mk_range "prims.fst" (Prims.of_int (606)) + (Prims.of_int (19)) (Prims.of_int (606)) + (Prims.of_int (31))) + (Obj.magic + (FStar_Tactics_Effect.tac_bind + (Prims.mk_range "FStar.Tactics.Print.fst" + (Prims.of_int (49)) (Prims.of_int (40)) + (Prims.of_int (49)) (Prims.of_int (90))) + (Prims.mk_range "FStar.Tactics.Print.fst" + (Prims.of_int (49)) (Prims.of_int (34)) + (Prims.of_int (49)) (Prims.of_int (90))) + (Obj.magic + (FStar_Tactics_Effect.tac_bind + (Prims.mk_range "FStar.Tactics.Print.fst" + (Prims.of_int (49)) + (Prims.of_int (62)) + (Prims.of_int (49)) + (Prims.of_int (89))) + (Prims.mk_range "prims.fst" + (Prims.of_int (606)) + (Prims.of_int (19)) + (Prims.of_int (606)) + (Prims.of_int (31))) + (Obj.magic + (FStar_Tactics_Effect.tac_bind + (Prims.mk_range + "FStar.Tactics.Print.fst" + (Prims.of_int (49)) + (Prims.of_int (69)) + (Prims.of_int (49)) + (Prims.of_int (89))) + (Prims.mk_range "prims.fst" + (Prims.of_int (606)) + (Prims.of_int (19)) + (Prims.of_int (606)) + (Prims.of_int (31))) + (Obj.magic (comp_to_ast_string c)) + (fun uu___1 -> + FStar_Tactics_Effect.lift_div_tac + (fun uu___2 -> + Prims.strcat ", " uu___1)))) + (fun uu___1 -> + FStar_Tactics_Effect.lift_div_tac + (fun uu___2 -> + Prims.strcat + (FStar_Reflection_Derived.binder_to_string + x) uu___1)))) + (fun uu___1 -> + FStar_Tactics_Effect.lift_div_tac + (fun uu___2 -> paren uu___1)))) + (fun uu___1 -> + FStar_Tactics_Effect.lift_div_tac + (fun uu___2 -> Prims.strcat "Tv_Arrow " uu___1)))) + | FStar_Reflection_Data.Tv_Type u -> + Obj.magic + (Obj.repr + (FStar_Tactics_Effect.tac_bind + (Prims.mk_range "FStar.Tactics.Print.fst" + (Prims.of_int (50)) (Prims.of_int (26)) + (Prims.of_int (50)) (Prims.of_int (58))) + (Prims.mk_range "prims.fst" (Prims.of_int (606)) + (Prims.of_int (19)) (Prims.of_int (606)) + (Prims.of_int (31))) + (Obj.magic + (FStar_Tactics_Effect.tac_bind + (Prims.mk_range "FStar.Tactics.Print.fst" + (Prims.of_int (50)) (Prims.of_int (32)) + (Prims.of_int (50)) (Prims.of_int (58))) + (Prims.mk_range "FStar.Tactics.Print.fst" + (Prims.of_int (50)) (Prims.of_int (26)) + (Prims.of_int (50)) (Prims.of_int (58))) + (Obj.magic (universe_to_ast_string u)) + (fun uu___1 -> + FStar_Tactics_Effect.lift_div_tac + (fun uu___2 -> paren uu___1)))) + (fun uu___1 -> + FStar_Tactics_Effect.lift_div_tac + (fun uu___2 -> Prims.strcat "Type" uu___1)))) + | FStar_Reflection_Data.Tv_Refine (x, e) -> + Obj.magic + (Obj.repr + (FStar_Tactics_Effect.tac_bind + (Prims.mk_range "FStar.Tactics.Print.fst" + (Prims.of_int (51)) (Prims.of_int (36)) + (Prims.of_int (51)) (Prims.of_int (88))) + (Prims.mk_range "prims.fst" (Prims.of_int (606)) + (Prims.of_int (19)) (Prims.of_int (606)) + (Prims.of_int (31))) + (Obj.magic + (FStar_Tactics_Effect.tac_bind + (Prims.mk_range "FStar.Tactics.Print.fst" + (Prims.of_int (51)) (Prims.of_int (42)) + (Prims.of_int (51)) (Prims.of_int (88))) + (Prims.mk_range "FStar.Tactics.Print.fst" + (Prims.of_int (51)) (Prims.of_int (36)) + (Prims.of_int (51)) (Prims.of_int (88))) + (Obj.magic + (FStar_Tactics_Effect.tac_bind + (Prims.mk_range "FStar.Tactics.Print.fst" + (Prims.of_int (51)) + (Prims.of_int (43)) + (Prims.of_int (51)) + (Prims.of_int (57))) + (Prims.mk_range "FStar.Tactics.Print.fst" + (Prims.of_int (51)) + (Prims.of_int (42)) + (Prims.of_int (51)) + (Prims.of_int (88))) + (Obj.magic (bv_to_string x)) + (fun uu___1 -> + (fun uu___1 -> + Obj.magic + (FStar_Tactics_Effect.tac_bind + (Prims.mk_range + "FStar.Tactics.Print.fst" + (Prims.of_int (51)) + (Prims.of_int (60)) + (Prims.of_int (51)) + (Prims.of_int (87))) + (Prims.mk_range "prims.fst" + (Prims.of_int (606)) + (Prims.of_int (19)) + (Prims.of_int (606)) + (Prims.of_int (31))) + (Obj.magic + (FStar_Tactics_Effect.tac_bind + (Prims.mk_range + "FStar.Tactics.Print.fst" + (Prims.of_int (51)) + (Prims.of_int (67)) + (Prims.of_int (51)) + (Prims.of_int (87))) + (Prims.mk_range + "prims.fst" + (Prims.of_int (606)) + (Prims.of_int (19)) + (Prims.of_int (606)) + (Prims.of_int (31))) + (Obj.magic + (term_to_ast_string e)) + (fun uu___2 -> + FStar_Tactics_Effect.lift_div_tac + (fun uu___3 -> + Prims.strcat + ", " uu___2)))) + (fun uu___2 -> + FStar_Tactics_Effect.lift_div_tac + (fun uu___3 -> + Prims.strcat uu___1 + uu___2)))) uu___1))) + (fun uu___1 -> + FStar_Tactics_Effect.lift_div_tac + (fun uu___2 -> paren uu___1)))) + (fun uu___1 -> + FStar_Tactics_Effect.lift_div_tac + (fun uu___2 -> Prims.strcat "Tv_Refine " uu___1)))) + | FStar_Reflection_Data.Tv_Const c -> + Obj.magic (Obj.repr (const_to_ast_string c)) + | FStar_Reflection_Data.Tv_Uvar (i, uu___1) -> + Obj.magic + (Obj.repr + (FStar_Tactics_Effect.lift_div_tac + (fun uu___2 -> + Prims.strcat "Tv_Uvar " (Prims.string_of_int i)))) + | FStar_Reflection_Data.Tv_Let (recf, uu___1, x, e1, e2) -> + Obj.magic + (Obj.repr + (FStar_Tactics_Effect.tac_bind + (Prims.mk_range "FStar.Tactics.Print.fst" + (Prims.of_int (55)) (Prims.of_int (23)) + (Prims.of_int (58)) (Prims.of_int (52))) + (Prims.mk_range "prims.fst" (Prims.of_int (606)) + (Prims.of_int (19)) (Prims.of_int (606)) + (Prims.of_int (31))) + (Obj.magic + (FStar_Tactics_Effect.tac_bind + (Prims.mk_range "FStar.Tactics.Print.fst" + (Prims.of_int (55)) (Prims.of_int (29)) + (Prims.of_int (58)) (Prims.of_int (52))) + (Prims.mk_range "FStar.Tactics.Print.fst" + (Prims.of_int (55)) (Prims.of_int (23)) + (Prims.of_int (58)) (Prims.of_int (52))) + (Obj.magic + (FStar_Tactics_Effect.tac_bind + (Prims.mk_range "FStar.Tactics.Print.fst" + (Prims.of_int (55)) + (Prims.of_int (52)) + (Prims.of_int (58)) + (Prims.of_int (51))) + (Prims.mk_range "prims.fst" + (Prims.of_int (606)) + (Prims.of_int (19)) + (Prims.of_int (606)) + (Prims.of_int (31))) + (Obj.magic + (FStar_Tactics_Effect.tac_bind + (Prims.mk_range + "FStar.Tactics.Print.fst" + (Prims.of_int (56)) + (Prims.of_int (30)) + (Prims.of_int (58)) + (Prims.of_int (51))) + (Prims.mk_range "prims.fst" + (Prims.of_int (606)) + (Prims.of_int (19)) + (Prims.of_int (606)) + (Prims.of_int (31))) + (Obj.magic + (FStar_Tactics_Effect.tac_bind + (Prims.mk_range + "FStar.Tactics.Print.fst" + (Prims.of_int (56)) + (Prims.of_int (30)) + (Prims.of_int (56)) + (Prims.of_int (44))) + (Prims.mk_range + "FStar.Tactics.Print.fst" + (Prims.of_int (56)) + (Prims.of_int (30)) + (Prims.of_int (58)) + (Prims.of_int (51))) + (Obj.magic (bv_to_string x)) + (fun uu___2 -> + (fun uu___2 -> + Obj.magic + (FStar_Tactics_Effect.tac_bind + (Prims.mk_range + "FStar.Tactics.Print.fst" + (Prims.of_int (56)) + (Prims.of_int (47)) + (Prims.of_int (58)) + (Prims.of_int (51))) + (Prims.mk_range + "prims.fst" + (Prims.of_int (606)) + (Prims.of_int (19)) + (Prims.of_int (606)) + (Prims.of_int (31))) + (Obj.magic + (FStar_Tactics_Effect.tac_bind + (Prims.mk_range + "FStar.Tactics.Print.fst" + (Prims.of_int (57)) + (Prims.of_int (30)) + (Prims.of_int (58)) + (Prims.of_int (51))) + (Prims.mk_range + "prims.fst" + (Prims.of_int (606)) + (Prims.of_int (19)) + (Prims.of_int (606)) + (Prims.of_int (31))) + (Obj.magic + ( + FStar_Tactics_Effect.tac_bind + (Prims.mk_range + "FStar.Tactics.Print.fst" + (Prims.of_int (57)) + (Prims.of_int (30)) + (Prims.of_int (57)) + (Prims.of_int (51))) + (Prims.mk_range + "FStar.Tactics.Print.fst" + (Prims.of_int (57)) + (Prims.of_int (30)) + (Prims.of_int (58)) + (Prims.of_int (51))) + (Obj.magic + (term_to_ast_string + e1)) + (fun + uu___3 -> + (fun + uu___3 -> + Obj.magic + (FStar_Tactics_Effect.tac_bind + (Prims.mk_range + "FStar.Tactics.Print.fst" + (Prims.of_int (57)) + (Prims.of_int (54)) + (Prims.of_int (58)) + (Prims.of_int (51))) + (Prims.mk_range + "prims.fst" + (Prims.of_int (606)) + (Prims.of_int (19)) + (Prims.of_int (606)) + (Prims.of_int (31))) + (Obj.magic + (FStar_Tactics_Effect.tac_bind + (Prims.mk_range + "FStar.Tactics.Print.fst" + (Prims.of_int (58)) + (Prims.of_int (30)) + (Prims.of_int (58)) + (Prims.of_int (51))) + (Prims.mk_range + "prims.fst" + (Prims.of_int (606)) + (Prims.of_int (19)) + (Prims.of_int (606)) + (Prims.of_int (31))) + (Obj.magic + (term_to_ast_string + e2)) + (fun + uu___4 -> + FStar_Tactics_Effect.lift_div_tac + (fun + uu___5 -> + Prims.strcat + ", " + uu___4)))) + (fun + uu___4 -> + FStar_Tactics_Effect.lift_div_tac + (fun + uu___5 -> + Prims.strcat + uu___3 + uu___4)))) + uu___3))) + (fun uu___3 + -> + FStar_Tactics_Effect.lift_div_tac + (fun + uu___4 -> + Prims.strcat + ", " + uu___3)))) + (fun uu___3 -> + FStar_Tactics_Effect.lift_div_tac + (fun uu___4 + -> + Prims.strcat + uu___2 + uu___3)))) + uu___2))) + (fun uu___2 -> + FStar_Tactics_Effect.lift_div_tac + (fun uu___3 -> + Prims.strcat ", " uu___2)))) + (fun uu___2 -> + FStar_Tactics_Effect.lift_div_tac + (fun uu___3 -> + Prims.strcat + (Prims.string_of_bool recf) + uu___2)))) + (fun uu___2 -> + FStar_Tactics_Effect.lift_div_tac + (fun uu___3 -> paren uu___2)))) + (fun uu___2 -> + FStar_Tactics_Effect.lift_div_tac + (fun uu___3 -> Prims.strcat "Tv_Let " uu___2)))) + | FStar_Reflection_Data.Tv_Match (e, ret_opt, brs) -> + Obj.magic + (Obj.repr + (FStar_Tactics_Effect.tac_bind + (Prims.mk_range "FStar.Tactics.Print.fst" + (Prims.of_int (61)) (Prims.of_int (6)) + (Prims.of_int (66)) (Prims.of_int (35))) + (Prims.mk_range "prims.fst" (Prims.of_int (606)) + (Prims.of_int (19)) (Prims.of_int (606)) + (Prims.of_int (31))) + (Obj.magic + (FStar_Tactics_Effect.tac_bind + (Prims.mk_range "FStar.Tactics.Print.fst" + (Prims.of_int (61)) (Prims.of_int (12)) + (Prims.of_int (66)) (Prims.of_int (35))) + (Prims.mk_range "FStar.Tactics.Print.fst" + (Prims.of_int (61)) (Prims.of_int (6)) + (Prims.of_int (66)) (Prims.of_int (35))) + (Obj.magic + (FStar_Tactics_Effect.tac_bind + (Prims.mk_range "FStar.Tactics.Print.fst" + (Prims.of_int (62)) (Prims.of_int (8)) + (Prims.of_int (62)) + (Prims.of_int (28))) + (Prims.mk_range "FStar.Tactics.Print.fst" + (Prims.of_int (61)) + (Prims.of_int (12)) + (Prims.of_int (66)) + (Prims.of_int (35))) + (Obj.magic (term_to_ast_string e)) + (fun uu___1 -> + (fun uu___1 -> + Obj.magic + (FStar_Tactics_Effect.tac_bind + (Prims.mk_range + "FStar.Tactics.Print.fst" + (Prims.of_int (63)) + (Prims.of_int (8)) + (Prims.of_int (66)) + (Prims.of_int (34))) + (Prims.mk_range "prims.fst" + (Prims.of_int (606)) + (Prims.of_int (19)) + (Prims.of_int (606)) + (Prims.of_int (31))) + (Obj.magic + (FStar_Tactics_Effect.tac_bind + (Prims.mk_range + "FStar.Tactics.Print.fst" + (Prims.of_int (64)) + (Prims.of_int (8)) + (Prims.of_int (66)) + (Prims.of_int (34))) + (Prims.mk_range + "prims.fst" + (Prims.of_int (606)) + (Prims.of_int (19)) + (Prims.of_int (606)) + (Prims.of_int (31))) + (Obj.magic + (FStar_Tactics_Effect.tac_bind + (Prims.mk_range + "FStar.Tactics.Print.fst" + (Prims.of_int (64)) + (Prims.of_int (8)) + (Prims.of_int (64)) + (Prims.of_int (39))) + (Prims.mk_range + "FStar.Tactics.Print.fst" + (Prims.of_int (64)) + (Prims.of_int (8)) + (Prims.of_int (66)) + (Prims.of_int (34))) + (Obj.magic + (match_returns_to_string + ret_opt)) + (fun uu___2 -> + (fun uu___2 -> + Obj.magic + (FStar_Tactics_Effect.tac_bind + (Prims.mk_range + "FStar.Tactics.Print.fst" + (Prims.of_int (65)) + (Prims.of_int (8)) + (Prims.of_int (66)) + (Prims.of_int (34))) + (Prims.mk_range + "prims.fst" + (Prims.of_int (606)) + (Prims.of_int (19)) + (Prims.of_int (606)) + (Prims.of_int (31))) + (Obj.magic + (FStar_Tactics_Effect.tac_bind + (Prims.mk_range + "FStar.Tactics.Print.fst" + (Prims.of_int (66)) + (Prims.of_int (8)) + (Prims.of_int (66)) + (Prims.of_int (34))) + (Prims.mk_range + "prims.fst" + (Prims.of_int (606)) + (Prims.of_int (19)) + (Prims.of_int (606)) + (Prims.of_int (31))) + (Obj.magic + (branches_to_ast_string + brs)) + (fun + uu___3 -> + FStar_Tactics_Effect.lift_div_tac + (fun + uu___4 -> + Prims.strcat + ", " + uu___3)))) + (fun + uu___3 -> + FStar_Tactics_Effect.lift_div_tac + (fun + uu___4 -> + Prims.strcat + uu___2 + uu___3)))) + uu___2))) + (fun uu___2 -> + FStar_Tactics_Effect.lift_div_tac + (fun uu___3 -> + Prims.strcat + ", " uu___2)))) + (fun uu___2 -> + FStar_Tactics_Effect.lift_div_tac + (fun uu___3 -> + Prims.strcat uu___1 + uu___2)))) uu___1))) + (fun uu___1 -> + FStar_Tactics_Effect.lift_div_tac + (fun uu___2 -> paren uu___1)))) + (fun uu___1 -> + FStar_Tactics_Effect.lift_div_tac + (fun uu___2 -> Prims.strcat "Tv_Match " uu___1)))) + | FStar_Reflection_Data.Tv_AscribedT (e, t1, uu___1, use_eq) -> + Obj.magic + (Obj.repr + (FStar_Tactics_Effect.tac_bind + (Prims.mk_range "FStar.Tactics.Print.fst" + (Prims.of_int (67)) (Prims.of_int (51)) + (Prims.of_int (67)) (Prims.of_int (140))) + (Prims.mk_range "prims.fst" (Prims.of_int (606)) + (Prims.of_int (19)) (Prims.of_int (606)) + (Prims.of_int (31))) + (Obj.magic + (FStar_Tactics_Effect.tac_bind + (Prims.mk_range "FStar.Tactics.Print.fst" + (Prims.of_int (67)) (Prims.of_int (57)) + (Prims.of_int (67)) (Prims.of_int (140))) + (Prims.mk_range "FStar.Tactics.Print.fst" + (Prims.of_int (67)) (Prims.of_int (51)) + (Prims.of_int (67)) (Prims.of_int (140))) + (Obj.magic + (FStar_Tactics_Effect.tac_bind + (Prims.mk_range "FStar.Tactics.Print.fst" + (Prims.of_int (67)) + (Prims.of_int (58)) + (Prims.of_int (67)) + (Prims.of_int (78))) + (Prims.mk_range "FStar.Tactics.Print.fst" + (Prims.of_int (67)) + (Prims.of_int (57)) + (Prims.of_int (67)) + (Prims.of_int (140))) + (Obj.magic (term_to_ast_string e)) + (fun uu___2 -> + (fun uu___2 -> + Obj.magic + (FStar_Tactics_Effect.tac_bind + (Prims.mk_range + "FStar.Tactics.Print.fst" + (Prims.of_int (67)) + (Prims.of_int (81)) + (Prims.of_int (67)) + (Prims.of_int (139))) + (Prims.mk_range "prims.fst" + (Prims.of_int (606)) + (Prims.of_int (19)) + (Prims.of_int (606)) + (Prims.of_int (31))) + (Obj.magic + (FStar_Tactics_Effect.tac_bind + (Prims.mk_range + "FStar.Tactics.Print.fst" + (Prims.of_int (67)) + (Prims.of_int (88)) + (Prims.of_int (67)) + (Prims.of_int (139))) + (Prims.mk_range + "prims.fst" + (Prims.of_int (606)) + (Prims.of_int (19)) + (Prims.of_int (606)) + (Prims.of_int (31))) + (Obj.magic + (FStar_Tactics_Effect.tac_bind + (Prims.mk_range + "FStar.Tactics.Print.fst" + (Prims.of_int (67)) + (Prims.of_int (88)) + (Prims.of_int (67)) + (Prims.of_int (108))) + (Prims.mk_range + "prims.fst" + (Prims.of_int (606)) + (Prims.of_int (19)) + (Prims.of_int (606)) + (Prims.of_int (31))) + (Obj.magic + (term_to_ast_string + t1)) + (fun uu___3 -> + FStar_Tactics_Effect.lift_div_tac + (fun uu___4 + -> + Prims.strcat + uu___3 + (Prims.strcat + ", " + (Prims.string_of_bool + use_eq)))))) + (fun uu___3 -> + FStar_Tactics_Effect.lift_div_tac + (fun uu___4 -> + Prims.strcat + ", " uu___3)))) + (fun uu___3 -> + FStar_Tactics_Effect.lift_div_tac + (fun uu___4 -> + Prims.strcat uu___2 + uu___3)))) uu___2))) + (fun uu___2 -> + FStar_Tactics_Effect.lift_div_tac + (fun uu___3 -> paren uu___2)))) + (fun uu___2 -> + FStar_Tactics_Effect.lift_div_tac + (fun uu___3 -> + Prims.strcat "Tv_AscribedT " uu___2)))) + | FStar_Reflection_Data.Tv_AscribedC (e, c, uu___1, use_eq) -> + Obj.magic + (Obj.repr + (FStar_Tactics_Effect.tac_bind + (Prims.mk_range "FStar.Tactics.Print.fst" + (Prims.of_int (68)) (Prims.of_int (51)) + (Prims.of_int (68)) (Prims.of_int (140))) + (Prims.mk_range "prims.fst" (Prims.of_int (606)) + (Prims.of_int (19)) (Prims.of_int (606)) + (Prims.of_int (31))) + (Obj.magic + (FStar_Tactics_Effect.tac_bind + (Prims.mk_range "FStar.Tactics.Print.fst" + (Prims.of_int (68)) (Prims.of_int (57)) + (Prims.of_int (68)) (Prims.of_int (140))) + (Prims.mk_range "FStar.Tactics.Print.fst" + (Prims.of_int (68)) (Prims.of_int (51)) + (Prims.of_int (68)) (Prims.of_int (140))) + (Obj.magic + (FStar_Tactics_Effect.tac_bind + (Prims.mk_range "FStar.Tactics.Print.fst" + (Prims.of_int (68)) + (Prims.of_int (58)) + (Prims.of_int (68)) + (Prims.of_int (78))) + (Prims.mk_range "FStar.Tactics.Print.fst" + (Prims.of_int (68)) + (Prims.of_int (57)) + (Prims.of_int (68)) + (Prims.of_int (140))) + (Obj.magic (term_to_ast_string e)) + (fun uu___2 -> + (fun uu___2 -> + Obj.magic + (FStar_Tactics_Effect.tac_bind + (Prims.mk_range + "FStar.Tactics.Print.fst" + (Prims.of_int (68)) + (Prims.of_int (81)) + (Prims.of_int (68)) + (Prims.of_int (139))) + (Prims.mk_range "prims.fst" + (Prims.of_int (606)) + (Prims.of_int (19)) + (Prims.of_int (606)) + (Prims.of_int (31))) + (Obj.magic + (FStar_Tactics_Effect.tac_bind + (Prims.mk_range + "FStar.Tactics.Print.fst" + (Prims.of_int (68)) + (Prims.of_int (88)) + (Prims.of_int (68)) + (Prims.of_int (139))) + (Prims.mk_range + "prims.fst" + (Prims.of_int (606)) + (Prims.of_int (19)) + (Prims.of_int (606)) + (Prims.of_int (31))) + (Obj.magic + (FStar_Tactics_Effect.tac_bind + (Prims.mk_range + "FStar.Tactics.Print.fst" + (Prims.of_int (68)) + (Prims.of_int (88)) + (Prims.of_int (68)) + (Prims.of_int (108))) + (Prims.mk_range + "prims.fst" + (Prims.of_int (606)) + (Prims.of_int (19)) + (Prims.of_int (606)) + (Prims.of_int (31))) + (Obj.magic + (comp_to_ast_string + c)) + (fun uu___3 -> + FStar_Tactics_Effect.lift_div_tac + (fun uu___4 + -> + Prims.strcat + uu___3 + (Prims.strcat + ", " + (Prims.string_of_bool + use_eq)))))) + (fun uu___3 -> + FStar_Tactics_Effect.lift_div_tac + (fun uu___4 -> + Prims.strcat + ", " uu___3)))) + (fun uu___3 -> + FStar_Tactics_Effect.lift_div_tac + (fun uu___4 -> + Prims.strcat uu___2 + uu___3)))) uu___2))) + (fun uu___2 -> + FStar_Tactics_Effect.lift_div_tac + (fun uu___3 -> paren uu___2)))) + (fun uu___2 -> + FStar_Tactics_Effect.lift_div_tac + (fun uu___3 -> + Prims.strcat "Tv_AscribedC " uu___2)))) + | FStar_Reflection_Data.Tv_Unknown -> + Obj.magic + (Obj.repr + (FStar_Tactics_Effect.lift_div_tac (fun uu___1 -> "_")))) + uu___) +and (match_returns_to_string : + FStar_Reflection_Types.match_returns_ascription + FStar_Pervasives_Native.option -> + (Prims.string, unit) FStar_Tactics_Effect.tac_repr) + = + fun ret_opt -> + FStar_Tactics_Effect.tac_bind + (Prims.mk_range "FStar.Tactics.Print.fst" (Prims.of_int (73)) + (Prims.of_int (4)) (Prims.of_int (75)) (Prims.of_int (51))) + (Prims.mk_range "FStar.Tactics.Print.fst" (Prims.of_int (76)) + (Prims.of_int (2)) (Prims.of_int (83)) (Prims.of_int (78))) + (FStar_Tactics_Effect.lift_div_tac + (fun uu___1 -> + fun uu___ -> + (fun uu___ -> + fun tacopt -> + match tacopt with + | FStar_Pervasives_Native.None -> + Obj.magic + (Obj.repr + (FStar_Tactics_Effect.lift_div_tac + (fun uu___1 -> ""))) + | FStar_Pervasives_Native.Some tac -> + Obj.magic + (Obj.repr + (FStar_Tactics_Effect.tac_bind + (Prims.mk_range "FStar.Tactics.Print.fst" + (Prims.of_int (75)) (Prims.of_int (27)) + (Prims.of_int (75)) (Prims.of_int (51))) + (Prims.mk_range "prims.fst" + (Prims.of_int (606)) (Prims.of_int (19)) + (Prims.of_int (606)) (Prims.of_int (31))) + (Obj.magic (term_to_ast_string tac)) + (fun uu___1 -> + FStar_Tactics_Effect.lift_div_tac + (fun uu___2 -> Prims.strcat " by " uu___1))))) + uu___1 uu___)) + (fun uu___ -> + (fun tacopt_to_string -> + match ret_opt with + | FStar_Pervasives_Native.None -> + Obj.magic + (Obj.repr + (FStar_Tactics_Effect.lift_div_tac (fun uu___ -> ""))) + | FStar_Pervasives_Native.Some (b, asc) -> + Obj.magic + (Obj.repr + (FStar_Tactics_Effect.tac_bind + (Prims.mk_range "FStar.Tactics.Print.fst" + (Prims.of_int (81)) (Prims.of_int (4)) + (Prims.of_int (83)) (Prims.of_int (78))) + (Prims.mk_range "prims.fst" (Prims.of_int (606)) + (Prims.of_int (19)) (Prims.of_int (606)) + (Prims.of_int (31))) + (match asc with + | (FStar_Pervasives.Inl t, tacopt, uu___) -> + Obj.magic + (FStar_Tactics_Effect.tac_bind + (Prims.mk_range "FStar.Tactics.Print.fst" + (Prims.of_int (82)) (Prims.of_int (27)) + (Prims.of_int (82)) (Prims.of_int (49))) + (Prims.mk_range "FStar.Tactics.Print.fst" + (Prims.of_int (82)) (Prims.of_int (27)) + (Prims.of_int (82)) (Prims.of_int (77))) + (Obj.magic (term_to_ast_string t)) + (fun uu___1 -> + (fun uu___1 -> + Obj.magic + (FStar_Tactics_Effect.tac_bind + (Prims.mk_range + "FStar.Tactics.Print.fst" + (Prims.of_int (82)) + (Prims.of_int (52)) + (Prims.of_int (82)) + (Prims.of_int (77))) + (Prims.mk_range "prims.fst" + (Prims.of_int (606)) + (Prims.of_int (19)) + (Prims.of_int (606)) + (Prims.of_int (31))) + (Obj.magic + (tacopt_to_string tacopt)) + (fun uu___2 -> + FStar_Tactics_Effect.lift_div_tac + (fun uu___3 -> + Prims.strcat uu___1 + uu___2)))) uu___1)) + | (FStar_Pervasives.Inr c, tacopt, uu___) -> + Obj.magic + (FStar_Tactics_Effect.tac_bind + (Prims.mk_range "FStar.Tactics.Print.fst" + (Prims.of_int (83)) (Prims.of_int (27)) + (Prims.of_int (83)) (Prims.of_int (49))) + (Prims.mk_range "FStar.Tactics.Print.fst" + (Prims.of_int (83)) (Prims.of_int (27)) + (Prims.of_int (83)) (Prims.of_int (77))) + (Obj.magic (comp_to_ast_string c)) + (fun uu___1 -> + (fun uu___1 -> + Obj.magic + (FStar_Tactics_Effect.tac_bind + (Prims.mk_range + "FStar.Tactics.Print.fst" + (Prims.of_int (83)) + (Prims.of_int (52)) + (Prims.of_int (83)) + (Prims.of_int (77))) + (Prims.mk_range "prims.fst" + (Prims.of_int (606)) + (Prims.of_int (19)) + (Prims.of_int (606)) + (Prims.of_int (31))) + (Obj.magic + (tacopt_to_string tacopt)) + (fun uu___2 -> + FStar_Tactics_Effect.lift_div_tac + (fun uu___3 -> + Prims.strcat uu___1 + uu___2)))) uu___1))) + (fun uu___ -> + FStar_Tactics_Effect.lift_div_tac + (fun uu___1 -> + Prims.strcat + (Prims.strcat + (FStar_Reflection_Derived.binder_to_string + b) " ") uu___))))) uu___) +and (branches_to_ast_string : + FStar_Reflection_Data.branch Prims.list -> + (Prims.string, unit) FStar_Tactics_Effect.tac_repr) + = fun brs -> print_list branch_to_ast_string brs +and (branch_to_ast_string : + FStar_Reflection_Data.branch -> + (Prims.string, unit) FStar_Tactics_Effect.tac_repr) + = + fun b -> + FStar_Tactics_Effect.tac_bind + (Prims.mk_range "FStar.Tactics.Print.fst" (Prims.of_int (89)) + (Prims.of_int (13)) (Prims.of_int (89)) (Prims.of_int (14))) + (Prims.mk_range "FStar.Tactics.Print.fst" (Prims.of_int (89)) + (Prims.of_int (2)) (Prims.of_int (90)) (Prims.of_int (41))) + (FStar_Tactics_Effect.lift_div_tac (fun uu___ -> b)) + (fun uu___ -> + (fun uu___ -> + match uu___ with + | (p, e) -> + Obj.magic + (FStar_Tactics_Effect.tac_bind + (Prims.mk_range "FStar.Tactics.Print.fst" + (Prims.of_int (90)) (Prims.of_int (8)) + (Prims.of_int (90)) (Prims.of_int (41))) + (Prims.mk_range "FStar.Tactics.Print.fst" + (Prims.of_int (90)) (Prims.of_int (2)) + (Prims.of_int (90)) (Prims.of_int (41))) + (Obj.magic + (FStar_Tactics_Effect.tac_bind + (Prims.mk_range "FStar.Tactics.Print.fst" + (Prims.of_int (90)) (Prims.of_int (20)) + (Prims.of_int (90)) (Prims.of_int (40))) + (Prims.mk_range "prims.fst" (Prims.of_int (606)) + (Prims.of_int (19)) (Prims.of_int (606)) + (Prims.of_int (31))) + (Obj.magic (term_to_ast_string e)) + (fun uu___1 -> + FStar_Tactics_Effect.lift_div_tac + (fun uu___2 -> Prims.strcat "_pat, " uu___1)))) + (fun uu___1 -> + FStar_Tactics_Effect.lift_div_tac + (fun uu___2 -> paren uu___1)))) uu___) +and (comp_to_ast_string : + FStar_Reflection_Types.comp -> + (Prims.string, unit) FStar_Tactics_Effect.tac_repr) + = + fun c -> + match FStar_Reflection_Builtins.inspect_comp c with + | FStar_Reflection_Data.C_Total t -> + FStar_Tactics_Effect.tac_bind + (Prims.mk_range "FStar.Tactics.Print.fst" (Prims.of_int (94)) + (Prims.of_int (26)) (Prims.of_int (94)) (Prims.of_int (46))) + (Prims.mk_range "prims.fst" (Prims.of_int (606)) + (Prims.of_int (19)) (Prims.of_int (606)) (Prims.of_int (31))) + (Obj.magic (term_to_ast_string t)) + (fun uu___ -> + FStar_Tactics_Effect.lift_div_tac + (fun uu___1 -> Prims.strcat "Tot " uu___)) + | FStar_Reflection_Data.C_GTotal t -> + FStar_Tactics_Effect.tac_bind + (Prims.mk_range "FStar.Tactics.Print.fst" (Prims.of_int (95)) + (Prims.of_int (28)) (Prims.of_int (95)) (Prims.of_int (48))) + (Prims.mk_range "prims.fst" (Prims.of_int (606)) + (Prims.of_int (19)) (Prims.of_int (606)) (Prims.of_int (31))) + (Obj.magic (term_to_ast_string t)) + (fun uu___ -> + FStar_Tactics_Effect.lift_div_tac + (fun uu___1 -> Prims.strcat "GTot " uu___)) + | FStar_Reflection_Data.C_Lemma (pre, post, uu___) -> + FStar_Tactics_Effect.tac_bind + (Prims.mk_range "FStar.Tactics.Print.fst" (Prims.of_int (96)) + (Prims.of_int (37)) (Prims.of_int (96)) (Prims.of_int (91))) + (Prims.mk_range "prims.fst" (Prims.of_int (606)) + (Prims.of_int (19)) (Prims.of_int (606)) (Prims.of_int (31))) + (Obj.magic + (FStar_Tactics_Effect.tac_bind + (Prims.mk_range "FStar.Tactics.Print.fst" (Prims.of_int (96)) + (Prims.of_int (37)) (Prims.of_int (96)) + (Prims.of_int (59))) + (Prims.mk_range "FStar.Tactics.Print.fst" (Prims.of_int (96)) + (Prims.of_int (37)) (Prims.of_int (96)) + (Prims.of_int (91))) (Obj.magic (term_to_ast_string pre)) + (fun uu___1 -> + (fun uu___1 -> + Obj.magic + (FStar_Tactics_Effect.tac_bind + (Prims.mk_range "FStar.Tactics.Print.fst" + (Prims.of_int (96)) (Prims.of_int (62)) + (Prims.of_int (96)) (Prims.of_int (91))) + (Prims.mk_range "prims.fst" (Prims.of_int (606)) + (Prims.of_int (19)) (Prims.of_int (606)) + (Prims.of_int (31))) + (Obj.magic + (FStar_Tactics_Effect.tac_bind + (Prims.mk_range "FStar.Tactics.Print.fst" + (Prims.of_int (96)) (Prims.of_int (68)) + (Prims.of_int (96)) (Prims.of_int (91))) + (Prims.mk_range "prims.fst" + (Prims.of_int (606)) (Prims.of_int (19)) + (Prims.of_int (606)) (Prims.of_int (31))) + (Obj.magic (term_to_ast_string post)) + (fun uu___2 -> + FStar_Tactics_Effect.lift_div_tac + (fun uu___3 -> Prims.strcat " " uu___2)))) + (fun uu___2 -> + FStar_Tactics_Effect.lift_div_tac + (fun uu___3 -> Prims.strcat uu___1 uu___2)))) + uu___1))) + (fun uu___1 -> + FStar_Tactics_Effect.lift_div_tac + (fun uu___2 -> Prims.strcat "Lemma " uu___1)) + | FStar_Reflection_Data.C_Eff (us, eff, res, uu___, uu___1) -> + FStar_Tactics_Effect.tac_bind + (Prims.mk_range "FStar.Tactics.Print.fst" (Prims.of_int (98)) + (Prims.of_int (15)) (Prims.of_int (98)) (Prims.of_int (111))) + (Prims.mk_range "prims.fst" (Prims.of_int (606)) + (Prims.of_int (19)) (Prims.of_int (606)) (Prims.of_int (31))) + (Obj.magic + (FStar_Tactics_Effect.tac_bind + (Prims.mk_range "FStar.Tactics.Print.fst" (Prims.of_int (98)) + (Prims.of_int (21)) (Prims.of_int (98)) + (Prims.of_int (111))) + (Prims.mk_range "prims.fst" (Prims.of_int (606)) + (Prims.of_int (19)) (Prims.of_int (606)) + (Prims.of_int (31))) + (Obj.magic + (FStar_Tactics_Effect.tac_bind + (Prims.mk_range "FStar.Tactics.Print.fst" + (Prims.of_int (98)) (Prims.of_int (21)) + (Prims.of_int (98)) (Prims.of_int (47))) + (Prims.mk_range "FStar.Tactics.Print.fst" + (Prims.of_int (98)) (Prims.of_int (21)) + (Prims.of_int (98)) (Prims.of_int (111))) + (Obj.magic (universes_to_ast_string us)) + (fun uu___2 -> + (fun uu___2 -> + Obj.magic + (FStar_Tactics_Effect.tac_bind + (Prims.mk_range "FStar.Tactics.Print.fst" + (Prims.of_int (98)) (Prims.of_int (50)) + (Prims.of_int (98)) (Prims.of_int (111))) + (Prims.mk_range "prims.fst" + (Prims.of_int (606)) (Prims.of_int (19)) + (Prims.of_int (606)) (Prims.of_int (31))) + (Obj.magic + (FStar_Tactics_Effect.tac_bind + (Prims.mk_range + "FStar.Tactics.Print.fst" + (Prims.of_int (98)) + (Prims.of_int (57)) + (Prims.of_int (98)) + (Prims.of_int (111))) + (Prims.mk_range "prims.fst" + (Prims.of_int (606)) + (Prims.of_int (19)) + (Prims.of_int (606)) + (Prims.of_int (31))) + (Obj.magic + (FStar_Tactics_Effect.tac_bind + (Prims.mk_range + "FStar.Tactics.Print.fst" + (Prims.of_int (98)) + (Prims.of_int (63)) + (Prims.of_int (98)) + (Prims.of_int (111))) + (Prims.mk_range + "FStar.Tactics.Print.fst" + (Prims.of_int (98)) + (Prims.of_int (57)) + (Prims.of_int (98)) + (Prims.of_int (111))) + (Obj.magic + (FStar_Tactics_Effect.tac_bind + (Prims.mk_range + "FStar.Tactics.Print.fst" + (Prims.of_int (98)) + (Prims.of_int (81)) + (Prims.of_int (98)) + (Prims.of_int (110))) + (Prims.mk_range + "prims.fst" + (Prims.of_int (606)) + (Prims.of_int (19)) + (Prims.of_int (606)) + (Prims.of_int (31))) + (Obj.magic + (FStar_Tactics_Effect.tac_bind + (Prims.mk_range + "FStar.Tactics.Print.fst" + (Prims.of_int (98)) + (Prims.of_int (88)) + (Prims.of_int (98)) + (Prims.of_int (110))) + (Prims.mk_range + "prims.fst" + (Prims.of_int (606)) + (Prims.of_int (19)) + (Prims.of_int (606)) + (Prims.of_int (31))) + (Obj.magic + (term_to_ast_string + res)) + (fun uu___3 -> + FStar_Tactics_Effect.lift_div_tac + (fun uu___4 -> + Prims.strcat + ", " + uu___3)))) + (fun uu___3 -> + FStar_Tactics_Effect.lift_div_tac + (fun uu___4 -> + Prims.strcat + (FStar_Reflection_Builtins.implode_qn + eff) uu___3)))) + (fun uu___3 -> + FStar_Tactics_Effect.lift_div_tac + (fun uu___4 -> paren uu___3)))) + (fun uu___3 -> + FStar_Tactics_Effect.lift_div_tac + (fun uu___4 -> + Prims.strcat "> " uu___3)))) + (fun uu___3 -> + FStar_Tactics_Effect.lift_div_tac + (fun uu___4 -> + Prims.strcat uu___2 uu___3)))) + uu___2))) + (fun uu___2 -> + FStar_Tactics_Effect.lift_div_tac + (fun uu___3 -> Prims.strcat "<" uu___2)))) + (fun uu___2 -> + FStar_Tactics_Effect.lift_div_tac + (fun uu___3 -> Prims.strcat "Effect" uu___2)) +and (const_to_ast_string : + FStar_Reflection_Data.vconst -> + (Prims.string, unit) FStar_Tactics_Effect.tac_repr) + = + fun uu___ -> + (fun c -> + Obj.magic + (FStar_Tactics_Effect.lift_div_tac + (fun uu___ -> + match c with + | FStar_Reflection_Data.C_Unit -> "C_Unit" + | FStar_Reflection_Data.C_Int i -> + Prims.strcat "C_Int " (Prims.string_of_int i) + | FStar_Reflection_Data.C_True -> "C_True" + | FStar_Reflection_Data.C_False -> "C_False" + | FStar_Reflection_Data.C_String s -> + Prims.strcat "C_String " s + | FStar_Reflection_Data.C_Range uu___1 -> "C_Range _" + | FStar_Reflection_Data.C_Reify -> "C_Reify" + | FStar_Reflection_Data.C_Reflect name -> + Prims.strcat "C_Reflect " + (FStar_Reflection_Builtins.implode_qn name)))) uu___ \ No newline at end of file diff --git a/src/ocaml-output/FStar_Tactics_Printing.ml b/ocaml/fstar-lib/generated/FStar_Tactics_Printing.ml similarity index 100% rename from src/ocaml-output/FStar_Tactics_Printing.ml rename to ocaml/fstar-lib/generated/FStar_Tactics_Printing.ml diff --git a/src/ocaml-output/FStar_Tactics_Result.ml b/ocaml/fstar-lib/generated/FStar_Tactics_Result.ml similarity index 100% rename from src/ocaml-output/FStar_Tactics_Result.ml rename to ocaml/fstar-lib/generated/FStar_Tactics_Result.ml diff --git a/ocaml/fstar-lib/generated/FStar_Tactics_Simplifier.ml b/ocaml/fstar-lib/generated/FStar_Tactics_Simplifier.ml new file mode 100644 index 00000000000..d3708421bb0 --- /dev/null +++ b/ocaml/fstar-lib/generated/FStar_Tactics_Simplifier.ml @@ -0,0 +1,1429 @@ +open Prims +let (tiff : unit -> (unit, unit) FStar_Tactics_Effect.tac_repr) = + fun uu___ -> + FStar_Tactics_Derived.apply_lemma + (FStar_Reflection_Builtins.pack_ln + (FStar_Reflection_Data.Tv_FVar + (FStar_Reflection_Builtins.pack_fv + ["FStar"; "Tactics"; "Simplifier"; "lem_iff_refl"]))) +let (step : unit -> (unit, unit) FStar_Tactics_Effect.tac_repr) = + fun uu___ -> + FStar_Tactics_Derived.apply_lemma + (FStar_Reflection_Builtins.pack_ln + (FStar_Reflection_Data.Tv_FVar + (FStar_Reflection_Builtins.pack_fv + ["FStar"; "Tactics"; "Simplifier"; "lem_iff_trans"]))) +let (is_true : + FStar_Reflection_Types.term -> + (Prims.bool, unit) FStar_Tactics_Effect.tac_repr) + = + fun t -> + FStar_Tactics_Effect.tac_bind + (Prims.mk_range "FStar.Tactics.Simplifier.fst" (Prims.of_int (161)) + (Prims.of_int (16)) (Prims.of_int (161)) (Prims.of_int (34))) + (Prims.mk_range "FStar.Tactics.Simplifier.fst" (Prims.of_int (161)) + (Prims.of_int (10)) (Prims.of_int (174)) (Prims.of_int (14))) + (Obj.magic (FStar_Reflection_Formula.term_as_formula' t)) + (fun uu___ -> + (fun uu___ -> + match uu___ with + | FStar_Reflection_Formula.True_ -> + Obj.magic + (Obj.repr + (FStar_Tactics_Effect.lift_div_tac (fun uu___1 -> true))) + | uu___1 -> + Obj.magic + (Obj.repr + (match FStar_Reflection_Builtins.inspect_ln t with + | FStar_Reflection_Data.Tv_App (l, r) -> + Obj.repr + (match FStar_Reflection_Builtins.inspect_ln l + with + | FStar_Reflection_Data.Tv_Abs (b, t1) -> + Obj.repr + (FStar_Tactics_Effect.tac_bind + (Prims.mk_range + "FStar.Tactics.Simplifier.fst" + (Prims.of_int (167)) + (Prims.of_int (28)) + (Prims.of_int (167)) + (Prims.of_int (46))) + (Prims.mk_range + "FStar.Tactics.Simplifier.fst" + (Prims.of_int (167)) + (Prims.of_int (22)) + (Prims.of_int (169)) + (Prims.of_int (28))) + (Obj.magic + (FStar_Reflection_Formula.term_as_formula' + t1)) + (fun uu___2 -> + FStar_Tactics_Effect.lift_div_tac + (fun uu___3 -> + match uu___2 with + | FStar_Reflection_Formula.True_ + -> true + | uu___4 -> false))) + | uu___2 -> + Obj.repr + (FStar_Tactics_Effect.lift_div_tac + (fun uu___3 -> false))) + | uu___2 -> + Obj.repr + (FStar_Tactics_Effect.lift_div_tac + (fun uu___3 -> false))))) uu___) +let (is_false : + FStar_Reflection_Types.term -> + (Prims.bool, unit) FStar_Tactics_Effect.tac_repr) + = + fun t -> + FStar_Tactics_Effect.tac_bind + (Prims.mk_range "FStar.Tactics.Simplifier.fst" (Prims.of_int (179)) + (Prims.of_int (16)) (Prims.of_int (179)) (Prims.of_int (34))) + (Prims.mk_range "FStar.Tactics.Simplifier.fst" (Prims.of_int (179)) + (Prims.of_int (10)) (Prims.of_int (192)) (Prims.of_int (14))) + (Obj.magic (FStar_Reflection_Formula.term_as_formula' t)) + (fun uu___ -> + (fun uu___ -> + match uu___ with + | FStar_Reflection_Formula.False_ -> + Obj.magic + (Obj.repr + (FStar_Tactics_Effect.lift_div_tac (fun uu___1 -> true))) + | uu___1 -> + Obj.magic + (Obj.repr + (match FStar_Reflection_Builtins.inspect_ln t with + | FStar_Reflection_Data.Tv_App (l, r) -> + Obj.repr + (match FStar_Reflection_Builtins.inspect_ln l + with + | FStar_Reflection_Data.Tv_Abs (b, t1) -> + Obj.repr + (FStar_Tactics_Effect.tac_bind + (Prims.mk_range + "FStar.Tactics.Simplifier.fst" + (Prims.of_int (185)) + (Prims.of_int (28)) + (Prims.of_int (185)) + (Prims.of_int (46))) + (Prims.mk_range + "FStar.Tactics.Simplifier.fst" + (Prims.of_int (185)) + (Prims.of_int (22)) + (Prims.of_int (187)) + (Prims.of_int (28))) + (Obj.magic + (FStar_Reflection_Formula.term_as_formula' + t1)) + (fun uu___2 -> + FStar_Tactics_Effect.lift_div_tac + (fun uu___3 -> + match uu___2 with + | FStar_Reflection_Formula.False_ + -> true + | uu___4 -> false))) + | uu___2 -> + Obj.repr + (FStar_Tactics_Effect.lift_div_tac + (fun uu___3 -> false))) + | uu___2 -> + Obj.repr + (FStar_Tactics_Effect.lift_div_tac + (fun uu___3 -> false))))) uu___) +let (inhabit : unit -> (unit, unit) FStar_Tactics_Effect.tac_repr) = + fun uu___ -> + FStar_Tactics_Effect.tac_bind + (Prims.mk_range "FStar.Tactics.Simplifier.fst" (Prims.of_int (197)) + (Prims.of_int (12)) (Prims.of_int (197)) (Prims.of_int (23))) + (Prims.mk_range "FStar.Tactics.Simplifier.fst" (Prims.of_int (198)) + (Prims.of_int (4)) (Prims.of_int (205)) (Prims.of_int (18))) + (Obj.magic (FStar_Tactics_Derived.cur_goal ())) + (fun uu___1 -> + (fun t -> + match FStar_Reflection_Builtins.inspect_ln t with + | FStar_Reflection_Data.Tv_FVar fv -> + Obj.magic + (FStar_Tactics_Effect.tac_bind + (Prims.mk_range "FStar.Tactics.Simplifier.fst" + (Prims.of_int (200)) (Prims.of_int (17)) + (Prims.of_int (200)) (Prims.of_int (30))) + (Prims.mk_range "FStar.Tactics.Simplifier.fst" + (Prims.of_int (201)) (Prims.of_int (13)) + (Prims.of_int (204)) (Prims.of_int (20))) + (FStar_Tactics_Effect.lift_div_tac + (fun uu___1 -> + FStar_Reflection_Builtins.inspect_fv fv)) + (fun uu___1 -> + (fun qn -> + if qn = FStar_Reflection_Const.int_lid + then + Obj.magic + (FStar_Tactics_Derived.exact + (FStar_Reflection_Builtins.pack_ln + (FStar_Reflection_Data.Tv_Const + (FStar_Reflection_Data.C_Int + (Prims.of_int (42)))))) + else + if qn = FStar_Reflection_Const.bool_lid + then + Obj.magic + (FStar_Tactics_Derived.exact + (FStar_Reflection_Builtins.pack_ln + (FStar_Reflection_Data.Tv_Const + FStar_Reflection_Data.C_True))) + else + if qn = FStar_Reflection_Const.unit_lid + then + Obj.magic + (FStar_Tactics_Derived.exact + (FStar_Reflection_Builtins.pack_ln + (FStar_Reflection_Data.Tv_Const + FStar_Reflection_Data.C_Unit))) + else Obj.magic (FStar_Tactics_Derived.fail "")) + uu___1)) + | uu___1 -> Obj.magic (FStar_Tactics_Derived.fail "")) uu___1) +let rec (simplify_point : unit -> (unit, unit) FStar_Tactics_Effect.tac_repr) + = + fun uu___ -> + FStar_Tactics_Effect.tac_bind + (Prims.mk_range "FStar.Tactics.Simplifier.fst" (Prims.of_int (211)) + (Prims.of_int (4)) (Prims.of_int (211)) (Prims.of_int (14))) + (Prims.mk_range "FStar.Tactics.Simplifier.fst" (Prims.of_int (212)) + (Prims.of_int (4)) (Prims.of_int (266)) (Prims.of_int (81))) + (Obj.magic (recurse ())) + (fun uu___1 -> + (fun uu___1 -> + Obj.magic + (FStar_Tactics_Effect.tac_bind + (Prims.mk_range "FStar.Tactics.Simplifier.fst" + (Prims.of_int (212)) (Prims.of_int (4)) + (Prims.of_int (212)) (Prims.of_int (11))) + (Prims.mk_range "FStar.Tactics.Simplifier.fst" + (Prims.of_int (213)) (Prims.of_int (4)) + (Prims.of_int (266)) (Prims.of_int (81))) + (Obj.magic (FStar_Tactics_Builtins.norm [])) + (fun uu___2 -> + (fun uu___2 -> + Obj.magic + (FStar_Tactics_Effect.tac_bind + (Prims.mk_range "FStar.Tactics.Simplifier.fst" + (Prims.of_int (213)) (Prims.of_int (12)) + (Prims.of_int (213)) (Prims.of_int (23))) + (Prims.mk_range "FStar.Tactics.Simplifier.fst" + (Prims.of_int (214)) (Prims.of_int (4)) + (Prims.of_int (266)) (Prims.of_int (81))) + (Obj.magic (FStar_Tactics_Derived.cur_goal ())) + (fun uu___3 -> + (fun g -> + Obj.magic + (FStar_Tactics_Effect.tac_bind + (Prims.mk_range + "FStar.Tactics.Simplifier.fst" + (Prims.of_int (214)) + (Prims.of_int (12)) + (Prims.of_int (214)) + (Prims.of_int (29))) + (Prims.mk_range + "FStar.Tactics.Simplifier.fst" + (Prims.of_int (215)) + (Prims.of_int (4)) + (Prims.of_int (266)) + (Prims.of_int (81))) + (Obj.magic + (FStar_Reflection_Formula.term_as_formula + g)) + (fun uu___3 -> + (fun f -> + match f with + | FStar_Reflection_Formula.Iff + (l, r) -> + Obj.magic + (FStar_Tactics_Effect.tac_bind + (Prims.mk_range + "FStar.Tactics.Simplifier.fst" + (Prims.of_int (217)) + (Prims.of_int (20)) + (Prims.of_int (217)) + (Prims.of_int (38))) + (Prims.mk_range + "FStar.Tactics.Simplifier.fst" + (Prims.of_int (217)) + (Prims.of_int (14)) + (Prims.of_int (264)) + (Prims.of_int (22))) + (Obj.magic + (FStar_Reflection_Formula.term_as_formula' + l)) + (fun uu___3 -> + (fun uu___3 -> + match uu___3 with + | FStar_Reflection_Formula.And + (p, q) -> + Obj.magic + (FStar_Tactics_Effect.tac_bind + (Prims.mk_range + "FStar.Tactics.Simplifier.fst" + (Prims.of_int (219)) + (Prims.of_int (20)) + (Prims.of_int (219)) + (Prims.of_int (29))) + (Prims.mk_range + "FStar.Tactics.Simplifier.fst" + (Prims.of_int (219)) + (Prims.of_int (17)) + (Prims.of_int (223)) + (Prims.of_int (24))) + (Obj.magic + (is_true + p)) + (fun + uu___4 -> + (fun + uu___4 -> + if uu___4 + then + Obj.magic + (FStar_Tactics_Derived.apply_lemma + (FStar_Reflection_Builtins.pack_ln + (FStar_Reflection_Data.Tv_FVar + (FStar_Reflection_Builtins.pack_fv + ["FStar"; + "Tactics"; + "Simplifier"; + "lem_true_and_p"])))) + else + Obj.magic + (FStar_Tactics_Effect.tac_bind + (Prims.mk_range + "FStar.Tactics.Simplifier.fst" + (Prims.of_int (220)) + (Prims.of_int (20)) + (Prims.of_int (220)) + (Prims.of_int (29))) + (Prims.mk_range + "FStar.Tactics.Simplifier.fst" + (Prims.of_int (220)) + (Prims.of_int (17)) + (Prims.of_int (223)) + (Prims.of_int (24))) + (Obj.magic + (is_true + q)) + (fun + uu___6 -> + (fun + uu___6 -> + if uu___6 + then + Obj.magic + (FStar_Tactics_Derived.apply_lemma + (FStar_Reflection_Builtins.pack_ln + (FStar_Reflection_Data.Tv_FVar + (FStar_Reflection_Builtins.pack_fv + ["FStar"; + "Tactics"; + "Simplifier"; + "lem_p_and_true"])))) + else + Obj.magic + (FStar_Tactics_Effect.tac_bind + (Prims.mk_range + "FStar.Tactics.Simplifier.fst" + (Prims.of_int (221)) + (Prims.of_int (20)) + (Prims.of_int (221)) + (Prims.of_int (30))) + (Prims.mk_range + "FStar.Tactics.Simplifier.fst" + (Prims.of_int (221)) + (Prims.of_int (17)) + (Prims.of_int (223)) + (Prims.of_int (24))) + (Obj.magic + (is_false + p)) + (fun + uu___8 -> + (fun + uu___8 -> + if uu___8 + then + Obj.magic + (FStar_Tactics_Derived.apply_lemma + (FStar_Reflection_Builtins.pack_ln + (FStar_Reflection_Data.Tv_FVar + (FStar_Reflection_Builtins.pack_fv + ["FStar"; + "Tactics"; + "Simplifier"; + "lem_false_and_p"])))) + else + Obj.magic + (FStar_Tactics_Effect.tac_bind + (Prims.mk_range + "FStar.Tactics.Simplifier.fst" + (Prims.of_int (222)) + (Prims.of_int (20)) + (Prims.of_int (222)) + (Prims.of_int (30))) + (Prims.mk_range + "FStar.Tactics.Simplifier.fst" + (Prims.of_int (222)) + (Prims.of_int (17)) + (Prims.of_int (223)) + (Prims.of_int (24))) + (Obj.magic + (is_false + q)) + (fun + uu___10 + -> + (fun + uu___10 + -> + if + uu___10 + then + Obj.magic + (FStar_Tactics_Derived.apply_lemma + (FStar_Reflection_Builtins.pack_ln + (FStar_Reflection_Data.Tv_FVar + (FStar_Reflection_Builtins.pack_fv + ["FStar"; + "Tactics"; + "Simplifier"; + "lem_p_and_false"])))) + else + Obj.magic + (tiff ())) + uu___10))) + uu___8))) + uu___6))) + uu___4)) + | FStar_Reflection_Formula.Or + (p, q) -> + Obj.magic + (FStar_Tactics_Effect.tac_bind + (Prims.mk_range + "FStar.Tactics.Simplifier.fst" + (Prims.of_int (226)) + (Prims.of_int (20)) + (Prims.of_int (226)) + (Prims.of_int (29))) + (Prims.mk_range + "FStar.Tactics.Simplifier.fst" + (Prims.of_int (226)) + (Prims.of_int (17)) + (Prims.of_int (230)) + (Prims.of_int (24))) + (Obj.magic + (is_true + p)) + (fun + uu___4 -> + (fun + uu___4 -> + if uu___4 + then + Obj.magic + (FStar_Tactics_Derived.apply_lemma + (FStar_Reflection_Builtins.pack_ln + (FStar_Reflection_Data.Tv_FVar + (FStar_Reflection_Builtins.pack_fv + ["FStar"; + "Tactics"; + "Simplifier"; + "lem_true_or_p"])))) + else + Obj.magic + (FStar_Tactics_Effect.tac_bind + (Prims.mk_range + "FStar.Tactics.Simplifier.fst" + (Prims.of_int (227)) + (Prims.of_int (20)) + (Prims.of_int (227)) + (Prims.of_int (29))) + (Prims.mk_range + "FStar.Tactics.Simplifier.fst" + (Prims.of_int (227)) + (Prims.of_int (17)) + (Prims.of_int (230)) + (Prims.of_int (24))) + (Obj.magic + (is_true + q)) + (fun + uu___6 -> + (fun + uu___6 -> + if uu___6 + then + Obj.magic + (FStar_Tactics_Derived.apply_lemma + (FStar_Reflection_Builtins.pack_ln + (FStar_Reflection_Data.Tv_FVar + (FStar_Reflection_Builtins.pack_fv + ["FStar"; + "Tactics"; + "Simplifier"; + "lem_p_or_true"])))) + else + Obj.magic + (FStar_Tactics_Effect.tac_bind + (Prims.mk_range + "FStar.Tactics.Simplifier.fst" + (Prims.of_int (228)) + (Prims.of_int (20)) + (Prims.of_int (228)) + (Prims.of_int (30))) + (Prims.mk_range + "FStar.Tactics.Simplifier.fst" + (Prims.of_int (228)) + (Prims.of_int (17)) + (Prims.of_int (230)) + (Prims.of_int (24))) + (Obj.magic + (is_false + p)) + (fun + uu___8 -> + (fun + uu___8 -> + if uu___8 + then + Obj.magic + (FStar_Tactics_Derived.apply_lemma + (FStar_Reflection_Builtins.pack_ln + (FStar_Reflection_Data.Tv_FVar + (FStar_Reflection_Builtins.pack_fv + ["FStar"; + "Tactics"; + "Simplifier"; + "lem_false_or_p"])))) + else + Obj.magic + (FStar_Tactics_Effect.tac_bind + (Prims.mk_range + "FStar.Tactics.Simplifier.fst" + (Prims.of_int (229)) + (Prims.of_int (20)) + (Prims.of_int (229)) + (Prims.of_int (30))) + (Prims.mk_range + "FStar.Tactics.Simplifier.fst" + (Prims.of_int (229)) + (Prims.of_int (17)) + (Prims.of_int (230)) + (Prims.of_int (24))) + (Obj.magic + (is_false + q)) + (fun + uu___10 + -> + (fun + uu___10 + -> + if + uu___10 + then + Obj.magic + (FStar_Tactics_Derived.apply_lemma + (FStar_Reflection_Builtins.pack_ln + (FStar_Reflection_Data.Tv_FVar + (FStar_Reflection_Builtins.pack_fv + ["FStar"; + "Tactics"; + "Simplifier"; + "lem_p_or_false"])))) + else + Obj.magic + (tiff ())) + uu___10))) + uu___8))) + uu___6))) + uu___4)) + | FStar_Reflection_Formula.Implies + (p, q) -> + Obj.magic + (FStar_Tactics_Effect.tac_bind + (Prims.mk_range + "FStar.Tactics.Simplifier.fst" + (Prims.of_int (233)) + (Prims.of_int (20)) + (Prims.of_int (233)) + (Prims.of_int (29))) + (Prims.mk_range + "FStar.Tactics.Simplifier.fst" + (Prims.of_int (233)) + (Prims.of_int (17)) + (Prims.of_int (236)) + (Prims.of_int (24))) + (Obj.magic + (is_true + p)) + (fun + uu___4 -> + (fun + uu___4 -> + if uu___4 + then + Obj.magic + (FStar_Tactics_Derived.apply_lemma + (FStar_Reflection_Builtins.pack_ln + (FStar_Reflection_Data.Tv_FVar + (FStar_Reflection_Builtins.pack_fv + ["FStar"; + "Tactics"; + "Simplifier"; + "lem_true_imp_p"])))) + else + Obj.magic + (FStar_Tactics_Effect.tac_bind + (Prims.mk_range + "FStar.Tactics.Simplifier.fst" + (Prims.of_int (234)) + (Prims.of_int (20)) + (Prims.of_int (234)) + (Prims.of_int (29))) + (Prims.mk_range + "FStar.Tactics.Simplifier.fst" + (Prims.of_int (234)) + (Prims.of_int (17)) + (Prims.of_int (236)) + (Prims.of_int (24))) + (Obj.magic + (is_true + q)) + (fun + uu___6 -> + (fun + uu___6 -> + if uu___6 + then + Obj.magic + (FStar_Tactics_Derived.apply_lemma + (FStar_Reflection_Builtins.pack_ln + (FStar_Reflection_Data.Tv_FVar + (FStar_Reflection_Builtins.pack_fv + ["FStar"; + "Tactics"; + "Simplifier"; + "lem_p_imp_true"])))) + else + Obj.magic + (FStar_Tactics_Effect.tac_bind + (Prims.mk_range + "FStar.Tactics.Simplifier.fst" + (Prims.of_int (235)) + (Prims.of_int (20)) + (Prims.of_int (235)) + (Prims.of_int (30))) + (Prims.mk_range + "FStar.Tactics.Simplifier.fst" + (Prims.of_int (235)) + (Prims.of_int (17)) + (Prims.of_int (236)) + (Prims.of_int (24))) + (Obj.magic + (is_false + p)) + (fun + uu___8 -> + (fun + uu___8 -> + if uu___8 + then + Obj.magic + (FStar_Tactics_Derived.apply_lemma + (FStar_Reflection_Builtins.pack_ln + (FStar_Reflection_Data.Tv_FVar + (FStar_Reflection_Builtins.pack_fv + ["FStar"; + "Tactics"; + "Simplifier"; + "lem_false_imp_p"])))) + else + Obj.magic + (tiff ())) + uu___8))) + uu___6))) + uu___4)) + | FStar_Reflection_Formula.Forall + (b, p) -> + Obj.magic + (FStar_Tactics_Effect.tac_bind + (Prims.mk_range + "FStar.Tactics.Simplifier.fst" + (Prims.of_int (239)) + (Prims.of_int (20)) + (Prims.of_int (239)) + (Prims.of_int (29))) + (Prims.mk_range + "FStar.Tactics.Simplifier.fst" + (Prims.of_int (239)) + (Prims.of_int (17)) + (Prims.of_int (241)) + (Prims.of_int (24))) + (Obj.magic + (is_true + p)) + (fun + uu___4 -> + (fun + uu___4 -> + if uu___4 + then + Obj.magic + (FStar_Tactics_Derived.apply_lemma + (FStar_Reflection_Builtins.pack_ln + (FStar_Reflection_Data.Tv_FVar + (FStar_Reflection_Builtins.pack_fv + ["FStar"; + "Tactics"; + "Simplifier"; + "lem_fa_true"])))) + else + Obj.magic + (FStar_Tactics_Effect.tac_bind + (Prims.mk_range + "FStar.Tactics.Simplifier.fst" + (Prims.of_int (240)) + (Prims.of_int (20)) + (Prims.of_int (240)) + (Prims.of_int (30))) + (Prims.mk_range + "FStar.Tactics.Simplifier.fst" + (Prims.of_int (240)) + (Prims.of_int (17)) + (Prims.of_int (241)) + (Prims.of_int (24))) + (Obj.magic + (is_false + p)) + (fun + uu___6 -> + (fun + uu___6 -> + if uu___6 + then + Obj.magic + (FStar_Tactics_Derived.or_else + (fun + uu___7 -> + FStar_Tactics_Effect.tac_bind + (Prims.mk_range + "FStar.Tactics.Simplifier.fst" + (Prims.of_int (240)) + (Prims.of_int (55)) + (Prims.of_int (240)) + (Prims.of_int (82))) + (Prims.mk_range + "FStar.Tactics.Simplifier.fst" + (Prims.of_int (240)) + (Prims.of_int (84)) + (Prims.of_int (240)) + (Prims.of_int (94))) + (Obj.magic + (FStar_Tactics_Derived.apply_lemma + (FStar_Reflection_Builtins.pack_ln + (FStar_Reflection_Data.Tv_FVar + (FStar_Reflection_Builtins.pack_fv + ["FStar"; + "Tactics"; + "Simplifier"; + "lem_fa_false"]))))) + (fun + uu___8 -> + (fun + uu___8 -> + Obj.magic + (inhabit + ())) + uu___8)) + tiff) + else + Obj.magic + (tiff ())) + uu___6))) + uu___4)) + | FStar_Reflection_Formula.Exists + (b, p) -> + Obj.magic + (FStar_Tactics_Effect.tac_bind + (Prims.mk_range + "FStar.Tactics.Simplifier.fst" + (Prims.of_int (244)) + (Prims.of_int (20)) + (Prims.of_int (244)) + (Prims.of_int (30))) + (Prims.mk_range + "FStar.Tactics.Simplifier.fst" + (Prims.of_int (244)) + (Prims.of_int (17)) + (Prims.of_int (246)) + (Prims.of_int (24))) + (Obj.magic + (is_false + p)) + (fun + uu___4 -> + (fun + uu___4 -> + if uu___4 + then + Obj.magic + (FStar_Tactics_Derived.apply_lemma + (FStar_Reflection_Builtins.pack_ln + (FStar_Reflection_Data.Tv_FVar + (FStar_Reflection_Builtins.pack_fv + ["FStar"; + "Tactics"; + "Simplifier"; + "lem_ex_false"])))) + else + Obj.magic + (FStar_Tactics_Effect.tac_bind + (Prims.mk_range + "FStar.Tactics.Simplifier.fst" + (Prims.of_int (245)) + (Prims.of_int (20)) + (Prims.of_int (245)) + (Prims.of_int (30))) + (Prims.mk_range + "FStar.Tactics.Simplifier.fst" + (Prims.of_int (245)) + (Prims.of_int (17)) + (Prims.of_int (246)) + (Prims.of_int (24))) + (Obj.magic + (is_true + p)) + (fun + uu___6 -> + (fun + uu___6 -> + if uu___6 + then + Obj.magic + (FStar_Tactics_Derived.or_else + (fun + uu___7 -> + FStar_Tactics_Effect.tac_bind + (Prims.mk_range + "FStar.Tactics.Simplifier.fst" + (Prims.of_int (245)) + (Prims.of_int (55)) + (Prims.of_int (245)) + (Prims.of_int (81))) + (Prims.mk_range + "FStar.Tactics.Simplifier.fst" + (Prims.of_int (245)) + (Prims.of_int (83)) + (Prims.of_int (245)) + (Prims.of_int (93))) + (Obj.magic + (FStar_Tactics_Derived.apply_lemma + (FStar_Reflection_Builtins.pack_ln + (FStar_Reflection_Data.Tv_FVar + (FStar_Reflection_Builtins.pack_fv + ["FStar"; + "Tactics"; + "Simplifier"; + "lem_ex_true"]))))) + (fun + uu___8 -> + (fun + uu___8 -> + Obj.magic + (inhabit + ())) + uu___8)) + tiff) + else + Obj.magic + (tiff ())) + uu___6))) + uu___4)) + | FStar_Reflection_Formula.Not + p -> + Obj.magic + (FStar_Tactics_Effect.tac_bind + (Prims.mk_range + "FStar.Tactics.Simplifier.fst" + (Prims.of_int (249)) + (Prims.of_int (20)) + (Prims.of_int (249)) + (Prims.of_int (29))) + (Prims.mk_range + "FStar.Tactics.Simplifier.fst" + (Prims.of_int (249)) + (Prims.of_int (17)) + (Prims.of_int (251)) + (Prims.of_int (24))) + (Obj.magic + (is_true + p)) + (fun + uu___4 -> + (fun + uu___4 -> + if uu___4 + then + Obj.magic + (FStar_Tactics_Derived.apply_lemma + (FStar_Reflection_Builtins.pack_ln + (FStar_Reflection_Data.Tv_FVar + (FStar_Reflection_Builtins.pack_fv + ["FStar"; + "Tactics"; + "Simplifier"; + "lem_neg_true"])))) + else + Obj.magic + (FStar_Tactics_Effect.tac_bind + (Prims.mk_range + "FStar.Tactics.Simplifier.fst" + (Prims.of_int (250)) + (Prims.of_int (20)) + (Prims.of_int (250)) + (Prims.of_int (30))) + (Prims.mk_range + "FStar.Tactics.Simplifier.fst" + (Prims.of_int (250)) + (Prims.of_int (17)) + (Prims.of_int (251)) + (Prims.of_int (24))) + (Obj.magic + (is_false + p)) + (fun + uu___6 -> + (fun + uu___6 -> + if uu___6 + then + Obj.magic + (FStar_Tactics_Derived.apply_lemma + (FStar_Reflection_Builtins.pack_ln + (FStar_Reflection_Data.Tv_FVar + (FStar_Reflection_Builtins.pack_fv + ["FStar"; + "Tactics"; + "Simplifier"; + "lem_neg_false"])))) + else + Obj.magic + (tiff ())) + uu___6))) + uu___4)) + | FStar_Reflection_Formula.Iff + (p, q) -> + Obj.magic + (FStar_Tactics_Effect.tac_bind + (Prims.mk_range + "FStar.Tactics.Simplifier.fst" + (Prims.of_int (256)) + (Prims.of_int (12)) + (Prims.of_int (256)) + (Prims.of_int (19))) + (Prims.mk_range + "FStar.Tactics.Simplifier.fst" + (Prims.of_int (257)) + (Prims.of_int (17)) + (Prims.of_int (262)) + (Prims.of_int (29))) + (Obj.magic + (step ())) + (fun + uu___4 -> + (fun + uu___4 -> + Obj.magic + (FStar_Tactics_Effect.tac_bind + (Prims.mk_range + "FStar.Tactics.Simplifier.fst" + (Prims.of_int (257)) + (Prims.of_int (17)) + (Prims.of_int (261)) + (Prims.of_int (24))) + (Prims.mk_range + "FStar.Tactics.Simplifier.fst" + (Prims.of_int (262)) + (Prims.of_int (12)) + (Prims.of_int (262)) + (Prims.of_int (29))) + (Obj.magic + (FStar_Tactics_Effect.tac_bind + (Prims.mk_range + "FStar.Tactics.Simplifier.fst" + (Prims.of_int (257)) + (Prims.of_int (20)) + (Prims.of_int (257)) + (Prims.of_int (29))) + (Prims.mk_range + "FStar.Tactics.Simplifier.fst" + (Prims.of_int (257)) + (Prims.of_int (17)) + (Prims.of_int (261)) + (Prims.of_int (24))) + (Obj.magic + (is_true + p)) + (fun + uu___5 -> + (fun + uu___5 -> + if uu___5 + then + Obj.magic + (FStar_Tactics_Derived.apply_lemma + (FStar_Reflection_Builtins.pack_ln + (FStar_Reflection_Data.Tv_FVar + (FStar_Reflection_Builtins.pack_fv + ["FStar"; + "Tactics"; + "Simplifier"; + "lem_true_iff_p"])))) + else + Obj.magic + (FStar_Tactics_Effect.tac_bind + (Prims.mk_range + "FStar.Tactics.Simplifier.fst" + (Prims.of_int (258)) + (Prims.of_int (20)) + (Prims.of_int (258)) + (Prims.of_int (29))) + (Prims.mk_range + "FStar.Tactics.Simplifier.fst" + (Prims.of_int (258)) + (Prims.of_int (17)) + (Prims.of_int (261)) + (Prims.of_int (24))) + (Obj.magic + (is_true + q)) + (fun + uu___7 -> + (fun + uu___7 -> + if uu___7 + then + Obj.magic + (FStar_Tactics_Derived.apply_lemma + (FStar_Reflection_Builtins.pack_ln + (FStar_Reflection_Data.Tv_FVar + (FStar_Reflection_Builtins.pack_fv + ["FStar"; + "Tactics"; + "Simplifier"; + "lem_p_iff_true"])))) + else + Obj.magic + (FStar_Tactics_Effect.tac_bind + (Prims.mk_range + "FStar.Tactics.Simplifier.fst" + (Prims.of_int (259)) + (Prims.of_int (20)) + (Prims.of_int (259)) + (Prims.of_int (30))) + (Prims.mk_range + "FStar.Tactics.Simplifier.fst" + (Prims.of_int (259)) + (Prims.of_int (17)) + (Prims.of_int (261)) + (Prims.of_int (24))) + (Obj.magic + (is_false + p)) + (fun + uu___9 -> + (fun + uu___9 -> + if uu___9 + then + Obj.magic + (FStar_Tactics_Derived.apply_lemma + (FStar_Reflection_Builtins.pack_ln + (FStar_Reflection_Data.Tv_FVar + (FStar_Reflection_Builtins.pack_fv + ["FStar"; + "Tactics"; + "Simplifier"; + "lem_false_iff_p"])))) + else + Obj.magic + (FStar_Tactics_Effect.tac_bind + (Prims.mk_range + "FStar.Tactics.Simplifier.fst" + (Prims.of_int (260)) + (Prims.of_int (20)) + (Prims.of_int (260)) + (Prims.of_int (30))) + (Prims.mk_range + "FStar.Tactics.Simplifier.fst" + (Prims.of_int (260)) + (Prims.of_int (17)) + (Prims.of_int (261)) + (Prims.of_int (24))) + (Obj.magic + (is_false + q)) + (fun + uu___11 + -> + (fun + uu___11 + -> + if + uu___11 + then + Obj.magic + (FStar_Tactics_Derived.apply_lemma + (FStar_Reflection_Builtins.pack_ln + (FStar_Reflection_Data.Tv_FVar + (FStar_Reflection_Builtins.pack_fv + ["FStar"; + "Tactics"; + "Simplifier"; + "lem_p_iff_false"])))) + else + Obj.magic + (tiff ())) + uu___11))) + uu___9))) + uu___7))) + uu___5))) + (fun + uu___5 -> + (fun + uu___5 -> + Obj.magic + (simplify_point + ())) + uu___5))) + uu___4)) + | uu___4 -> + Obj.magic + (tiff ())) + uu___3)) + | uu___3 -> + Obj.magic + (FStar_Tactics_Derived.fail + "simplify_point: failed precondition: goal should be `g <==> ?u`")) + uu___3))) uu___3))) uu___2))) + uu___1) +and (recurse : unit -> (unit, unit) FStar_Tactics_Effect.tac_repr) = + fun uu___ -> + FStar_Tactics_Effect.tac_bind + (Prims.mk_range "FStar.Tactics.Simplifier.fst" (Prims.of_int (269)) + (Prims.of_int (4)) (Prims.of_int (269)) (Prims.of_int (11))) + (Prims.mk_range "FStar.Tactics.Simplifier.fst" (Prims.of_int (270)) + (Prims.of_int (4)) (Prims.of_int (304)) (Prims.of_int (74))) + (Obj.magic (step ())) + (fun uu___1 -> + (fun uu___1 -> + Obj.magic + (FStar_Tactics_Effect.tac_bind + (Prims.mk_range "FStar.Tactics.Simplifier.fst" + (Prims.of_int (270)) (Prims.of_int (4)) + (Prims.of_int (270)) (Prims.of_int (11))) + (Prims.mk_range "FStar.Tactics.Simplifier.fst" + (Prims.of_int (271)) (Prims.of_int (4)) + (Prims.of_int (304)) (Prims.of_int (74))) + (Obj.magic (FStar_Tactics_Builtins.norm [])) + (fun uu___2 -> + (fun uu___2 -> + Obj.magic + (FStar_Tactics_Effect.tac_bind + (Prims.mk_range "FStar.Tactics.Simplifier.fst" + (Prims.of_int (271)) (Prims.of_int (12)) + (Prims.of_int (271)) (Prims.of_int (23))) + (Prims.mk_range "FStar.Tactics.Simplifier.fst" + (Prims.of_int (272)) (Prims.of_int (4)) + (Prims.of_int (304)) (Prims.of_int (74))) + (Obj.magic (FStar_Tactics_Derived.cur_goal ())) + (fun uu___3 -> + (fun g -> + Obj.magic + (FStar_Tactics_Effect.tac_bind + (Prims.mk_range + "FStar.Tactics.Simplifier.fst" + (Prims.of_int (272)) + (Prims.of_int (12)) + (Prims.of_int (272)) + (Prims.of_int (29))) + (Prims.mk_range + "FStar.Tactics.Simplifier.fst" + (Prims.of_int (273)) + (Prims.of_int (4)) + (Prims.of_int (304)) + (Prims.of_int (74))) + (Obj.magic + (FStar_Reflection_Formula.term_as_formula + g)) + (fun uu___3 -> + (fun f -> + match f with + | FStar_Reflection_Formula.Iff + (l, r) -> + Obj.magic + (FStar_Tactics_Effect.tac_bind + (Prims.mk_range + "FStar.Tactics.Simplifier.fst" + (Prims.of_int (275)) + (Prims.of_int (20)) + (Prims.of_int (275)) + (Prims.of_int (38))) + (Prims.mk_range + "FStar.Tactics.Simplifier.fst" + (Prims.of_int (275)) + (Prims.of_int (14)) + (Prims.of_int (302)) + (Prims.of_int (22))) + (Obj.magic + (FStar_Reflection_Formula.term_as_formula' + l)) + (fun uu___3 -> + (fun uu___3 -> + match uu___3 with + | FStar_Reflection_Formula.And + (uu___4, + uu___5) + -> + Obj.magic + (FStar_Tactics_Derived.seq + (fun + uu___6 -> + FStar_Tactics_Derived.apply_lemma + (FStar_Reflection_Builtins.pack_ln + (FStar_Reflection_Data.Tv_FVar + (FStar_Reflection_Builtins.pack_fv + ["FStar"; + "Tactics"; + "Simplifier"; + "and_cong"])))) + simplify_point) + | FStar_Reflection_Formula.Or + (uu___4, + uu___5) + -> + Obj.magic + (FStar_Tactics_Derived.seq + (fun + uu___6 -> + FStar_Tactics_Derived.apply_lemma + (FStar_Reflection_Builtins.pack_ln + (FStar_Reflection_Data.Tv_FVar + (FStar_Reflection_Builtins.pack_fv + ["FStar"; + "Tactics"; + "Simplifier"; + "or_cong"])))) + simplify_point) + | FStar_Reflection_Formula.Implies + (uu___4, + uu___5) + -> + Obj.magic + (FStar_Tactics_Derived.seq + (fun + uu___6 -> + FStar_Tactics_Derived.apply_lemma + (FStar_Reflection_Builtins.pack_ln + (FStar_Reflection_Data.Tv_FVar + (FStar_Reflection_Builtins.pack_fv + ["FStar"; + "Tactics"; + "Simplifier"; + "imp_cong"])))) + simplify_point) + | FStar_Reflection_Formula.Forall + (uu___4, + uu___5) + -> + Obj.magic + (FStar_Tactics_Effect.tac_bind + (Prims.mk_range + "FStar.Tactics.Simplifier.fst" + (Prims.of_int (286)) + (Prims.of_int (12)) + (Prims.of_int (286)) + (Prims.of_int (34))) + (Prims.mk_range + "FStar.Tactics.Simplifier.fst" + (Prims.of_int (287)) + (Prims.of_int (12)) + (Prims.of_int (288)) + (Prims.of_int (29))) + (Obj.magic + (FStar_Tactics_Derived.apply_lemma + (FStar_Reflection_Builtins.pack_ln + (FStar_Reflection_Data.Tv_FVar + (FStar_Reflection_Builtins.pack_fv + ["FStar"; + "Tactics"; + "Simplifier"; + "fa_cong"]))))) + (fun + uu___6 -> + (fun + uu___6 -> + Obj.magic + (FStar_Tactics_Effect.tac_bind + (Prims.mk_range + "FStar.Tactics.Simplifier.fst" + (Prims.of_int (287)) + (Prims.of_int (20)) + (Prims.of_int (287)) + (Prims.of_int (28))) + (Prims.mk_range + "FStar.Tactics.Simplifier.fst" + (Prims.of_int (288)) + (Prims.of_int (12)) + (Prims.of_int (288)) + (Prims.of_int (29))) + (Obj.magic + (FStar_Tactics_Builtins.intro + ())) + (fun + uu___7 -> + (fun + uu___7 -> + Obj.magic + (simplify_point + ())) + uu___7))) + uu___6)) + | FStar_Reflection_Formula.Exists + (uu___4, + uu___5) + -> + Obj.magic + (FStar_Tactics_Effect.tac_bind + (Prims.mk_range + "FStar.Tactics.Simplifier.fst" + (Prims.of_int (291)) + (Prims.of_int (12)) + (Prims.of_int (291)) + (Prims.of_int (34))) + (Prims.mk_range + "FStar.Tactics.Simplifier.fst" + (Prims.of_int (292)) + (Prims.of_int (12)) + (Prims.of_int (293)) + (Prims.of_int (29))) + (Obj.magic + (FStar_Tactics_Derived.apply_lemma + (FStar_Reflection_Builtins.pack_ln + (FStar_Reflection_Data.Tv_FVar + (FStar_Reflection_Builtins.pack_fv + ["FStar"; + "Tactics"; + "Simplifier"; + "ex_cong"]))))) + (fun + uu___6 -> + (fun + uu___6 -> + Obj.magic + (FStar_Tactics_Effect.tac_bind + (Prims.mk_range + "FStar.Tactics.Simplifier.fst" + (Prims.of_int (292)) + (Prims.of_int (20)) + (Prims.of_int (292)) + (Prims.of_int (28))) + (Prims.mk_range + "FStar.Tactics.Simplifier.fst" + (Prims.of_int (293)) + (Prims.of_int (12)) + (Prims.of_int (293)) + (Prims.of_int (29))) + (Obj.magic + (FStar_Tactics_Builtins.intro + ())) + (fun + uu___7 -> + (fun + uu___7 -> + Obj.magic + (simplify_point + ())) + uu___7))) + uu___6)) + | FStar_Reflection_Formula.Not + uu___4 -> + Obj.magic + (FStar_Tactics_Effect.tac_bind + (Prims.mk_range + "FStar.Tactics.Simplifier.fst" + (Prims.of_int (296)) + (Prims.of_int (12)) + (Prims.of_int (296)) + (Prims.of_int (35))) + (Prims.mk_range + "FStar.Tactics.Simplifier.fst" + (Prims.of_int (297)) + (Prims.of_int (12)) + (Prims.of_int (297)) + (Prims.of_int (29))) + (Obj.magic + (FStar_Tactics_Derived.apply_lemma + (FStar_Reflection_Builtins.pack_ln + (FStar_Reflection_Data.Tv_FVar + (FStar_Reflection_Builtins.pack_fv + ["FStar"; + "Tactics"; + "Simplifier"; + "neg_cong"]))))) + (fun + uu___5 -> + (fun + uu___5 -> + Obj.magic + (simplify_point + ())) + uu___5)) + | FStar_Reflection_Formula.Iff + (uu___4, + uu___5) + -> + Obj.magic + (FStar_Tactics_Derived.seq + (fun + uu___6 -> + FStar_Tactics_Derived.apply_lemma + (FStar_Reflection_Builtins.pack_ln + (FStar_Reflection_Data.Tv_FVar + (FStar_Reflection_Builtins.pack_fv + ["FStar"; + "Tactics"; + "Simplifier"; + "iff_cong"])))) + simplify_point) + | uu___4 -> + Obj.magic + (tiff ())) + uu___3)) + | uu___3 -> + Obj.magic + (FStar_Tactics_Derived.fail + "recurse: failed precondition: goal should be `g <==> ?u`")) + uu___3))) uu___3))) uu___2))) + uu___1) +let (simplify : unit -> (unit, unit) FStar_Tactics_Effect.tac_repr) = + fun uu___ -> + FStar_Tactics_Effect.tac_bind + (Prims.mk_range "FStar.Tactics.Simplifier.fst" (Prims.of_int (310)) + (Prims.of_int (4)) (Prims.of_int (310)) (Prims.of_int (24))) + (Prims.mk_range "FStar.Tactics.Simplifier.fst" (Prims.of_int (311)) + (Prims.of_int (4)) (Prims.of_int (311)) (Prims.of_int (21))) + (Obj.magic + (FStar_Tactics_Derived.apply_lemma + (FStar_Reflection_Builtins.pack_ln + (FStar_Reflection_Data.Tv_FVar + (FStar_Reflection_Builtins.pack_fv + ["FStar"; "Tactics"; "Simplifier"; "equiv"]))))) + (fun uu___1 -> (fun uu___1 -> Obj.magic (simplify_point ())) uu___1) \ No newline at end of file diff --git a/ocaml/fstar-lib/generated/FStar_Tactics_SyntaxHelpers.ml b/ocaml/fstar-lib/generated/FStar_Tactics_SyntaxHelpers.ml new file mode 100644 index 00000000000..6f6a6fa5759 --- /dev/null +++ b/ocaml/fstar-lib/generated/FStar_Tactics_SyntaxHelpers.ml @@ -0,0 +1,361 @@ +open Prims +let rec (collect_arr' : + FStar_Reflection_Types.binder Prims.list -> + FStar_Reflection_Types.comp -> + ((FStar_Reflection_Types.binder Prims.list * + FStar_Reflection_Types.comp), + unit) FStar_Tactics_Effect.tac_repr) + = + fun uu___1 -> + fun uu___ -> + (fun bs -> + fun c -> + match FStar_Reflection_Builtins.inspect_comp c with + | FStar_Reflection_Data.C_Total t -> + Obj.magic + (Obj.repr + (FStar_Tactics_Effect.tac_bind + (Prims.mk_range "FStar.Tactics.SyntaxHelpers.fst" + (Prims.of_int (14)) (Prims.of_int (20)) + (Prims.of_int (14)) (Prims.of_int (29))) + (Prims.mk_range "FStar.Tactics.SyntaxHelpers.fst" + (Prims.of_int (14)) (Prims.of_int (14)) + (Prims.of_int (18)) (Prims.of_int (19))) + (Obj.magic (FStar_Tactics_Builtins.inspect t)) + (fun uu___ -> + (fun uu___ -> + match uu___ with + | FStar_Reflection_Data.Tv_Arrow (b, c1) -> + Obj.magic + (Obj.repr (collect_arr' (b :: bs) c1)) + | uu___1 -> + Obj.magic + (Obj.repr + (FStar_Tactics_Effect.lift_div_tac + (fun uu___2 -> (bs, c))))) uu___))) + | uu___ -> + Obj.magic + (Obj.repr + (FStar_Tactics_Effect.lift_div_tac + (fun uu___1 -> (bs, c))))) uu___1 uu___ +let (collect_arr_bs : + FStar_Reflection_Types.typ -> + ((FStar_Reflection_Types.binder Prims.list * FStar_Reflection_Types.comp), + unit) FStar_Tactics_Effect.tac_repr) + = + fun t -> + FStar_Tactics_Effect.tac_bind + (Prims.mk_range "FStar.Tactics.SyntaxHelpers.fst" (Prims.of_int (25)) + (Prims.of_int (18)) (Prims.of_int (25)) (Prims.of_int (57))) + (Prims.mk_range "FStar.Tactics.SyntaxHelpers.fst" (Prims.of_int (25)) + (Prims.of_int (4)) (Prims.of_int (26)) (Prims.of_int (29))) + (Obj.magic + (collect_arr' [] + (FStar_Reflection_Builtins.pack_comp + (FStar_Reflection_Data.C_Total t)))) + (fun uu___ -> + FStar_Tactics_Effect.lift_div_tac + (fun uu___1 -> + match uu___ with | (bs, c) -> ((FStar_List_Tot_Base.rev bs), c))) +let (collect_arr : + FStar_Reflection_Types.typ -> + ((FStar_Reflection_Types.typ Prims.list * FStar_Reflection_Types.comp), + unit) FStar_Tactics_Effect.tac_repr) + = + fun t -> + FStar_Tactics_Effect.tac_bind + (Prims.mk_range "FStar.Tactics.SyntaxHelpers.fst" (Prims.of_int (30)) + (Prims.of_int (18)) (Prims.of_int (30)) (Prims.of_int (57))) + (Prims.mk_range "FStar.Tactics.SyntaxHelpers.fst" (Prims.of_int (30)) + (Prims.of_int (4)) (Prims.of_int (32)) (Prims.of_int (29))) + (Obj.magic + (collect_arr' [] + (FStar_Reflection_Builtins.pack_comp + (FStar_Reflection_Data.C_Total t)))) + (fun uu___ -> + FStar_Tactics_Effect.lift_div_tac + (fun uu___1 -> + match uu___ with + | (bs, c) -> + ((FStar_List_Tot_Base.rev + (FStar_List_Tot_Base.map + FStar_Reflection_Derived.type_of_binder bs)), c))) +let rec (collect_abs' : + FStar_Reflection_Types.binder Prims.list -> + FStar_Reflection_Types.term -> + ((FStar_Reflection_Types.binder Prims.list * + FStar_Reflection_Types.term), + unit) FStar_Tactics_Effect.tac_repr) + = + fun bs -> + fun t -> + FStar_Tactics_Effect.tac_bind + (Prims.mk_range "FStar.Tactics.SyntaxHelpers.fst" (Prims.of_int (36)) + (Prims.of_int (10)) (Prims.of_int (36)) (Prims.of_int (19))) + (Prims.mk_range "FStar.Tactics.SyntaxHelpers.fst" (Prims.of_int (36)) + (Prims.of_int (4)) (Prims.of_int (39)) (Prims.of_int (18))) + (Obj.magic (FStar_Tactics_Builtins.inspect t)) + (fun uu___ -> + (fun uu___ -> + match uu___ with + | FStar_Reflection_Data.Tv_Abs (b, t') -> + Obj.magic (Obj.repr (collect_abs' (b :: bs) t')) + | uu___1 -> + Obj.magic + (Obj.repr + (FStar_Tactics_Effect.lift_div_tac + (fun uu___2 -> (bs, t))))) uu___) +let (collect_abs : + FStar_Reflection_Types.term -> + ((FStar_Reflection_Types.binder Prims.list * FStar_Reflection_Types.term), + unit) FStar_Tactics_Effect.tac_repr) + = + fun t -> + FStar_Tactics_Effect.tac_bind + (Prims.mk_range "FStar.Tactics.SyntaxHelpers.fst" (Prims.of_int (43)) + (Prims.of_int (19)) (Prims.of_int (43)) (Prims.of_int (36))) + (Prims.mk_range "FStar.Tactics.SyntaxHelpers.fst" (Prims.of_int (43)) + (Prims.of_int (4)) (Prims.of_int (44)) (Prims.of_int (30))) + (Obj.magic (collect_abs' [] t)) + (fun uu___ -> + FStar_Tactics_Effect.lift_div_tac + (fun uu___1 -> + match uu___ with + | (bs, t') -> ((FStar_List_Tot_Base.rev bs), t'))) +let fail : 'a . Prims.string -> ('a, unit) FStar_Tactics_Effect.tac_repr = + fun m -> FStar_Tactics_Effect.raise (FStar_Tactics_Common.TacticFailure m) +let rec (mk_arr : + FStar_Reflection_Types.binder Prims.list -> + FStar_Reflection_Types.comp -> + (FStar_Reflection_Types.term, unit) FStar_Tactics_Effect.tac_repr) + = + fun bs -> + fun cod -> + match bs with + | [] -> fail "mk_arr, empty binders" + | b::[] -> + FStar_Tactics_Builtins.pack + (FStar_Reflection_Data.Tv_Arrow (b, cod)) + | b::bs1 -> + FStar_Tactics_Effect.tac_bind + (Prims.mk_range "FStar.Tactics.SyntaxHelpers.fst" + (Prims.of_int (55)) (Prims.of_int (11)) (Prims.of_int (55)) + (Prims.of_int (61))) + (Prims.mk_range "FStar.Tactics.SyntaxHelpers.fst" + (Prims.of_int (55)) (Prims.of_int (6)) (Prims.of_int (55)) + (Prims.of_int (61))) + (Obj.magic + (FStar_Tactics_Effect.tac_bind + (Prims.mk_range "FStar.Tactics.SyntaxHelpers.fst" + (Prims.of_int (55)) (Prims.of_int (23)) + (Prims.of_int (55)) (Prims.of_int (60))) + (Prims.mk_range "FStar.Tactics.SyntaxHelpers.fst" + (Prims.of_int (55)) (Prims.of_int (11)) + (Prims.of_int (55)) (Prims.of_int (61))) + (Obj.magic + (FStar_Tactics_Effect.tac_bind + (Prims.mk_range "FStar.Tactics.SyntaxHelpers.fst" + (Prims.of_int (55)) (Prims.of_int (34)) + (Prims.of_int (55)) (Prims.of_int (59))) + (Prims.mk_range "FStar.Tactics.SyntaxHelpers.fst" + (Prims.of_int (55)) (Prims.of_int (23)) + (Prims.of_int (55)) (Prims.of_int (60))) + (Obj.magic + (FStar_Tactics_Effect.tac_bind + (Prims.mk_range + "FStar.Tactics.SyntaxHelpers.fst" + (Prims.of_int (55)) (Prims.of_int (43)) + (Prims.of_int (55)) (Prims.of_int (58))) + (Prims.mk_range + "FStar.Tactics.SyntaxHelpers.fst" + (Prims.of_int (55)) (Prims.of_int (34)) + (Prims.of_int (55)) (Prims.of_int (59))) + (Obj.magic (mk_arr bs1 cod)) + (fun uu___ -> + FStar_Tactics_Effect.lift_div_tac + (fun uu___1 -> + FStar_Reflection_Data.C_Total uu___)))) + (fun uu___ -> + FStar_Tactics_Effect.lift_div_tac + (fun uu___1 -> + FStar_Reflection_Builtins.pack_comp uu___)))) + (fun uu___ -> + FStar_Tactics_Effect.lift_div_tac + (fun uu___1 -> + FStar_Reflection_Data.Tv_Arrow (b, uu___))))) + (fun uu___ -> + (fun uu___ -> Obj.magic (FStar_Tactics_Builtins.pack uu___)) + uu___) +let rec (mk_arr_curried : + FStar_Reflection_Types.binder Prims.list -> + FStar_Reflection_Types.comp -> + (FStar_Reflection_Types.term, unit) FStar_Tactics_Effect.tac_repr) + = + fun bs -> + fun cod -> + match bs with + | [] -> fail "mk_arr, empty binders" + | b::[] -> + FStar_Tactics_Builtins.pack_curried + (FStar_Reflection_Data.Tv_Arrow (b, cod)) + | b::bs1 -> + FStar_Tactics_Effect.tac_bind + (Prims.mk_range "FStar.Tactics.SyntaxHelpers.fst" + (Prims.of_int (61)) (Prims.of_int (30)) (Prims.of_int (61)) + (Prims.of_int (88))) + (Prims.mk_range "FStar.Tactics.SyntaxHelpers.fst" + (Prims.of_int (61)) (Prims.of_int (17)) (Prims.of_int (61)) + (Prims.of_int (88))) + (Obj.magic + (FStar_Tactics_Effect.tac_bind + (Prims.mk_range "FStar.Tactics.SyntaxHelpers.fst" + (Prims.of_int (61)) (Prims.of_int (42)) + (Prims.of_int (61)) (Prims.of_int (87))) + (Prims.mk_range "FStar.Tactics.SyntaxHelpers.fst" + (Prims.of_int (61)) (Prims.of_int (30)) + (Prims.of_int (61)) (Prims.of_int (88))) + (Obj.magic + (FStar_Tactics_Effect.tac_bind + (Prims.mk_range "FStar.Tactics.SyntaxHelpers.fst" + (Prims.of_int (61)) (Prims.of_int (53)) + (Prims.of_int (61)) (Prims.of_int (86))) + (Prims.mk_range "FStar.Tactics.SyntaxHelpers.fst" + (Prims.of_int (61)) (Prims.of_int (42)) + (Prims.of_int (61)) (Prims.of_int (87))) + (Obj.magic + (FStar_Tactics_Effect.tac_bind + (Prims.mk_range + "FStar.Tactics.SyntaxHelpers.fst" + (Prims.of_int (61)) (Prims.of_int (62)) + (Prims.of_int (61)) (Prims.of_int (85))) + (Prims.mk_range + "FStar.Tactics.SyntaxHelpers.fst" + (Prims.of_int (61)) (Prims.of_int (53)) + (Prims.of_int (61)) (Prims.of_int (86))) + (Obj.magic (mk_arr_curried bs1 cod)) + (fun uu___ -> + FStar_Tactics_Effect.lift_div_tac + (fun uu___1 -> + FStar_Reflection_Data.C_Total uu___)))) + (fun uu___ -> + FStar_Tactics_Effect.lift_div_tac + (fun uu___1 -> + FStar_Reflection_Builtins.pack_comp uu___)))) + (fun uu___ -> + FStar_Tactics_Effect.lift_div_tac + (fun uu___1 -> + FStar_Reflection_Data.Tv_Arrow (b, uu___))))) + (fun uu___ -> + (fun uu___ -> + Obj.magic (FStar_Tactics_Builtins.pack_curried uu___)) + uu___) +let rec (mk_tot_arr : + FStar_Reflection_Types.binder Prims.list -> + FStar_Reflection_Types.term -> + (FStar_Reflection_Types.term, unit) FStar_Tactics_Effect.tac_repr) + = + fun uu___1 -> + fun uu___ -> + (fun bs -> + fun cod -> + match bs with + | [] -> + Obj.magic + (Obj.repr + (FStar_Tactics_Effect.lift_div_tac (fun uu___ -> cod))) + | b::bs1 -> + Obj.magic + (Obj.repr + (FStar_Tactics_Effect.tac_bind + (Prims.mk_range "FStar.Tactics.SyntaxHelpers.fst" + (Prims.of_int (67)) (Prims.of_int (11)) + (Prims.of_int (67)) (Prims.of_int (65))) + (Prims.mk_range "FStar.Tactics.SyntaxHelpers.fst" + (Prims.of_int (67)) (Prims.of_int (6)) + (Prims.of_int (67)) (Prims.of_int (65))) + (Obj.magic + (FStar_Tactics_Effect.tac_bind + (Prims.mk_range + "FStar.Tactics.SyntaxHelpers.fst" + (Prims.of_int (67)) (Prims.of_int (23)) + (Prims.of_int (67)) (Prims.of_int (64))) + (Prims.mk_range + "FStar.Tactics.SyntaxHelpers.fst" + (Prims.of_int (67)) (Prims.of_int (11)) + (Prims.of_int (67)) (Prims.of_int (65))) + (Obj.magic + (FStar_Tactics_Effect.tac_bind + (Prims.mk_range + "FStar.Tactics.SyntaxHelpers.fst" + (Prims.of_int (67)) (Prims.of_int (34)) + (Prims.of_int (67)) (Prims.of_int (63))) + (Prims.mk_range + "FStar.Tactics.SyntaxHelpers.fst" + (Prims.of_int (67)) (Prims.of_int (23)) + (Prims.of_int (67)) (Prims.of_int (64))) + (Obj.magic + (FStar_Tactics_Effect.tac_bind + (Prims.mk_range + "FStar.Tactics.SyntaxHelpers.fst" + (Prims.of_int (67)) + (Prims.of_int (43)) + (Prims.of_int (67)) + (Prims.of_int (62))) + (Prims.mk_range + "FStar.Tactics.SyntaxHelpers.fst" + (Prims.of_int (67)) + (Prims.of_int (34)) + (Prims.of_int (67)) + (Prims.of_int (63))) + (Obj.magic (mk_tot_arr bs1 cod)) + (fun uu___ -> + FStar_Tactics_Effect.lift_div_tac + (fun uu___1 -> + FStar_Reflection_Data.C_Total + uu___)))) + (fun uu___ -> + FStar_Tactics_Effect.lift_div_tac + (fun uu___1 -> + FStar_Reflection_Builtins.pack_comp + uu___)))) + (fun uu___ -> + FStar_Tactics_Effect.lift_div_tac + (fun uu___1 -> + FStar_Reflection_Data.Tv_Arrow + (b, uu___))))) + (fun uu___ -> + (fun uu___ -> + Obj.magic (FStar_Tactics_Builtins.pack uu___)) + uu___)))) uu___1 uu___ +let (lookup_lb_view : + FStar_Reflection_Types.letbinding Prims.list -> + FStar_Reflection_Types.name -> + (FStar_Reflection_Data.lb_view, unit) FStar_Tactics_Effect.tac_repr) + = + fun lbs -> + fun nm -> + FStar_Tactics_Effect.tac_bind + (Prims.mk_range "FStar.Tactics.SyntaxHelpers.fst" (Prims.of_int (70)) + (Prims.of_int (10)) (Prims.of_int (74)) (Prims.of_int (16))) + (Prims.mk_range "FStar.Tactics.SyntaxHelpers.fst" (Prims.of_int (76)) + (Prims.of_int (2)) (Prims.of_int (78)) (Prims.of_int (56))) + (FStar_Tactics_Effect.lift_div_tac + (fun uu___ -> + FStar_List_Tot_Base.find + (fun lb -> + (FStar_Reflection_Builtins.inspect_fv + (FStar_Reflection_Builtins.inspect_lb lb).FStar_Reflection_Data.lb_fv) + = nm) lbs)) + (fun uu___ -> + (fun o -> + match o with + | FStar_Pervasives_Native.Some lb -> + Obj.magic + (Obj.repr + (FStar_Tactics_Effect.lift_div_tac + (fun uu___ -> + FStar_Reflection_Builtins.inspect_lb lb))) + | FStar_Pervasives_Native.None -> + Obj.magic + (Obj.repr (fail "lookup_lb_view: Name not in let group"))) + uu___) \ No newline at end of file diff --git a/ocaml/fstar-lib/generated/FStar_Tactics_Typeclasses.ml b/ocaml/fstar-lib/generated/FStar_Tactics_Typeclasses.ml new file mode 100644 index 00000000000..df399efc6e2 --- /dev/null +++ b/ocaml/fstar-lib/generated/FStar_Tactics_Typeclasses.ml @@ -0,0 +1,1530 @@ +open Prims +let rec first : + 'a 'b . + ('a -> ('b, unit) FStar_Tactics_Effect.tac_repr) -> + 'a Prims.list -> ('b, unit) FStar_Tactics_Effect.tac_repr + = + fun f -> + fun l -> + match l with + | [] -> FStar_Tactics_Derived.fail "no cands" + | x::xs -> + FStar_Tactics_Derived.or_else (fun uu___ -> f x) + (fun uu___ -> first f xs) +let rec (tcresolve' : + FStar_Reflection_Types.term Prims.list -> + Prims.int -> (unit, unit) FStar_Tactics_Effect.tac_repr) + = + fun seen -> + fun fuel -> + FStar_Tactics_Effect.tac_bind + (Prims.mk_range "FStar.Tactics.Typeclasses.fst" (Prims.of_int (43)) + (Prims.of_int (4)) (Prims.of_int (44)) (Prims.of_int (26))) + (Prims.mk_range "FStar.Tactics.Typeclasses.fst" (Prims.of_int (45)) + (Prims.of_int (4)) (Prims.of_int (50)) (Prims.of_int (137))) + (if fuel <= Prims.int_zero + then Obj.magic (Obj.repr (FStar_Tactics_Derived.fail "out of fuel")) + else + Obj.magic + (Obj.repr (FStar_Tactics_Effect.lift_div_tac (fun uu___1 -> ())))) + (fun uu___ -> + (fun uu___ -> + Obj.magic + (FStar_Tactics_Effect.tac_bind + (Prims.mk_range "FStar.Tactics.Typeclasses.fst" + (Prims.of_int (45)) (Prims.of_int (4)) + (Prims.of_int (45)) (Prims.of_int (42))) + (Prims.mk_range "FStar.Tactics.Typeclasses.fst" + (Prims.of_int (46)) (Prims.of_int (4)) + (Prims.of_int (50)) (Prims.of_int (137))) + (Obj.magic + (FStar_Tactics_Derived.debug + (Prims.strcat "fuel = " (Prims.string_of_int fuel)))) + (fun uu___1 -> + (fun uu___1 -> + Obj.magic + (FStar_Tactics_Effect.tac_bind + (Prims.mk_range "FStar.Tactics.Typeclasses.fst" + (Prims.of_int (46)) (Prims.of_int (12)) + (Prims.of_int (46)) (Prims.of_int (23))) + (Prims.mk_range "FStar.Tactics.Typeclasses.fst" + (Prims.of_int (47)) (Prims.of_int (4)) + (Prims.of_int (50)) (Prims.of_int (137))) + (Obj.magic (FStar_Tactics_Derived.cur_goal ())) + (fun uu___2 -> + (fun g -> + Obj.magic + (FStar_Tactics_Effect.tac_bind + (Prims.mk_range + "FStar.Tactics.Typeclasses.fst" + (Prims.of_int (47)) + (Prims.of_int (4)) + (Prims.of_int (48)) + (Prims.of_int (17))) + (Prims.mk_range + "FStar.Tactics.Typeclasses.fst" + (Prims.of_int (49)) + (Prims.of_int (4)) + (Prims.of_int (50)) + (Prims.of_int (137))) + (if + FStar_List_Tot_Base.existsb + (FStar_Reflection_Builtins.term_eq + g) seen + then + Obj.magic + (Obj.repr + (FStar_Tactics_Derived.fail + "loop")) + else + Obj.magic + (Obj.repr + (FStar_Tactics_Effect.lift_div_tac + (fun uu___3 -> ())))) + (fun uu___2 -> + (fun uu___2 -> + Obj.magic + (FStar_Tactics_Effect.tac_bind + (Prims.mk_range + "FStar.Tactics.Typeclasses.fst" + (Prims.of_int (49)) + (Prims.of_int (17)) + (Prims.of_int (49)) + (Prims.of_int (19))) + (Prims.mk_range + "FStar.Tactics.Typeclasses.fst" + (Prims.of_int (50)) + (Prims.of_int (4)) + (Prims.of_int (50)) + (Prims.of_int (137))) + (FStar_Tactics_Effect.lift_div_tac + (fun uu___3 -> g :: + seen)) + (fun uu___3 -> + (fun seen1 -> + Obj.magic + (FStar_Tactics_Derived.or_else + (local seen1 + fuel) + (fun uu___3 -> + FStar_Tactics_Derived.or_else + ( + global + seen1 + fuel) + ( + fun + uu___4 -> + FStar_Tactics_Effect.tac_bind + (Prims.mk_range + "FStar.Tactics.Typeclasses.fst" + (Prims.of_int (50)) + (Prims.of_int (84)) + (Prims.of_int (50)) + (Prims.of_int (135))) + (Prims.mk_range + "FStar.Tactics.Typeclasses.fst" + (Prims.of_int (50)) + (Prims.of_int (79)) + (Prims.of_int (50)) + (Prims.of_int (135))) + (Obj.magic + (FStar_Tactics_Effect.tac_bind + (Prims.mk_range + "FStar.Tactics.Typeclasses.fst" + (Prims.of_int (50)) + (Prims.of_int (118)) + (Prims.of_int (50)) + (Prims.of_int (134))) + (Prims.mk_range + "prims.fst" + (Prims.of_int (606)) + (Prims.of_int (19)) + (Prims.of_int (606)) + (Prims.of_int (31))) + (Obj.magic + (FStar_Tactics_Builtins.term_to_string + g)) + (fun + uu___5 -> + FStar_Tactics_Effect.lift_div_tac + (fun + uu___6 -> + Prims.strcat + "could not solve constraint: " + uu___5)))) + (fun + uu___5 -> + (fun + uu___5 -> + Obj.magic + (FStar_Tactics_Derived.fail + uu___5)) + uu___5))))) + uu___3))) uu___2))) + uu___2))) uu___1))) uu___) +and (local : + FStar_Reflection_Types.term Prims.list -> + Prims.int -> unit -> (unit, unit) FStar_Tactics_Effect.tac_repr) + = + fun seen -> + fun fuel -> + fun uu___ -> + FStar_Tactics_Effect.tac_bind + (Prims.mk_range "FStar.Tactics.Typeclasses.fst" (Prims.of_int (52)) + (Prims.of_int (13)) (Prims.of_int (52)) (Prims.of_int (40))) + (Prims.mk_range "FStar.Tactics.Typeclasses.fst" (Prims.of_int (53)) + (Prims.of_int (4)) (Prims.of_int (53)) (Prims.of_int (74))) + (Obj.magic + (FStar_Tactics_Effect.tac_bind + (Prims.mk_range "FStar.Tactics.Typeclasses.fst" + (Prims.of_int (52)) (Prims.of_int (28)) + (Prims.of_int (52)) (Prims.of_int (40))) + (Prims.mk_range "FStar.Tactics.Typeclasses.fst" + (Prims.of_int (52)) (Prims.of_int (13)) + (Prims.of_int (52)) (Prims.of_int (40))) + (Obj.magic (FStar_Tactics_Derived.cur_env ())) + (fun uu___1 -> + FStar_Tactics_Effect.lift_div_tac + (fun uu___2 -> + FStar_Reflection_Builtins.binders_of_env uu___1)))) + (fun uu___1 -> + (fun bs -> + Obj.magic + (first + (fun b -> + FStar_Tactics_Effect.tac_bind + (Prims.mk_range "FStar.Tactics.Typeclasses.fst" + (Prims.of_int (53)) (Prims.of_int (38)) + (Prims.of_int (53)) (Prims.of_int (70))) + (Prims.mk_range "FStar.Tactics.Typeclasses.fst" + (Prims.of_int (53)) (Prims.of_int (20)) + (Prims.of_int (53)) (Prims.of_int (70))) + (Obj.magic + (FStar_Tactics_Builtins.pack + (FStar_Reflection_Data.Tv_Var + (FStar_Reflection_Derived.bv_of_binder b)))) + (fun uu___1 -> + (fun uu___1 -> + Obj.magic (trywith seen fuel uu___1)) uu___1)) + bs)) uu___1) +and (global : + FStar_Reflection_Types.term Prims.list -> + Prims.int -> unit -> (unit, unit) FStar_Tactics_Effect.tac_repr) + = + fun seen -> + fun fuel -> + fun uu___ -> + FStar_Tactics_Effect.tac_bind + (Prims.mk_range "FStar.Tactics.Typeclasses.fst" (Prims.of_int (55)) + (Prims.of_int (16)) (Prims.of_int (55)) (Prims.of_int (54))) + (Prims.mk_range "FStar.Tactics.Typeclasses.fst" (Prims.of_int (56)) + (Prims.of_int (4)) (Prims.of_int (56)) (Prims.of_int (65))) + (Obj.magic + (FStar_Tactics_Effect.tac_bind + (Prims.mk_range "FStar.Tactics.Typeclasses.fst" + (Prims.of_int (55)) (Prims.of_int (42)) + (Prims.of_int (55)) (Prims.of_int (54))) + (Prims.mk_range "FStar.Tactics.Typeclasses.fst" + (Prims.of_int (55)) (Prims.of_int (16)) + (Prims.of_int (55)) (Prims.of_int (54))) + (Obj.magic (FStar_Tactics_Derived.cur_env ())) + (fun uu___1 -> + FStar_Tactics_Effect.lift_div_tac + (fun uu___2 -> + FStar_Reflection_Builtins.lookup_attr + (FStar_Reflection_Builtins.pack_ln + (FStar_Reflection_Data.Tv_FVar + (FStar_Reflection_Builtins.pack_fv + ["FStar"; + "Tactics"; + "Typeclasses"; + "tcinstance"]))) uu___1)))) + (fun uu___1 -> + (fun cands -> + Obj.magic + (first + (fun fv -> + FStar_Tactics_Effect.tac_bind + (Prims.mk_range "FStar.Tactics.Typeclasses.fst" + (Prims.of_int (56)) (Prims.of_int (39)) + (Prims.of_int (56)) (Prims.of_int (58))) + (Prims.mk_range "FStar.Tactics.Typeclasses.fst" + (Prims.of_int (56)) (Prims.of_int (21)) + (Prims.of_int (56)) (Prims.of_int (58))) + (Obj.magic + (FStar_Tactics_Builtins.pack + (FStar_Reflection_Data.Tv_FVar fv))) + (fun uu___1 -> + (fun uu___1 -> + Obj.magic (trywith seen fuel uu___1)) uu___1)) + cands)) uu___1) +and (trywith : + FStar_Reflection_Types.term Prims.list -> + Prims.int -> + FStar_Reflection_Types.term -> + (unit, unit) FStar_Tactics_Effect.tac_repr) + = + fun seen -> + fun fuel -> + fun t -> + FStar_Tactics_Effect.tac_bind + (Prims.mk_range "FStar.Tactics.Typeclasses.fst" (Prims.of_int (58)) + (Prims.of_int (4)) (Prims.of_int (58)) (Prims.of_int (70))) + (Prims.mk_range "FStar.Tactics.Typeclasses.fst" (Prims.of_int (59)) + (Prims.of_int (4)) (Prims.of_int (59)) (Prims.of_int (73))) + (Obj.magic + (FStar_Tactics_Effect.tac_bind + (Prims.mk_range "FStar.Tactics.Typeclasses.fst" + (Prims.of_int (58)) (Prims.of_int (10)) + (Prims.of_int (58)) (Prims.of_int (70))) + (Prims.mk_range "FStar.Tactics.Typeclasses.fst" + (Prims.of_int (58)) (Prims.of_int (4)) (Prims.of_int (58)) + (Prims.of_int (70))) + (Obj.magic + (FStar_Tactics_Effect.tac_bind + (Prims.mk_range "FStar.Tactics.Typeclasses.fst" + (Prims.of_int (58)) (Prims.of_int (53)) + (Prims.of_int (58)) (Prims.of_int (69))) + (Prims.mk_range "prims.fst" (Prims.of_int (606)) + (Prims.of_int (19)) (Prims.of_int (606)) + (Prims.of_int (31))) + (Obj.magic (FStar_Tactics_Builtins.term_to_string t)) + (fun uu___ -> + FStar_Tactics_Effect.lift_div_tac + (fun uu___1 -> + Prims.strcat + "Trying to apply hypothesis/instance: " uu___)))) + (fun uu___ -> + (fun uu___ -> + Obj.magic (FStar_Tactics_Derived.debug uu___)) uu___))) + (fun uu___ -> + (fun uu___ -> + Obj.magic + (FStar_Tactics_Derived.seq + (fun uu___1 -> FStar_Tactics_Derived.apply_noinst t) + (fun uu___1 -> tcresolve' seen (fuel - Prims.int_one)))) + uu___) +let rec (maybe_intros : unit -> (unit, unit) FStar_Tactics_Effect.tac_repr) = + fun uu___ -> + FStar_Tactics_Effect.tac_bind + (Prims.mk_range "FStar.Tactics.Typeclasses.fst" (Prims.of_int (62)) + (Prims.of_int (10)) (Prims.of_int (62)) (Prims.of_int (21))) + (Prims.mk_range "FStar.Tactics.Typeclasses.fst" (Prims.of_int (63)) + (Prims.of_int (2)) (Prims.of_int (67)) (Prims.of_int (11))) + (Obj.magic (FStar_Tactics_Derived.cur_goal ())) + (fun uu___1 -> + (fun g -> + match FStar_Reflection_Builtins.inspect_ln g with + | FStar_Reflection_Data.Tv_Arrow (uu___1, uu___2) -> + Obj.magic + (Obj.repr + (FStar_Tactics_Effect.tac_bind + (Prims.mk_range "FStar.Tactics.Typeclasses.fst" + (Prims.of_int (65)) (Prims.of_int (4)) + (Prims.of_int (65)) (Prims.of_int (21))) + (Prims.mk_range "FStar.Tactics.Typeclasses.fst" + (Prims.of_int (66)) (Prims.of_int (4)) + (Prims.of_int (66)) (Prims.of_int (19))) + (Obj.magic + (FStar_Tactics_Effect.tac_bind + (Prims.mk_range "FStar.Tactics.Typeclasses.fst" + (Prims.of_int (65)) (Prims.of_int (11)) + (Prims.of_int (65)) (Prims.of_int (21))) + (Prims.mk_range "FStar.Tactics.Typeclasses.fst" + (Prims.of_int (65)) (Prims.of_int (4)) + (Prims.of_int (65)) (Prims.of_int (21))) + (Obj.magic (FStar_Tactics_Builtins.intro ())) + (fun uu___3 -> + FStar_Tactics_Effect.lift_div_tac + (fun uu___4 -> ())))) + (fun uu___3 -> + (fun uu___3 -> Obj.magic (maybe_intros ())) uu___3))) + | uu___1 -> + Obj.magic + (Obj.repr + (FStar_Tactics_Effect.lift_div_tac (fun uu___2 -> ())))) + uu___1) +let (tcresolve : unit -> (unit, unit) FStar_Tactics_Effect.tac_repr) = + fun uu___ -> + FStar_Tactics_Effect.tac_bind + (Prims.mk_range "FStar.Tactics.Typeclasses.fst" (Prims.of_int (74)) + (Prims.of_int (4)) (Prims.of_int (74)) (Prims.of_int (19))) + (Prims.mk_range "FStar.Tactics.Typeclasses.fst" (Prims.of_int (75)) + (Prims.of_int (4)) (Prims.of_int (78)) (Prims.of_int (18))) + (Obj.magic (maybe_intros ())) + (fun uu___1 -> + (fun uu___1 -> + Obj.magic + (FStar_Tactics_Derived.try_with + (fun uu___2 -> + match () with | () -> tcresolve' [] (Prims.of_int (16))) + (fun uu___2 -> + match uu___2 with + | FStar_Tactics_Common.TacticFailure s -> + FStar_Tactics_Derived.fail + (Prims.strcat "Typeclass resolution failed: " s) + | e -> FStar_Tactics_Effect.raise e))) uu___1) +let _ = + FStar_Tactics_Native.register_tactic "FStar.Tactics.Typeclasses.tcresolve" + (Prims.of_int (2)) + (fun psc -> + fun ncb -> + fun args -> + FStar_Tactics_InterpFuns.mk_tactic_interpretation_1 + (FStar_Tactics_Native.from_tactic_1 tcresolve) + FStar_Syntax_Embeddings.e_unit FStar_Syntax_Embeddings.e_unit + psc ncb args) +let solve : 'a . 'a -> 'a = fun ev -> ev +let rec (mk_abs : + FStar_Reflection_Types.binder Prims.list -> + FStar_Reflection_Types.term -> + (FStar_Reflection_Types.term, unit) FStar_Tactics_Effect.tac_repr) + = + fun uu___1 -> + fun uu___ -> + (fun bs -> + fun body -> + match bs with + | [] -> + Obj.magic + (Obj.repr + (FStar_Tactics_Effect.lift_div_tac (fun uu___ -> body))) + | b::bs1 -> + Obj.magic + (Obj.repr + (FStar_Tactics_Effect.tac_bind + (Prims.mk_range "FStar.Tactics.Typeclasses.fst" + (Prims.of_int (89)) (Prims.of_int (20)) + (Prims.of_int (89)) (Prims.of_int (47))) + (Prims.mk_range "FStar.Tactics.Typeclasses.fst" + (Prims.of_int (89)) (Prims.of_int (15)) + (Prims.of_int (89)) (Prims.of_int (47))) + (Obj.magic + (FStar_Tactics_Effect.tac_bind + (Prims.mk_range "FStar.Tactics.Typeclasses.fst" + (Prims.of_int (89)) (Prims.of_int (30)) + (Prims.of_int (89)) (Prims.of_int (46))) + (Prims.mk_range "FStar.Tactics.Typeclasses.fst" + (Prims.of_int (89)) (Prims.of_int (20)) + (Prims.of_int (89)) (Prims.of_int (47))) + (Obj.magic (mk_abs bs1 body)) + (fun uu___ -> + FStar_Tactics_Effect.lift_div_tac + (fun uu___1 -> + FStar_Reflection_Data.Tv_Abs (b, uu___))))) + (fun uu___ -> + (fun uu___ -> + Obj.magic (FStar_Tactics_Builtins.pack uu___)) + uu___)))) uu___1 uu___ +let rec last : 'a . 'a Prims.list -> ('a, unit) FStar_Tactics_Effect.tac_repr + = + fun uu___ -> + (fun l -> + match l with + | [] -> + Obj.magic + (Obj.repr (FStar_Tactics_Derived.fail "last: empty list")) + | x::[] -> + Obj.magic + (Obj.repr (FStar_Tactics_Effect.lift_div_tac (fun uu___ -> x))) + | uu___::xs -> Obj.magic (Obj.repr (last xs))) uu___ +let (filter_no_method_binders : + FStar_Reflection_Types.binders -> FStar_Reflection_Types.binders) = + fun bs -> + let has_no_method_attr b = + let uu___ = FStar_Reflection_Builtins.inspect_binder b in + match uu___ with + | (uu___1, (uu___2, attrs)) -> + let is_no_method t = + match FStar_Reflection_Builtins.inspect_ln t with + | FStar_Reflection_Data.Tv_FVar fv -> + let n = + FStar_Reflection_Derived.flatten_name + (FStar_Reflection_Builtins.inspect_fv fv) in + n = "FStar.Tactics.Typeclasses.no_method" + | uu___3 -> false in + FStar_List_Tot_Base.existsb is_no_method attrs in + FStar_List_Tot_Base.filter + (fun b -> Prims.op_Negation (has_no_method_attr b)) bs +let (mk_class : + Prims.string -> + (FStar_Reflection_Data.decls, unit) FStar_Tactics_Effect.tac_repr) + = + fun nm -> + FStar_Tactics_Effect.tac_bind + (Prims.mk_range "FStar.Tactics.Typeclasses.fst" (Prims.of_int (116)) + (Prims.of_int (13)) (Prims.of_int (116)) (Prims.of_int (26))) + (Prims.mk_range "FStar.Tactics.Typeclasses.fst" (Prims.of_int (117)) + (Prims.of_int (4)) (Prims.of_int (196)) (Prims.of_int (35))) + (FStar_Tactics_Effect.lift_div_tac + (fun uu___ -> FStar_Reflection_Builtins.explode_qn nm)) + (fun uu___ -> + (fun ns -> + Obj.magic + (FStar_Tactics_Effect.tac_bind + (Prims.mk_range "FStar.Tactics.Typeclasses.fst" + (Prims.of_int (117)) (Prims.of_int (12)) + (Prims.of_int (117)) (Prims.of_int (38))) + (Prims.mk_range "FStar.Tactics.Typeclasses.fst" + (Prims.of_int (118)) (Prims.of_int (4)) + (Prims.of_int (196)) (Prims.of_int (35))) + (Obj.magic + (FStar_Tactics_Effect.tac_bind + (Prims.mk_range "FStar.Tactics.Typeclasses.fst" + (Prims.of_int (117)) (Prims.of_int (23)) + (Prims.of_int (117)) (Prims.of_int (35))) + (Prims.mk_range "FStar.Tactics.Typeclasses.fst" + (Prims.of_int (117)) (Prims.of_int (12)) + (Prims.of_int (117)) (Prims.of_int (38))) + (Obj.magic (FStar_Tactics_Builtins.top_env ())) + (fun uu___ -> + FStar_Tactics_Effect.lift_div_tac + (fun uu___1 -> + FStar_Reflection_Builtins.lookup_typ uu___ ns)))) + (fun uu___ -> + (fun r -> + Obj.magic + (FStar_Tactics_Effect.tac_bind + (Prims.mk_range "FStar.Tactics.Typeclasses.fst" + (Prims.of_int (118)) (Prims.of_int (4)) + (Prims.of_int (118)) (Prims.of_int (19))) + (Prims.mk_range "FStar.Tactics.Typeclasses.fst" + (Prims.of_int (119)) (Prims.of_int (4)) + (Prims.of_int (196)) (Prims.of_int (35))) + (Obj.magic + (FStar_Tactics_Derived.guard + (FStar_Pervasives_Native.uu___is_Some r))) + (fun uu___ -> + (fun uu___ -> + Obj.magic + (FStar_Tactics_Effect.tac_bind + (Prims.mk_range + "FStar.Tactics.Typeclasses.fst" + (Prims.of_int (119)) + (Prims.of_int (18)) + (Prims.of_int (119)) + (Prims.of_int (19))) + (Prims.mk_range + "FStar.Tactics.Typeclasses.fst" + (Prims.of_int (119)) + (Prims.of_int (4)) + (Prims.of_int (196)) + (Prims.of_int (35))) + (FStar_Tactics_Effect.lift_div_tac + (fun uu___1 -> r)) + (fun uu___1 -> + (fun uu___1 -> + match uu___1 with + | FStar_Pervasives_Native.Some + se -> + Obj.magic + (FStar_Tactics_Effect.tac_bind + (Prims.mk_range + "FStar.Tactics.Typeclasses.fst" + (Prims.of_int (120)) + (Prims.of_int (23)) + (Prims.of_int (120)) + (Prims.of_int (122))) + (Prims.mk_range + "FStar.Tactics.Typeclasses.fst" + (Prims.of_int (121)) + (Prims.of_int (4)) + (Prims.of_int (196)) + (Prims.of_int (35))) + (FStar_Tactics_Effect.lift_div_tac + (fun uu___2 -> + FStar_List_Tot_Base.filter + (fun uu___3 -> + match uu___3 + with + | FStar_Reflection_Data.Inline_for_extraction + -> true + | FStar_Reflection_Data.NoExtract + -> true + | uu___4 -> + false) + (FStar_Reflection_Builtins.sigelt_quals + se))) + (fun uu___2 -> + (fun to_propagate -> + Obj.magic + (FStar_Tactics_Effect.tac_bind + (Prims.mk_range + "FStar.Tactics.Typeclasses.fst" + (Prims.of_int (121)) + (Prims.of_int (13)) + (Prims.of_int (121)) + (Prims.of_int (30))) + (Prims.mk_range + "FStar.Tactics.Typeclasses.fst" + (Prims.of_int (122)) + (Prims.of_int (4)) + (Prims.of_int (196)) + (Prims.of_int (35))) + (FStar_Tactics_Effect.lift_div_tac + ( + fun + uu___2 -> + FStar_Reflection_Builtins.inspect_sigelt + se)) + (fun uu___2 + -> + (fun sv + -> + Obj.magic + (FStar_Tactics_Effect.tac_bind + (Prims.mk_range + "FStar.Tactics.Typeclasses.fst" + (Prims.of_int (122)) + (Prims.of_int (4)) + (Prims.of_int (122)) + (Prims.of_int (28))) + (Prims.mk_range + "FStar.Tactics.Typeclasses.fst" + (Prims.of_int (123)) + (Prims.of_int (4)) + (Prims.of_int (196)) + (Prims.of_int (35))) + (Obj.magic + (FStar_Tactics_Derived.guard + (FStar_Reflection_Data.uu___is_Sg_Inductive + sv))) + (fun + uu___2 -> + (fun + uu___2 -> + Obj.magic + (FStar_Tactics_Effect.tac_bind + (Prims.mk_range + "FStar.Tactics.Typeclasses.fst" + (Prims.of_int (123)) + (Prims.of_int (47)) + (Prims.of_int (123)) + (Prims.of_int (49))) + (Prims.mk_range + "FStar.Tactics.Typeclasses.fst" + (Prims.of_int (123)) + (Prims.of_int (4)) + (Prims.of_int (196)) + (Prims.of_int (35))) + (FStar_Tactics_Effect.lift_div_tac + (fun + uu___3 -> + sv)) + (fun + uu___3 -> + (fun + uu___3 -> + match uu___3 + with + | + FStar_Reflection_Data.Sg_Inductive + (name, + us, + params, + ty, + ctors) -> + Obj.magic + (FStar_Tactics_Effect.tac_bind + (Prims.mk_range + "FStar.Tactics.Typeclasses.fst" + (Prims.of_int (126)) + (Prims.of_int (20)) + (Prims.of_int (126)) + (Prims.of_int (29))) + (Prims.mk_range + "FStar.Tactics.Typeclasses.fst" + (Prims.of_int (128)) + (Prims.of_int (4)) + (Prims.of_int (196)) + (Prims.of_int (35))) + (Obj.magic + (last + name)) + (fun + uu___4 -> + (fun + ctor_name + -> + Obj.magic + (FStar_Tactics_Effect.tac_bind + (Prims.mk_range + "FStar.Tactics.Typeclasses.fst" + (Prims.of_int (128)) + (Prims.of_int (4)) + (Prims.of_int (128)) + (Prims.of_int (42))) + (Prims.mk_range + "FStar.Tactics.Typeclasses.fst" + (Prims.of_int (129)) + (Prims.of_int (4)) + (Prims.of_int (196)) + (Prims.of_int (35))) + (Obj.magic + (FStar_Tactics_Derived.guard + ((FStar_List_Tot_Base.length + ctors) = + Prims.int_one))) + (fun + uu___4 -> + (fun + uu___4 -> + Obj.magic + (FStar_Tactics_Effect.tac_bind + (Prims.mk_range + "FStar.Tactics.Typeclasses.fst" + (Prims.of_int (129)) + (Prims.of_int (25)) + (Prims.of_int (129)) + (Prims.of_int (30))) + (Prims.mk_range + "FStar.Tactics.Typeclasses.fst" + (Prims.of_int (129)) + (Prims.of_int (4)) + (Prims.of_int (196)) + (Prims.of_int (35))) + (FStar_Tactics_Effect.lift_div_tac + (fun + uu___5 -> + ctors)) + (fun + uu___5 -> + (fun + uu___5 -> + match uu___5 + with + | + (c_name, + ty1)::[] + -> + Obj.magic + (FStar_Tactics_Effect.tac_bind + (Prims.mk_range + "FStar.Tactics.Typeclasses.fst" + (Prims.of_int (131)) + (Prims.of_int (18)) + (Prims.of_int (131)) + (Prims.of_int (35))) + (Prims.mk_range + "FStar.Tactics.Typeclasses.fst" + (Prims.of_int (131)) + (Prims.of_int (4)) + (Prims.of_int (196)) + (Prims.of_int (35))) + (Obj.magic + (FStar_Tactics_SyntaxHelpers.collect_arr_bs + ty1)) + (fun + uu___6 -> + (fun + uu___6 -> + match uu___6 + with + | + (bs, cod) + -> + Obj.magic + (FStar_Tactics_Effect.tac_bind + (Prims.mk_range + "FStar.Tactics.Typeclasses.fst" + (Prims.of_int (132)) + (Prims.of_int (12)) + (Prims.of_int (132)) + (Prims.of_int (28))) + (Prims.mk_range + "FStar.Tactics.Typeclasses.fst" + (Prims.of_int (133)) + (Prims.of_int (4)) + (Prims.of_int (196)) + (Prims.of_int (35))) + (FStar_Tactics_Effect.lift_div_tac + (fun + uu___7 -> + FStar_Reflection_Builtins.inspect_comp + cod)) + (fun + uu___7 -> + (fun r1 + -> + Obj.magic + (FStar_Tactics_Effect.tac_bind + (Prims.mk_range + "FStar.Tactics.Typeclasses.fst" + (Prims.of_int (133)) + (Prims.of_int (4)) + (Prims.of_int (133)) + (Prims.of_int (22))) + (Prims.mk_range + "FStar.Tactics.Typeclasses.fst" + (Prims.of_int (134)) + (Prims.of_int (4)) + (Prims.of_int (196)) + (Prims.of_int (35))) + (Obj.magic + (FStar_Tactics_Derived.guard + (FStar_Reflection_Data.uu___is_C_Total + r1))) + (fun + uu___7 -> + (fun + uu___7 -> + Obj.magic + (FStar_Tactics_Effect.tac_bind + (Prims.mk_range + "FStar.Tactics.Typeclasses.fst" + (Prims.of_int (134)) + (Prims.of_int (22)) + (Prims.of_int (134)) + (Prims.of_int (23))) + (Prims.mk_range + "FStar.Tactics.Typeclasses.fst" + (Prims.of_int (134)) + (Prims.of_int (4)) + (Prims.of_int (196)) + (Prims.of_int (35))) + (FStar_Tactics_Effect.lift_div_tac + (fun + uu___8 -> + r1)) + (fun + uu___8 -> + (fun + uu___8 -> + match uu___8 + with + | + FStar_Reflection_Data.C_Total + cod1 -> + Obj.magic + (FStar_Tactics_Effect.tac_bind + (Prims.mk_range + "FStar.Tactics.Typeclasses.fst" + (Prims.of_int (138)) + (Prims.of_int (24)) + (Prims.of_int (138)) + (Prims.of_int (61))) + (Prims.mk_range + "FStar.Tactics.Typeclasses.fst" + (Prims.of_int (141)) + (Prims.of_int (4)) + (Prims.of_int (196)) + (Prims.of_int (35))) + (FStar_Tactics_Effect.lift_div_tac + (fun + uu___9 -> + Prims.strcat + "__proj__Mk" + (Prims.strcat + ctor_name + "__item__"))) + (fun + uu___9 -> + (fun base + -> + Obj.magic + (FStar_Tactics_Util.map + (fun b -> + FStar_Tactics_Effect.tac_bind + (Prims.mk_range + "FStar.Tactics.Typeclasses.fst" + (Prims.of_int (143)) + (Prims.of_int (26)) + (Prims.of_int (143)) + (Prims.of_int (42))) + (Prims.mk_range + "FStar.Tactics.Typeclasses.fst" + (Prims.of_int (145)) + (Prims.of_int (18)) + (Prims.of_int (195)) + (Prims.of_int (20))) + (FStar_Tactics_Effect.lift_div_tac + (fun + uu___9 -> + FStar_Reflection_Derived.name_of_binder + b)) + (fun + uu___9 -> + (fun s -> + Obj.magic + (FStar_Tactics_Effect.tac_bind + (Prims.mk_range + "FStar.Tactics.Typeclasses.fst" + (Prims.of_int (145)) + (Prims.of_int (27)) + (Prims.of_int (145)) + (Prims.of_int (40))) + (Prims.mk_range + "FStar.Tactics.Typeclasses.fst" + (Prims.of_int (146)) + (Prims.of_int (18)) + (Prims.of_int (195)) + (Prims.of_int (20))) + (Obj.magic + (FStar_Tactics_Derived.cur_module + ())) + (fun + uu___9 -> + (fun ns1 + -> + Obj.magic + (FStar_Tactics_Effect.tac_bind + (Prims.mk_range + "FStar.Tactics.Typeclasses.fst" + (Prims.of_int (146)) + (Prims.of_int (28)) + (Prims.of_int (146)) + (Prims.of_int (46))) + (Prims.mk_range + "FStar.Tactics.Typeclasses.fst" + (Prims.of_int (147)) + (Prims.of_int (18)) + (Prims.of_int (195)) + (Prims.of_int (20))) + (FStar_Tactics_Effect.lift_div_tac + (fun + uu___9 -> + FStar_Reflection_Builtins.pack_fv + (FStar_List_Tot_Base.op_At + ns1 + [s]))) + (fun + uu___9 -> + (fun sfv + -> + Obj.magic + (FStar_Tactics_Effect.tac_bind + (Prims.mk_range + "FStar.Tactics.Typeclasses.fst" + (Prims.of_int (147)) + (Prims.of_int (28)) + (Prims.of_int (147)) + (Prims.of_int (50))) + (Prims.mk_range + "FStar.Tactics.Typeclasses.fst" + (Prims.of_int (148)) + (Prims.of_int (18)) + (Prims.of_int (195)) + (Prims.of_int (20))) + (Obj.magic + (FStar_Tactics_Builtins.fresh_bv_named + "d" cod1)) + (fun + uu___9 -> + (fun dbv + -> + Obj.magic + (FStar_Tactics_Effect.tac_bind + (Prims.mk_range + "FStar.Tactics.Typeclasses.fst" + (Prims.of_int (148)) + (Prims.of_int (28)) + (Prims.of_int (148)) + (Prims.of_int (40))) + (Prims.mk_range + "FStar.Tactics.Typeclasses.fst" + (Prims.of_int (149)) + (Prims.of_int (18)) + (Prims.of_int (195)) + (Prims.of_int (20))) + (FStar_Tactics_Effect.lift_div_tac + (fun + uu___9 -> + FStar_Reflection_Builtins.pack_ln + (FStar_Reflection_Data.Tv_FVar + (FStar_Reflection_Builtins.pack_fv + ["FStar"; + "Tactics"; + "Typeclasses"; + "tcresolve"])))) + (fun + uu___9 -> + (fun tcr + -> + Obj.magic + (FStar_Tactics_Effect.tac_bind + (Prims.mk_range + "FStar.Tactics.Typeclasses.fst" + (Prims.of_int (149)) + (Prims.of_int (31)) + (Prims.of_int (149)) + (Prims.of_int (62))) + (Prims.mk_range + "FStar.Tactics.Typeclasses.fst" + (Prims.of_int (150)) + (Prims.of_int (18)) + (Prims.of_int (195)) + (Prims.of_int (20))) + (FStar_Tactics_Effect.lift_div_tac + (fun + uu___9 -> + FStar_Reflection_Builtins.pack_binder + dbv + (FStar_Reflection_Data.Q_Meta + tcr) [])) + (fun + uu___9 -> + (fun + tcdict -> + Obj.magic + (FStar_Tactics_Effect.tac_bind + (Prims.mk_range + "FStar.Tactics.Typeclasses.fst" + (Prims.of_int (150)) + (Prims.of_int (34)) + (Prims.of_int (150)) + (Prims.of_int (60))) + (Prims.mk_range + "FStar.Tactics.Typeclasses.fst" + (Prims.of_int (151)) + (Prims.of_int (18)) + (Prims.of_int (195)) + (Prims.of_int (20))) + (Obj.magic + (FStar_Tactics_Effect.tac_bind + (Prims.mk_range + "FStar.Tactics.Typeclasses.fst" + (Prims.of_int (150)) + (Prims.of_int (34)) + (Prims.of_int (150)) + (Prims.of_int (47))) + (Prims.mk_range + "FStar.Tactics.Typeclasses.fst" + (Prims.of_int (150)) + (Prims.of_int (34)) + (Prims.of_int (150)) + (Prims.of_int (60))) + (Obj.magic + (FStar_Tactics_Derived.cur_module + ())) + (fun + uu___9 -> + FStar_Tactics_Effect.lift_div_tac + (fun + uu___10 + -> + FStar_List_Tot_Base.op_At + uu___9 + [ + Prims.strcat + base s])))) + (fun + uu___9 -> + (fun + proj_name + -> + Obj.magic + (FStar_Tactics_Effect.tac_bind + (Prims.mk_range + "FStar.Tactics.Typeclasses.fst" + (Prims.of_int (151)) + (Prims.of_int (29)) + (Prims.of_int (151)) + (Prims.of_int (63))) + (Prims.mk_range + "FStar.Tactics.Typeclasses.fst" + (Prims.of_int (153)) + (Prims.of_int (18)) + (Prims.of_int (195)) + (Prims.of_int (20))) + (Obj.magic + (FStar_Tactics_Builtins.pack + (FStar_Reflection_Data.Tv_FVar + (FStar_Reflection_Builtins.pack_fv + proj_name)))) + (fun + uu___9 -> + (fun proj + -> + Obj.magic + (FStar_Tactics_Effect.tac_bind + (Prims.mk_range + "FStar.Tactics.Typeclasses.fst" + (Prims.of_int (154)) + (Prims.of_int (20)) + (Prims.of_int (162)) + (Prims.of_int (62))) + (Prims.mk_range + "FStar.Tactics.Typeclasses.fst" + (Prims.of_int (165)) + (Prims.of_int (18)) + (Prims.of_int (195)) + (Prims.of_int (20))) + (Obj.magic + (FStar_Tactics_Effect.tac_bind + (Prims.mk_range + "FStar.Tactics.Typeclasses.fst" + (Prims.of_int (154)) + (Prims.of_int (26)) + (Prims.of_int (154)) + (Prims.of_int (59))) + (Prims.mk_range + "FStar.Tactics.Typeclasses.fst" + (Prims.of_int (154)) + (Prims.of_int (20)) + (Prims.of_int (162)) + (Prims.of_int (62))) + (Obj.magic + (FStar_Tactics_Effect.tac_bind + (Prims.mk_range + "FStar.Tactics.Typeclasses.fst" + (Prims.of_int (154)) + (Prims.of_int (37)) + (Prims.of_int (154)) + (Prims.of_int (49))) + (Prims.mk_range + "FStar.Tactics.Typeclasses.fst" + (Prims.of_int (154)) + (Prims.of_int (26)) + (Prims.of_int (154)) + (Prims.of_int (59))) + (Obj.magic + (FStar_Tactics_Builtins.top_env + ())) + (fun + uu___9 -> + FStar_Tactics_Effect.lift_div_tac + (fun + uu___10 + -> + FStar_Reflection_Builtins.lookup_typ + uu___9 + proj_name)))) + (fun + uu___9 -> + (fun + uu___9 -> + match uu___9 + with + | + FStar_Pervasives_Native.None + -> + Obj.magic + (FStar_Tactics_Derived.fail + "mk_class: proj not found?") + | + FStar_Pervasives_Native.Some + se1 -> + (match + FStar_Reflection_Builtins.inspect_sigelt + se1 + with + | + FStar_Reflection_Data.Sg_Let + (uu___10, + lbs) -> + Obj.magic + (FStar_Tactics_Effect.tac_bind + (Prims.mk_range + "FStar.Tactics.Typeclasses.fst" + (Prims.of_int (160)) + (Prims.of_int (26)) + (Prims.of_int (160)) + (Prims.of_int (54))) + (Prims.mk_range + "FStar.Tactics.Typeclasses.fst" + (Prims.of_int (159)) + (Prims.of_int (24)) + (Prims.of_int (160)) + (Prims.of_int (61))) + (Obj.magic + (FStar_Tactics_SyntaxHelpers.lookup_lb_view + lbs + proj_name)) + (fun + uu___11 + -> + FStar_Tactics_Effect.lift_div_tac + (fun + uu___12 + -> + match uu___11 + with + | + { + FStar_Reflection_Data.lb_fv + = uu___13; + FStar_Reflection_Data.lb_us + = uu___14; + FStar_Reflection_Data.lb_typ + = typ; + FStar_Reflection_Data.lb_def + = uu___15;_} + -> typ))) + | + uu___10 + -> + Obj.magic + (FStar_Tactics_Derived.fail + "mk_class: proj not Sg_Let?"))) + uu___9))) + (fun + uu___9 -> + (fun + proj_ty + -> + Obj.magic + (FStar_Tactics_Effect.tac_bind + (Prims.mk_range + "FStar.Tactics.Typeclasses.fst" + (Prims.of_int (166)) + (Prims.of_int (20)) + (Prims.of_int (173)) + (Prims.of_int (57))) + (Prims.mk_range + "FStar.Tactics.Typeclasses.fst" + (Prims.of_int (176)) + (Prims.of_int (18)) + (Prims.of_int (195)) + (Prims.of_int (20))) + (Obj.magic + (FStar_Tactics_Effect.tac_bind + (Prims.mk_range + "FStar.Tactics.Typeclasses.fst" + (Prims.of_int (166)) + (Prims.of_int (34)) + (Prims.of_int (166)) + (Prims.of_int (56))) + (Prims.mk_range + "FStar.Tactics.Typeclasses.fst" + (Prims.of_int (166)) + (Prims.of_int (20)) + (Prims.of_int (173)) + (Prims.of_int (57))) + (Obj.magic + (FStar_Tactics_SyntaxHelpers.collect_arr_bs + proj_ty)) + (fun + uu___9 -> + (fun + uu___9 -> + match uu___9 + with + | + (bs1, + cod2) -> + Obj.magic + (FStar_Tactics_Effect.tac_bind + (Prims.mk_range + "FStar.Tactics.Typeclasses.fst" + (Prims.of_int (167)) + (Prims.of_int (33)) + (Prims.of_int (167)) + (Prims.of_int (87))) + (Prims.mk_range + "FStar.Tactics.Typeclasses.fst" + (Prims.of_int (167)) + (Prims.of_int (20)) + (Prims.of_int (173)) + (Prims.of_int (57))) + (FStar_Tactics_Effect.lift_div_tac + (fun + uu___10 + -> + FStar_List_Tot_Base.splitAt + (FStar_List_Tot_Base.length + params) + bs1)) + (fun + uu___10 + -> + (fun + uu___10 + -> + match uu___10 + with + | + (ps, bs2) + -> + (match bs2 + with + | + [] -> + Obj.magic + (FStar_Tactics_Derived.fail + "mk_class: impossible, no binders") + | + b1::bs' + -> + Obj.magic + (FStar_Tactics_Effect.tac_bind + (Prims.mk_range + "FStar.Tactics.Typeclasses.fst" + (Prims.of_int (171)) + (Prims.of_int (39)) + (Prims.of_int (171)) + (Prims.of_int (56))) + (Prims.mk_range + "FStar.Tactics.Typeclasses.fst" + (Prims.of_int (171)) + (Prims.of_int (24)) + (Prims.of_int (173)) + (Prims.of_int (57))) + (FStar_Tactics_Effect.lift_div_tac + (fun + uu___11 + -> + FStar_Reflection_Builtins.inspect_binder + b1)) + (fun + uu___11 + -> + (fun + uu___11 + -> + match uu___11 + with + | + (bv, aq) + -> + Obj.magic + (FStar_Tactics_Effect.tac_bind + (Prims.mk_range + "FStar.Tactics.Typeclasses.fst" + (Prims.of_int (172)) + (Prims.of_int (33)) + (Prims.of_int (172)) + (Prims.of_int (63))) + (Prims.mk_range + "FStar.Tactics.Typeclasses.fst" + (Prims.of_int (173)) + (Prims.of_int (24)) + (Prims.of_int (173)) + (Prims.of_int (57))) + (FStar_Tactics_Effect.lift_div_tac + (fun + uu___12 + -> + FStar_Reflection_Builtins.pack_binder + bv + (FStar_Reflection_Data.Q_Meta + tcr) [])) + (fun + uu___12 + -> + (fun b11 + -> + Obj.magic + (FStar_Tactics_SyntaxHelpers.mk_arr_curried + (FStar_List_Tot_Base.op_At + ps (b11 + :: bs')) + cod2)) + uu___12))) + uu___11)))) + uu___10))) + uu___9))) + (fun + uu___9 -> + (fun ty2 + -> + Obj.magic + (FStar_Tactics_Effect.tac_bind + (Prims.mk_range + "FStar.Tactics.Typeclasses.fst" + (Prims.of_int (177)) + (Prims.of_int (20)) + (Prims.of_int (179)) + (Prims.of_int (69))) + (Prims.mk_range + "FStar.Tactics.Typeclasses.fst" + (Prims.of_int (192)) + (Prims.of_int (18)) + (Prims.of_int (195)) + (Prims.of_int (20))) + (Obj.magic + (FStar_Tactics_Effect.tac_bind + (Prims.mk_range + "FStar.Tactics.Typeclasses.fst" + (Prims.of_int (177)) + (Prims.of_int (29)) + (Prims.of_int (178)) + (Prims.of_int (46))) + (Prims.mk_range + "FStar.Tactics.Typeclasses.fst" + (Prims.of_int (179)) + (Prims.of_int (20)) + (Prims.of_int (179)) + (Prims.of_int (69))) + (Obj.magic + (FStar_Tactics_Effect.tac_bind + (Prims.mk_range + "FStar.Tactics.Typeclasses.fst" + (Prims.of_int (177)) + (Prims.of_int (29)) + (Prims.of_int (177)) + (Prims.of_int (81))) + (Prims.mk_range + "FStar.Tactics.Typeclasses.fst" + (Prims.of_int (177)) + (Prims.of_int (29)) + (Prims.of_int (178)) + (Prims.of_int (46))) + (Obj.magic + (FStar_Tactics_Util.map + (fun + uu___9 -> + (fun b1 + -> + Obj.magic + (FStar_Tactics_Effect.lift_div_tac + (fun + uu___9 -> + FStar_Reflection_Derived.binder_set_qual + FStar_Reflection_Data.Q_Implicit + b1))) + uu___9) + params)) + (fun + uu___9 -> + FStar_Tactics_Effect.lift_div_tac + (fun + uu___10 + -> + FStar_List_Tot_Base.op_At + uu___9 + [tcdict])))) + (fun + uu___9 -> + (fun bs1 + -> + Obj.magic + (FStar_Tactics_Effect.tac_bind + (Prims.mk_range + "FStar.Tactics.Typeclasses.fst" + (Prims.of_int (179)) + (Prims.of_int (30)) + (Prims.of_int (179)) + (Prims.of_int (69))) + (Prims.mk_range + "FStar.Tactics.Typeclasses.fst" + (Prims.of_int (179)) + (Prims.of_int (20)) + (Prims.of_int (179)) + (Prims.of_int (69))) + (Obj.magic + (FStar_Tactics_Effect.tac_bind + (Prims.mk_range + "FStar.Tactics.Typeclasses.fst" + (Prims.of_int (179)) + (Prims.of_int (45)) + (Prims.of_int (179)) + (Prims.of_int (68))) + (Prims.mk_range + "FStar.Tactics.Typeclasses.fst" + (Prims.of_int (179)) + (Prims.of_int (30)) + (Prims.of_int (179)) + (Prims.of_int (69))) + (Obj.magic + (FStar_Tactics_Effect.tac_bind + (Prims.mk_range + "FStar.Tactics.Typeclasses.fst" + (Prims.of_int (179)) + (Prims.of_int (46)) + (Prims.of_int (179)) + (Prims.of_int (67))) + (Prims.mk_range + "FStar.Tactics.Typeclasses.fst" + (Prims.of_int (179)) + (Prims.of_int (45)) + (Prims.of_int (179)) + (Prims.of_int (68))) + (Obj.magic + (FStar_Tactics_Derived.binder_to_term + tcdict)) + (fun + uu___9 -> + FStar_Tactics_Effect.lift_div_tac + (fun + uu___10 + -> + [uu___9])))) + (fun + uu___9 -> + FStar_Tactics_Effect.lift_div_tac + (fun + uu___10 + -> + FStar_Reflection_Derived.mk_e_app + proj + uu___9)))) + (fun + uu___9 -> + (fun + uu___9 -> + Obj.magic + (mk_abs + bs1 + uu___9)) + uu___9))) + uu___9))) + (fun def + -> + FStar_Tactics_Effect.lift_div_tac + (fun + uu___9 -> + match + FStar_Reflection_Builtins.inspect_binder + b + with + | + (uu___10, + (uu___11, + attrs)) + -> + FStar_Reflection_Builtins.set_sigelt_attrs + attrs + (FStar_Reflection_Builtins.set_sigelt_quals + to_propagate + (FStar_Reflection_Builtins.pack_sigelt + (FStar_Reflection_Data.Sg_Let + (false, + [ + FStar_Reflection_Builtins.pack_lb + { + FStar_Reflection_Data.lb_fv + = sfv; + FStar_Reflection_Data.lb_us + = us; + FStar_Reflection_Data.lb_typ + = ty2; + FStar_Reflection_Data.lb_def + = def + }])))))))) + uu___9))) + uu___9))) + uu___9))) + uu___9))) + uu___9))) + uu___9))) + uu___9))) + uu___9))) + uu___9))) + uu___9)) + (filter_no_method_binders + bs))) + uu___9))) + uu___8))) + uu___7))) + uu___7))) + uu___6))) + uu___5))) + uu___4))) + uu___4))) + uu___3))) + uu___2))) + uu___2))) + uu___2))) uu___1))) + uu___))) uu___))) uu___) +let _ = + FStar_Tactics_Native.register_tactic "FStar.Tactics.Typeclasses.mk_class" + (Prims.of_int (2)) + (fun psc -> + fun ncb -> + fun args -> + FStar_Tactics_InterpFuns.mk_tactic_interpretation_1 + (FStar_Tactics_Native.from_tactic_1 mk_class) + FStar_Syntax_Embeddings.e_string + (FStar_Syntax_Embeddings.e_list + FStar_Reflection_Embeddings.e_sigelt) psc ncb args) \ No newline at end of file diff --git a/src/ocaml-output/FStar_Tactics_Types.ml b/ocaml/fstar-lib/generated/FStar_Tactics_Types.ml similarity index 100% rename from src/ocaml-output/FStar_Tactics_Types.ml rename to ocaml/fstar-lib/generated/FStar_Tactics_Types.ml diff --git a/ocaml/fstar-lib/generated/FStar_Tactics_Util.ml b/ocaml/fstar-lib/generated/FStar_Tactics_Util.ml new file mode 100644 index 00000000000..9a3486095b1 --- /dev/null +++ b/ocaml/fstar-lib/generated/FStar_Tactics_Util.ml @@ -0,0 +1,463 @@ +open Prims +let rec map : + 'a 'b . + ('a -> ('b, unit) FStar_Tactics_Effect.tac_repr) -> + 'a Prims.list -> ('b Prims.list, unit) FStar_Tactics_Effect.tac_repr + = + fun uu___1 -> + fun uu___ -> + (fun f -> + fun x -> + match x with + | [] -> + Obj.magic + (Obj.repr + (FStar_Tactics_Effect.lift_div_tac (fun uu___ -> []))) + | a1::tl -> + Obj.magic + (Obj.repr + (FStar_Tactics_Effect.tac_bind + (Prims.mk_range "FStar.Tactics.Util.fst" + (Prims.of_int (30)) (Prims.of_int (13)) + (Prims.of_int (30)) (Prims.of_int (16))) + (Prims.mk_range "FStar.Tactics.Util.fst" + (Prims.of_int (30)) (Prims.of_int (16)) + (Prims.of_int (30)) (Prims.of_int (18))) + (Obj.magic (f a1)) + (fun uu___ -> + (fun uu___ -> + Obj.magic + (FStar_Tactics_Effect.tac_bind + (Prims.mk_range "FStar.Tactics.Util.fst" + (Prims.of_int (30)) (Prims.of_int (18)) + (Prims.of_int (30)) (Prims.of_int (26))) + (Prims.mk_range "FStar.Tactics.Util.fst" + (Prims.of_int (30)) (Prims.of_int (16)) + (Prims.of_int (30)) (Prims.of_int (18))) + (Obj.magic (map f tl)) + (fun uu___1 -> + FStar_Tactics_Effect.lift_div_tac + (fun uu___2 -> uu___ :: uu___1)))) + uu___)))) uu___1 uu___ +let rec __mapi : + 'a 'b . + Prims.nat -> + (Prims.nat -> 'a -> ('b, unit) FStar_Tactics_Effect.tac_repr) -> + 'a Prims.list -> ('b Prims.list, unit) FStar_Tactics_Effect.tac_repr + = + fun uu___2 -> + fun uu___1 -> + fun uu___ -> + (fun i -> + fun f -> + fun x -> + match x with + | [] -> + Obj.magic + (Obj.repr + (FStar_Tactics_Effect.lift_div_tac (fun uu___ -> []))) + | a1::tl -> + Obj.magic + (Obj.repr + (FStar_Tactics_Effect.tac_bind + (Prims.mk_range "FStar.Tactics.Util.fst" + (Prims.of_int (37)) (Prims.of_int (13)) + (Prims.of_int (37)) (Prims.of_int (18))) + (Prims.mk_range "FStar.Tactics.Util.fst" + (Prims.of_int (37)) (Prims.of_int (18)) + (Prims.of_int (37)) (Prims.of_int (20))) + (Obj.magic (f i a1)) + (fun uu___ -> + (fun uu___ -> + Obj.magic + (FStar_Tactics_Effect.tac_bind + (Prims.mk_range + "FStar.Tactics.Util.fst" + (Prims.of_int (37)) + (Prims.of_int (20)) + (Prims.of_int (37)) + (Prims.of_int (37))) + (Prims.mk_range + "FStar.Tactics.Util.fst" + (Prims.of_int (37)) + (Prims.of_int (18)) + (Prims.of_int (37)) + (Prims.of_int (20))) + (Obj.magic + (__mapi (i + Prims.int_one) f tl)) + (fun uu___1 -> + FStar_Tactics_Effect.lift_div_tac + (fun uu___2 -> uu___ :: uu___1)))) + uu___)))) uu___2 uu___1 uu___ +let mapi : + 'a 'b . + (Prims.nat -> 'a -> ('b, unit) FStar_Tactics_Effect.tac_repr) -> + 'a Prims.list -> ('b Prims.list, unit) FStar_Tactics_Effect.tac_repr + = fun f -> fun l -> __mapi Prims.int_zero f l +let rec iter : + 'a . + ('a -> (unit, unit) FStar_Tactics_Effect.tac_repr) -> + 'a Prims.list -> (unit, unit) FStar_Tactics_Effect.tac_repr + = + fun uu___1 -> + fun uu___ -> + (fun f -> + fun x -> + match x with + | [] -> + Obj.magic + (Obj.repr + (FStar_Tactics_Effect.lift_div_tac (fun uu___ -> ()))) + | a1::tl -> + Obj.magic + (Obj.repr + (FStar_Tactics_Effect.tac_bind + (Prims.mk_range "FStar.Tactics.Util.fst" + (Prims.of_int (47)) (Prims.of_int (13)) + (Prims.of_int (47)) (Prims.of_int (16))) + (Prims.mk_range "FStar.Tactics.Util.fst" + (Prims.of_int (47)) (Prims.of_int (18)) + (Prims.of_int (47)) (Prims.of_int (27))) + (Obj.magic (f a1)) + (fun uu___ -> + (fun uu___ -> Obj.magic (iter f tl)) uu___)))) + uu___1 uu___ +let rec iteri_aux : + 'a . + Prims.int -> + (Prims.int -> 'a -> (unit, unit) FStar_Tactics_Effect.tac_repr) -> + 'a Prims.list -> (unit, unit) FStar_Tactics_Effect.tac_repr + = + fun uu___2 -> + fun uu___1 -> + fun uu___ -> + (fun i -> + fun f -> + fun x -> + match x with + | [] -> + Obj.magic + (Obj.repr + (FStar_Tactics_Effect.lift_div_tac (fun uu___ -> ()))) + | a1::tl -> + Obj.magic + (Obj.repr + (FStar_Tactics_Effect.tac_bind + (Prims.mk_range "FStar.Tactics.Util.fst" + (Prims.of_int (54)) (Prims.of_int (13)) + (Prims.of_int (54)) (Prims.of_int (18))) + (Prims.mk_range "FStar.Tactics.Util.fst" + (Prims.of_int (54)) (Prims.of_int (20)) + (Prims.of_int (54)) (Prims.of_int (40))) + (Obj.magic (f i a1)) + (fun uu___ -> + (fun uu___ -> + Obj.magic + (iteri_aux (i + Prims.int_one) f tl)) + uu___)))) uu___2 uu___1 uu___ +let iteri : + 'a . + (Prims.int -> 'a -> (unit, unit) FStar_Tactics_Effect.tac_repr) -> + 'a Prims.list -> (unit, unit) FStar_Tactics_Effect.tac_repr + = fun f -> fun x -> iteri_aux Prims.int_zero f x +let rec fold_left : + 'a 'b . + ('a -> 'b -> ('a, unit) FStar_Tactics_Effect.tac_repr) -> + 'a -> 'b Prims.list -> ('a, unit) FStar_Tactics_Effect.tac_repr + = + fun uu___2 -> + fun uu___1 -> + fun uu___ -> + (fun f -> + fun x -> + fun l -> + match l with + | [] -> + Obj.magic + (Obj.repr + (FStar_Tactics_Effect.lift_div_tac (fun uu___ -> x))) + | hd::tl -> + Obj.magic + (Obj.repr + (FStar_Tactics_Effect.tac_bind + (Prims.mk_range "FStar.Tactics.Util.fst" + (Prims.of_int (64)) (Prims.of_int (26)) + (Prims.of_int (64)) (Prims.of_int (34))) + (Prims.mk_range "FStar.Tactics.Util.fst" + (Prims.of_int (64)) (Prims.of_int (14)) + (Prims.of_int (64)) (Prims.of_int (37))) + (Obj.magic (f x hd)) + (fun uu___ -> + (fun uu___ -> Obj.magic (fold_left f uu___ tl)) + uu___)))) uu___2 uu___1 uu___ +let rec fold_right : + 'a 'b . + ('a -> 'b -> ('b, unit) FStar_Tactics_Effect.tac_repr) -> + 'a Prims.list -> 'b -> ('b, unit) FStar_Tactics_Effect.tac_repr + = + fun uu___2 -> + fun uu___1 -> + fun uu___ -> + (fun f -> + fun l -> + fun x -> + match l with + | [] -> + Obj.magic + (Obj.repr + (FStar_Tactics_Effect.lift_div_tac (fun uu___ -> x))) + | hd::tl -> + Obj.magic + (Obj.repr + (FStar_Tactics_Effect.tac_bind + (Prims.mk_range "FStar.Tactics.Util.fst" + (Prims.of_int (71)) (Prims.of_int (19)) + (Prims.of_int (71)) (Prims.of_int (38))) + (Prims.mk_range "FStar.Tactics.Util.fst" + (Prims.of_int (71)) (Prims.of_int (14)) + (Prims.of_int (71)) (Prims.of_int (38))) + (Obj.magic (fold_right f tl x)) + (fun uu___ -> + (fun uu___ -> Obj.magic (f hd uu___)) uu___)))) + uu___2 uu___1 uu___ +let rec zip : + 'a 'b . + 'a Prims.list -> + 'b Prims.list -> + (('a * 'b) Prims.list, unit) FStar_Tactics_Effect.tac_repr + = + fun uu___1 -> + fun uu___ -> + (fun l1 -> + fun l2 -> + match (l1, l2) with + | (x::xs, y::ys) -> + Obj.magic + (Obj.repr + (FStar_Tactics_Effect.tac_bind + (Prims.mk_range "FStar.Tactics.Util.fst" + (Prims.of_int (78)) (Prims.of_int (31)) + (Prims.of_int (78)) (Prims.of_int (42))) + (Prims.mk_range "FStar.Tactics.Util.fst" + (Prims.of_int (78)) (Prims.of_int (28)) + (Prims.of_int (78)) (Prims.of_int (30))) + (Obj.magic (zip xs ys)) + (fun uu___ -> + FStar_Tactics_Effect.lift_div_tac + (fun uu___1 -> (x, y) :: uu___)))) + | uu___ -> + Obj.magic + (Obj.repr + (FStar_Tactics_Effect.lift_div_tac (fun uu___1 -> [])))) + uu___1 uu___ +let rec filter : + 'a . + ('a -> (Prims.bool, unit) FStar_Tactics_Effect.tac_repr) -> + 'a Prims.list -> ('a Prims.list, unit) FStar_Tactics_Effect.tac_repr + = + fun uu___1 -> + fun uu___ -> + (fun f -> + fun uu___ -> + match uu___ with + | [] -> + Obj.magic + (Obj.repr + (FStar_Tactics_Effect.lift_div_tac (fun uu___1 -> []))) + | hd::tl -> + Obj.magic + (Obj.repr + (FStar_Tactics_Effect.tac_bind + (Prims.mk_range "FStar.Tactics.Util.fst" + (Prims.of_int (86)) (Prims.of_int (17)) + (Prims.of_int (86)) (Prims.of_int (21))) + (Prims.mk_range "FStar.Tactics.Util.fst" + (Prims.of_int (86)) (Prims.of_int (14)) + (Prims.of_int (86)) (Prims.of_int (61))) + (Obj.magic (f hd)) + (fun uu___1 -> + (fun uu___1 -> + if uu___1 + then + Obj.magic + (FStar_Tactics_Effect.tac_bind + (Prims.mk_range "FStar.Tactics.Util.fst" + (Prims.of_int (86)) + (Prims.of_int (31)) + (Prims.of_int (86)) + (Prims.of_int (44))) + (Prims.mk_range "FStar.Tactics.Util.fst" + (Prims.of_int (86)) + (Prims.of_int (29)) + (Prims.of_int (86)) + (Prims.of_int (31))) + (Obj.magic (filter f tl)) + (fun uu___2 -> + FStar_Tactics_Effect.lift_div_tac + (fun uu___3 -> hd :: uu___2))) + else Obj.magic (filter f tl)) uu___1)))) uu___1 + uu___ +let rec filter_map_acc : + 'a 'b . + ('a -> + ('b FStar_Pervasives_Native.option, unit) + FStar_Tactics_Effect.tac_repr) + -> + 'b Prims.list -> + 'a Prims.list -> ('b Prims.list, unit) FStar_Tactics_Effect.tac_repr + = + fun uu___2 -> + fun uu___1 -> + fun uu___ -> + (fun f -> + fun acc -> + fun l -> + match l with + | [] -> + Obj.magic + (Obj.repr + (FStar_Tactics_Effect.lift_div_tac + (fun uu___ -> FStar_List_Tot_Base.rev acc))) + | hd::tl -> + Obj.magic + (Obj.repr + (FStar_Tactics_Effect.tac_bind + (Prims.mk_range "FStar.Tactics.Util.fst" + (Prims.of_int (96)) (Prims.of_int (12)) + (Prims.of_int (96)) (Prims.of_int (16))) + (Prims.mk_range "FStar.Tactics.Util.fst" + (Prims.of_int (96)) (Prims.of_int (6)) + (Prims.of_int (100)) (Prims.of_int (33))) + (Obj.magic (f hd)) + (fun uu___ -> + (fun uu___ -> + match uu___ with + | FStar_Pervasives_Native.Some hd1 -> + Obj.magic + (filter_map_acc f (hd1 :: acc) tl) + | FStar_Pervasives_Native.None -> + Obj.magic (filter_map_acc f acc tl)) + uu___)))) uu___2 uu___1 uu___ +let filter_map : + 'a 'b . + ('a -> + ('b FStar_Pervasives_Native.option, unit) + FStar_Tactics_Effect.tac_repr) + -> 'a Prims.list -> ('b Prims.list, unit) FStar_Tactics_Effect.tac_repr + = fun f -> fun l -> filter_map_acc f [] l +let rec tryPick : + 'a 'b . + ('a -> + ('b FStar_Pervasives_Native.option, unit) + FStar_Tactics_Effect.tac_repr) + -> + 'a Prims.list -> + ('b FStar_Pervasives_Native.option, unit) + FStar_Tactics_Effect.tac_repr + = + fun uu___1 -> + fun uu___ -> + (fun f -> + fun l -> + match l with + | [] -> + Obj.magic + (Obj.repr + (FStar_Tactics_Effect.lift_div_tac + (fun uu___ -> FStar_Pervasives_Native.None))) + | hd::tl -> + Obj.magic + (Obj.repr + (FStar_Tactics_Effect.tac_bind + (Prims.mk_range "FStar.Tactics.Util.fst" + (Prims.of_int (111)) (Prims.of_int (13)) + (Prims.of_int (111)) (Prims.of_int (17))) + (Prims.mk_range "FStar.Tactics.Util.fst" + (Prims.of_int (111)) (Prims.of_int (7)) + (Prims.of_int (113)) (Prims.of_int (31))) + (Obj.magic (f hd)) + (fun uu___ -> + (fun uu___ -> + match uu___ with + | FStar_Pervasives_Native.Some x -> + Obj.magic + (Obj.repr + (FStar_Tactics_Effect.lift_div_tac + (fun uu___1 -> + FStar_Pervasives_Native.Some x))) + | FStar_Pervasives_Native.None -> + Obj.magic (Obj.repr (tryPick f tl))) uu___)))) + uu___1 uu___ +let map_opt : + 'a 'b . + ('a -> ('b, unit) FStar_Tactics_Effect.tac_repr) -> + 'a FStar_Pervasives_Native.option -> + ('b FStar_Pervasives_Native.option, unit) + FStar_Tactics_Effect.tac_repr + = + fun uu___1 -> + fun uu___ -> + (fun f -> + fun x -> + match x with + | FStar_Pervasives_Native.None -> + Obj.magic + (Obj.repr + (FStar_Tactics_Effect.lift_div_tac + (fun uu___ -> FStar_Pervasives_Native.None))) + | FStar_Pervasives_Native.Some x1 -> + Obj.magic + (Obj.repr + (FStar_Tactics_Effect.tac_bind + (Prims.mk_range "FStar.Tactics.Util.fst" + (Prims.of_int (119)) (Prims.of_int (19)) + (Prims.of_int (119)) (Prims.of_int (24))) + (Prims.mk_range "FStar.Tactics.Util.fst" + (Prims.of_int (119)) (Prims.of_int (14)) + (Prims.of_int (119)) (Prims.of_int (24))) + (Obj.magic (f x1)) + (fun uu___ -> + FStar_Tactics_Effect.lift_div_tac + (fun uu___1 -> FStar_Pervasives_Native.Some uu___))))) + uu___1 uu___ +let rec repeatn : + 'a . + Prims.int -> + (unit -> ('a, unit) FStar_Tactics_Effect.tac_repr) -> + ('a Prims.list, unit) FStar_Tactics_Effect.tac_repr + = + fun uu___1 -> + fun uu___ -> + (fun n -> + fun t -> + if n <= Prims.int_zero + then + Obj.magic + (Obj.repr + (FStar_Tactics_Effect.lift_div_tac (fun uu___ -> []))) + else + Obj.magic + (Obj.repr + (FStar_Tactics_Effect.tac_bind + (Prims.mk_range "FStar.Tactics.Util.fst" + (Prims.of_int (125)) (Prims.of_int (9)) + (Prims.of_int (125)) (Prims.of_int (13))) + (Prims.mk_range "FStar.Tactics.Util.fst" + (Prims.of_int (125)) (Prims.of_int (14)) + (Prims.of_int (125)) (Prims.of_int (16))) + (Obj.magic (t ())) + (fun uu___1 -> + (fun uu___1 -> + Obj.magic + (FStar_Tactics_Effect.tac_bind + (Prims.mk_range "FStar.Tactics.Util.fst" + (Prims.of_int (125)) (Prims.of_int (17)) + (Prims.of_int (125)) (Prims.of_int (34))) + (Prims.mk_range "FStar.Tactics.Util.fst" + (Prims.of_int (125)) (Prims.of_int (14)) + (Prims.of_int (125)) (Prims.of_int (16))) + (Obj.magic (repeatn (n - Prims.int_one) t)) + (fun uu___2 -> + FStar_Tactics_Effect.lift_div_tac + (fun uu___3 -> uu___1 :: uu___2)))) + uu___1)))) uu___1 uu___ \ No newline at end of file diff --git a/ocaml/fstar-lib/generated/FStar_Tactics_Visit.ml b/ocaml/fstar-lib/generated/FStar_Tactics_Visit.ml new file mode 100644 index 00000000000..1126af2c1d2 --- /dev/null +++ b/ocaml/fstar-lib/generated/FStar_Tactics_Visit.ml @@ -0,0 +1,1001 @@ +open Prims +let (on_sort_bv : + (FStar_Reflection_Types.term -> + (FStar_Reflection_Types.term, unit) FStar_Tactics_Effect.tac_repr) + -> + FStar_Reflection_Types.bv -> + (FStar_Reflection_Types.bv, unit) FStar_Tactics_Effect.tac_repr) + = + fun f -> + fun xbv -> + FStar_Tactics_Effect.tac_bind + (Prims.mk_range "FStar.Tactics.Visit.fst" (Prims.of_int (26)) + (Prims.of_int (12)) (Prims.of_int (26)) (Prims.of_int (26))) + (Prims.mk_range "FStar.Tactics.Visit.fst" (Prims.of_int (27)) + (Prims.of_int (2)) (Prims.of_int (29)) (Prims.of_int (4))) + (FStar_Tactics_Effect.lift_div_tac + (fun uu___ -> FStar_Reflection_Builtins.inspect_bv xbv)) + (fun uu___ -> + (fun bvv -> + Obj.magic + (FStar_Tactics_Effect.tac_bind + (Prims.mk_range "FStar.Tactics.Visit.fst" + (Prims.of_int (27)) (Prims.of_int (14)) + (Prims.of_int (27)) (Prims.of_int (46))) + (Prims.mk_range "FStar.Tactics.Visit.fst" + (Prims.of_int (28)) (Prims.of_int (11)) + (Prims.of_int (28)) (Prims.of_int (22))) + (Obj.magic + (FStar_Tactics_Effect.tac_bind + (Prims.mk_range "FStar.Tactics.Visit.fst" + (Prims.of_int (27)) (Prims.of_int (33)) + (Prims.of_int (27)) (Prims.of_int (46))) + (Prims.mk_range "FStar.Tactics.Visit.fst" + (Prims.of_int (27)) (Prims.of_int (14)) + (Prims.of_int (27)) (Prims.of_int (46))) + (Obj.magic (f bvv.FStar_Reflection_Data.bv_sort)) + (fun uu___ -> + FStar_Tactics_Effect.lift_div_tac + (fun uu___1 -> + { + FStar_Reflection_Data.bv_ppname = + (bvv.FStar_Reflection_Data.bv_ppname); + FStar_Reflection_Data.bv_index = + (bvv.FStar_Reflection_Data.bv_index); + FStar_Reflection_Data.bv_sort = uu___ + })))) + (fun bvv1 -> + FStar_Tactics_Effect.lift_div_tac + (fun uu___ -> FStar_Reflection_Builtins.pack_bv bvv1)))) + uu___) +let (on_sort_binder : + (FStar_Reflection_Types.term -> + (FStar_Reflection_Types.term, unit) FStar_Tactics_Effect.tac_repr) + -> + FStar_Reflection_Types.binder -> + (FStar_Reflection_Types.binder, unit) FStar_Tactics_Effect.tac_repr) + = + fun f -> + fun b -> + FStar_Tactics_Effect.tac_bind + (Prims.mk_range "FStar.Tactics.Visit.fst" (Prims.of_int (32)) + (Prims.of_int (23)) (Prims.of_int (32)) (Prims.of_int (39))) + (Prims.mk_range "FStar.Tactics.Visit.fst" (Prims.of_int (32)) + (Prims.of_int (2)) (Prims.of_int (35)) (Prims.of_int (3))) + (FStar_Tactics_Effect.lift_div_tac + (fun uu___ -> FStar_Reflection_Builtins.inspect_binder b)) + (fun uu___ -> + (fun uu___ -> + match uu___ with + | (bv, (q, attrs)) -> + Obj.magic + (FStar_Tactics_Effect.tac_bind + (Prims.mk_range "FStar.Tactics.Visit.fst" + (Prims.of_int (33)) (Prims.of_int (11)) + (Prims.of_int (33)) (Prims.of_int (26))) + (Prims.mk_range "FStar.Tactics.Visit.fst" + (Prims.of_int (34)) (Prims.of_int (10)) + (Prims.of_int (34)) (Prims.of_int (32))) + (Obj.magic (on_sort_bv f bv)) + (fun bv1 -> + FStar_Tactics_Effect.lift_div_tac + (fun uu___1 -> + FStar_Reflection_Builtins.pack_binder bv1 q + attrs)))) uu___) +let rec (visit_tm : + (FStar_Reflection_Types.term -> + (FStar_Reflection_Types.term, unit) FStar_Tactics_Effect.tac_repr) + -> + FStar_Reflection_Types.term -> + (FStar_Reflection_Types.term, unit) FStar_Tactics_Effect.tac_repr) + = + fun ff -> + fun t -> + FStar_Tactics_Effect.tac_bind + (Prims.mk_range "FStar.Tactics.Visit.fst" (Prims.of_int (38)) + (Prims.of_int (11)) (Prims.of_int (38)) (Prims.of_int (23))) + (Prims.mk_range "FStar.Tactics.Visit.fst" (Prims.of_int (39)) + (Prims.of_int (2)) (Prims.of_int (97)) (Prims.of_int (18))) + (FStar_Tactics_Effect.lift_div_tac + (fun uu___ -> FStar_Reflection_Builtins.inspect_ln t)) + (fun uu___ -> + (fun tv -> + Obj.magic + (FStar_Tactics_Effect.tac_bind + (Prims.mk_range "FStar.Tactics.Visit.fst" + (Prims.of_int (40)) (Prims.of_int (4)) + (Prims.of_int (95)) (Prims.of_int (36))) + (Prims.mk_range "FStar.Tactics.Visit.fst" + (Prims.of_int (97)) (Prims.of_int (2)) + (Prims.of_int (97)) (Prims.of_int (18))) + (match tv with + | FStar_Reflection_Data.Tv_FVar uu___ -> + Obj.magic + (Obj.repr + (FStar_Tactics_Effect.lift_div_tac + (fun uu___1 -> tv))) + | FStar_Reflection_Data.Tv_UInst (uu___, uu___1) -> + Obj.magic + (Obj.repr + (FStar_Tactics_Effect.lift_div_tac + (fun uu___2 -> tv))) + | FStar_Reflection_Data.Tv_Var bv -> + Obj.magic + (Obj.repr + (FStar_Tactics_Effect.tac_bind + (Prims.mk_range "FStar.Tactics.Visit.fst" + (Prims.of_int (44)) (Prims.of_int (17)) + (Prims.of_int (44)) (Prims.of_int (44))) + (Prims.mk_range "FStar.Tactics.Visit.fst" + (Prims.of_int (45)) (Prims.of_int (8)) + (Prims.of_int (45)) (Prims.of_int (17))) + (Obj.magic (on_sort_bv (visit_tm ff) bv)) + (fun bv1 -> + FStar_Tactics_Effect.lift_div_tac + (fun uu___ -> + FStar_Reflection_Data.Tv_Var bv1)))) + | FStar_Reflection_Data.Tv_BVar bv -> + Obj.magic + (Obj.repr + (FStar_Tactics_Effect.tac_bind + (Prims.mk_range "FStar.Tactics.Visit.fst" + (Prims.of_int (48)) (Prims.of_int (17)) + (Prims.of_int (48)) (Prims.of_int (44))) + (Prims.mk_range "FStar.Tactics.Visit.fst" + (Prims.of_int (49)) (Prims.of_int (8)) + (Prims.of_int (49)) (Prims.of_int (18))) + (Obj.magic (on_sort_bv (visit_tm ff) bv)) + (fun bv1 -> + FStar_Tactics_Effect.lift_div_tac + (fun uu___ -> + FStar_Reflection_Data.Tv_BVar bv1)))) + | FStar_Reflection_Data.Tv_Type u -> + Obj.magic + (Obj.repr + (FStar_Tactics_Effect.lift_div_tac + (fun uu___ -> FStar_Reflection_Data.Tv_Type u))) + | FStar_Reflection_Data.Tv_Const c -> + Obj.magic + (Obj.repr + (FStar_Tactics_Effect.lift_div_tac + (fun uu___ -> + FStar_Reflection_Data.Tv_Const c))) + | FStar_Reflection_Data.Tv_Uvar (i, u) -> + Obj.magic + (Obj.repr + (FStar_Tactics_Effect.lift_div_tac + (fun uu___ -> + FStar_Reflection_Data.Tv_Uvar (i, u)))) + | FStar_Reflection_Data.Tv_Unknown -> + Obj.magic + (Obj.repr + (FStar_Tactics_Effect.lift_div_tac + (fun uu___ -> + FStar_Reflection_Data.Tv_Unknown))) + | FStar_Reflection_Data.Tv_Arrow (b, c) -> + Obj.magic + (Obj.repr + (FStar_Tactics_Effect.tac_bind + (Prims.mk_range "FStar.Tactics.Visit.fst" + (Prims.of_int (56)) (Prims.of_int (16)) + (Prims.of_int (56)) (Prims.of_int (46))) + (Prims.mk_range "FStar.Tactics.Visit.fst" + (Prims.of_int (57)) (Prims.of_int (8)) + (Prims.of_int (58)) (Prims.of_int (20))) + (Obj.magic (on_sort_binder (visit_tm ff) b)) + (fun uu___ -> + (fun b1 -> + Obj.magic + (FStar_Tactics_Effect.tac_bind + (Prims.mk_range + "FStar.Tactics.Visit.fst" + (Prims.of_int (57)) + (Prims.of_int (16)) + (Prims.of_int (57)) + (Prims.of_int (31))) + (Prims.mk_range + "FStar.Tactics.Visit.fst" + (Prims.of_int (58)) + (Prims.of_int (8)) + (Prims.of_int (58)) + (Prims.of_int (20))) + (Obj.magic (visit_comp ff c)) + (fun c1 -> + FStar_Tactics_Effect.lift_div_tac + (fun uu___ -> + FStar_Reflection_Data.Tv_Arrow + (b1, c1))))) uu___))) + | FStar_Reflection_Data.Tv_Abs (b, t1) -> + Obj.magic + (Obj.repr + (FStar_Tactics_Effect.tac_bind + (Prims.mk_range "FStar.Tactics.Visit.fst" + (Prims.of_int (60)) (Prims.of_int (16)) + (Prims.of_int (60)) (Prims.of_int (46))) + (Prims.mk_range "FStar.Tactics.Visit.fst" + (Prims.of_int (61)) (Prims.of_int (8)) + (Prims.of_int (62)) (Prims.of_int (18))) + (Obj.magic (on_sort_binder (visit_tm ff) b)) + (fun uu___ -> + (fun b1 -> + Obj.magic + (FStar_Tactics_Effect.tac_bind + (Prims.mk_range + "FStar.Tactics.Visit.fst" + (Prims.of_int (61)) + (Prims.of_int (16)) + (Prims.of_int (61)) + (Prims.of_int (29))) + (Prims.mk_range + "FStar.Tactics.Visit.fst" + (Prims.of_int (62)) + (Prims.of_int (8)) + (Prims.of_int (62)) + (Prims.of_int (18))) + (Obj.magic (visit_tm ff t1)) + (fun t2 -> + FStar_Tactics_Effect.lift_div_tac + (fun uu___ -> + FStar_Reflection_Data.Tv_Abs + (b1, t2))))) uu___))) + | FStar_Reflection_Data.Tv_App (l, (r, q)) -> + Obj.magic + (Obj.repr + (FStar_Tactics_Effect.tac_bind + (Prims.mk_range "FStar.Tactics.Visit.fst" + (Prims.of_int (64)) (Prims.of_int (17)) + (Prims.of_int (64)) (Prims.of_int (30))) + (Prims.mk_range "FStar.Tactics.Visit.fst" + (Prims.of_int (65)) (Prims.of_int (9)) + (Prims.of_int (66)) (Prims.of_int (24))) + (Obj.magic (visit_tm ff l)) + (fun uu___ -> + (fun l1 -> + Obj.magic + (FStar_Tactics_Effect.tac_bind + (Prims.mk_range + "FStar.Tactics.Visit.fst" + (Prims.of_int (65)) + (Prims.of_int (17)) + (Prims.of_int (65)) + (Prims.of_int (30))) + (Prims.mk_range + "FStar.Tactics.Visit.fst" + (Prims.of_int (66)) + (Prims.of_int (9)) + (Prims.of_int (66)) + (Prims.of_int (24))) + (Obj.magic (visit_tm ff r)) + (fun r1 -> + FStar_Tactics_Effect.lift_div_tac + (fun uu___ -> + FStar_Reflection_Data.Tv_App + (l1, (r1, q)))))) uu___))) + | FStar_Reflection_Data.Tv_Refine (b, r) -> + Obj.magic + (Obj.repr + (FStar_Tactics_Effect.tac_bind + (Prims.mk_range "FStar.Tactics.Visit.fst" + (Prims.of_int (68)) (Prims.of_int (16)) + (Prims.of_int (68)) (Prims.of_int (42))) + (Prims.mk_range "FStar.Tactics.Visit.fst" + (Prims.of_int (69)) (Prims.of_int (8)) + (Prims.of_int (70)) (Prims.of_int (21))) + (Obj.magic (on_sort_bv (visit_tm ff) b)) + (fun uu___ -> + (fun b1 -> + Obj.magic + (FStar_Tactics_Effect.tac_bind + (Prims.mk_range + "FStar.Tactics.Visit.fst" + (Prims.of_int (69)) + (Prims.of_int (16)) + (Prims.of_int (69)) + (Prims.of_int (29))) + (Prims.mk_range + "FStar.Tactics.Visit.fst" + (Prims.of_int (70)) + (Prims.of_int (8)) + (Prims.of_int (70)) + (Prims.of_int (21))) + (Obj.magic (visit_tm ff r)) + (fun r1 -> + FStar_Tactics_Effect.lift_div_tac + (fun uu___ -> + FStar_Reflection_Data.Tv_Refine + (b1, r1))))) uu___))) + | FStar_Reflection_Data.Tv_Let (r, attrs, b, def, t1) -> + Obj.magic + (Obj.repr + (FStar_Tactics_Effect.tac_bind + (Prims.mk_range "FStar.Tactics.Visit.fst" + (Prims.of_int (72)) (Prims.of_int (16)) + (Prims.of_int (72)) (Prims.of_int (42))) + (Prims.mk_range "FStar.Tactics.Visit.fst" + (Prims.of_int (73)) (Prims.of_int (8)) + (Prims.of_int (75)) (Prims.of_int (30))) + (Obj.magic (on_sort_bv (visit_tm ff) b)) + (fun uu___ -> + (fun b1 -> + Obj.magic + (FStar_Tactics_Effect.tac_bind + (Prims.mk_range + "FStar.Tactics.Visit.fst" + (Prims.of_int (73)) + (Prims.of_int (18)) + (Prims.of_int (73)) + (Prims.of_int (33))) + (Prims.mk_range + "FStar.Tactics.Visit.fst" + (Prims.of_int (74)) + (Prims.of_int (8)) + (Prims.of_int (75)) + (Prims.of_int (30))) + (Obj.magic (visit_tm ff def)) + (fun uu___ -> + (fun def1 -> + Obj.magic + (FStar_Tactics_Effect.tac_bind + (Prims.mk_range + "FStar.Tactics.Visit.fst" + (Prims.of_int (74)) + (Prims.of_int (16)) + (Prims.of_int (74)) + (Prims.of_int (29))) + (Prims.mk_range + "FStar.Tactics.Visit.fst" + (Prims.of_int (75)) + (Prims.of_int (8)) + (Prims.of_int (75)) + (Prims.of_int (30))) + (Obj.magic + (visit_tm ff t1)) + (fun t2 -> + FStar_Tactics_Effect.lift_div_tac + (fun uu___ -> + FStar_Reflection_Data.Tv_Let + (r, attrs, + b1, def1, + t2))))) + uu___))) uu___))) + | FStar_Reflection_Data.Tv_Match (sc, ret_opt, brs) -> + Obj.magic + (Obj.repr + (FStar_Tactics_Effect.tac_bind + (Prims.mk_range "FStar.Tactics.Visit.fst" + (Prims.of_int (77)) (Prims.of_int (17)) + (Prims.of_int (77)) (Prims.of_int (31))) + (Prims.mk_range "FStar.Tactics.Visit.fst" + (Prims.of_int (78)) (Prims.of_int (8)) + (Prims.of_int (88)) (Prims.of_int (31))) + (Obj.magic (visit_tm ff sc)) + (fun uu___ -> + (fun sc1 -> + Obj.magic + (FStar_Tactics_Effect.tac_bind + (Prims.mk_range + "FStar.Tactics.Visit.fst" + (Prims.of_int (78)) + (Prims.of_int (22)) + (Prims.of_int (86)) + (Prims.of_int (25))) + (Prims.mk_range + "FStar.Tactics.Visit.fst" + (Prims.of_int (87)) + (Prims.of_int (8)) + (Prims.of_int (88)) + (Prims.of_int (31))) + (Obj.magic + (FStar_Tactics_Util.map_opt + (fun uu___ -> + match uu___ with + | (b, asc) -> + FStar_Tactics_Effect.tac_bind + (Prims.mk_range + "FStar.Tactics.Visit.fst" + (Prims.of_int (79)) + (Prims.of_int (18)) + (Prims.of_int (79)) + (Prims.of_int (48))) + (Prims.mk_range + "FStar.Tactics.Visit.fst" + (Prims.of_int (80)) + (Prims.of_int (10)) + (Prims.of_int (86)) + (Prims.of_int (16))) + (Obj.magic + (on_sort_binder + (visit_tm ff) + b)) + (fun uu___1 -> + (fun b1 -> + Obj.magic + (FStar_Tactics_Effect.tac_bind + (Prims.mk_range + "FStar.Tactics.Visit.fst" + (Prims.of_int (81)) + (Prims.of_int (12)) + (Prims.of_int (85)) + (Prims.of_int (73))) + (Prims.mk_range + "FStar.Tactics.Visit.fst" + (Prims.of_int (86)) + (Prims.of_int (10)) + (Prims.of_int (86)) + (Prims.of_int (16))) + (match asc + with + | + (FStar_Pervasives.Inl + t1, + tacopt, + use_eq) + -> + Obj.magic + (FStar_Tactics_Effect.tac_bind + (Prims.mk_range + "FStar.Tactics.Visit.fst" + (Prims.of_int (83)) + (Prims.of_int (14)) + (Prims.of_int (83)) + (Prims.of_int (33))) + (Prims.mk_range + "FStar.Tactics.Visit.fst" + (Prims.of_int (83)) + (Prims.of_int (14)) + (Prims.of_int (83)) + (Prims.of_int (71))) + (Obj.magic + (FStar_Tactics_Effect.tac_bind + (Prims.mk_range + "FStar.Tactics.Visit.fst" + (Prims.of_int (83)) + (Prims.of_int (18)) + (Prims.of_int (83)) + (Prims.of_int (33))) + (Prims.mk_range + "FStar.Tactics.Visit.fst" + (Prims.of_int (83)) + (Prims.of_int (14)) + (Prims.of_int (83)) + (Prims.of_int (33))) + (Obj.magic + (visit_tm + ff t1)) + (fun + uu___1 -> + FStar_Tactics_Effect.lift_div_tac + (fun + uu___2 -> + FStar_Pervasives.Inl + uu___1)))) + (fun + uu___1 -> + (fun + uu___1 -> + Obj.magic + (FStar_Tactics_Effect.tac_bind + (Prims.mk_range + "FStar.Tactics.Visit.fst" + (Prims.of_int (83)) + (Prims.of_int (35)) + (Prims.of_int (83)) + (Prims.of_int (63))) + (Prims.mk_range + "FStar.Tactics.Visit.fst" + (Prims.of_int (83)) + (Prims.of_int (14)) + (Prims.of_int (83)) + (Prims.of_int (71))) + (Obj.magic + (FStar_Tactics_Util.map_opt + (visit_tm + ff) + tacopt)) + (fun + uu___2 -> + FStar_Tactics_Effect.lift_div_tac + (fun + uu___3 -> + (uu___1, + uu___2, + use_eq))))) + uu___1)) + | + (FStar_Pervasives.Inr + c, + tacopt, + use_eq) + -> + Obj.magic + (FStar_Tactics_Effect.tac_bind + (Prims.mk_range + "FStar.Tactics.Visit.fst" + (Prims.of_int (85)) + (Prims.of_int (14)) + (Prims.of_int (85)) + (Prims.of_int (35))) + (Prims.mk_range + "FStar.Tactics.Visit.fst" + (Prims.of_int (85)) + (Prims.of_int (14)) + (Prims.of_int (85)) + (Prims.of_int (73))) + (Obj.magic + (FStar_Tactics_Effect.tac_bind + (Prims.mk_range + "FStar.Tactics.Visit.fst" + (Prims.of_int (85)) + (Prims.of_int (18)) + (Prims.of_int (85)) + (Prims.of_int (35))) + (Prims.mk_range + "FStar.Tactics.Visit.fst" + (Prims.of_int (85)) + (Prims.of_int (14)) + (Prims.of_int (85)) + (Prims.of_int (35))) + (Obj.magic + (visit_comp + ff c)) + (fun + uu___1 -> + FStar_Tactics_Effect.lift_div_tac + (fun + uu___2 -> + FStar_Pervasives.Inr + uu___1)))) + (fun + uu___1 -> + (fun + uu___1 -> + Obj.magic + (FStar_Tactics_Effect.tac_bind + (Prims.mk_range + "FStar.Tactics.Visit.fst" + (Prims.of_int (85)) + (Prims.of_int (37)) + (Prims.of_int (85)) + (Prims.of_int (65))) + (Prims.mk_range + "FStar.Tactics.Visit.fst" + (Prims.of_int (85)) + (Prims.of_int (14)) + (Prims.of_int (85)) + (Prims.of_int (73))) + (Obj.magic + (FStar_Tactics_Util.map_opt + (visit_tm + ff) + tacopt)) + (fun + uu___2 -> + FStar_Tactics_Effect.lift_div_tac + (fun + uu___3 -> + (uu___1, + uu___2, + use_eq))))) + uu___1))) + (fun asc1 + -> + FStar_Tactics_Effect.lift_div_tac + (fun + uu___1 -> + (b1, + asc1))))) + uu___1)) + ret_opt)) + (fun uu___ -> + (fun ret_opt1 -> + Obj.magic + (FStar_Tactics_Effect.tac_bind + (Prims.mk_range + "FStar.Tactics.Visit.fst" + (Prims.of_int (87)) + (Prims.of_int (18)) + (Prims.of_int (87)) + (Prims.of_int (39))) + (Prims.mk_range + "FStar.Tactics.Visit.fst" + (Prims.of_int (88)) + (Prims.of_int (8)) + (Prims.of_int (88)) + (Prims.of_int (31))) + (Obj.magic + (FStar_Tactics_Util.map + (visit_br ff) brs)) + (fun brs1 -> + FStar_Tactics_Effect.lift_div_tac + (fun uu___ -> + FStar_Reflection_Data.Tv_Match + (sc1, + ret_opt1, + brs1))))) + uu___))) uu___))) + | FStar_Reflection_Data.Tv_AscribedT + (e, t1, topt, use_eq) -> + Obj.magic + (Obj.repr + (FStar_Tactics_Effect.tac_bind + (Prims.mk_range "FStar.Tactics.Visit.fst" + (Prims.of_int (90)) (Prims.of_int (16)) + (Prims.of_int (90)) (Prims.of_int (29))) + (Prims.mk_range "FStar.Tactics.Visit.fst" + (Prims.of_int (91)) (Prims.of_int (8)) + (Prims.of_int (92)) (Prims.of_int (36))) + (Obj.magic (visit_tm ff e)) + (fun uu___ -> + (fun e1 -> + Obj.magic + (FStar_Tactics_Effect.tac_bind + (Prims.mk_range + "FStar.Tactics.Visit.fst" + (Prims.of_int (91)) + (Prims.of_int (16)) + (Prims.of_int (91)) + (Prims.of_int (29))) + (Prims.mk_range + "FStar.Tactics.Visit.fst" + (Prims.of_int (92)) + (Prims.of_int (8)) + (Prims.of_int (92)) + (Prims.of_int (36))) + (Obj.magic (visit_tm ff t1)) + (fun t2 -> + FStar_Tactics_Effect.lift_div_tac + (fun uu___ -> + FStar_Reflection_Data.Tv_AscribedT + (e1, t2, topt, use_eq))))) + uu___))) + | FStar_Reflection_Data.Tv_AscribedC (e, c, topt, use_eq) + -> + Obj.magic + (Obj.repr + (FStar_Tactics_Effect.tac_bind + (Prims.mk_range "FStar.Tactics.Visit.fst" + (Prims.of_int (94)) (Prims.of_int (16)) + (Prims.of_int (94)) (Prims.of_int (29))) + (Prims.mk_range "FStar.Tactics.Visit.fst" + (Prims.of_int (95)) (Prims.of_int (8)) + (Prims.of_int (95)) (Prims.of_int (36))) + (Obj.magic (visit_tm ff e)) + (fun e1 -> + FStar_Tactics_Effect.lift_div_tac + (fun uu___ -> + FStar_Reflection_Data.Tv_AscribedC + (e1, c, topt, use_eq)))))) + (fun uu___ -> + (fun tv' -> + Obj.magic + (ff (FStar_Reflection_Builtins.pack_ln tv'))) + uu___))) uu___) +and (visit_br : + (FStar_Reflection_Types.term -> + (FStar_Reflection_Types.term, unit) FStar_Tactics_Effect.tac_repr) + -> + FStar_Reflection_Data.branch -> + (FStar_Reflection_Data.branch, unit) FStar_Tactics_Effect.tac_repr) + = + fun ff -> + fun b -> + FStar_Tactics_Effect.tac_bind + (Prims.mk_range "FStar.Tactics.Visit.fst" (Prims.of_int (99)) + (Prims.of_int (15)) (Prims.of_int (99)) (Prims.of_int (16))) + (Prims.mk_range "FStar.Tactics.Visit.fst" (Prims.of_int (99)) + (Prims.of_int (2)) (Prims.of_int (102)) (Prims.of_int (8))) + (FStar_Tactics_Effect.lift_div_tac (fun uu___ -> b)) + (fun uu___ -> + (fun uu___ -> + match uu___ with + | (p, t) -> + Obj.magic + (FStar_Tactics_Effect.tac_bind + (Prims.mk_range "FStar.Tactics.Visit.fst" + (Prims.of_int (100)) (Prims.of_int (10)) + (Prims.of_int (100)) (Prims.of_int (24))) + (Prims.mk_range "FStar.Tactics.Visit.fst" + (Prims.of_int (101)) (Prims.of_int (2)) + (Prims.of_int (102)) (Prims.of_int (8))) + (Obj.magic (visit_pat ff p)) + (fun uu___1 -> + (fun p1 -> + Obj.magic + (FStar_Tactics_Effect.tac_bind + (Prims.mk_range "FStar.Tactics.Visit.fst" + (Prims.of_int (101)) (Prims.of_int (10)) + (Prims.of_int (101)) (Prims.of_int (23))) + (Prims.mk_range "FStar.Tactics.Visit.fst" + (Prims.of_int (102)) (Prims.of_int (2)) + (Prims.of_int (102)) (Prims.of_int (8))) + (Obj.magic (visit_tm ff t)) + (fun t1 -> + FStar_Tactics_Effect.lift_div_tac + (fun uu___1 -> (p1, t1))))) uu___1))) + uu___) +and (visit_pat : + (FStar_Reflection_Types.term -> + (FStar_Reflection_Types.term, unit) FStar_Tactics_Effect.tac_repr) + -> + FStar_Reflection_Data.pattern -> + (FStar_Reflection_Data.pattern, unit) FStar_Tactics_Effect.tac_repr) + = + fun uu___1 -> + fun uu___ -> + (fun ff -> + fun p -> + match p with + | FStar_Reflection_Data.Pat_Constant c -> + Obj.magic + (Obj.repr + (FStar_Tactics_Effect.lift_div_tac (fun uu___ -> p))) + | FStar_Reflection_Data.Pat_Cons (fv, us, l) -> + Obj.magic + (Obj.repr + (FStar_Tactics_Effect.tac_bind + (Prims.mk_range "FStar.Tactics.Visit.fst" + (Prims.of_int (107)) (Prims.of_int (14)) + (Prims.of_int (107)) (Prims.of_int (55))) + (Prims.mk_range "FStar.Tactics.Visit.fst" + (Prims.of_int (108)) (Prims.of_int (6)) + (Prims.of_int (108)) (Prims.of_int (22))) + (Obj.magic + (FStar_Tactics_Util.map + (fun uu___ -> + match uu___ with + | (p1, b) -> + FStar_Tactics_Effect.tac_bind + (Prims.mk_range + "FStar.Tactics.Visit.fst" + (Prims.of_int (107)) + (Prims.of_int (33)) + (Prims.of_int (107)) + (Prims.of_int (47))) + (Prims.mk_range + "FStar.Tactics.Visit.fst" + (Prims.of_int (107)) + (Prims.of_int (32)) + (Prims.of_int (107)) + (Prims.of_int (51))) + (Obj.magic (visit_pat ff p1)) + (fun uu___1 -> + FStar_Tactics_Effect.lift_div_tac + (fun uu___2 -> (uu___1, b)))) l)) + (fun l1 -> + FStar_Tactics_Effect.lift_div_tac + (fun uu___ -> + FStar_Reflection_Data.Pat_Cons (fv, us, l1))))) + | FStar_Reflection_Data.Pat_Var bv -> + Obj.magic + (Obj.repr + (FStar_Tactics_Effect.tac_bind + (Prims.mk_range "FStar.Tactics.Visit.fst" + (Prims.of_int (110)) (Prims.of_int (15)) + (Prims.of_int (110)) (Prims.of_int (42))) + (Prims.mk_range "FStar.Tactics.Visit.fst" + (Prims.of_int (111)) (Prims.of_int (6)) + (Prims.of_int (111)) (Prims.of_int (16))) + (Obj.magic (on_sort_bv (visit_tm ff) bv)) + (fun bv1 -> + FStar_Tactics_Effect.lift_div_tac + (fun uu___ -> FStar_Reflection_Data.Pat_Var bv1)))) + | FStar_Reflection_Data.Pat_Wild bv -> + Obj.magic + (Obj.repr + (FStar_Tactics_Effect.tac_bind + (Prims.mk_range "FStar.Tactics.Visit.fst" + (Prims.of_int (113)) (Prims.of_int (15)) + (Prims.of_int (113)) (Prims.of_int (42))) + (Prims.mk_range "FStar.Tactics.Visit.fst" + (Prims.of_int (114)) (Prims.of_int (6)) + (Prims.of_int (114)) (Prims.of_int (17))) + (Obj.magic (on_sort_bv (visit_tm ff) bv)) + (fun bv1 -> + FStar_Tactics_Effect.lift_div_tac + (fun uu___ -> FStar_Reflection_Data.Pat_Wild bv1)))) + | FStar_Reflection_Data.Pat_Dot_Term eopt -> + Obj.magic + (Obj.repr + (FStar_Tactics_Effect.tac_bind + (Prims.mk_range "FStar.Tactics.Visit.fst" + (Prims.of_int (116)) (Prims.of_int (19)) + (Prims.of_int (116)) (Prims.of_int (47))) + (Prims.mk_range "FStar.Tactics.Visit.fst" + (Prims.of_int (116)) (Prims.of_int (6)) + (Prims.of_int (116)) (Prims.of_int (47))) + (Obj.magic + (FStar_Tactics_Util.map_opt (visit_tm ff) eopt)) + (fun uu___ -> + FStar_Tactics_Effect.lift_div_tac + (fun uu___1 -> + FStar_Reflection_Data.Pat_Dot_Term uu___))))) + uu___1 uu___ +and (visit_comp : + (FStar_Reflection_Types.term -> + (FStar_Reflection_Types.term, unit) FStar_Tactics_Effect.tac_repr) + -> + FStar_Reflection_Types.comp -> + (FStar_Reflection_Types.comp, unit) FStar_Tactics_Effect.tac_repr) + = + fun ff -> + fun c -> + FStar_Tactics_Effect.tac_bind + (Prims.mk_range "FStar.Tactics.Visit.fst" (Prims.of_int (118)) + (Prims.of_int (11)) (Prims.of_int (118)) (Prims.of_int (25))) + (Prims.mk_range "FStar.Tactics.Visit.fst" (Prims.of_int (119)) + (Prims.of_int (2)) (Prims.of_int (141)) (Prims.of_int (15))) + (FStar_Tactics_Effect.lift_div_tac + (fun uu___ -> FStar_Reflection_Builtins.inspect_comp c)) + (fun uu___ -> + (fun cv -> + Obj.magic + (FStar_Tactics_Effect.tac_bind + (Prims.mk_range "FStar.Tactics.Visit.fst" + (Prims.of_int (120)) (Prims.of_int (4)) + (Prims.of_int (139)) (Prims.of_int (35))) + (Prims.mk_range "FStar.Tactics.Visit.fst" + (Prims.of_int (141)) (Prims.of_int (2)) + (Prims.of_int (141)) (Prims.of_int (15))) + (match cv with + | FStar_Reflection_Data.C_Total ret -> + Obj.magic + (FStar_Tactics_Effect.tac_bind + (Prims.mk_range "FStar.Tactics.Visit.fst" + (Prims.of_int (122)) (Prims.of_int (18)) + (Prims.of_int (122)) (Prims.of_int (33))) + (Prims.mk_range "FStar.Tactics.Visit.fst" + (Prims.of_int (123)) (Prims.of_int (8)) + (Prims.of_int (123)) (Prims.of_int (19))) + (Obj.magic (visit_tm ff ret)) + (fun ret1 -> + FStar_Tactics_Effect.lift_div_tac + (fun uu___ -> + FStar_Reflection_Data.C_Total ret1))) + | FStar_Reflection_Data.C_GTotal ret -> + Obj.magic + (FStar_Tactics_Effect.tac_bind + (Prims.mk_range "FStar.Tactics.Visit.fst" + (Prims.of_int (126)) (Prims.of_int (18)) + (Prims.of_int (126)) (Prims.of_int (33))) + (Prims.mk_range "FStar.Tactics.Visit.fst" + (Prims.of_int (127)) (Prims.of_int (8)) + (Prims.of_int (127)) (Prims.of_int (20))) + (Obj.magic (visit_tm ff ret)) + (fun ret1 -> + FStar_Tactics_Effect.lift_div_tac + (fun uu___ -> + FStar_Reflection_Data.C_GTotal ret1))) + | FStar_Reflection_Data.C_Lemma (pre, post, pats) -> + Obj.magic + (FStar_Tactics_Effect.tac_bind + (Prims.mk_range "FStar.Tactics.Visit.fst" + (Prims.of_int (130)) (Prims.of_int (18)) + (Prims.of_int (130)) (Prims.of_int (33))) + (Prims.mk_range "FStar.Tactics.Visit.fst" + (Prims.of_int (131)) (Prims.of_int (8)) + (Prims.of_int (133)) (Prims.of_int (29))) + (Obj.magic (visit_tm ff pre)) + (fun uu___ -> + (fun pre1 -> + Obj.magic + (FStar_Tactics_Effect.tac_bind + (Prims.mk_range + "FStar.Tactics.Visit.fst" + (Prims.of_int (131)) + (Prims.of_int (19)) + (Prims.of_int (131)) + (Prims.of_int (35))) + (Prims.mk_range + "FStar.Tactics.Visit.fst" + (Prims.of_int (132)) + (Prims.of_int (8)) + (Prims.of_int (133)) + (Prims.of_int (29))) + (Obj.magic (visit_tm ff post)) + (fun uu___ -> + (fun post1 -> + Obj.magic + (FStar_Tactics_Effect.tac_bind + (Prims.mk_range + "FStar.Tactics.Visit.fst" + (Prims.of_int (132)) + (Prims.of_int (19)) + (Prims.of_int (132)) + (Prims.of_int (35))) + (Prims.mk_range + "FStar.Tactics.Visit.fst" + (Prims.of_int (133)) + (Prims.of_int (8)) + (Prims.of_int (133)) + (Prims.of_int (29))) + (Obj.magic + (visit_tm ff pats)) + (fun pats1 -> + FStar_Tactics_Effect.lift_div_tac + (fun uu___ -> + FStar_Reflection_Data.C_Lemma + (pre1, post1, + pats1))))) + uu___))) uu___)) + | FStar_Reflection_Data.C_Eff (us, eff, res, args, decrs) + -> + Obj.magic + (FStar_Tactics_Effect.tac_bind + (Prims.mk_range "FStar.Tactics.Visit.fst" + (Prims.of_int (136)) (Prims.of_int (18)) + (Prims.of_int (136)) (Prims.of_int (33))) + (Prims.mk_range "FStar.Tactics.Visit.fst" + (Prims.of_int (137)) (Prims.of_int (8)) + (Prims.of_int (139)) (Prims.of_int (35))) + (Obj.magic (visit_tm ff res)) + (fun uu___ -> + (fun res1 -> + Obj.magic + (FStar_Tactics_Effect.tac_bind + (Prims.mk_range + "FStar.Tactics.Visit.fst" + (Prims.of_int (137)) + (Prims.of_int (19)) + (Prims.of_int (137)) + (Prims.of_int (62))) + (Prims.mk_range + "FStar.Tactics.Visit.fst" + (Prims.of_int (138)) + (Prims.of_int (8)) + (Prims.of_int (139)) + (Prims.of_int (35))) + (Obj.magic + (FStar_Tactics_Util.map + (fun uu___ -> + match uu___ with + | (a, q) -> + FStar_Tactics_Effect.tac_bind + (Prims.mk_range + "FStar.Tactics.Visit.fst" + (Prims.of_int (137)) + (Prims.of_int (39)) + (Prims.of_int (137)) + (Prims.of_int (52))) + (Prims.mk_range + "FStar.Tactics.Visit.fst" + (Prims.of_int (137)) + (Prims.of_int (38)) + (Prims.of_int (137)) + (Prims.of_int (56))) + (Obj.magic + (visit_tm ff a)) + (fun uu___1 -> + FStar_Tactics_Effect.lift_div_tac + (fun uu___2 -> + (uu___1, q)))) + args)) + (fun uu___ -> + (fun args1 -> + Obj.magic + (FStar_Tactics_Effect.tac_bind + (Prims.mk_range + "FStar.Tactics.Visit.fst" + (Prims.of_int (138)) + (Prims.of_int (20)) + (Prims.of_int (138)) + (Prims.of_int (43))) + (Prims.mk_range + "FStar.Tactics.Visit.fst" + (Prims.of_int (139)) + (Prims.of_int (8)) + (Prims.of_int (139)) + (Prims.of_int (35))) + (Obj.magic + (FStar_Tactics_Util.map + (visit_tm ff) decrs)) + (fun decrs1 -> + FStar_Tactics_Effect.lift_div_tac + (fun uu___ -> + FStar_Reflection_Data.C_Eff + (us, eff, res1, + args1, decrs1))))) + uu___))) uu___))) + (fun cv' -> + FStar_Tactics_Effect.lift_div_tac + (fun uu___ -> FStar_Reflection_Builtins.pack_comp cv')))) + uu___) \ No newline at end of file diff --git a/src/ocaml-output/FStar_Thunk.ml b/ocaml/fstar-lib/generated/FStar_Thunk.ml similarity index 100% rename from src/ocaml-output/FStar_Thunk.ml rename to ocaml/fstar-lib/generated/FStar_Thunk.ml diff --git a/src/ocaml-output/FStar_ToSyntax_Interleave.ml b/ocaml/fstar-lib/generated/FStar_ToSyntax_Interleave.ml similarity index 100% rename from src/ocaml-output/FStar_ToSyntax_Interleave.ml rename to ocaml/fstar-lib/generated/FStar_ToSyntax_Interleave.ml diff --git a/src/ocaml-output/FStar_ToSyntax_ToSyntax.ml b/ocaml/fstar-lib/generated/FStar_ToSyntax_ToSyntax.ml similarity index 100% rename from src/ocaml-output/FStar_ToSyntax_ToSyntax.ml rename to ocaml/fstar-lib/generated/FStar_ToSyntax_ToSyntax.ml diff --git a/src/ocaml-output/FStar_TypeChecker_Cfg.ml b/ocaml/fstar-lib/generated/FStar_TypeChecker_Cfg.ml similarity index 100% rename from src/ocaml-output/FStar_TypeChecker_Cfg.ml rename to ocaml/fstar-lib/generated/FStar_TypeChecker_Cfg.ml diff --git a/src/ocaml-output/FStar_TypeChecker_Common.ml b/ocaml/fstar-lib/generated/FStar_TypeChecker_Common.ml similarity index 100% rename from src/ocaml-output/FStar_TypeChecker_Common.ml rename to ocaml/fstar-lib/generated/FStar_TypeChecker_Common.ml diff --git a/src/ocaml-output/FStar_TypeChecker_Core.ml b/ocaml/fstar-lib/generated/FStar_TypeChecker_Core.ml similarity index 100% rename from src/ocaml-output/FStar_TypeChecker_Core.ml rename to ocaml/fstar-lib/generated/FStar_TypeChecker_Core.ml diff --git a/src/ocaml-output/FStar_TypeChecker_DMFF.ml b/ocaml/fstar-lib/generated/FStar_TypeChecker_DMFF.ml similarity index 100% rename from src/ocaml-output/FStar_TypeChecker_DMFF.ml rename to ocaml/fstar-lib/generated/FStar_TypeChecker_DMFF.ml diff --git a/src/ocaml-output/FStar_TypeChecker_DeferredImplicits.ml b/ocaml/fstar-lib/generated/FStar_TypeChecker_DeferredImplicits.ml similarity index 100% rename from src/ocaml-output/FStar_TypeChecker_DeferredImplicits.ml rename to ocaml/fstar-lib/generated/FStar_TypeChecker_DeferredImplicits.ml diff --git a/src/ocaml-output/FStar_TypeChecker_Env.ml b/ocaml/fstar-lib/generated/FStar_TypeChecker_Env.ml similarity index 100% rename from src/ocaml-output/FStar_TypeChecker_Env.ml rename to ocaml/fstar-lib/generated/FStar_TypeChecker_Env.ml diff --git a/src/ocaml-output/FStar_TypeChecker_Err.ml b/ocaml/fstar-lib/generated/FStar_TypeChecker_Err.ml similarity index 100% rename from src/ocaml-output/FStar_TypeChecker_Err.ml rename to ocaml/fstar-lib/generated/FStar_TypeChecker_Err.ml diff --git a/src/ocaml-output/FStar_TypeChecker_Generalize.ml b/ocaml/fstar-lib/generated/FStar_TypeChecker_Generalize.ml similarity index 100% rename from src/ocaml-output/FStar_TypeChecker_Generalize.ml rename to ocaml/fstar-lib/generated/FStar_TypeChecker_Generalize.ml diff --git a/src/ocaml-output/FStar_TypeChecker_NBE.ml b/ocaml/fstar-lib/generated/FStar_TypeChecker_NBE.ml similarity index 100% rename from src/ocaml-output/FStar_TypeChecker_NBE.ml rename to ocaml/fstar-lib/generated/FStar_TypeChecker_NBE.ml diff --git a/src/ocaml-output/FStar_TypeChecker_NBETerm.ml b/ocaml/fstar-lib/generated/FStar_TypeChecker_NBETerm.ml similarity index 100% rename from src/ocaml-output/FStar_TypeChecker_NBETerm.ml rename to ocaml/fstar-lib/generated/FStar_TypeChecker_NBETerm.ml diff --git a/src/ocaml-output/FStar_TypeChecker_Normalize.ml b/ocaml/fstar-lib/generated/FStar_TypeChecker_Normalize.ml similarity index 100% rename from src/ocaml-output/FStar_TypeChecker_Normalize.ml rename to ocaml/fstar-lib/generated/FStar_TypeChecker_Normalize.ml diff --git a/src/ocaml-output/FStar_TypeChecker_PatternUtils.ml b/ocaml/fstar-lib/generated/FStar_TypeChecker_PatternUtils.ml similarity index 100% rename from src/ocaml-output/FStar_TypeChecker_PatternUtils.ml rename to ocaml/fstar-lib/generated/FStar_TypeChecker_PatternUtils.ml diff --git a/src/ocaml-output/FStar_TypeChecker_Positivity.ml b/ocaml/fstar-lib/generated/FStar_TypeChecker_Positivity.ml similarity index 100% rename from src/ocaml-output/FStar_TypeChecker_Positivity.ml rename to ocaml/fstar-lib/generated/FStar_TypeChecker_Positivity.ml diff --git a/src/ocaml-output/FStar_TypeChecker_Rel.ml b/ocaml/fstar-lib/generated/FStar_TypeChecker_Rel.ml similarity index 100% rename from src/ocaml-output/FStar_TypeChecker_Rel.ml rename to ocaml/fstar-lib/generated/FStar_TypeChecker_Rel.ml diff --git a/src/ocaml-output/FStar_TypeChecker_Tc.ml b/ocaml/fstar-lib/generated/FStar_TypeChecker_Tc.ml similarity index 100% rename from src/ocaml-output/FStar_TypeChecker_Tc.ml rename to ocaml/fstar-lib/generated/FStar_TypeChecker_Tc.ml diff --git a/src/ocaml-output/FStar_TypeChecker_TcEffect.ml b/ocaml/fstar-lib/generated/FStar_TypeChecker_TcEffect.ml similarity index 100% rename from src/ocaml-output/FStar_TypeChecker_TcEffect.ml rename to ocaml/fstar-lib/generated/FStar_TypeChecker_TcEffect.ml diff --git a/src/ocaml-output/FStar_TypeChecker_TcInductive.ml b/ocaml/fstar-lib/generated/FStar_TypeChecker_TcInductive.ml similarity index 100% rename from src/ocaml-output/FStar_TypeChecker_TcInductive.ml rename to ocaml/fstar-lib/generated/FStar_TypeChecker_TcInductive.ml diff --git a/src/ocaml-output/FStar_TypeChecker_TcTerm.ml b/ocaml/fstar-lib/generated/FStar_TypeChecker_TcTerm.ml similarity index 100% rename from src/ocaml-output/FStar_TypeChecker_TcTerm.ml rename to ocaml/fstar-lib/generated/FStar_TypeChecker_TcTerm.ml diff --git a/src/ocaml-output/FStar_TypeChecker_Util.ml b/ocaml/fstar-lib/generated/FStar_TypeChecker_Util.ml similarity index 100% rename from src/ocaml-output/FStar_TypeChecker_Util.ml rename to ocaml/fstar-lib/generated/FStar_TypeChecker_Util.ml diff --git a/ocaml/fstar-lib/generated/FStar_UInt.ml b/ocaml/fstar-lib/generated/FStar_UInt.ml new file mode 100644 index 00000000000..39dfd9e2345 --- /dev/null +++ b/ocaml/fstar-lib/generated/FStar_UInt.ml @@ -0,0 +1,143 @@ +open Prims +let (max_int : Prims.nat -> Prims.int) = + fun n -> (Prims.pow2 n) - Prims.int_one +let (min_int : Prims.nat -> Prims.int) = fun n -> Prims.int_zero +let (fits : Prims.int -> Prims.nat -> Prims.bool) = + fun x -> fun n -> ((min_int n) <= x) && (x <= (max_int n)) +type ('x, 'n) size = unit +type 'n uint_t = Prims.int +let (zero : Prims.nat -> unit uint_t) = fun n -> Prims.int_zero +let (pow2_n : Prims.pos -> Prims.nat -> unit uint_t) = + fun n -> fun p -> Prims.pow2 p +let (one : Prims.pos -> unit uint_t) = fun n -> Prims.int_one +let (ones : Prims.nat -> unit uint_t) = fun n -> max_int n +let (incr : Prims.nat -> unit uint_t -> unit uint_t) = + fun n -> fun a -> a + Prims.int_one +let (decr : Prims.nat -> unit uint_t -> unit uint_t) = + fun n -> fun a -> a - Prims.int_one +let (incr_underspec : Prims.nat -> unit uint_t -> unit uint_t) = + fun n -> + fun a -> if a < (max_int n) then a + Prims.int_one else Prims.int_zero +let (decr_underspec : Prims.nat -> unit uint_t -> unit uint_t) = + fun n -> + fun a -> if a > (min_int n) then a - Prims.int_one else Prims.int_zero +let (incr_mod : Prims.nat -> unit uint_t -> unit uint_t) = + fun n -> fun a -> (a + Prims.int_one) mod (Prims.pow2 n) +let (decr_mod : Prims.nat -> unit uint_t -> unit uint_t) = + fun n -> fun a -> (a - Prims.int_one) mod (Prims.pow2 n) +let (add : Prims.nat -> unit uint_t -> unit uint_t -> unit uint_t) = + fun n -> fun a -> fun b -> a + b +let (add_underspec : Prims.nat -> unit uint_t -> unit uint_t -> unit uint_t) + = + fun n -> fun a -> fun b -> if fits (a + b) n then a + b else Prims.int_zero +let (add_mod : Prims.nat -> unit uint_t -> unit uint_t -> unit uint_t) = + fun n -> fun a -> fun b -> (a + b) mod (Prims.pow2 n) +let (sub : Prims.nat -> unit uint_t -> unit uint_t -> unit uint_t) = + fun n -> fun a -> fun b -> a - b +let (sub_underspec : Prims.nat -> unit uint_t -> unit uint_t -> unit uint_t) + = + fun n -> fun a -> fun b -> if fits (a - b) n then a - b else Prims.int_zero +let (sub_mod : Prims.nat -> unit uint_t -> unit uint_t -> unit uint_t) = + fun n -> fun a -> fun b -> (a - b) mod (Prims.pow2 n) +let (mul : Prims.nat -> unit uint_t -> unit uint_t -> unit uint_t) = + fun n -> fun a -> fun b -> a * b +let (mul_underspec : Prims.nat -> unit uint_t -> unit uint_t -> unit uint_t) + = + fun n -> fun a -> fun b -> if fits (a * b) n then a * b else Prims.int_zero +let (mul_mod : Prims.nat -> unit uint_t -> unit uint_t -> unit uint_t) = + fun n -> fun a -> fun b -> (a * b) mod (Prims.pow2 n) +let (mul_div : Prims.nat -> unit uint_t -> unit uint_t -> unit uint_t) = + fun n -> fun a -> fun b -> (a * b) / (Prims.pow2 n) +let (div : Prims.nat -> unit uint_t -> unit uint_t -> unit uint_t) = + fun n -> fun a -> fun b -> a / b +let (div_underspec : Prims.nat -> unit uint_t -> unit uint_t -> unit uint_t) + = + fun n -> fun a -> fun b -> if fits (a / b) n then a / b else Prims.int_zero +let (udiv : Prims.pos -> unit uint_t -> unit uint_t -> unit uint_t) = + fun n -> fun a -> fun b -> a / b +let (mod1 : Prims.nat -> unit uint_t -> unit uint_t -> unit uint_t) = + fun n -> fun a -> fun b -> a - ((a / b) * b) +let (eq : Prims.nat -> unit uint_t -> unit uint_t -> Prims.bool) = + fun n -> fun a -> fun b -> a = b +let (gt : Prims.nat -> unit uint_t -> unit uint_t -> Prims.bool) = + fun n -> fun a -> fun b -> a > b +let (gte : Prims.nat -> unit uint_t -> unit uint_t -> Prims.bool) = + fun n -> fun a -> fun b -> a >= b +let (lt : Prims.nat -> unit uint_t -> unit uint_t -> Prims.bool) = + fun n -> fun a -> fun b -> a < b +let (lte : Prims.nat -> unit uint_t -> unit uint_t -> Prims.bool) = + fun n -> fun a -> fun b -> a <= b +let (to_uint_t : Prims.nat -> Prims.int -> unit uint_t) = + fun m -> fun a -> a mod (Prims.pow2 m) +let rec (to_vec : Prims.nat -> unit uint_t -> unit FStar_BitVector.bv_t) = + fun n -> + fun num -> + if n = Prims.int_zero + then FStar_Seq_Base.empty () + else + FStar_Seq_Base.append + (to_vec (n - Prims.int_one) (num / (Prims.of_int (2)))) + (FStar_Seq_Base.create Prims.int_one + ((num mod (Prims.of_int (2))) = Prims.int_one)) +let rec (from_vec : Prims.nat -> unit FStar_BitVector.bv_t -> unit uint_t) = + fun n -> + fun vec -> + if n = Prims.int_zero + then Prims.int_zero + else + ((Prims.of_int (2)) * + (from_vec (n - Prims.int_one) + (FStar_Seq_Base.slice vec Prims.int_zero (n - Prims.int_one)))) + + + (if FStar_Seq_Base.index vec (n - Prims.int_one) + then Prims.int_one + else Prims.int_zero) +let (nth : Prims.pos -> unit uint_t -> Prims.nat -> Prims.bool) = + fun n -> fun a -> fun i -> FStar_Seq_Base.index (to_vec n a) i +let (logand : Prims.pos -> unit uint_t -> unit uint_t -> unit uint_t) = + fun n -> + fun a -> + fun b -> + from_vec n (FStar_BitVector.logand_vec n (to_vec n a) (to_vec n b)) +let (logxor : Prims.pos -> unit uint_t -> unit uint_t -> unit uint_t) = + fun n -> + fun a -> + fun b -> + from_vec n (FStar_BitVector.logxor_vec n (to_vec n a) (to_vec n b)) +let (logor : Prims.pos -> unit uint_t -> unit uint_t -> unit uint_t) = + fun n -> + fun a -> + fun b -> + from_vec n (FStar_BitVector.logor_vec n (to_vec n a) (to_vec n b)) +let (lognot : Prims.pos -> unit uint_t -> unit uint_t) = + fun n -> fun a -> from_vec n (FStar_BitVector.lognot_vec n (to_vec n a)) +let (minus : Prims.pos -> unit uint_t -> unit uint_t) = + fun n -> fun a -> add_mod n (lognot n a) Prims.int_one +let (xor : Prims.bool -> Prims.bool -> Prims.bool) = + fun b -> fun b' -> b <> b' +let (shift_left : Prims.pos -> unit uint_t -> Prims.nat -> unit uint_t) = + fun n -> + fun a -> + fun s -> from_vec n (FStar_BitVector.shift_left_vec n (to_vec n a) s) +let (shift_right : Prims.pos -> unit uint_t -> Prims.nat -> unit uint_t) = + fun n -> + fun a -> + fun s -> from_vec n (FStar_BitVector.shift_right_vec n (to_vec n a) s) +let (msb : Prims.pos -> unit uint_t -> Prims.bool) = + fun n -> fun a -> nth n a Prims.int_zero +let (zero_extend_vec : + Prims.pos -> unit FStar_BitVector.bv_t -> unit FStar_BitVector.bv_t) = + fun n -> + fun a -> + FStar_Seq_Base.append (FStar_Seq_Base.create Prims.int_one false) a +let (one_extend_vec : + Prims.pos -> unit FStar_BitVector.bv_t -> unit FStar_BitVector.bv_t) = + fun n -> + fun a -> + FStar_Seq_Base.append (FStar_Seq_Base.create Prims.int_one true) a +let (zero_extend : Prims.pos -> unit uint_t -> unit uint_t) = + fun n -> + fun a -> from_vec (n + Prims.int_one) (zero_extend_vec n (to_vec n a)) +let (one_extend : Prims.pos -> unit uint_t -> unit uint_t) = + fun n -> + fun a -> from_vec (n + Prims.int_one) (one_extend_vec n (to_vec n a)) \ No newline at end of file diff --git a/ocaml/fstar-lib/generated/FStar_UInt128.ml b/ocaml/fstar-lib/generated/FStar_UInt128.ml new file mode 100644 index 00000000000..c1da8cedf7c --- /dev/null +++ b/ocaml/fstar-lib/generated/FStar_UInt128.ml @@ -0,0 +1,364 @@ +open Prims +type ('a, 'b) fact1 = unit +type ('a, 'b) fact0 = unit +let (constant_time_carry : + FStar_UInt64.t -> FStar_UInt64.t -> FStar_UInt64.t) = + fun a -> + fun b -> + FStar_UInt64.shift_right + (FStar_UInt64.logxor a + (FStar_UInt64.logor (FStar_UInt64.logxor a b) + (FStar_UInt64.logxor (FStar_UInt64.sub_mod a b) b))) + (Stdint.Uint32.of_int (63)) +type uint128 = { + low: FStar_UInt64.t ; + high: FStar_UInt64.t } +let (__proj__Mkuint128__item__low : uint128 -> FStar_UInt64.t) = + fun projectee -> match projectee with | { low; high;_} -> low +let (__proj__Mkuint128__item__high : uint128 -> FStar_UInt64.t) = + fun projectee -> match projectee with | { low; high;_} -> high +type t = uint128 +let (v : t -> unit FStar_UInt.uint_t) = + fun x -> + (FStar_UInt64.v x.low) + + ((FStar_UInt64.v x.high) * (Prims.pow2 (Prims.of_int (64)))) +let (uint_to_t : unit FStar_UInt.uint_t -> t) = + fun x -> + { + low = (FStar_UInt64.uint_to_t (x mod (Prims.pow2 (Prims.of_int (64))))); + high = (FStar_UInt64.uint_to_t (x / (Prims.pow2 (Prims.of_int (64))))) + } +let (carry : FStar_UInt64.t -> FStar_UInt64.t -> FStar_UInt64.t) = + fun a -> fun b -> constant_time_carry a b +let (add : t -> t -> t) = + fun a -> + fun b -> + { + low = (FStar_UInt64.add_mod a.low b.low); + high = + (FStar_UInt64.add (FStar_UInt64.add a.high b.high) + (carry (FStar_UInt64.add_mod a.low b.low) b.low)) + } +let (add_underspec : t -> t -> t) = + fun a -> + fun b -> + { + low = (FStar_UInt64.add_mod a.low b.low); + high = + (FStar_UInt64.add_underspec + (FStar_UInt64.add_underspec a.high b.high) + (carry (FStar_UInt64.add_mod a.low b.low) b.low)) + } +let (add_mod : t -> t -> t) = + fun a -> + fun b -> + { + low = (FStar_UInt64.add_mod a.low b.low); + high = + (FStar_UInt64.add_mod (FStar_UInt64.add_mod a.high b.high) + (carry (FStar_UInt64.add_mod a.low b.low) b.low)) + } +let (sub : t -> t -> t) = + fun a -> + fun b -> + { + low = (FStar_UInt64.sub_mod a.low b.low); + high = + (FStar_UInt64.sub (FStar_UInt64.sub a.high b.high) + (carry a.low (FStar_UInt64.sub_mod a.low b.low))) + } +let (sub_underspec : t -> t -> t) = + fun a -> + fun b -> + { + low = (FStar_UInt64.sub_mod a.low b.low); + high = + (FStar_UInt64.sub_underspec + (FStar_UInt64.sub_underspec a.high b.high) + (carry a.low (FStar_UInt64.sub_mod a.low b.low))) + } +let (sub_mod_impl : t -> t -> t) = + fun a -> + fun b -> + { + low = (FStar_UInt64.sub_mod a.low b.low); + high = + (FStar_UInt64.sub_mod (FStar_UInt64.sub_mod a.high b.high) + (carry a.low (FStar_UInt64.sub_mod a.low b.low))) + } +let (sub_mod : t -> t -> t) = fun a -> fun b -> sub_mod_impl a b +let (append_uint : + Prims.nat -> + Prims.nat -> + unit FStar_UInt.uint_t -> + unit FStar_UInt.uint_t -> unit FStar_UInt.uint_t) + = + fun n1 -> fun n2 -> fun num1 -> fun num2 -> num1 + (num2 * (Prims.pow2 n1)) +let (vec128 : t -> unit FStar_BitVector.bv_t) = + fun a -> FStar_UInt.to_vec (Prims.of_int (128)) (v a) +let (vec64 : FStar_UInt64.t -> unit FStar_BitVector.bv_t) = + fun a -> FStar_UInt.to_vec (Prims.of_int (64)) (FStar_UInt64.v a) +let (logand : t -> t -> t) = + fun a -> + fun b -> + { + low = (FStar_UInt64.logand a.low b.low); + high = (FStar_UInt64.logand a.high b.high) + } +let (logxor : t -> t -> t) = + fun a -> + fun b -> + { + low = (FStar_UInt64.logxor a.low b.low); + high = (FStar_UInt64.logxor a.high b.high) + } +let (logor : t -> t -> t) = + fun a -> + fun b -> + { + low = (FStar_UInt64.logor a.low b.low); + high = (FStar_UInt64.logor a.high b.high) + } +let (lognot : t -> t) = + fun a -> + { low = (FStar_UInt64.lognot a.low); high = (FStar_UInt64.lognot a.high) + } +let (__uint_to_t : Prims.int -> t) = fun x -> uint_to_t x +let (u32_64 : FStar_UInt32.t) = FStar_UInt32.uint_to_t (Prims.of_int (64)) +let (add_u64_shift_left : + FStar_UInt64.t -> FStar_UInt64.t -> FStar_UInt32.t -> FStar_UInt64.t) = + fun hi -> + fun lo -> + fun s -> + FStar_UInt64.add (FStar_UInt64.shift_left hi s) + (FStar_UInt64.shift_right lo (FStar_UInt32.sub u32_64 s)) +let (add_u64_shift_left_respec : + FStar_UInt64.t -> FStar_UInt64.t -> FStar_UInt32.t -> FStar_UInt64.t) = + fun hi -> fun lo -> fun s -> add_u64_shift_left hi lo s +let (shift_left_small : t -> FStar_UInt32.t -> t) = + fun a -> + fun s -> + if FStar_UInt32.eq s Stdint.Uint32.zero + then a + else + { + low = (FStar_UInt64.shift_left a.low s); + high = (add_u64_shift_left_respec a.high a.low s) + } +let (shift_left_large : t -> FStar_UInt32.t -> t) = + fun a -> + fun s -> + { + low = (FStar_UInt64.uint_to_t Prims.int_zero); + high = (FStar_UInt64.shift_left a.low (FStar_UInt32.sub s u32_64)) + } +let (shift_left : t -> FStar_UInt32.t -> t) = + fun a -> + fun s -> + if FStar_UInt32.lt s u32_64 + then shift_left_small a s + else shift_left_large a s +let (add_u64_shift_right : + FStar_UInt64.t -> FStar_UInt64.t -> FStar_UInt32.t -> FStar_UInt64.t) = + fun hi -> + fun lo -> + fun s -> + FStar_UInt64.add (FStar_UInt64.shift_right lo s) + (FStar_UInt64.shift_left hi (FStar_UInt32.sub u32_64 s)) +let (add_u64_shift_right_respec : + FStar_UInt64.t -> FStar_UInt64.t -> FStar_UInt32.t -> FStar_UInt64.t) = + fun hi -> fun lo -> fun s -> add_u64_shift_right hi lo s +let (shift_right_small : t -> FStar_UInt32.t -> t) = + fun a -> + fun s -> + if FStar_UInt32.eq s Stdint.Uint32.zero + then a + else + { + low = (add_u64_shift_right_respec a.high a.low s); + high = (FStar_UInt64.shift_right a.high s) + } +let (shift_right_large : t -> FStar_UInt32.t -> t) = + fun a -> + fun s -> + { + low = (FStar_UInt64.shift_right a.high (FStar_UInt32.sub s u32_64)); + high = (FStar_UInt64.uint_to_t Prims.int_zero) + } +let (shift_right : t -> FStar_UInt32.t -> t) = + fun a -> + fun s -> + if FStar_UInt32.lt s u32_64 + then shift_right_small a s + else shift_right_large a s +let (eq : t -> t -> Prims.bool) = + fun a -> + fun b -> (FStar_UInt64.eq a.low b.low) && (FStar_UInt64.eq a.high b.high) +let (gt : t -> t -> Prims.bool) = + fun a -> + fun b -> + (FStar_UInt64.gt a.high b.high) || + ((FStar_UInt64.eq a.high b.high) && (FStar_UInt64.gt a.low b.low)) +let (lt : t -> t -> Prims.bool) = + fun a -> + fun b -> + (FStar_UInt64.lt a.high b.high) || + ((FStar_UInt64.eq a.high b.high) && (FStar_UInt64.lt a.low b.low)) +let (gte : t -> t -> Prims.bool) = + fun a -> + fun b -> + (FStar_UInt64.gt a.high b.high) || + ((FStar_UInt64.eq a.high b.high) && (FStar_UInt64.gte a.low b.low)) +let (lte : t -> t -> Prims.bool) = + fun a -> + fun b -> + (FStar_UInt64.lt a.high b.high) || + ((FStar_UInt64.eq a.high b.high) && (FStar_UInt64.lte a.low b.low)) +let (eq_mask : t -> t -> t) = + fun a -> + fun b -> + { + low = + (FStar_UInt64.logand (FStar_UInt64.eq_mask a.low b.low) + (FStar_UInt64.eq_mask a.high b.high)); + high = + (FStar_UInt64.logand (FStar_UInt64.eq_mask a.low b.low) + (FStar_UInt64.eq_mask a.high b.high)) + } +let (gte_mask : t -> t -> t) = + fun a -> + fun b -> + { + low = + (FStar_UInt64.logor + (FStar_UInt64.logand (FStar_UInt64.gte_mask a.high b.high) + (FStar_UInt64.lognot (FStar_UInt64.eq_mask a.high b.high))) + (FStar_UInt64.logand (FStar_UInt64.eq_mask a.high b.high) + (FStar_UInt64.gte_mask a.low b.low))); + high = + (FStar_UInt64.logor + (FStar_UInt64.logand (FStar_UInt64.gte_mask a.high b.high) + (FStar_UInt64.lognot (FStar_UInt64.eq_mask a.high b.high))) + (FStar_UInt64.logand (FStar_UInt64.eq_mask a.high b.high) + (FStar_UInt64.gte_mask a.low b.low))) + } +let (uint64_to_uint128 : FStar_UInt64.t -> t) = + fun a -> { low = a; high = (FStar_UInt64.uint_to_t Prims.int_zero) } +let (uint128_to_uint64 : t -> FStar_UInt64.t) = fun a -> a.low +let (u64_l32_mask : FStar_UInt64.t) = + FStar_UInt64.uint_to_t (Prims.parse_int "0xffffffff") +let (u64_mod_32 : FStar_UInt64.t -> FStar_UInt64.t) = + fun a -> + FStar_UInt64.logand a + (FStar_UInt64.uint_to_t (Prims.parse_int "0xffffffff")) +let (u32_32 : FStar_UInt32.t) = FStar_UInt32.uint_to_t (Prims.of_int (32)) +let (u32_combine : FStar_UInt64.t -> FStar_UInt64.t -> FStar_UInt64.t) = + fun hi -> fun lo -> FStar_UInt64.add lo (FStar_UInt64.shift_left hi u32_32) +let (mul32 : FStar_UInt64.t -> FStar_UInt32.t -> t) = + fun x -> + fun y -> + { + low = + (u32_combine + (FStar_UInt64.add + (FStar_UInt64.mul (FStar_UInt64.shift_right x u32_32) + (FStar_Int_Cast.uint32_to_uint64 y)) + (FStar_UInt64.shift_right + (FStar_UInt64.mul (u64_mod_32 x) + (FStar_Int_Cast.uint32_to_uint64 y)) u32_32)) + (u64_mod_32 + (FStar_UInt64.mul (u64_mod_32 x) + (FStar_Int_Cast.uint32_to_uint64 y)))); + high = + (FStar_UInt64.shift_right + (FStar_UInt64.add + (FStar_UInt64.mul (FStar_UInt64.shift_right x u32_32) + (FStar_Int_Cast.uint32_to_uint64 y)) + (FStar_UInt64.shift_right + (FStar_UInt64.mul (u64_mod_32 x) + (FStar_Int_Cast.uint32_to_uint64 y)) u32_32)) u32_32) + } +let (l32 : unit FStar_UInt.uint_t -> unit FStar_UInt.uint_t) = + fun x -> x mod (Prims.pow2 (Prims.of_int (32))) +let (h32 : unit FStar_UInt.uint_t -> unit FStar_UInt.uint_t) = + fun x -> x / (Prims.pow2 (Prims.of_int (32))) +let (mul32_bound : + unit FStar_UInt.uint_t -> unit FStar_UInt.uint_t -> unit FStar_UInt.uint_t) + = fun x -> fun y -> x * y +let (pll : FStar_UInt64.t -> FStar_UInt64.t -> unit FStar_UInt.uint_t) = + fun x -> + fun y -> mul32_bound (l32 (FStar_UInt64.v x)) (l32 (FStar_UInt64.v y)) +let (plh : FStar_UInt64.t -> FStar_UInt64.t -> unit FStar_UInt.uint_t) = + fun x -> + fun y -> mul32_bound (l32 (FStar_UInt64.v x)) (h32 (FStar_UInt64.v y)) +let (phl : FStar_UInt64.t -> FStar_UInt64.t -> unit FStar_UInt.uint_t) = + fun x -> + fun y -> mul32_bound (h32 (FStar_UInt64.v x)) (l32 (FStar_UInt64.v y)) +let (phh : FStar_UInt64.t -> FStar_UInt64.t -> unit FStar_UInt.uint_t) = + fun x -> + fun y -> mul32_bound (h32 (FStar_UInt64.v x)) (h32 (FStar_UInt64.v y)) +let (pll_l : FStar_UInt64.t -> FStar_UInt64.t -> unit FStar_UInt.uint_t) = + fun x -> fun y -> l32 (pll x y) +let (pll_h : FStar_UInt64.t -> FStar_UInt64.t -> unit FStar_UInt.uint_t) = + fun x -> fun y -> h32 (pll x y) +let (mul_wide_low : FStar_UInt64.t -> FStar_UInt64.t -> Prims.int) = + fun x -> + fun y -> + ((((plh x y) + + (((phl x y) + (pll_h x y)) mod (Prims.pow2 (Prims.of_int (32))))) + * (Prims.pow2 (Prims.of_int (32)))) + mod (Prims.pow2 (Prims.of_int (64)))) + + (pll_l x y) +let (mul_wide_high : FStar_UInt64.t -> FStar_UInt64.t -> Prims.int) = + fun x -> + fun y -> + ((phh x y) + + (((phl x y) + (pll_h x y)) / (Prims.pow2 (Prims.of_int (32))))) + + + (((plh x y) + + (((phl x y) + (pll_h x y)) mod (Prims.pow2 (Prims.of_int (32))))) + / (Prims.pow2 (Prims.of_int (32)))) +let (u32_combine' : FStar_UInt64.t -> FStar_UInt64.t -> FStar_UInt64.t) = + fun hi -> fun lo -> FStar_UInt64.add lo (FStar_UInt64.shift_left hi u32_32) +let (mul_wide : FStar_UInt64.t -> FStar_UInt64.t -> t) = + fun x -> + fun y -> + { + low = + (u32_combine' + (FStar_UInt64.add + (FStar_UInt64.mul (u64_mod_32 x) + (FStar_UInt64.shift_right y u32_32)) + (u64_mod_32 + (FStar_UInt64.add + (FStar_UInt64.mul (FStar_UInt64.shift_right x u32_32) + (u64_mod_32 y)) + (FStar_UInt64.shift_right + (FStar_UInt64.mul (u64_mod_32 x) (u64_mod_32 y)) + u32_32)))) + (u64_mod_32 (FStar_UInt64.mul (u64_mod_32 x) (u64_mod_32 y)))); + high = + (FStar_UInt64.add_mod + (FStar_UInt64.add + (FStar_UInt64.mul (FStar_UInt64.shift_right x u32_32) + (FStar_UInt64.shift_right y u32_32)) + (FStar_UInt64.shift_right + (FStar_UInt64.add + (FStar_UInt64.mul (FStar_UInt64.shift_right x u32_32) + (u64_mod_32 y)) + (FStar_UInt64.shift_right + (FStar_UInt64.mul (u64_mod_32 x) (u64_mod_32 y)) + u32_32)) u32_32)) + (FStar_UInt64.shift_right + (FStar_UInt64.add + (FStar_UInt64.mul (u64_mod_32 x) + (FStar_UInt64.shift_right y u32_32)) + (u64_mod_32 + (FStar_UInt64.add + (FStar_UInt64.mul + (FStar_UInt64.shift_right x u32_32) + (u64_mod_32 y)) + (FStar_UInt64.shift_right + (FStar_UInt64.mul (u64_mod_32 x) (u64_mod_32 y)) + u32_32)))) u32_32)) + } \ No newline at end of file diff --git a/ocaml/fstar-lib/generated/FStar_UInt16.ml b/ocaml/fstar-lib/generated/FStar_UInt16.ml new file mode 100644 index 00000000000..69409412af6 --- /dev/null +++ b/ocaml/fstar-lib/generated/FStar_UInt16.ml @@ -0,0 +1,105 @@ +(* !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! *) +(* THIS IS AN AUTOGENERATED FILE! See ulib/ml/Makefile *) +(* !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! *) + +(* This file is meant to be concatenated to FStar_Ints.ml.body *) +module M = Stdint.Uint16 +type uint16 = M.t +type t = M.t +let n = Prims.of_int 16 + +let uint_to_t x = M.of_string (Z.to_string x) +let __uint_to_t = uint_to_t +(* This .ml.body file is concatenated to every .ml.prefix file in this + * directory (ulib/ml/) to generate the OCaml realizations for machine + * integers, as they all pretty much share their definitions and are + * based on Stdint. *) + +let v (x:t) : Prims.int = Prims.parse_int (M.to_string x) + +let zero = M.zero +let one = M.one +let ones = M.pred M.zero + +(* Reexport add, plus aliases *) +let add = M.add +let add_underspec = M.add +let add_mod = M.add + +(* Reexport sub, plus aliases *) +let sub = M.sub +let sub_underspec = M.sub +let sub_mod = M.sub + +(* Reexport mul, plus aliases *) +let mul = M.mul +let mul_underspec = M.mul +let mul_mod = M.mul + +(* Conversions to Zarith's int *) +let to_int (x:t) : Z.t = Z.of_string (M.to_string x) +let of_int (x:Z.t) : t = M.of_string (Z.to_string x) + +(* Conversion to native ints; these are potentially unsafe and not part + * of the interface: they are meant to be called only from OCaml code + * that is doing the right thing *) +let of_native_int (x:int) : t = M.of_int x +let to_native_int (x:t) : int = M.to_int x + +(* Just reexport these *) +let div = M.div +let rem = M.rem +let logand = M.logand +let logxor = M.logxor +let logor = M.logor +let lognot = M.lognot +let to_string = M.to_string +let of_string = M.of_string + +let to_string_hex = M.to_string_hex + +let to_string_hex_pad i = + let s0 = M.to_string_hex i in + let len = (String.length s0 - 2) in + let s1 = String.sub s0 2 len in (* Remove leading "0x" *) + let zeroes = String.make ((Z.to_int n / 4) - len) '0' in + zeroes ^ s1 + +(* The shifts take a uint32 argument, so we need to convert *) +let shift_right n i = M.shift_right n (Stdint.Uint32.to_int i) +let shift_left n i = M.shift_left n (Stdint.Uint32.to_int i) +let shift_arithmetic_right = shift_right + +(* Comparison operators *) +let eq (a:t) (b:t) : bool = a = b +let gt (a:t) (b:t) : bool = a > b +let gte (a:t) (b:t) : bool = a >= b +let lt (a:t) (b:t) : bool = a < b +let lte (a:t) (b:t) : bool = a <= b + +(* NOT Constant time operators *) +let eq_mask (a:t) (b:t) : t = if a = b then ones else zero +let gte_mask (a:t) (b:t) : t = if a >= b then ones else zero + +(* Infix notations *) +let op_Plus_Hat = add +let op_Plus_Question_Hat = add_underspec +let op_Plus_Percent_Hat = add_mod +let op_Subtraction_Hat = sub +let op_Subtraction_Question_Hat = sub_underspec +let op_Subtraction_Percent_Hat = sub_mod +let op_Star_Hat = mul +let op_Star_Question_Hat = mul_underspec +let op_Star_Percent_Hat = mul_mod +let op_Slash_Hat = div +let op_Percent_Hat = rem +let op_Hat_Hat = logxor +let op_Amp_Hat = logand +let op_Bar_Hat = logor +let op_Less_Less_Hat = shift_left +let op_Greater_Greater_Hat = shift_right +let op_Equals_Hat = eq +let op_Greater_Hat = gt +let op_Greater_Equals_Hat = gte +let op_Less_Hat = lt +let op_Less_Equals_Hat = lte diff --git a/ocaml/fstar-lib/generated/FStar_UInt32.ml b/ocaml/fstar-lib/generated/FStar_UInt32.ml new file mode 100644 index 00000000000..d02cd18624f --- /dev/null +++ b/ocaml/fstar-lib/generated/FStar_UInt32.ml @@ -0,0 +1,105 @@ +(* !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! *) +(* THIS IS AN AUTOGENERATED FILE! See ulib/ml/Makefile *) +(* !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! *) + +(* This file is meant to be concatenated to FStar_Ints.ml.body *) +module M = Stdint.Uint32 +type uint32 = M.t +type t = M.t +let n = Prims.of_int 32 + +let uint_to_t x = M.of_string (Z.to_string x) +let __uint_to_t = uint_to_t +(* This .ml.body file is concatenated to every .ml.prefix file in this + * directory (ulib/ml/) to generate the OCaml realizations for machine + * integers, as they all pretty much share their definitions and are + * based on Stdint. *) + +let v (x:t) : Prims.int = Prims.parse_int (M.to_string x) + +let zero = M.zero +let one = M.one +let ones = M.pred M.zero + +(* Reexport add, plus aliases *) +let add = M.add +let add_underspec = M.add +let add_mod = M.add + +(* Reexport sub, plus aliases *) +let sub = M.sub +let sub_underspec = M.sub +let sub_mod = M.sub + +(* Reexport mul, plus aliases *) +let mul = M.mul +let mul_underspec = M.mul +let mul_mod = M.mul + +(* Conversions to Zarith's int *) +let to_int (x:t) : Z.t = Z.of_string (M.to_string x) +let of_int (x:Z.t) : t = M.of_string (Z.to_string x) + +(* Conversion to native ints; these are potentially unsafe and not part + * of the interface: they are meant to be called only from OCaml code + * that is doing the right thing *) +let of_native_int (x:int) : t = M.of_int x +let to_native_int (x:t) : int = M.to_int x + +(* Just reexport these *) +let div = M.div +let rem = M.rem +let logand = M.logand +let logxor = M.logxor +let logor = M.logor +let lognot = M.lognot +let to_string = M.to_string +let of_string = M.of_string + +let to_string_hex = M.to_string_hex + +let to_string_hex_pad i = + let s0 = M.to_string_hex i in + let len = (String.length s0 - 2) in + let s1 = String.sub s0 2 len in (* Remove leading "0x" *) + let zeroes = String.make ((Z.to_int n / 4) - len) '0' in + zeroes ^ s1 + +(* The shifts take a uint32 argument, so we need to convert *) +let shift_right n i = M.shift_right n (Stdint.Uint32.to_int i) +let shift_left n i = M.shift_left n (Stdint.Uint32.to_int i) +let shift_arithmetic_right = shift_right + +(* Comparison operators *) +let eq (a:t) (b:t) : bool = a = b +let gt (a:t) (b:t) : bool = a > b +let gte (a:t) (b:t) : bool = a >= b +let lt (a:t) (b:t) : bool = a < b +let lte (a:t) (b:t) : bool = a <= b + +(* NOT Constant time operators *) +let eq_mask (a:t) (b:t) : t = if a = b then ones else zero +let gte_mask (a:t) (b:t) : t = if a >= b then ones else zero + +(* Infix notations *) +let op_Plus_Hat = add +let op_Plus_Question_Hat = add_underspec +let op_Plus_Percent_Hat = add_mod +let op_Subtraction_Hat = sub +let op_Subtraction_Question_Hat = sub_underspec +let op_Subtraction_Percent_Hat = sub_mod +let op_Star_Hat = mul +let op_Star_Question_Hat = mul_underspec +let op_Star_Percent_Hat = mul_mod +let op_Slash_Hat = div +let op_Percent_Hat = rem +let op_Hat_Hat = logxor +let op_Amp_Hat = logand +let op_Bar_Hat = logor +let op_Less_Less_Hat = shift_left +let op_Greater_Greater_Hat = shift_right +let op_Equals_Hat = eq +let op_Greater_Hat = gt +let op_Greater_Equals_Hat = gte +let op_Less_Hat = lt +let op_Less_Equals_Hat = lte diff --git a/ocaml/fstar-lib/generated/FStar_UInt64.ml b/ocaml/fstar-lib/generated/FStar_UInt64.ml new file mode 100644 index 00000000000..8524657e0ae --- /dev/null +++ b/ocaml/fstar-lib/generated/FStar_UInt64.ml @@ -0,0 +1,105 @@ +(* !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! *) +(* THIS IS AN AUTOGENERATED FILE! See ulib/ml/Makefile *) +(* !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! *) + +(* This file is meant to be concatenated to FStar_Ints.ml.body *) +module M = Stdint.Uint64 +type uint64 = M.t +type t = M.t +let n = Prims.of_int 64 + +let uint_to_t x = M.of_string (Z.to_string x) +let __uint_to_t = uint_to_t +(* This .ml.body file is concatenated to every .ml.prefix file in this + * directory (ulib/ml/) to generate the OCaml realizations for machine + * integers, as they all pretty much share their definitions and are + * based on Stdint. *) + +let v (x:t) : Prims.int = Prims.parse_int (M.to_string x) + +let zero = M.zero +let one = M.one +let ones = M.pred M.zero + +(* Reexport add, plus aliases *) +let add = M.add +let add_underspec = M.add +let add_mod = M.add + +(* Reexport sub, plus aliases *) +let sub = M.sub +let sub_underspec = M.sub +let sub_mod = M.sub + +(* Reexport mul, plus aliases *) +let mul = M.mul +let mul_underspec = M.mul +let mul_mod = M.mul + +(* Conversions to Zarith's int *) +let to_int (x:t) : Z.t = Z.of_string (M.to_string x) +let of_int (x:Z.t) : t = M.of_string (Z.to_string x) + +(* Conversion to native ints; these are potentially unsafe and not part + * of the interface: they are meant to be called only from OCaml code + * that is doing the right thing *) +let of_native_int (x:int) : t = M.of_int x +let to_native_int (x:t) : int = M.to_int x + +(* Just reexport these *) +let div = M.div +let rem = M.rem +let logand = M.logand +let logxor = M.logxor +let logor = M.logor +let lognot = M.lognot +let to_string = M.to_string +let of_string = M.of_string + +let to_string_hex = M.to_string_hex + +let to_string_hex_pad i = + let s0 = M.to_string_hex i in + let len = (String.length s0 - 2) in + let s1 = String.sub s0 2 len in (* Remove leading "0x" *) + let zeroes = String.make ((Z.to_int n / 4) - len) '0' in + zeroes ^ s1 + +(* The shifts take a uint32 argument, so we need to convert *) +let shift_right n i = M.shift_right n (Stdint.Uint32.to_int i) +let shift_left n i = M.shift_left n (Stdint.Uint32.to_int i) +let shift_arithmetic_right = shift_right + +(* Comparison operators *) +let eq (a:t) (b:t) : bool = a = b +let gt (a:t) (b:t) : bool = a > b +let gte (a:t) (b:t) : bool = a >= b +let lt (a:t) (b:t) : bool = a < b +let lte (a:t) (b:t) : bool = a <= b + +(* NOT Constant time operators *) +let eq_mask (a:t) (b:t) : t = if a = b then ones else zero +let gte_mask (a:t) (b:t) : t = if a >= b then ones else zero + +(* Infix notations *) +let op_Plus_Hat = add +let op_Plus_Question_Hat = add_underspec +let op_Plus_Percent_Hat = add_mod +let op_Subtraction_Hat = sub +let op_Subtraction_Question_Hat = sub_underspec +let op_Subtraction_Percent_Hat = sub_mod +let op_Star_Hat = mul +let op_Star_Question_Hat = mul_underspec +let op_Star_Percent_Hat = mul_mod +let op_Slash_Hat = div +let op_Percent_Hat = rem +let op_Hat_Hat = logxor +let op_Amp_Hat = logand +let op_Bar_Hat = logor +let op_Less_Less_Hat = shift_left +let op_Greater_Greater_Hat = shift_right +let op_Equals_Hat = eq +let op_Greater_Hat = gt +let op_Greater_Equals_Hat = gte +let op_Less_Hat = lt +let op_Less_Equals_Hat = lte diff --git a/src/ocaml-output/FStar_Universal.ml b/ocaml/fstar-lib/generated/FStar_Universal.ml similarity index 100% rename from src/ocaml-output/FStar_Universal.ml rename to ocaml/fstar-lib/generated/FStar_Universal.ml diff --git a/ocaml/fstar-lib/generated/FStar_Universe.ml b/ocaml/fstar-lib/generated/FStar_Universe.ml new file mode 100644 index 00000000000..fd233781f5f --- /dev/null +++ b/ocaml/fstar-lib/generated/FStar_Universe.ml @@ -0,0 +1,14 @@ +open Prims +type 'a raise0 = + | Ret of 'a +let uu___is_Ret : 'a . 'a raise0 -> Prims.bool = fun projectee -> true +let __proj__Ret__item___0 : 'a . 'a raise0 -> 'a = + fun projectee -> match projectee with | Ret _0 -> _0 +type 'a raise_t = 'a raise0 +let raise_val : 'a . 'a -> 'a raise_t = fun x -> Ret x +let downgrade_val : 'a . 'a raise_t -> 'a = + fun x -> match x with | Ret x0 -> x0 +let lift_dom : 'a 'b . ('a -> 'b) -> 'a raise_t -> 'b = + fun q -> fun v -> q (downgrade_val v) +let lift_codom : 'a 'b . ('a -> 'b) -> 'a -> 'b raise_t = + fun q -> fun v -> raise_val (q v) \ No newline at end of file diff --git a/src/ocaml-output/FStar_VConfig.ml b/ocaml/fstar-lib/generated/FStar_VConfig.ml similarity index 100% rename from src/ocaml-output/FStar_VConfig.ml rename to ocaml/fstar-lib/generated/FStar_VConfig.ml diff --git a/ocaml/fstar-lib/generated/FStar_WellFounded.ml b/ocaml/fstar-lib/generated/FStar_WellFounded.ml new file mode 100644 index 00000000000..b6344029a88 --- /dev/null +++ b/ocaml/fstar-lib/generated/FStar_WellFounded.ml @@ -0,0 +1,17 @@ +open Prims +type 'a binrel = unit +type ('a, 'r) well_founded = unit +let rec fix_F : + 'aa 'r 'p . ('aa -> ('aa -> 'r -> 'p) -> 'p) -> 'aa -> unit -> 'p = + fun f -> fun x -> fun a -> f x (fun y -> fun h -> fix_F f y ()) +let fix : + 'aa 'r . + unit -> unit -> ('aa -> ('aa -> 'r -> Obj.t) -> Obj.t) -> 'aa -> Obj.t + = fun rwf -> fun p -> fun f -> fun x -> fix_F f x () +type ('a, 'rel) is_well_founded = unit +type 'a well_founded_relation = unit +type ('a, 'rel, 'f, 'uuuuu, 'uuuuu1) as_well_founded = 'rel + +type ('a, 'r, 'subur, 'subuw, 'ruwf, 'uuuuu, 'uuuuu1) subrelation_as_wf = + 'subur +type ('a, 'b, 'rub, 'f, 'x, 'y) inverse_image = 'rub diff --git a/ocaml/fstar-lib/generated/FStar_WellFoundedRelation.ml b/ocaml/fstar-lib/generated/FStar_WellFoundedRelation.ml new file mode 100644 index 00000000000..4aa36833970 --- /dev/null +++ b/ocaml/fstar-lib/generated/FStar_WellFoundedRelation.ml @@ -0,0 +1,154 @@ +open Prims +type ('a, 'r, 'x) acc_classical = + | AccClassicalIntro of ('a -> ('a, 'r, unit) acc_classical) +let uu___is_AccClassicalIntro : + 'a 'r . 'a -> ('a, 'r, unit) acc_classical -> Prims.bool = + fun x -> fun projectee -> true +let __proj__AccClassicalIntro__item__access_smaller : + 'a 'r . + 'a -> ('a, 'r, unit) acc_classical -> 'a -> ('a, 'r, unit) acc_classical + = + fun x -> + fun projectee -> + match projectee with + | AccClassicalIntro access_smaller -> access_smaller +type 'a wfr_t = + { + relation: unit ; + decreaser: 'a -> ('a, Obj.t, unit) acc_classical ; + proof: unit } +let __proj__Mkwfr_t__item__decreaser : + 'a . 'a wfr_t -> 'a -> ('a, unit, unit) acc_classical = + fun uu___1 -> + fun uu___ -> + (fun projectee -> + match projectee with + | { relation; decreaser; proof;_} -> Obj.magic decreaser) uu___1 + uu___ +type ('a, 'x1, 'x2) default_relation = ('a, 'a, unit, unit) Prims.precedes +let rec default_decreaser : + 'a . 'a -> ('a, ('a, unit, unit) default_relation, unit) acc_classical = + fun x -> let smaller y = default_decreaser y in AccClassicalIntro smaller +let default_wfr : 'a . unit -> 'a wfr_t = + fun uu___ -> + { + relation = (); + decreaser = (fun uu___1 -> (Obj.magic default_decreaser) uu___1); + proof = () + } +type ('a, 'x1, 'x2) empty_relation = unit +let rec empty_decreaser : + 'a . 'a -> ('a, ('a, unit, unit) empty_relation, unit) acc_classical = + fun x -> let smaller y = empty_decreaser y in AccClassicalIntro smaller +let empty_wfr : 'a . unit -> 'a wfr_t = + fun uu___ -> + { + relation = (); + decreaser = (fun uu___1 -> (Obj.magic empty_decreaser) uu___1); + proof = () + } +type ('a, 'r, 'x1, 'x2) acc_relation = unit +let rec acc_decreaser : + 'a 'r . + unit -> 'a -> ('a, ('a, 'r, unit, unit) acc_relation, unit) acc_classical + = + fun f -> + fun x -> let smaller y = acc_decreaser () y in AccClassicalIntro smaller +let acc_to_wfr : 'a 'r . unit -> 'a wfr_t = + fun f -> + { + relation = (); + decreaser = (fun uu___ -> (Obj.magic (acc_decreaser ())) uu___); + proof = () + } +let rec subrelation_decreaser : + 'a 'r . 'a wfr_t -> 'a -> ('a, 'r, unit) acc_classical = + fun wfr -> + fun x -> + let smaller y = subrelation_decreaser wfr y in + AccClassicalIntro smaller +let subrelation_to_wfr : 'a 'r . 'a wfr_t -> 'a wfr_t = + fun wfr -> + { + relation = (); + decreaser = + (fun uu___ -> (Obj.magic (subrelation_decreaser wfr)) uu___); + proof = () + } +let rec inverse_image_decreaser : + 'a 'b 'r . ('a -> 'b) -> 'b wfr_t -> 'a -> ('a, 'r, unit) acc_classical = + fun f -> + fun wfr -> + fun x -> + let smaller y = inverse_image_decreaser f wfr y in + AccClassicalIntro smaller +let inverse_image_to_wfr : 'a 'b 'r . ('a -> 'b) -> 'b wfr_t -> 'a wfr_t = + fun f -> + fun wfr -> + { + relation = (); + decreaser = + (fun uu___ -> (Obj.magic (inverse_image_decreaser f wfr)) uu___); + proof = () + } +type ('a, 'b, 'wfrua, 'wfrub, 'xy1, 'xy2) lex_nondep_relation = Obj.t +let rec lex_nondep_decreaser : + 'a 'b . + 'a wfr_t -> + 'b wfr_t -> ('a * 'b) -> (('a * 'b), Obj.t, unit) acc_classical + = + fun wfr_a -> + fun wfr_b -> + fun xy -> + let smaller xy' = lex_nondep_decreaser wfr_a wfr_b xy' in + AccClassicalIntro smaller +let lex_nondep_wfr : 'a 'b . 'a wfr_t -> 'b wfr_t -> ('a * 'b) wfr_t = + fun wfr_a -> + fun wfr_b -> + { + relation = (); + decreaser = (lex_nondep_decreaser wfr_a wfr_b); + proof = () + } +type ('a, 'b, 'wfrua, 'autouwfrub, 'xy1, 'xy2) lex_dep_relation = Obj.t +let rec lex_dep_decreaser : + 'a 'b . + 'a wfr_t -> + ('a -> 'b wfr_t) -> + ('a, 'b) Prims.dtuple2 -> + (('a, 'b) Prims.dtuple2, Obj.t, unit) acc_classical + = + fun wfr_a -> + fun a_to_wfr_b -> + fun xy -> + let smaller xy' = lex_dep_decreaser wfr_a a_to_wfr_b xy' in + AccClassicalIntro smaller +let lex_dep_wfr : + 'a 'b . 'a wfr_t -> ('a -> 'b wfr_t) -> ('a, 'b) Prims.dtuple2 wfr_t = + fun wfr_a -> + fun a_to_wfr_b -> + { + relation = (); + decreaser = (lex_dep_decreaser wfr_a a_to_wfr_b); + proof = () + } +type ('x1, 'x2) bool_relation = unit +let (bool_wfr : Prims.bool wfr_t) = + inverse_image_to_wfr (fun b -> if b then Prims.int_one else Prims.int_zero) + (default_wfr ()) +type ('a, 'wfr, 'opt1, 'opt2) option_relation = unit +let option_wfr : 'a . 'a wfr_t -> 'a FStar_Pervasives_Native.option wfr_t = + fun wfr -> + let f opt = + match opt with + | FStar_Pervasives_Native.Some x -> + Prims.Mkdtuple2 (true, (Obj.magic x)) + | FStar_Pervasives_Native.None -> + Prims.Mkdtuple2 (false, (Obj.magic (FStar_Universe.raise_val ()))) in + let bool_to_wfr_a uu___ = + (fun b -> + if b + then Obj.magic (Obj.repr wfr) + else Obj.magic (Obj.repr (empty_wfr ()))) uu___ in + let wfr_bool_a = lex_dep_wfr bool_wfr bool_to_wfr_a in + inverse_image_to_wfr f wfr_bool_a \ No newline at end of file diff --git a/ocaml/fstar-lib/generated/FStar_WellFounded_Util.ml b/ocaml/fstar-lib/generated/FStar_WellFounded_Util.ml new file mode 100644 index 00000000000..9d3fb961c6a --- /dev/null +++ b/ocaml/fstar-lib/generated/FStar_WellFounded_Util.ml @@ -0,0 +1,14 @@ +open Prims +type top = (unit, Obj.t) Prims.dtuple2 +type ('a, 'r, 't0, 't1) lift_binrel = (unit, 'r) Prims.dtuple2 +let lower_binrel : + 'a 'r . top -> top -> ('a, 'r, unit, unit) lift_binrel -> 'r = + fun x -> fun y -> fun p -> FStar_Pervasives.dsnd p + +type ('a, 'r, 'wfur, 'uuuuu, 'uuuuu1) lift_binrel_as_well_founded_relation = + ('a, 'r, unit, unit) lift_binrel +type ('a, 'r, 't0, 't1) lift_binrel_squashed = unit +type ('a, 'r, 'x, 'y) squash_binrel = unit + +type ('a, 'r, 'wfur, 'uuuuu, + 'uuuuu1) lift_binrel_squashed_as_well_founded_relation = unit diff --git a/ocaml/fstar-lib/generated/LowStar_Buffer.ml b/ocaml/fstar-lib/generated/LowStar_Buffer.ml new file mode 100644 index 00000000000..9059a9cc0cc --- /dev/null +++ b/ocaml/fstar-lib/generated/LowStar_Buffer.ml @@ -0,0 +1,90 @@ +open Prims +type ('a, 'uuuuu, 'uuuuu1) trivial_preorder = unit +type 'a buffer = ('a, unit, unit) LowStar_Monotonic_Buffer.mbuffer +let null : 'a . unit -> 'a buffer = + fun uu___ -> LowStar_Monotonic_Buffer.mnull () +type 'a pointer = 'a buffer +type 'a pointer_or_null = 'a buffer +let sub : + 'a . + unit -> + ('a, ('a, unit, unit) trivial_preorder, + ('a, unit, unit) trivial_preorder) LowStar_Monotonic_Buffer.mbuffer + -> + FStar_UInt32.t -> + unit -> + ('a, ('a, unit, unit) trivial_preorder, + ('a, unit, unit) trivial_preorder) + LowStar_Monotonic_Buffer.mbuffer + = fun uu___ -> LowStar_Monotonic_Buffer.msub +let offset : + 'a . + unit -> + ('a, ('a, unit, unit) trivial_preorder, + ('a, unit, unit) trivial_preorder) LowStar_Monotonic_Buffer.mbuffer + -> + FStar_UInt32.t -> + ('a, ('a, unit, unit) trivial_preorder, + ('a, unit, unit) trivial_preorder) + LowStar_Monotonic_Buffer.mbuffer + = fun uu___ -> LowStar_Monotonic_Buffer.moffset +type ('a, 'len) lbuffer = ('a, unit, unit) LowStar_Monotonic_Buffer.mbuffer +let gcmalloc : + 'a . + unit -> + unit -> + 'a -> + FStar_UInt32.t -> + ('a, ('a, unit, unit) trivial_preorder, + ('a, unit, unit) trivial_preorder) + LowStar_Monotonic_Buffer.mbuffer + = fun uu___ -> LowStar_Monotonic_Buffer.mgcmalloc +let malloc : + 'a . + unit -> + unit -> + 'a -> + FStar_UInt32.t -> + ('a, ('a, unit, unit) trivial_preorder, + ('a, unit, unit) trivial_preorder) + LowStar_Monotonic_Buffer.mbuffer + = fun uu___ -> LowStar_Monotonic_Buffer.mmalloc +let alloca : + 'a . + unit -> + 'a -> + FStar_UInt32.t -> + ('a, ('a, unit, unit) trivial_preorder, + ('a, unit, unit) trivial_preorder) + LowStar_Monotonic_Buffer.mbuffer + = fun uu___ -> LowStar_Monotonic_Buffer.malloca +let alloca_of_list : + 'a . + unit -> + 'a Prims.list -> + ('a, ('a, unit, unit) trivial_preorder, + ('a, unit, unit) trivial_preorder) LowStar_Monotonic_Buffer.mbuffer + = fun uu___ -> LowStar_Monotonic_Buffer.malloca_of_list +let gcmalloc_of_list : + 'a . + unit -> + unit -> + 'a Prims.list -> + ('a, ('a, unit, unit) trivial_preorder, + ('a, unit, unit) trivial_preorder) + LowStar_Monotonic_Buffer.mbuffer + = fun uu___ -> LowStar_Monotonic_Buffer.mgcmalloc_of_list +type ('a, 'l) assign_list_t = 'a buffer -> unit +let rec assign_list : 'a . 'a Prims.list -> 'a buffer -> unit = + fun l -> + fun b -> + match l with + | [] -> let h = FStar_HyperStack_ST.get () in () + | hd::tl -> + let b_hd = LowStar_Monotonic_Buffer.msub b Stdint.Uint32.zero () in + let b_tl = LowStar_Monotonic_Buffer.moffset b Stdint.Uint32.one in + let h = FStar_HyperStack_ST.get () in + ((let h1 = FStar_HyperStack_ST.get () in + LowStar_Monotonic_Buffer.upd' b_hd Stdint.Uint32.zero hd); + (let h0 = FStar_HyperStack_ST.get () in + assign_list tl b_tl; (let h1 = FStar_HyperStack_ST.get () in ()))) \ No newline at end of file diff --git a/ocaml/fstar-lib/generated/LowStar_BufferOps.ml b/ocaml/fstar-lib/generated/LowStar_BufferOps.ml new file mode 100644 index 00000000000..5784af2f473 --- /dev/null +++ b/ocaml/fstar-lib/generated/LowStar_BufferOps.ml @@ -0,0 +1,36 @@ +open Prims +let op_Array_Access : + 'a 'rrel 'rel . + unit -> + ('a, 'rrel, 'rel) LowStar_Monotonic_Buffer.mbuffer -> + FStar_UInt32.t -> 'a + = fun uu___ -> LowStar_Monotonic_Buffer.index +let op_Array_Assignment : + 'a 'rrel 'rel . + ('a, 'rrel, 'rel) LowStar_Monotonic_Buffer.mbuffer -> + FStar_UInt32.t -> 'a -> unit + = + fun b -> + fun i -> + fun v -> + let h = FStar_HyperStack_ST.get () in + LowStar_Monotonic_Buffer.upd' b i v +let op_Bang_Star : + 'a 'rrel 'rel . ('a, 'rrel, 'rel) LowStar_Monotonic_Buffer.mbuffer -> 'a = + fun p -> LowStar_Monotonic_Buffer.index p Stdint.Uint32.zero +let op_Star_Equals : + 'a 'rrel 'rel . + ('a, 'rrel, 'rel) LowStar_Monotonic_Buffer.mbuffer -> 'a -> unit + = + fun p -> + fun v -> + let h = FStar_HyperStack_ST.get () in + LowStar_Monotonic_Buffer.upd' p Stdint.Uint32.zero v +let blit : + 'a 'rrel1 'rel1 'rrel2 'rel2 . + unit -> + ('a, 'rrel1, 'rrel2) LowStar_Monotonic_Buffer.mbuffer -> + FStar_UInt32.t -> + ('a, 'rel1, 'rel2) LowStar_Monotonic_Buffer.mbuffer -> + FStar_UInt32.t -> FStar_UInt32.t -> unit + = fun uu___ -> LowStar_Monotonic_Buffer.blit \ No newline at end of file diff --git a/ocaml/fstar-lib/generated/LowStar_BufferView.ml b/ocaml/fstar-lib/generated/LowStar_BufferView.ml new file mode 100644 index 00000000000..130cf325e68 --- /dev/null +++ b/ocaml/fstar-lib/generated/LowStar_BufferView.ml @@ -0,0 +1,43 @@ +open Prims +type ('a, 'b, 'f, 'g) inverses = unit +type ('a, 'b) view = + | View of Prims.pos * unit * unit +let uu___is_View : 'a 'b . ('a, 'b) view -> Prims.bool = + fun projectee -> true +let __proj__View__item__n : 'a 'b . ('a, 'b) view -> Prims.pos = + fun projectee -> match projectee with | View (n, get, put) -> n +type ('a, 'rrel, 'rel, 'b) buffer_view = + | BufferView of ('a, 'rrel, 'rel) LowStar_Monotonic_Buffer.mbuffer * ( + 'a, 'b) view +let uu___is_BufferView : + 'a 'rrel 'rel 'b . ('a, 'rrel, 'rel, 'b) buffer_view -> Prims.bool = + fun projectee -> true +let __proj__BufferView__item__buf : + 'a 'rrel 'rel 'b . + ('a, 'rrel, 'rel, 'b) buffer_view -> + ('a, 'rrel, 'rel) LowStar_Monotonic_Buffer.mbuffer + = fun projectee -> match projectee with | BufferView (buf, v) -> buf +let __proj__BufferView__item__v : + 'a 'rrel 'rel 'b . ('a, 'rrel, 'rel, 'b) buffer_view -> ('a, 'b) view = + fun projectee -> match projectee with | BufferView (buf, v) -> v +type 'dest buffer = + (unit, unit, unit, (Obj.t, Obj.t, Obj.t, 'dest) buffer_view) + FStar_Pervasives.dtuple4 +type ('dest, 'b) as_buffer_t = + (unit, unit, unit) LowStar_Monotonic_Buffer.mbuffer +let as_buffer : 'b . 'b buffer -> ('b, unit) as_buffer_t = + fun uu___ -> + (fun v -> + Obj.magic + (__proj__BufferView__item__buf + (FStar_Pervasives.__proj__Mkdtuple4__item___4 v))) uu___ +let get_view : 'b . 'b buffer -> (unit, 'b) view = + fun uu___ -> + (fun v -> + Obj.magic + (__proj__BufferView__item__v + (FStar_Pervasives.__proj__Mkdtuple4__item___4 v))) uu___ +type ('b, 'h, 'vb) live = + (unit, unit, unit, unit, unit) LowStar_Monotonic_Buffer.live +type ('b, 'vb, 'h, 'hu) modifies = + (unit, unit, unit) LowStar_Monotonic_Buffer.modifies \ No newline at end of file diff --git a/ocaml/fstar-lib/generated/LowStar_BufferView_Down.ml b/ocaml/fstar-lib/generated/LowStar_BufferView_Down.ml new file mode 100644 index 00000000000..90dafda1b5d --- /dev/null +++ b/ocaml/fstar-lib/generated/LowStar_BufferView_Down.ml @@ -0,0 +1,51 @@ +open Prims +type ('a, 'b, 'f, 'g) inverses = unit +type ('a, 'b) view = + | View of Prims.pos * unit * unit +let uu___is_View : 'a 'b . ('a, 'b) view -> Prims.bool = + fun projectee -> true +let __proj__View__item__n : 'a 'b . ('a, 'b) view -> Prims.pos = + fun projectee -> match projectee with | View (n, get, put) -> n +type ('src, 'rrel, 'rel, 'dest) buffer_view = + | BufferView of ('src, 'rrel, 'rel) LowStar_Monotonic_Buffer.mbuffer * + ('src, 'dest) view +let uu___is_BufferView : + 'src 'rrel 'rel 'dest . + ('src, 'rrel, 'rel, 'dest) buffer_view -> Prims.bool + = fun projectee -> true +let __proj__BufferView__item__buf : + 'src 'rrel 'rel 'dest . + ('src, 'rrel, 'rel, 'dest) buffer_view -> + ('src, 'rrel, 'rel) LowStar_Monotonic_Buffer.mbuffer + = fun projectee -> match projectee with | BufferView (buf, v) -> buf +let __proj__BufferView__item__v : + 'src 'rrel 'rel 'dest . + ('src, 'rrel, 'rel, 'dest) buffer_view -> ('src, 'dest) view + = fun projectee -> match projectee with | BufferView (buf, v) -> v +type 'dest buffer = + (unit, unit, unit, (Obj.t, Obj.t, Obj.t, 'dest) buffer_view) + FStar_Pervasives.dtuple4 +type ('dest, 'b) as_buffer_t = + (unit, unit, unit) LowStar_Monotonic_Buffer.mbuffer +let as_buffer : 'b . 'b buffer -> ('b, unit) as_buffer_t = + fun uu___ -> + (fun v -> + let uu___ = v in + match uu___ with + | FStar_Pervasives.Mkdtuple4 + (uu___1, uu___2, uu___3, BufferView (b1, uu___4)) -> Obj.magic b1) + uu___ +let get_view : 'b . 'b buffer -> (unit, 'b) view = + fun uu___ -> + (fun bv -> + let uu___ = bv in + match uu___ with + | FStar_Pervasives.Mkdtuple4 + (uu___1, uu___2, uu___3, BufferView (uu___4, v)) -> Obj.magic v) + uu___ +type ('b, 'h, 'vb) live = + (unit, unit, unit, unit, unit) LowStar_Monotonic_Buffer.live +type ('b, 'vb, 'h, 'hu) mods = + (unit, unit, unit) LowStar_Monotonic_Buffer.modifies +type ('b, 'vb, 'h, 'hu) modifies = + (unit, unit, unit) LowStar_Monotonic_Buffer.modifies \ No newline at end of file diff --git a/ocaml/fstar-lib/generated/LowStar_BufferView_Up.ml b/ocaml/fstar-lib/generated/LowStar_BufferView_Up.ml new file mode 100644 index 00000000000..6282ed2052b --- /dev/null +++ b/ocaml/fstar-lib/generated/LowStar_BufferView_Up.ml @@ -0,0 +1,33 @@ +open Prims +type ('uuuuu, 'uuuuu1, 'f, 'g) inverses = unit +type ('a, 'b) view = + | View of Prims.pos * unit * unit +let uu___is_View : 'a 'b . ('a, 'b) view -> Prims.bool = + fun projectee -> true +let __proj__View__item__n : 'a 'b . ('a, 'b) view -> Prims.pos = + fun projectee -> match projectee with | View (n, get, put) -> n +type 'dest buffer = + | Buffer of unit * Obj.t LowStar_BufferView_Down.buffer * (Obj.t, 'dest) + view +let uu___is_Buffer : 'dest . 'dest buffer -> Prims.bool = + fun projectee -> true +let __proj__Buffer__item__down_buf : + 'dest . 'dest buffer -> unit LowStar_BufferView_Down.buffer = + fun uu___ -> + (fun projectee -> + match projectee with | Buffer (src, down_buf, v) -> Obj.magic down_buf) + uu___ +let __proj__Buffer__item__v : 'dest . 'dest buffer -> (unit, 'dest) view = + fun uu___ -> + (fun projectee -> + match projectee with | Buffer (src, down_buf, v) -> Obj.magic v) uu___ +type ('b, 'bv) buffer_src = Obj.t +let as_down_buffer : 'b . 'b buffer -> Obj.t LowStar_BufferView_Down.buffer = + fun uu___ -> + (fun bv -> Obj.magic (__proj__Buffer__item__down_buf bv)) uu___ +let get_view : 'b . 'b buffer -> (Obj.t, 'b) view = + fun uu___ -> (fun v -> Obj.magic (__proj__Buffer__item__v v)) uu___ +type ('b, 'h, 'vb) live = + (unit, unit, unit, unit, unit) LowStar_Monotonic_Buffer.live +type ('b, 'vb, 'h, 'hu) modifies = + (unit, unit, unit) LowStar_Monotonic_Buffer.modifies \ No newline at end of file diff --git a/ocaml/fstar-lib/generated/LowStar_Comment.ml b/ocaml/fstar-lib/generated/LowStar_Comment.ml new file mode 100644 index 00000000000..48ca2709bb9 --- /dev/null +++ b/ocaml/fstar-lib/generated/LowStar_Comment.ml @@ -0,0 +1,4 @@ +open Prims +let comment_gen : 't . Prims.string -> 't -> Prims.string -> 't = + fun before -> fun body -> fun after -> body +let (comment : Prims.string -> unit) = fun s -> () \ No newline at end of file diff --git a/ocaml/fstar-lib/generated/LowStar_ConstBuffer.ml b/ocaml/fstar-lib/generated/LowStar_ConstBuffer.ml new file mode 100644 index 00000000000..f6839f0581c --- /dev/null +++ b/ocaml/fstar-lib/generated/LowStar_ConstBuffer.ml @@ -0,0 +1,61 @@ +open Prims +type ('q, 'a) qbuf_cases = Obj.t +type ('q, 'a) q_preorder = Obj.t +type 'a qbuf = (unit, Obj.t) Prims.dtuple2 +type ('a, 'c, 'uuuuu, 'uuuuu1) qbuf_pre = Obj.t +let qbuf_mbuf : + 'a . 'a qbuf -> ('a, Obj.t, Obj.t) LowStar_Monotonic_Buffer.mbuffer = + fun uu___ -> (fun c -> Obj.magic (FStar_Pervasives.dsnd c)) uu___ +type 'a const_buffer = 'a qbuf +let as_qbuf : 'a . 'a const_buffer -> 'a qbuf = fun c -> c +type ('a, 'h, 'c) live = + ('a, Obj.t, Obj.t, unit, unit) LowStar_Monotonic_Buffer.live +let of_buffer : 'a . 'a LowStar_Buffer.buffer -> 'a const_buffer = + fun b -> Prims.Mkdtuple2 ((), (Obj.magic b)) +let of_ibuffer : 'a . 'a LowStar_ImmutableBuffer.ibuffer -> 'a const_buffer = + fun b -> Prims.Mkdtuple2 ((), (Obj.magic b)) +let of_qbuf : + 'uuuuu . + unit -> + ('uuuuu, Obj.t, Obj.t) LowStar_Monotonic_Buffer.mbuffer -> + 'uuuuu const_buffer + = fun q -> fun b -> Prims.Mkdtuple2 ((), (Obj.magic b)) +let null : 'a . unit -> 'a const_buffer = + fun uu___ -> of_buffer (LowStar_Monotonic_Buffer.mnull ()) +let is_null : 'a . 'a const_buffer -> Prims.bool = + fun c -> let x = qbuf_mbuf c in LowStar_Monotonic_Buffer.is_null x +let index : 'a . 'a const_buffer -> FStar_UInt32.t -> 'a = + fun c -> fun i -> let x = qbuf_mbuf c in LowStar_Monotonic_Buffer.index x i +type ('a, 'i, 'len, 'csub, 'c) const_sub_buffer = unit +let sub : 'a . 'a const_buffer -> FStar_UInt32.t -> unit -> 'a const_buffer = + fun c -> + fun i -> + fun len -> + let uu___ = c in + match uu___ with + | Prims.Mkdtuple2 (q, x) -> + let x1 = Obj.magic x in + let y = LowStar_Monotonic_Buffer.msub x1 i () in + Prims.Mkdtuple2 ((), (Obj.magic y)) +let cast : + 'a . 'a const_buffer -> ('a, Obj.t, Obj.t) LowStar_Monotonic_Buffer.mbuffer + = fun c -> qbuf_mbuf c +let to_buffer : 'a . 'a const_buffer -> 'a LowStar_Buffer.buffer = + fun uu___ -> (fun c -> Obj.magic (qbuf_mbuf c)) uu___ +let to_ibuffer : 'a . 'a const_buffer -> 'a LowStar_ImmutableBuffer.ibuffer = + fun uu___ -> (fun c -> Obj.magic (qbuf_mbuf c)) uu___ +let (test : + FStar_UInt32.t LowStar_Buffer.buffer -> + FStar_UInt32.t LowStar_ImmutableBuffer.ibuffer -> FStar_UInt32.t) + = + fun x -> + fun y -> + let c1 = of_buffer x in + let c2 = of_ibuffer y in + (let h = FStar_HyperStack_ST.get () in + LowStar_Monotonic_Buffer.upd' x Stdint.Uint32.zero Stdint.Uint32.one); + (let a = index c1 Stdint.Uint32.zero in + let a' = index c2 Stdint.Uint32.zero in + let c3 = sub c2 Stdint.Uint32.one () in + let a'' = index c3 Stdint.Uint32.zero in + FStar_UInt32.add (FStar_UInt32.add a a') a'') \ No newline at end of file diff --git a/ocaml/fstar-lib/generated/LowStar_Endianness.ml b/ocaml/fstar-lib/generated/LowStar_Endianness.ml new file mode 100644 index 00000000000..c73098b466a --- /dev/null +++ b/ocaml/fstar-lib/generated/LowStar_Endianness.ml @@ -0,0 +1,192 @@ +open Prims +type u8 = FStar_UInt8.t +type u16 = FStar_UInt16.t +type u32 = FStar_UInt32.t +type u64 = FStar_UInt64.t +type u128 = FStar_UInt128.t +let (htole16 : FStar_UInt16.t -> FStar_UInt16.t) = + fun uu___ -> failwith "Not yet implemented:htole16" +let (le16toh : FStar_UInt16.t -> FStar_UInt16.t) = + fun uu___ -> failwith "Not yet implemented:le16toh" +let (htole32 : FStar_UInt32.t -> FStar_UInt32.t) = + fun uu___ -> failwith "Not yet implemented:htole32" +let (le32toh : FStar_UInt32.t -> FStar_UInt32.t) = + fun uu___ -> failwith "Not yet implemented:le32toh" +let (htole64 : FStar_UInt64.t -> FStar_UInt64.t) = + fun uu___ -> failwith "Not yet implemented:htole64" +let (le64toh : FStar_UInt64.t -> FStar_UInt64.t) = + fun uu___ -> failwith "Not yet implemented:le64toh" +let (htobe16 : FStar_UInt16.t -> FStar_UInt16.t) = + fun uu___ -> failwith "Not yet implemented:htobe16" +let (be16toh : FStar_UInt16.t -> FStar_UInt16.t) = + fun uu___ -> failwith "Not yet implemented:be16toh" +let (htobe32 : FStar_UInt32.t -> FStar_UInt32.t) = + fun uu___ -> failwith "Not yet implemented:htobe32" +let (be32toh : FStar_UInt32.t -> FStar_UInt32.t) = + fun uu___ -> failwith "Not yet implemented:be32toh" +let (htobe64 : FStar_UInt64.t -> FStar_UInt64.t) = + fun uu___ -> failwith "Not yet implemented:htobe64" +let (be64toh : FStar_UInt64.t -> FStar_UInt64.t) = + fun uu___ -> failwith "Not yet implemented:be64toh" +type ('a, 'rrel, 'rel, 'b, 'i, 'j, 'predicate, 'h) store_pre = unit +type ('a, 'rrel, 'rel, 'b, 'i, 'j, 'predicate, 'h0, 'uuuuu, 'h1) store_post = + unit +let store16_le_i : + 'rrel 'rel . + (FStar_UInt8.t, 'rrel, 'rel) LowStar_Monotonic_Buffer.mbuffer -> + FStar_UInt32.t -> FStar_UInt16.t -> unit + = fun b -> fun i -> fun z -> failwith "Not yet implemented:store16_le_i" +let load16_le_i : + 'rrel 'rel . + (FStar_UInt8.t, 'rrel, 'rel) LowStar_Monotonic_Buffer.mbuffer -> + FStar_UInt32.t -> FStar_UInt16.t + = fun b -> fun i -> failwith "Not yet implemented:load16_le_i" +let store16_be_i : + 'rrel 'rel . + (FStar_UInt8.t, 'rrel, 'rel) LowStar_Monotonic_Buffer.mbuffer -> + FStar_UInt32.t -> FStar_UInt16.t -> unit + = fun b -> fun i -> fun z -> failwith "Not yet implemented:store16_be_i" +let load16_be_i : + 'rrel 'rel . + (FStar_UInt8.t, 'rrel, 'rel) LowStar_Monotonic_Buffer.mbuffer -> + FStar_UInt32.t -> FStar_UInt16.t + = fun b -> fun i -> failwith "Not yet implemented:load16_be_i" +let store32_le_i : + 'rrel 'rel . + (FStar_UInt8.t, 'rrel, 'rel) LowStar_Monotonic_Buffer.mbuffer -> + FStar_UInt32.t -> FStar_UInt32.t -> unit + = fun b -> fun i -> fun z -> failwith "Not yet implemented:store32_le_i" +let load32_le_i : + 'rrel 'rel . + (FStar_UInt8.t, 'rrel, 'rel) LowStar_Monotonic_Buffer.mbuffer -> + FStar_UInt32.t -> FStar_UInt32.t + = fun b -> fun i -> failwith "Not yet implemented:load32_le_i" +let store32_be_i : + 'rrel 'rel . + (FStar_UInt8.t, 'rrel, 'rel) LowStar_Monotonic_Buffer.mbuffer -> + FStar_UInt32.t -> FStar_UInt32.t -> unit + = fun b -> fun i -> fun z -> failwith "Not yet implemented:store32_be_i" +let load32_be_i : + 'rrel 'rel . + (FStar_UInt8.t, 'rrel, 'rel) LowStar_Monotonic_Buffer.mbuffer -> + FStar_UInt32.t -> FStar_UInt32.t + = fun b -> fun i -> failwith "Not yet implemented:load32_be_i" +let store64_le_i : + 'rrel 'rel . + (FStar_UInt8.t, 'rrel, 'rel) LowStar_Monotonic_Buffer.mbuffer -> + FStar_UInt32.t -> FStar_UInt64.t -> unit + = fun b -> fun i -> fun z -> failwith "Not yet implemented:store64_le_i" +let load64_le_i : + 'rrel 'rel . + (FStar_UInt8.t, 'rrel, 'rel) LowStar_Monotonic_Buffer.mbuffer -> + FStar_UInt32.t -> FStar_UInt64.t + = fun b -> fun i -> failwith "Not yet implemented:load64_le_i" +let store64_be_i : + 'rrel 'rel . + (FStar_UInt8.t, 'rrel, 'rel) LowStar_Monotonic_Buffer.mbuffer -> + FStar_UInt32.t -> FStar_UInt64.t -> unit + = fun b -> fun i -> fun z -> failwith "Not yet implemented:store64_be_i" +let load64_be_i : + 'rrel 'rel . + (FStar_UInt8.t, 'rrel, 'rel) LowStar_Monotonic_Buffer.mbuffer -> + FStar_UInt32.t -> FStar_UInt64.t + = fun b -> fun i -> failwith "Not yet implemented:load64_be_i" +let store128_le_i : + 'rrel 'rel . + (FStar_UInt8.t, 'rrel, 'rel) LowStar_Monotonic_Buffer.mbuffer -> + FStar_UInt32.t -> FStar_UInt128.t -> unit + = fun b -> fun i -> fun z -> failwith "Not yet implemented:store128_le_i" +let load128_le_i : + 'rrel 'rel . + (FStar_UInt8.t, 'rrel, 'rel) LowStar_Monotonic_Buffer.mbuffer -> + FStar_UInt32.t -> FStar_UInt128.t + = fun b -> fun i -> failwith "Not yet implemented:load128_le_i" +let store128_be_i : + 'rrel 'rel . + (FStar_UInt8.t, 'rrel, 'rel) LowStar_Monotonic_Buffer.mbuffer -> + FStar_UInt32.t -> FStar_UInt128.t -> unit + = fun b -> fun i -> fun z -> failwith "Not yet implemented:store128_be_i" +let load128_be_i : + 'rrel 'rel . + (FStar_UInt8.t, 'rrel, 'rel) LowStar_Monotonic_Buffer.mbuffer -> + FStar_UInt32.t -> FStar_UInt128.t + = fun b -> fun i -> failwith "Not yet implemented:load128_be_i" +let (store16_le : + FStar_UInt8.t LowStar_Buffer.buffer -> FStar_UInt16.t -> unit) = + fun b -> fun z -> store16_le_i b Stdint.Uint32.zero z +let (load16_le : FStar_UInt8.t LowStar_Buffer.buffer -> FStar_UInt16.t) = + fun b -> load16_le_i b Stdint.Uint32.zero +let (store16_be : + FStar_UInt8.t LowStar_Buffer.buffer -> FStar_UInt16.t -> unit) = + fun b -> fun z -> store16_be_i b Stdint.Uint32.zero z +let (load16_be : FStar_UInt8.t LowStar_Buffer.buffer -> FStar_UInt16.t) = + fun b -> load16_be_i b Stdint.Uint32.zero +let (store32_le : + FStar_UInt8.t LowStar_Buffer.buffer -> FStar_UInt32.t -> unit) = + fun b -> fun z -> store32_le_i b Stdint.Uint32.zero z +let (load32_le : FStar_UInt8.t LowStar_Buffer.buffer -> FStar_UInt32.t) = + fun b -> load32_le_i b Stdint.Uint32.zero +let (store32_be : + FStar_UInt8.t LowStar_Buffer.buffer -> FStar_UInt32.t -> unit) = + fun b -> fun z -> store32_be_i b Stdint.Uint32.zero z +let (load32_be : FStar_UInt8.t LowStar_Buffer.buffer -> FStar_UInt32.t) = + fun b -> load32_be_i b Stdint.Uint32.zero +let (store64_le : + FStar_UInt8.t LowStar_Buffer.buffer -> FStar_UInt64.t -> unit) = + fun b -> fun z -> store64_le_i b Stdint.Uint32.zero z +let (load64_le : FStar_UInt8.t LowStar_Buffer.buffer -> FStar_UInt64.t) = + fun b -> load64_le_i b Stdint.Uint32.zero +let (load64_be : FStar_UInt8.t LowStar_Buffer.buffer -> FStar_UInt64.t) = + fun b -> load64_be_i b Stdint.Uint32.zero +let (store64_be : + FStar_UInt8.t LowStar_Buffer.buffer -> FStar_UInt64.t -> unit) = + fun b -> fun z -> store64_be_i b Stdint.Uint32.zero z +let (load128_le : FStar_UInt8.t LowStar_Buffer.buffer -> FStar_UInt128.t) = + fun b -> load128_le_i b Stdint.Uint32.zero +let (store128_le : + FStar_UInt8.t LowStar_Buffer.buffer -> FStar_UInt128.t -> unit) = + fun b -> fun z -> store128_le_i b Stdint.Uint32.zero z +let (load128_be : FStar_UInt8.t LowStar_Buffer.buffer -> FStar_UInt128.t) = + fun b -> load128_be_i b Stdint.Uint32.zero +let (store128_be : + FStar_UInt8.t LowStar_Buffer.buffer -> FStar_UInt128.t -> unit) = + fun b -> fun z -> store128_be_i b Stdint.Uint32.zero z +let index_32_be : + 'rrel 'rel . + (FStar_UInt8.t, 'rrel, 'rel) LowStar_Monotonic_Buffer.mbuffer -> + FStar_UInt32.t -> FStar_UInt32.t + = + fun b -> + fun i -> load32_be_i b (FStar_UInt32.mul (Stdint.Uint32.of_int (4)) i) +let index_32_le : + 'rrel 'rel . + (FStar_UInt8.t, 'rrel, 'rel) LowStar_Monotonic_Buffer.mbuffer -> + FStar_UInt32.t -> FStar_UInt32.t + = + fun b -> + fun i -> load32_le_i b (FStar_UInt32.mul (Stdint.Uint32.of_int (4)) i) +let index_64_be : + 'rrel 'rel . + (FStar_UInt8.t, 'rrel, 'rel) LowStar_Monotonic_Buffer.mbuffer -> + FStar_UInt32.t -> FStar_UInt64.t + = + fun b -> + fun i -> load64_be_i b (FStar_UInt32.mul (Stdint.Uint32.of_int (8)) i) +let index_64_le : + 'rrel 'rel . + (FStar_UInt8.t, 'rrel, 'rel) LowStar_Monotonic_Buffer.mbuffer -> + FStar_UInt32.t -> FStar_UInt64.t + = + fun b -> + fun i -> load64_le_i b (FStar_UInt32.mul (Stdint.Uint32.of_int (8)) i) +let upd_32_be : + 'rrel 'rel . + (FStar_UInt8.t, 'rrel, 'rel) LowStar_Monotonic_Buffer.mbuffer -> + FStar_UInt32.t -> FStar_UInt32.t -> unit + = + fun b -> + fun i -> + fun v -> + let h0 = FStar_HyperStack_ST.get () in + store32_be_i b (FStar_UInt32.mul (Stdint.Uint32.of_int (4)) i) v; + (let h1 = FStar_HyperStack_ST.get () in ()) \ No newline at end of file diff --git a/ocaml/fstar-lib/generated/LowStar_ImmutableBuffer.ml b/ocaml/fstar-lib/generated/LowStar_ImmutableBuffer.ml new file mode 100644 index 00000000000..926d5ca4b8d --- /dev/null +++ b/ocaml/fstar-lib/generated/LowStar_ImmutableBuffer.ml @@ -0,0 +1,203 @@ +open Prims +type ('a, 's1, 's2) immutable_preorder = + ('a, unit, unit) FStar_Seq_Base.equal +type 'a ibuffer = + ('a, ('a, unit, unit) immutable_preorder, + ('a, unit, unit) immutable_preorder) LowStar_Monotonic_Buffer.mbuffer +let inull : 'a . unit -> 'a ibuffer = + fun uu___ -> LowStar_Monotonic_Buffer.mnull () +type 'a ipointer = 'a ibuffer +type 'a ipointer_or_null = 'a ibuffer +let isub : + 'a . + unit -> + ('a, ('a, unit, unit) immutable_preorder, + ('a, unit, unit) immutable_preorder) LowStar_Monotonic_Buffer.mbuffer + -> + FStar_UInt32.t -> + unit -> + ('a, ('a, unit, unit) immutable_preorder, + ('a, unit, unit) immutable_preorder) + LowStar_Monotonic_Buffer.mbuffer + = fun uu___ -> LowStar_Monotonic_Buffer.msub +let ioffset : + 'a . + unit -> + ('a, ('a, unit, unit) immutable_preorder, + ('a, unit, unit) immutable_preorder) LowStar_Monotonic_Buffer.mbuffer + -> + FStar_UInt32.t -> + ('a, ('a, unit, unit) immutable_preorder, + ('a, unit, unit) immutable_preorder) + LowStar_Monotonic_Buffer.mbuffer + = fun uu___ -> LowStar_Monotonic_Buffer.moffset +type ('a, 's, 's1) cpred = ('a, unit, unit) FStar_Seq_Base.equal +type ('a, 's, 'su) seq_eq = ('a, unit, unit) FStar_Seq_Base.equal +type ('a, 'b, 's) value_is = + ('a, ('a, unit, unit) immutable_preorder, + ('a, unit, unit) immutable_preorder, unit, ('a, unit, unit) seq_eq) + LowStar_Monotonic_Buffer.witnessed +type ('a, 'len, 's) libuffer = + ('a, ('a, unit, unit) immutable_preorder, + ('a, unit, unit) immutable_preorder) LowStar_Monotonic_Buffer.mbuffer +type ('a, 'len, 'r, 's) libuffer_or_null = + ('a, ('a, unit, unit) immutable_preorder, + ('a, unit, unit) immutable_preorder) LowStar_Monotonic_Buffer.mbuffer +let igcmalloc : + 'a . + unit -> + 'a -> + FStar_UInt32.t -> + ('a, ('a, unit, unit) immutable_preorder, + ('a, unit, unit) immutable_preorder) + LowStar_Monotonic_Buffer.mbuffer + = + fun r -> + fun init -> + fun len -> + let b = LowStar_Monotonic_Buffer.mgcmalloc () init len in + LowStar_Monotonic_Buffer.witness_p b (); b +let igcmalloc_and_blit : + 'a . + unit -> + unit -> + unit -> + ('a, Obj.t, Obj.t) LowStar_Monotonic_Buffer.mbuffer -> + FStar_UInt32.t -> + FStar_UInt32.t -> + ('a, ('a, unit, unit) immutable_preorder, + ('a, unit, unit) immutable_preorder) + LowStar_Monotonic_Buffer.mbuffer + = + fun r -> + fun rrel1 -> + fun rel1 -> + fun src -> + fun id_src -> + fun len -> + let b = + LowStar_Monotonic_Buffer.mgcmalloc_and_blit () () () src + id_src len in + let h0 = FStar_HyperStack_ST.get () in + LowStar_Monotonic_Buffer.witness_p b (); b +let igcmalloc_partial : + 'a . + unit -> + 'a -> + FStar_UInt32.t -> + ('a, ('a, unit, unit) immutable_preorder, + ('a, unit, unit) immutable_preorder) + LowStar_Monotonic_Buffer.mbuffer + = fun r -> fun init -> fun len -> igcmalloc () init len +let imalloc : + 'a . + unit -> + 'a -> + FStar_UInt32.t -> + ('a, ('a, unit, unit) immutable_preorder, + ('a, unit, unit) immutable_preorder) + LowStar_Monotonic_Buffer.mbuffer + = + fun r -> + fun init -> + fun len -> + let b = LowStar_Monotonic_Buffer.mmalloc () init len in + LowStar_Monotonic_Buffer.witness_p b (); b +let imalloc_and_blit : + 'a . + unit -> + unit -> + unit -> + ('a, Obj.t, Obj.t) LowStar_Monotonic_Buffer.mbuffer -> + FStar_UInt32.t -> + FStar_UInt32.t -> + ('a, ('a, unit, unit) immutable_preorder, + ('a, unit, unit) immutable_preorder) + LowStar_Monotonic_Buffer.mbuffer + = + fun r -> + fun rrel1 -> + fun rel1 -> + fun src -> + fun id_src -> + fun len -> + let b = + LowStar_Monotonic_Buffer.mmalloc_and_blit () () () src id_src + len in + let h0 = FStar_HyperStack_ST.get () in + LowStar_Monotonic_Buffer.witness_p b (); b +let imalloc_partial : + 'a . + unit -> + 'a -> + FStar_UInt32.t -> + ('a, ('a, unit, unit) immutable_preorder, + ('a, unit, unit) immutable_preorder) + LowStar_Monotonic_Buffer.mbuffer + = fun r -> fun init -> fun len -> imalloc () init len +let ialloca : + 'a . + 'a -> + FStar_UInt32.t -> + ('a, ('a, unit, unit) immutable_preorder, + ('a, unit, unit) immutable_preorder) + LowStar_Monotonic_Buffer.mbuffer + = + fun init -> + fun len -> + let b = LowStar_Monotonic_Buffer.malloca init len in + LowStar_Monotonic_Buffer.witness_p b (); b +let ialloca_and_blit : + 'a 'rrel1 'rel1 . + ('a, 'rrel1, 'rel1) LowStar_Monotonic_Buffer.mbuffer -> + FStar_UInt32.t -> + FStar_UInt32.t -> + ('a, ('a, unit, unit) immutable_preorder, + ('a, unit, unit) immutable_preorder) + LowStar_Monotonic_Buffer.mbuffer + = + fun src -> + fun id_src -> + fun len -> + let b = LowStar_Monotonic_Buffer.malloca_and_blit src id_src len in + let h0 = FStar_HyperStack_ST.get () in + LowStar_Monotonic_Buffer.witness_p b (); b +let ialloca_of_list : + 'a . + 'a Prims.list -> + ('a, ('a, unit, unit) immutable_preorder, + ('a, unit, unit) immutable_preorder) LowStar_Monotonic_Buffer.mbuffer + = + fun init -> + let b = LowStar_Monotonic_Buffer.malloca_of_list init in + LowStar_Monotonic_Buffer.witness_p b (); b +let igcmalloc_of_list : + 'a . + unit -> + 'a Prims.list -> + ('a, ('a, unit, unit) immutable_preorder, + ('a, unit, unit) immutable_preorder) + LowStar_Monotonic_Buffer.mbuffer + = + fun r -> + fun init -> + let b = LowStar_Monotonic_Buffer.mgcmalloc_of_list () init in + LowStar_Monotonic_Buffer.witness_p b (); b +let igcmalloc_of_list_partial : + 'a . + unit -> + 'a Prims.list -> + ('a, ('a, unit, unit) immutable_preorder, + ('a, unit, unit) immutable_preorder) + LowStar_Monotonic_Buffer.mbuffer + = fun r -> fun init -> igcmalloc_of_list () init +let witness_contents : 'a . 'a ibuffer -> 'a FStar_Seq_Base.seq -> unit = + fun b -> fun s -> LowStar_Monotonic_Buffer.witness_p b () +let recall_contents : 'a . 'a ibuffer -> 'a FStar_Seq_Base.seq -> unit = + fun b -> fun s -> LowStar_Monotonic_Buffer.recall_p b () +let witness_value : 'a . 'a ibuffer -> unit = + fun b -> + let h = FStar_HyperStack_ST.get () in + LowStar_Monotonic_Buffer.witness_p b () +let recall_value : 'a . 'a ibuffer -> unit -> unit = + fun b -> fun s -> LowStar_Monotonic_Buffer.recall_p b () \ No newline at end of file diff --git a/ocaml/fstar-lib/generated/LowStar_Modifies.ml b/ocaml/fstar-lib/generated/LowStar_Modifies.ml new file mode 100644 index 00000000000..e8306abedb2 --- /dev/null +++ b/ocaml/fstar-lib/generated/LowStar_Modifies.ml @@ -0,0 +1 @@ +open Prims \ No newline at end of file diff --git a/ocaml/fstar-lib/generated/LowStar_ModifiesPat.ml b/ocaml/fstar-lib/generated/LowStar_ModifiesPat.ml new file mode 100644 index 00000000000..e8306abedb2 --- /dev/null +++ b/ocaml/fstar-lib/generated/LowStar_ModifiesPat.ml @@ -0,0 +1 @@ +open Prims \ No newline at end of file diff --git a/ocaml/fstar-lib/generated/LowStar_Monotonic_Buffer.ml b/ocaml/fstar-lib/generated/LowStar_Monotonic_Buffer.ml new file mode 100644 index 00000000000..f248c09c859 --- /dev/null +++ b/ocaml/fstar-lib/generated/LowStar_Monotonic_Buffer.ml @@ -0,0 +1,490 @@ +open Prims +type 'a srel = unit +type ('a, 'len, 'rel, 'i, 'j, 'suburel) compatible_subseq_preorder = unit +type ('a, 'len, 'pre, 'uuuuu, 'uuuuu1) srel_to_lsrel = 'pre +type ('a, 'len, 'rel, 'i, 'j, 'suburel) compatible_sub_preorder = unit +type ('a, 'rrel, 'rel) mbuffer = + | Null + | Buffer of FStar_UInt32.t * (('a, unit) FStar_Seq_Properties.lseq, + ('a, unit, 'rrel, unit, unit) srel_to_lsrel) FStar_HyperStack_ST.mreference + * FStar_UInt32.t * unit +let uu___is_Null : 'a 'rrel 'rel . ('a, 'rrel, 'rel) mbuffer -> Prims.bool = + fun projectee -> match projectee with | Null -> true | uu___ -> false +let uu___is_Buffer : 'a 'rrel 'rel . ('a, 'rrel, 'rel) mbuffer -> Prims.bool + = + fun projectee -> + match projectee with + | Buffer (max_length, content, idx, length) -> true + | uu___ -> false +let __proj__Buffer__item__max_length : + 'a 'rrel 'rel . ('a, 'rrel, 'rel) mbuffer -> FStar_UInt32.t = + fun projectee -> + match projectee with + | Buffer (max_length, content, idx, length) -> max_length +let __proj__Buffer__item__content : + 'a 'rrel 'rel . + ('a, 'rrel, 'rel) mbuffer -> + (('a, unit) FStar_Seq_Properties.lseq, + ('a, unit, 'rrel, unit, unit) srel_to_lsrel) + FStar_HyperStack_ST.mreference + = + fun projectee -> + match projectee with + | Buffer (max_length, content, idx, length) -> content +let __proj__Buffer__item__idx : + 'a 'rrel 'rel . ('a, 'rrel, 'rel) mbuffer -> FStar_UInt32.t = + fun projectee -> + match projectee with | Buffer (max_length, content, idx, length) -> idx +let mnull : + 'uuuuu 'uuuuu1 'uuuuu2 . unit -> ('uuuuu, 'uuuuu1, 'uuuuu2) mbuffer = + fun uu___ -> Null +type ('uuuuu, 'uuuuu1, 'uuuuu2, 'b, 'h) unused_in = Obj.t +type ('t, 'rrel, 'rel, 'b) buffer_compatible = Obj.t +type ('uuuuu, 'rrel, 'rel, 'h, 'b) live = Obj.t + +type ('a, 'rrel, 'rel, 'b, 'i, 'len, 'suburel) compatible_sub = unit +type ubuffer_ = + { + b_max_length: Prims.nat ; + b_offset: Prims.nat ; + b_length: Prims.nat ; + b_is_mm: Prims.bool } +let (__proj__Mkubuffer___item__b_max_length : ubuffer_ -> Prims.nat) = + fun projectee -> + match projectee with + | { b_max_length; b_offset; b_length; b_is_mm;_} -> b_max_length +let (__proj__Mkubuffer___item__b_offset : ubuffer_ -> Prims.nat) = + fun projectee -> + match projectee with + | { b_max_length; b_offset; b_length; b_is_mm;_} -> b_offset +let (__proj__Mkubuffer___item__b_length : ubuffer_ -> Prims.nat) = + fun projectee -> + match projectee with + | { b_max_length; b_offset; b_length; b_is_mm;_} -> b_length +let (__proj__Mkubuffer___item__b_is_mm : ubuffer_ -> Prims.bool) = + fun projectee -> + match projectee with + | { b_max_length; b_offset; b_length; b_is_mm;_} -> b_is_mm +type ('region, 'addr) ubuffer' = ubuffer_ +type ('region, 'addr) ubuffer = unit + +type ('r, 'a, 'b, 'h, 'hu) ubuffer_preserved' = unit +type ('r, 'a, 'b, 'h, 'hu) ubuffer_preserved = unit + +type ('larger, 'smaller) ubuffer_includes' = unit +type ('r1, 'r2, 'a1, 'a2, 'larger, 'smaller) ubuffer_includes0 = unit +type ('r, 'a, 'larger, 'smaller) ubuffer_includes = unit +type ('x1, 'x2) ubuffer_disjoint' = Obj.t +type ('r1, 'r2, 'a1, 'a2, 'b1, 'b2) ubuffer_disjoint0 = unit +type ('r, 'a, 'b1, 'b2) ubuffer_disjoint = unit +type ('h1, 'h2) modifies_0_preserves_mreferences = unit +type ('h1, 'h2) modifies_0_preserves_regions = unit +type ('h1, 'h2) modifies_0_preserves_not_unused_in = unit +type ('h1, 'h2) modifies_0' = unit +type ('h1, 'h2) modifies_0 = unit +type ('a, 'rrel, 'rel, 'b, 'h1, 'h2) modifies_1_preserves_mreferences = unit +type ('a, 'rrel, 'rel, 'b, 'h1, 'h2) modifies_1_preserves_ubuffers = unit +type ('a, 'rrel, 'rel, 'b, 'from, 'to1, 'h1, + 'h2) modifies_1_from_to_preserves_ubuffers = unit +type ('a, 'rrel, 'rel, 'b, 'h1, 'h2) modifies_1_preserves_livenesses = unit +type ('a, 'rrel, 'rel, 'b, 'h1, 'h2) modifies_1' = unit +type ('a, 'rrel, 'rel, 'b, 'h1, 'h2) modifies_1 = unit +type ('a, 'rrel, 'rel, 'b, 'from, 'to1, 'h1, 'h2) modifies_1_from_to = Obj.t +type ('a, 'rrel, 'rel, 'b, 'h1, + 'h2) modifies_addr_of_preserves_not_unused_in = unit +type ('a, 'rrel, 'rel, 'b, 'h1, 'h2) modifies_addr_of' = unit +type ('a, 'rrel, 'rel, 'b, 'h1, 'h2) modifies_addr_of = unit +let (cls : (unit, unit) ubuffer FStar_ModifiesGen.cls) = + FStar_ModifiesGen.Cls ((), (), (), (), (), (), (), (), (), ()) +type loc = (unit, unit) FStar_ModifiesGen.loc +let (loc_none : loc) = FStar_ModifiesGen.loc_none cls +type ('s1, 's2) loc_includes = + (unit, unit, unit, unit) FStar_ModifiesGen.loc_includes +type ('s1, 's2) loc_disjoint = + (unit, unit, unit, unit) FStar_ModifiesGen.loc_disjoint +type buf_t = + (unit, unit, unit, (Obj.t, Obj.t, Obj.t) mbuffer) FStar_Pervasives.dtuple4 +let buf : 'a 'rrel 'rel . ('a, 'rrel, 'rel) mbuffer -> buf_t = + fun b -> FStar_Pervasives.Mkdtuple4 ((), (), (), (Obj.magic b)) +type ('h, 'l) all_live = Obj.t +type 'l all_disjoint = Obj.t +type 'l loc_pairwise_disjoint = Obj.t +type ('s, 'h1, 'h2) modifies = + (unit, unit, unit, unit, unit) FStar_ModifiesGen.modifies +let (address_liveness_insensitive_locs : loc) = + FStar_ModifiesGen.address_liveness_insensitive_locs cls +let (region_liveness_insensitive_locs : loc) = + FStar_ModifiesGen.region_liveness_insensitive_locs cls +type ('h, 'ra) does_not_contain_addr = + (unit, unit) FStar_ModifiesGen.does_not_contain_addr +type ('l, 'h) loc_in = (unit, unit) loc_includes +type ('l, 'h) loc_not_in = (unit, unit) loc_includes +type ('l, 'h, 'hu) fresh_loc = unit +type ('a1, 'a2, 'rrel1, 'rel1, 'rrel2, 'rel2, 'b1, 'b2) disjoint = + (unit, unit) loc_disjoint +type ('a1, 'a2, 'rrel1, 'rel1, 'rrel2, 'rel2, 'b1, 'b2) includes = unit +type ('a, 'rrel, 'rel) mpointer = ('a, 'rrel, 'rel) mbuffer +type ('a, 'rrel, 'rel) mpointer_or_null = ('a, 'rrel, 'rel) mbuffer +let is_null : + 'uuuuu 'uuuuu1 'uuuuu2 . ('uuuuu, 'uuuuu1, 'uuuuu2) mbuffer -> Prims.bool = + fun b -> uu___is_Null b +let msub : + 'a 'rrel 'rel 'suburel . + ('a, 'rrel, 'rel) mbuffer -> + FStar_UInt32.t -> unit -> ('a, 'rrel, 'suburel) mbuffer + = + fun b -> + fun i -> + fun len -> + match b with + | Null -> Null + | Buffer (max_len, content, i0, len0) -> + Buffer (max_len, content, (FStar_UInt32.add i0 i), ()) +let moffset : + 'a 'rrel 'rel 'suburel . + ('a, 'rrel, 'rel) mbuffer -> + FStar_UInt32.t -> ('a, 'rrel, 'suburel) mbuffer + = + fun b -> + fun i -> + match b with + | Null -> Null + | Buffer (max_len, content, i0, len) -> + Buffer (max_len, content, (FStar_UInt32.add i0 i), ()) +let index : + 'uuuuu 'uuuuu1 'uuuuu2 . + ('uuuuu, 'uuuuu1, 'uuuuu2) mbuffer -> FStar_UInt32.t -> 'uuuuu + = + fun b -> + fun i -> + let s = FStar_HyperStack_ST.op_Bang (__proj__Buffer__item__content b) in + FStar_Seq_Base.index s + ((FStar_UInt32.v (__proj__Buffer__item__idx b)) + (FStar_UInt32.v i)) +let upd' : + 'uuuuu 'uuuuu1 'uuuuu2 . + ('uuuuu, 'uuuuu1, 'uuuuu2) mbuffer -> FStar_UInt32.t -> 'uuuuu -> unit + = + fun b -> + fun i -> + fun v -> + let h = FStar_HyperStack_ST.get () in + let uu___ = b in + match uu___ with + | Buffer (max_length, content, idx, len) -> + let s0 = FStar_HyperStack_ST.op_Bang content in + let sb0 = + FStar_Seq_Base.slice s0 (FStar_UInt32.v idx) + (FStar_UInt32.v max_length) in + let s_upd = FStar_Seq_Base.upd sb0 (FStar_UInt32.v i) v in + let sf = + FStar_Seq_Properties.replace_subseq s0 (FStar_UInt32.v idx) + (FStar_UInt32.v max_length) s_upd in + FStar_HyperStack_ST.op_Colon_Equals content sf +let upd : + 'a 'rrel 'rel . ('a, 'rrel, 'rel) mbuffer -> FStar_UInt32.t -> 'a -> unit = + fun b -> fun i -> fun v -> let h = FStar_HyperStack_ST.get () in upd' b i v +type ('a, 'rrel, 'rel, 'b) recallable = unit +type ('uuuuu, 'uuuuu1, 'uuuuu2, 'b) region_lifetime_buf = unit +type ('a, 'rrel, 'rel) rrel_rel_always_compatible = unit +let recall : + 'uuuuu 'uuuuu1 'uuuuu2 . ('uuuuu, 'uuuuu1, 'uuuuu2) mbuffer -> unit = + fun b -> + if uu___is_Null b + then () + else FStar_HyperStack_ST.recall (__proj__Buffer__item__content b) +type 'a spred = unit +type ('a, 'p, 'rel) stable_on = unit +type ('a, 'rrel, 'rel, 'b, 'p, 'h) spred_as_mempred = unit +type ('uuuuu, 'rrel, 'rel, 'b, 'p) witnessed = Obj.t +let witness_p : 'a 'rrel 'rel . ('a, 'rrel, 'rel) mbuffer -> unit -> unit = + fun b -> + fun p -> + match b with + | Null -> () + | Buffer (uu___, content, uu___1, uu___2) -> + FStar_HyperStack_ST.witness_p content () +let recall_p : + 'uuuuu 'uuuuu1 'uuuuu2 . ('uuuuu, 'uuuuu1, 'uuuuu2) mbuffer -> unit -> unit + = + fun b -> + fun p -> + match b with + | Null -> () + | Buffer (uu___, content, uu___1, uu___2) -> + FStar_HyperStack_ST.recall_p content () +let witnessed_functorial_st : + 'a 'rrel 'rel1 'rel2 . + ('a, 'rrel, 'rel1) mbuffer -> + ('a, 'rrel, 'rel2) mbuffer -> + FStar_UInt32.t -> FStar_UInt32.t -> unit -> unit -> unit + = fun b1 -> fun b2 -> fun i -> fun len -> fun s1 -> fun s2 -> () +type ('a, 'rrel, 'rel, 'b) freeable = unit +let free : + 'uuuuu 'uuuuu1 'uuuuu2 . ('uuuuu, 'uuuuu1, 'uuuuu2) mbuffer -> unit = + fun b -> FStar_HyperStack_ST.rfree (__proj__Buffer__item__content b) +type ('a, 'rrel, 'rel, 'len) lmbuffer = ('a, 'rrel, 'rel) mbuffer +type ('a, 'rrel, 'rel, 'b, 'h0, 'h1, 's) alloc_post_mem_common = unit +type ('a, 'rrel, 'rel, 'len, 'r) lmbuffer_or_null = ('a, 'rrel, 'rel) mbuffer +type ('a, 'rrel, 'rel, 'b, 'h0, 'h1, 's) alloc_partial_post_mem_common = unit +type ('r, 'len) malloc_pre = unit +let alloc_heap_common : + 'a 'rrel . + unit -> + FStar_UInt32.t -> + 'a FStar_Seq_Base.seq -> Prims.bool -> ('a, 'rrel, 'rrel) mbuffer + = + fun r -> + fun len -> + fun s -> + fun mm -> + let content = + if mm + then FStar_HyperStack_ST.ralloc_mm () s + else FStar_HyperStack_ST.ralloc () s in + let b = Buffer (len, content, Stdint.Uint32.zero, ()) in b +let mgcmalloc : + 'uuuuu 'uuuuu1 . + unit -> 'uuuuu -> FStar_UInt32.t -> ('uuuuu, 'uuuuu1, 'uuuuu1) mbuffer + = + fun r -> + fun init -> + fun len -> + alloc_heap_common () len + (FStar_Seq_Base.create (FStar_UInt32.v len) init) false +let read_sub_buffer : + 'a 'rrel 'rel . + ('a, 'rrel, 'rel) mbuffer -> + FStar_UInt32.t -> FStar_UInt32.t -> 'a FStar_Seq_Base.seq + = + fun b -> + fun idx -> + fun len -> + let s = FStar_HyperStack_ST.op_Bang (__proj__Buffer__item__content b) in + let s1 = + FStar_Seq_Base.slice s + (FStar_UInt32.v (__proj__Buffer__item__idx b)) + (FStar_UInt32.v (__proj__Buffer__item__max_length b)) in + FStar_Seq_Base.slice s1 (FStar_UInt32.v idx) + ((FStar_UInt32.v idx) + (FStar_UInt32.v len)) +let mgcmalloc_and_blit : + 'uuuuu 'uuuuu1 . + unit -> + unit -> + unit -> + ('uuuuu, Obj.t, Obj.t) mbuffer -> + FStar_UInt32.t -> + FStar_UInt32.t -> ('uuuuu, 'uuuuu1, 'uuuuu1) mbuffer + = + fun r -> + fun uu___ -> + fun uu___1 -> + fun src -> + fun id_src -> + fun len -> + let uu___2 = read_sub_buffer src id_src len in + alloc_heap_common () len uu___2 false +let mgcmalloc_partial : + 'a 'rrel . unit -> 'a -> FStar_UInt32.t -> ('a, 'rrel, 'rrel) mbuffer = + fun r -> fun init -> fun len -> mgcmalloc () init len +let mmalloc : + 'uuuuu 'uuuuu1 . + unit -> 'uuuuu -> FStar_UInt32.t -> ('uuuuu, 'uuuuu1, 'uuuuu1) mbuffer + = + fun r -> + fun init -> + fun len -> + alloc_heap_common () len + (FStar_Seq_Base.create (FStar_UInt32.v len) init) true +let mmalloc_and_blit : + 'uuuuu 'uuuuu1 . + unit -> + unit -> + unit -> + ('uuuuu, Obj.t, Obj.t) mbuffer -> + FStar_UInt32.t -> + FStar_UInt32.t -> ('uuuuu, 'uuuuu1, 'uuuuu1) mbuffer + = + fun r -> + fun uu___ -> + fun uu___1 -> + fun src -> + fun id_src -> + fun len -> + let uu___2 = read_sub_buffer src id_src len in + alloc_heap_common () len uu___2 true +let mmalloc_partial : + 'a 'rrel . unit -> 'a -> FStar_UInt32.t -> ('a, 'rrel, 'rrel) mbuffer = + fun r -> fun init -> fun len -> mmalloc () init len +let (alloca_pre : FStar_UInt32.t -> Prims.bool) = + fun len -> (FStar_UInt32.v len) > Prims.int_zero +let malloca : 'a 'rrel . 'a -> FStar_UInt32.t -> ('a, 'rrel, 'rrel) mbuffer = + fun init -> + fun len -> + let content = + FStar_HyperStack_ST.salloc + (FStar_Seq_Base.create (FStar_UInt32.v len) init) in + Buffer (len, content, Stdint.Uint32.zero, ()) +let malloca_and_blit : + 'a 'rrel 'uuuuu 'uuuuu1 . + ('a, 'uuuuu, 'uuuuu1) mbuffer -> + FStar_UInt32.t -> FStar_UInt32.t -> ('a, 'rrel, 'rrel) mbuffer + = + fun src -> + fun id_src -> + fun len -> + let content = + let uu___ = read_sub_buffer src id_src len in + FStar_HyperStack_ST.salloc uu___ in + Buffer (len, content, Stdint.Uint32.zero, ()) +type ('a, 'init) alloca_of_list_pre = unit +let malloca_of_list : 'a 'rrel . 'a Prims.list -> ('a, 'rrel, 'rrel) mbuffer + = + fun init -> + let len = FStar_UInt32.uint_to_t (FStar_List_Tot_Base.length init) in + let s = FStar_Seq_Properties.seq_of_list init in + let content = FStar_HyperStack_ST.salloc s in + Buffer (len, content, Stdint.Uint32.zero, ()) +type ('a, 'r, 'init) gcmalloc_of_list_pre = unit +let mgcmalloc_of_list : + 'a 'rrel . unit -> 'a Prims.list -> ('a, 'rrel, 'rrel) mbuffer = + fun r -> + fun init -> + let len = FStar_UInt32.uint_to_t (FStar_List_Tot_Base.length init) in + let s = FStar_Seq_Properties.seq_of_list init in + let content = FStar_HyperStack_ST.ralloc () s in + Buffer (len, content, Stdint.Uint32.zero, ()) +let mgcmalloc_of_list_partial : + 'a 'rrel . unit -> 'a Prims.list -> ('a, 'rrel, 'rrel) mbuffer = + fun r -> fun init -> mgcmalloc_of_list () init +type ('h, 'd, 'len) alloc_drgn_pre = unit +let mmalloc_drgn : + 'a 'rrel . + FStar_HyperStack_ST.drgn -> + 'a -> FStar_UInt32.t -> ('a, 'rrel, 'rrel) mbuffer + = + fun d -> + fun init -> + fun len -> + let content = + FStar_HyperStack_ST.ralloc_drgn d + (FStar_Seq_Base.create (FStar_UInt32.v len) init) in + Buffer (len, content, Stdint.Uint32.zero, ()) +let mmalloc_drgn_mm : + 'a 'rrel . + FStar_HyperStack_ST.drgn -> + 'a -> FStar_UInt32.t -> ('a, 'rrel, 'rrel) mbuffer + = + fun d -> + fun init -> + fun len -> + let content = + FStar_HyperStack_ST.ralloc_drgn_mm d + (FStar_Seq_Base.create (FStar_UInt32.v len) init) in + Buffer (len, content, Stdint.Uint32.zero, ()) +let mmalloc_drgn_and_blit : + 'a 'rrel 'uuuuu 'uuuuu1 . + FStar_HyperStack_ST.drgn -> + ('a, 'uuuuu, 'uuuuu1) mbuffer -> + FStar_UInt32.t -> FStar_UInt32.t -> ('a, 'rrel, 'rrel) mbuffer + = + fun d -> + fun src -> + fun id_src -> + fun len -> + let content = + let uu___ = read_sub_buffer src id_src len in + FStar_HyperStack_ST.ralloc_drgn d uu___ in + Buffer (len, content, Stdint.Uint32.zero, ()) +let blit : + 'a 'rrel1 'rrel2 'rel1 'rel2 . + ('a, 'rrel1, 'rel1) mbuffer -> + FStar_UInt32.t -> + ('a, 'rrel2, 'rel2) mbuffer -> + FStar_UInt32.t -> FStar_UInt32.t -> unit + = + fun src -> + fun idx_src -> + fun dst -> + fun idx_dst -> + fun len -> + match (src, dst) with + | (Buffer (uu___, uu___1, uu___2, uu___3), Buffer + (uu___4, uu___5, uu___6, uu___7)) -> + if len = Stdint.Uint32.zero + then () + else + (let h = FStar_HyperStack_ST.get () in + let uu___9 = src in + match uu___9 with + | Buffer (max_length1, content1, idx1, length1) -> + let uu___10 = dst in + (match uu___10 with + | Buffer (max_length2, content2, idx2, length2) -> + let s_full1 = + FStar_HyperStack_ST.op_Bang content1 in + let s_full2 = + FStar_HyperStack_ST.op_Bang content2 in + let s1 = + FStar_Seq_Base.slice s_full1 + (FStar_UInt32.v idx1) + (FStar_UInt32.v max_length1) in + let s2 = + FStar_Seq_Base.slice s_full2 + (FStar_UInt32.v idx2) + (FStar_UInt32.v max_length2) in + let s_sub_src = + FStar_Seq_Base.slice s1 + (FStar_UInt32.v idx_src) + ((FStar_UInt32.v idx_src) + + (FStar_UInt32.v len)) in + let s2' = + FStar_Seq_Properties.replace_subseq s2 + (FStar_UInt32.v idx_dst) + ((FStar_UInt32.v idx_dst) + + (FStar_UInt32.v len)) s_sub_src in + let s_full2' = + FStar_Seq_Properties.replace_subseq s_full2 + (FStar_UInt32.v idx2) + (FStar_UInt32.v max_length2) s2' in + (FStar_HyperStack_ST.op_Colon_Equals content2 + s_full2'; + (let h1 = FStar_HyperStack_ST.get () in ())))) + | (uu___, uu___1) -> () +let fill' : + 't 'rrel 'rel . ('t, 'rrel, 'rel) mbuffer -> 't -> FStar_UInt32.t -> unit = + fun b -> + fun z -> + fun len -> + if len = Stdint.Uint32.zero + then () + else + (let h = FStar_HyperStack_ST.get () in + let uu___1 = b in + match uu___1 with + | Buffer (max_length, content, idx, length) -> + let s_full = FStar_HyperStack_ST.op_Bang content in + let s = + FStar_Seq_Base.slice s_full (FStar_UInt32.v idx) + (FStar_UInt32.v max_length) in + let s_src = FStar_Seq_Base.create (FStar_UInt32.v len) z in + let s' = + FStar_Seq_Properties.replace_subseq s Prims.int_zero + (FStar_UInt32.v len) s_src in + let s_full' = + FStar_Seq_Properties.replace_subseq s_full + (FStar_UInt32.v idx) + ((FStar_UInt32.v idx) + (FStar_UInt32.v len)) s_src in + (FStar_HyperStack_ST.op_Colon_Equals content s_full'; + (let h' = FStar_HyperStack_ST.get () in ()))) +let fill : + 't 'rrel 'rel . ('t, 'rrel, 'rel) mbuffer -> 't -> FStar_UInt32.t -> unit = + fun b -> fun z -> fun len -> fill' b z len +type ('region, 'addr) abuffer' = (unit, unit) ubuffer' +type ('region, 'addr) abuffer = unit +let coerce : 't2 't1 . 't1 -> 't2 = + fun uu___ -> (fun x1 -> Obj.magic x1) uu___ +let (cloc_cls : unit FStar_ModifiesGen.cls) = coerce cls +let (cloc_of_loc : loc -> (unit, unit) FStar_ModifiesGen.loc) = + fun l -> coerce l +let (loc_of_cloc : (unit, unit) FStar_ModifiesGen.loc -> loc) = + fun l -> coerce l \ No newline at end of file diff --git a/ocaml/fstar-lib/generated/LowStar_PrefixFreezableBuffer.ml b/ocaml/fstar-lib/generated/LowStar_PrefixFreezableBuffer.ml new file mode 100644 index 00000000000..c0a81fdda4e --- /dev/null +++ b/ocaml/fstar-lib/generated/LowStar_PrefixFreezableBuffer.ml @@ -0,0 +1,75 @@ +open Prims +type u8 = FStar_UInt8.t +type u32 = FStar_UInt32.t +let (le_to_n : u8 FStar_Seq_Base.seq -> Prims.nat) = + fun s -> FStar_Endianness.le_to_n s +let (frozen_until : u8 FStar_Seq_Base.seq -> Prims.nat) = + fun s -> le_to_n (FStar_Seq_Base.slice s Prims.int_zero (Prims.of_int (4))) +type ('s1, 's2) pre = unit +type ('uuuuu, 'uuuuu1) prefix_freezable_preorder = unit +type ('n, 's) frozen_until_at_least = unit +type ('i, 'j, 'snap, 's) slice_is = unit +type buffer = (u8, unit, unit) LowStar_Monotonic_Buffer.mbuffer +type 'len lbuffer = buffer +type ('r, 'len) malloc_pre = unit +type ('h0, 'b, 'h1) alloc_post_mem_common = unit +let (update_frozen_until_alloc : + (u8, (unit, unit) prefix_freezable_preorder, + (unit, unit) prefix_freezable_preorder) LowStar_Monotonic_Buffer.mbuffer + -> unit) + = + fun b -> + LowStar_Endianness.store32_le_i b Stdint.Uint32.zero + (Stdint.Uint32.of_int (4)); + LowStar_Monotonic_Buffer.witness_p b () +let (gcmalloc : unit -> u32 -> buffer) = + fun r -> + fun len -> + let h0 = FStar_HyperStack_ST.get () in + let b = + LowStar_Monotonic_Buffer.mgcmalloc () 0 + (FStar_UInt32.add len (Stdint.Uint32.of_int (4))) in + let h = FStar_HyperStack_ST.get () in update_frozen_until_alloc b; b +let (malloc : unit -> u32 -> buffer) = + fun r -> + fun len -> + let h0 = FStar_HyperStack_ST.get () in + let b = + LowStar_Monotonic_Buffer.mmalloc () 0 + (FStar_UInt32.add len (Stdint.Uint32.of_int (4))) in + let h = FStar_HyperStack_ST.get () in update_frozen_until_alloc b; b +type 'len alloca_pre = unit +let (alloca : u32 -> buffer) = + fun len -> + let h0 = FStar_HyperStack_ST.get () in + let b = + LowStar_Monotonic_Buffer.malloca 0 + (FStar_UInt32.add len (Stdint.Uint32.of_int (4))) in + let h = FStar_HyperStack_ST.get () in update_frozen_until_alloc b; b +let (upd : buffer -> u32 -> u8 -> unit) = + fun b -> + fun i -> + fun v -> + LowStar_Monotonic_Buffer.recall_p b (); + (let h = FStar_HyperStack_ST.get () in + LowStar_Monotonic_Buffer.upd' b i v) +let (freeze : buffer -> u32 -> unit) = + fun b -> + fun i -> + LowStar_Monotonic_Buffer.recall_p b (); + LowStar_Endianness.store32_le_i b Stdint.Uint32.zero i; + LowStar_Monotonic_Buffer.witness_p b () +let (frozen_until_st : buffer -> u32) = + fun b -> LowStar_Endianness.load32_le_i b Stdint.Uint32.zero +let (witness_slice : buffer -> u32 -> u32 -> unit -> unit) = + fun b -> + fun i -> fun j -> fun snap -> LowStar_Monotonic_Buffer.witness_p b () +let (recall_slice : buffer -> u32 -> u32 -> unit -> unit) = + fun b -> + fun i -> fun j -> fun snap -> LowStar_Monotonic_Buffer.recall_p b () +let (witness_frozen_until : buffer -> Prims.nat -> unit) = + fun b -> fun n -> LowStar_Monotonic_Buffer.witness_p b () +let (recall_frozen_until : buffer -> Prims.nat -> unit) = + fun b -> fun n -> LowStar_Monotonic_Buffer.recall_p b () +let (recall_frozen_until_default : buffer -> unit) = + fun b -> LowStar_Monotonic_Buffer.recall_p b () \ No newline at end of file diff --git a/ocaml/fstar-lib/generated/LowStar_RVector.ml b/ocaml/fstar-lib/generated/LowStar_RVector.ml new file mode 100644 index 00000000000..38e8617d63d --- /dev/null +++ b/ocaml/fstar-lib/generated/LowStar_RVector.ml @@ -0,0 +1,224 @@ +open Prims +type ('rst, 'a, 'rg) copyable = + | Cpy of ('rst -> 'a -> 'a -> unit) +let uu___is_Cpy : + 'rst 'a . + ('rst, 'a) LowStar_Regional.regional -> + ('rst, 'a, unit) copyable -> Prims.bool + = fun rg -> fun projectee -> true +let __proj__Cpy__item__copy : + 'rst 'a . + ('rst, 'a) LowStar_Regional.regional -> + ('rst, 'a, unit) copyable -> 'rst -> 'a -> 'a -> unit + = fun rg -> fun projectee -> match projectee with | Cpy copy -> copy +type ('a, 'rst, 'rg) rvector = 'a LowStar_Vector.vector +type ('a, 'rst, 'rg, 'h, 'rs, 'i, 'j) rs_elems_inv = unit +type ('a, 'rst, 'rg, 'h, 'rv, 'i, 'j) rv_elems_inv = unit +type ('a, 'rst, 'rg, 'h, 'rv) elems_inv = unit +type ('a, 'rst, 'rg, 'rs, 'prid, 'i, 'j) rs_elems_reg = unit +type ('a, 'rst, 'rg, 'h, 'rv, 'i, 'j) rv_elems_reg = unit +type ('a, 'rst, 'rg, 'h, 'rv) elems_reg = unit +type ('a, 'rst, 'rg, 'h, 'rv) rv_itself_inv = unit +type ('a, 'rst, 'rg, 'h, 'rv) rv_inv = unit +let alloc_empty : + 'a 'rst . ('rst, 'a) LowStar_Regional.regional -> ('a, 'rst, unit) rvector + = + fun rg -> + LowStar_Vector.Vec + (Stdint.Uint32.zero, Stdint.Uint32.zero, + (LowStar_Monotonic_Buffer.mnull ())) +let rec alloc_ : + 'a 'rst . + ('rst, 'a) LowStar_Regional.regional -> + ('a, 'rst, unit) rvector -> LowStar_Vector.uint32_t -> unit + = + fun rg -> + fun rv -> + fun cidx -> + let hh0 = FStar_HyperStack_ST.get () in + if cidx = Stdint.Uint32.zero + then () + else + (FStar_HyperStack_ST.new_region (); + (let v = + LowStar_Regional.__proj__Rgl__item__r_alloc rg + (LowStar_Regional.__proj__Rgl__item__state rg) () in + let hh1 = FStar_HyperStack_ST.get () in + LowStar_Vector.assign rv + (FStar_UInt32.sub cidx Stdint.Uint32.one) v; + (let hh2 = FStar_HyperStack_ST.get () in + alloc_ rg rv (FStar_UInt32.sub cidx Stdint.Uint32.one); + (let hh3 = FStar_HyperStack_ST.get () in ())))) +let alloc_rid : + 'a 'rst . + ('rst, 'a) LowStar_Regional.regional -> + LowStar_Vector.uint32_t -> unit -> ('a, 'rst, unit) rvector + = + fun rg -> + fun len -> + fun rid -> + let vec = + LowStar_Vector.alloc_rid len + (LowStar_Regional.__proj__Rgl__item__dummy rg) () in + alloc_ rg vec len; vec +let alloc_reserve : + 'a 'rst . + ('rst, 'a) LowStar_Regional.regional -> + LowStar_Vector.uint32_t -> unit -> ('a, 'rst, unit) rvector + = + fun rg -> + fun len -> + fun rid -> + LowStar_Vector.alloc_reserve len + (LowStar_Regional.__proj__Rgl__item__dummy rg) () +let alloc : + 'a 'rst . + ('rst, 'a) LowStar_Regional.regional -> + LowStar_Vector.uint32_t -> ('a, 'rst, unit) rvector + = + fun rg -> fun len -> FStar_HyperStack_ST.new_region (); alloc_rid rg len () +let insert : + 'a 'rst . + ('rst, 'a) LowStar_Regional.regional -> + ('a, 'rst, unit) rvector -> 'a -> ('a, 'rst, unit) rvector + = + fun rg -> + fun rv -> + fun v -> + let hh0 = FStar_HyperStack_ST.get () in + let irv = LowStar_Vector.insert rv v in + let hh1 = FStar_HyperStack_ST.get () in irv +let insert_copy : + 'a 'rst . + ('rst, 'a) LowStar_Regional.regional -> + ('rst, 'a, unit) copyable -> + ('a, 'rst, unit) rvector -> 'a -> ('a, 'rst, unit) rvector + = + fun rg -> + fun cp -> + fun rv -> + fun v -> + let hh0 = FStar_HyperStack_ST.get () in + FStar_HyperStack_ST.new_region (); + (let nv = + LowStar_Regional.__proj__Rgl__item__r_alloc rg + (LowStar_Regional.__proj__Rgl__item__state rg) () in + let hh1 = FStar_HyperStack_ST.get () in + ((match cp with | Cpy copy -> copy)) + (LowStar_Regional.__proj__Rgl__item__state rg) v nv; + (let hh2 = FStar_HyperStack_ST.get () in insert rg rv nv)) +let assign : + 'a 'rst . + ('rst, 'a) LowStar_Regional.regional -> + ('a, 'rst, unit) rvector -> LowStar_Vector.uint32_t -> 'a -> unit + = + fun rg -> + fun rv -> + fun i -> + fun v -> + let hh0 = FStar_HyperStack_ST.get () in + LowStar_Vector.assign rv i v; + (let hh1 = FStar_HyperStack_ST.get () in ()) +let assign_copy : + 'a 'rst . + ('rst, 'a) LowStar_Regional.regional -> + ('rst, 'a, unit) copyable -> + ('a, 'rst, unit) rvector -> LowStar_Vector.uint32_t -> 'a -> unit + = + fun rg -> + fun cp -> + fun rv -> + fun i -> + fun v -> + let hh0 = FStar_HyperStack_ST.get () in + (let uu___1 = LowStar_Vector.index rv i in + (match cp with | Cpy copy -> copy) + (LowStar_Regional.__proj__Rgl__item__state rg) v uu___1); + (let hh1 = FStar_HyperStack_ST.get () in ()) +let rec free_elems : + 'a 'rst . + ('rst, 'a) LowStar_Regional.regional -> + ('a, 'rst, unit) rvector -> LowStar_Vector.uint32_t -> unit + = + fun rg -> + fun rv -> + fun idx -> + let hh0 = FStar_HyperStack_ST.get () in + (let uu___1 = LowStar_Vector.index rv idx in + LowStar_Regional.__proj__Rgl__item__r_free rg + (LowStar_Regional.__proj__Rgl__item__state rg) uu___1); + (let hh1 = FStar_HyperStack_ST.get () in + if idx <> Stdint.Uint32.zero + then free_elems rg rv (FStar_UInt32.sub idx Stdint.Uint32.one) + else ()) +let flush : + 'a 'rst . + ('rst, 'a) LowStar_Regional.regional -> + ('a, 'rst, unit) rvector -> + LowStar_Vector.uint32_t -> ('a, 'rst, unit) rvector + = + fun rg -> + fun rv -> + fun i -> + let hh0 = FStar_HyperStack_ST.get () in + if i = Stdint.Uint32.zero + then () + else free_elems rg rv (FStar_UInt32.sub i Stdint.Uint32.one); + (let hh1 = FStar_HyperStack_ST.get () in + let frv = + LowStar_Vector.flush rv + (LowStar_Regional.__proj__Rgl__item__dummy rg) i in + let hh2 = FStar_HyperStack_ST.get () in frv) +let rec free_elems_from : + 'a 'rst . + ('rst, 'a) LowStar_Regional.regional -> + ('a, 'rst, unit) rvector -> LowStar_Vector.uint32_t -> unit + = + fun rg -> + fun rv -> + fun idx -> + let hh0 = FStar_HyperStack_ST.get () in + (let uu___1 = LowStar_Vector.index rv idx in + LowStar_Regional.__proj__Rgl__item__r_free rg + (LowStar_Regional.__proj__Rgl__item__state rg) uu___1); + (let hh1 = FStar_HyperStack_ST.get () in + if + FStar_UInt32.lt (FStar_UInt32.add idx Stdint.Uint32.one) + (match rv with | LowStar_Vector.Vec (sz, cap, vs) -> sz) + then free_elems_from rg rv (FStar_UInt32.add idx Stdint.Uint32.one) + else ()) +let shrink : + 'a 'rst . + ('rst, 'a) LowStar_Regional.regional -> + ('a, 'rst, unit) rvector -> + LowStar_Vector.uint32_t -> ('a, 'rst, unit) rvector + = + fun rg -> + fun rv -> + fun new_size -> + let size = match rv with | LowStar_Vector.Vec (sz, cap, vs) -> sz in + let hh0 = FStar_HyperStack_ST.get () in + if FStar_UInt32.gte new_size size + then rv + else + (free_elems_from rg rv new_size; + (let hh1 = FStar_HyperStack_ST.get () in + let frv = LowStar_Vector.shrink rv new_size in + let hh2 = FStar_HyperStack_ST.get () in frv)) +let free : + 'a 'rst . + ('rst, 'a) LowStar_Regional.regional -> ('a, 'rst, unit) rvector -> unit + = + fun rg -> + fun rv -> + let hh0 = FStar_HyperStack_ST.get () in + if + (match rv with | LowStar_Vector.Vec (sz, cap, vs) -> sz) = + Stdint.Uint32.zero + then () + else + free_elems rg rv + (FStar_UInt32.sub + (match rv with | LowStar_Vector.Vec (sz, cap, vs) -> sz) + Stdint.Uint32.one); + (let hh1 = FStar_HyperStack_ST.get () in LowStar_Vector.free rv) \ No newline at end of file diff --git a/ocaml/fstar-lib/generated/LowStar_Regional.ml b/ocaml/fstar-lib/generated/LowStar_Regional.ml new file mode 100644 index 00000000000..c4e2d313087 --- /dev/null +++ b/ocaml/fstar-lib/generated/LowStar_Regional.ml @@ -0,0 +1,45 @@ +open Prims +type ('st, 'a) regional = + | Rgl of 'st * unit * unit * 'a * unit * unit * unit * unit * unit * unit * + unit * ('st -> unit -> 'a) * ('st -> 'a -> unit) +let uu___is_Rgl : 'st 'a . ('st, 'a) regional -> Prims.bool = + fun projectee -> true +let __proj__Rgl__item__state : 'st 'a . ('st, 'a) regional -> 'st = + fun projectee -> + match projectee with + | Rgl + (state, region_of, loc_of, dummy, r_inv, r_inv_reg, repr, r_repr, + r_sep, irepr, r_alloc_p, r_alloc, r_free) + -> state +let __proj__Rgl__item__dummy : 'st 'a . ('st, 'a) regional -> 'a = + fun projectee -> + match projectee with + | Rgl + (state, region_of, loc_of, dummy, r_inv, r_inv_reg, repr, r_repr, + r_sep, irepr, r_alloc_p, r_alloc, r_free) + -> dummy +let __proj__Rgl__item__r_alloc : + 'st 'a . ('st, 'a) regional -> 'st -> unit -> 'a = + fun projectee -> + match projectee with + | Rgl + (state, region_of, loc_of, dummy, r_inv, r_inv_reg, repr, r_repr, + r_sep, irepr, r_alloc_p, r_alloc, r_free) + -> r_alloc +let __proj__Rgl__item__r_free : + 'st 'a . ('st, 'a) regional -> 'st -> 'a -> unit = + fun projectee -> + match projectee with + | Rgl + (state, region_of, loc_of, dummy, r_inv, r_inv_reg, repr, r_repr, + r_sep, irepr, r_alloc_p, r_alloc, r_free) + -> r_free +type ('a, 'rst, 'rg, 'uuuuu, 'uuuuu1) rg_inv = Obj.t +let rg_dummy : 'a 'rst . ('rst, 'a) regional -> 'a = + fun rg -> __proj__Rgl__item__dummy rg +let rg_alloc : 'a 'rst . ('rst, 'a) regional -> unit -> 'a = + fun rg -> + fun r -> __proj__Rgl__item__r_alloc rg (__proj__Rgl__item__state rg) () +let rg_free : 'a 'rst . ('rst, 'a) regional -> 'a -> unit = + fun rg -> + fun v -> __proj__Rgl__item__r_free rg (__proj__Rgl__item__state rg) v \ No newline at end of file diff --git a/ocaml/fstar-lib/generated/LowStar_Regional_Instances.ml b/ocaml/fstar-lib/generated/LowStar_Regional_Instances.ml new file mode 100644 index 00000000000..88d0cd3f401 --- /dev/null +++ b/ocaml/fstar-lib/generated/LowStar_Regional_Instances.ml @@ -0,0 +1,84 @@ +open Prims +let buffer_dummy : 'uuuuu . unit -> 'uuuuu LowStar_Buffer.buffer = + fun uu___ -> LowStar_Monotonic_Buffer.mnull () +type nonzero = FStar_UInt32.t +type ('a, 'len, 'h, 'v) buffer_r_inv = unit +type ('a, 'len) buffer_repr = 'a FStar_Seq_Base.seq +type ('a, 'v) buffer_r_alloc_p = unit +let buffer_r_alloc : + 'a . unit -> ('a * nonzero) -> unit -> 'a LowStar_Buffer.buffer = + fun uu___ -> + fun uu___1 -> + fun r -> + match uu___1 with + | (ia, len) -> LowStar_Monotonic_Buffer.mmalloc () ia len +let buffer_r_free : + 'a . unit -> ('a * nonzero) -> 'a LowStar_Buffer.buffer -> unit = + fun uu___ -> fun len -> fun v -> LowStar_Monotonic_Buffer.free v +let buffer_copy : + 'a . + unit -> + ('a * nonzero) -> + 'a LowStar_Buffer.buffer -> 'a LowStar_Buffer.buffer -> unit + = + fun uu___ -> + fun uu___1 -> + fun src -> + fun dst -> + match uu___1 with + | (ia, len) -> + LowStar_Monotonic_Buffer.blit src Stdint.Uint32.zero dst + Stdint.Uint32.zero len +let buffer_regional : + 'a . + 'a -> + nonzero -> + (('a * nonzero), 'a LowStar_Buffer.buffer) LowStar_Regional.regional + = + fun ia -> + fun len -> + LowStar_Regional.Rgl + ((ia, len), (), (), (buffer_dummy ()), (), (), (), (), (), (), (), + (buffer_r_alloc ()), (buffer_r_free ())) +let buffer_copyable : + 'a . + 'a -> + nonzero -> + (('a * nonzero), 'a LowStar_Buffer.buffer, unit) + LowStar_RVector.copyable + = fun ia -> fun len -> LowStar_RVector.Cpy (buffer_copy ()) +let vector_dummy : + 'a 'uuuuu . unit -> ('a, 'uuuuu, unit) LowStar_RVector.rvector = + fun uu___ -> + LowStar_Vector.Vec + (Stdint.Uint32.zero, Stdint.Uint32.zero, + (LowStar_Monotonic_Buffer.mnull ())) +type ('a, 'rst, 'rg, 'h, 'v) vector_r_inv = unit +type ('a, 'rst, 'rg) vector_repr = unit FStar_Seq_Base.seq +type ('a, 'rst, 'rg, 'v) vector_r_alloc_p = unit +let vector_r_alloc : + 'a 'rst . + ('rst, 'a) LowStar_Regional.regional -> + unit -> ('a, 'rst, unit) LowStar_RVector.rvector + = + fun rg -> + fun r -> + FStar_HyperStack_ST.new_region (); + LowStar_Vector.alloc_reserve Stdint.Uint32.one + (LowStar_Regional.__proj__Rgl__item__dummy rg) () +let vector_r_free : + 'uuuuu 'uuuuu1 . + unit -> + ('uuuuu1, 'uuuuu) LowStar_Regional.regional -> + ('uuuuu, 'uuuuu1, unit) LowStar_RVector.rvector -> unit + = fun uu___ -> fun uu___1 -> fun v -> LowStar_Vector.free v +let vector_regional : + 'a 'rst . + ('rst, 'a) LowStar_Regional.regional -> + (('rst, 'a) LowStar_Regional.regional, + ('a, 'rst, unit) LowStar_RVector.rvector) LowStar_Regional.regional + = + fun rg -> + LowStar_Regional.Rgl + (rg, (), (), (vector_dummy ()), (), (), (), (), (), (), (), + vector_r_alloc, (vector_r_free ())) \ No newline at end of file diff --git a/ocaml/fstar-lib/generated/LowStar_UninitializedBuffer.ml b/ocaml/fstar-lib/generated/LowStar_UninitializedBuffer.ml new file mode 100644 index 00000000000..24e8950e216 --- /dev/null +++ b/ocaml/fstar-lib/generated/LowStar_UninitializedBuffer.ml @@ -0,0 +1,106 @@ +open Prims +type ('a, 's1, 's2) initialization_preorder = unit +type 'a ubuffer = + ('a FStar_Pervasives_Native.option, unit, unit) + LowStar_Monotonic_Buffer.mbuffer +let unull : 'a . unit -> 'a ubuffer = + fun uu___ -> LowStar_Monotonic_Buffer.mnull () +type 'a pointer = 'a ubuffer +type 'a pointer_or_null = 'a ubuffer +let usub : + 'a . + unit -> + ('a FStar_Pervasives_Native.option, + ('a, unit, unit) initialization_preorder, + ('a, unit, unit) initialization_preorder) + LowStar_Monotonic_Buffer.mbuffer -> + FStar_UInt32.t -> + unit -> + ('a FStar_Pervasives_Native.option, + ('a, unit, unit) initialization_preorder, + ('a, unit, unit) initialization_preorder) + LowStar_Monotonic_Buffer.mbuffer + = fun uu___ -> LowStar_Monotonic_Buffer.msub +let uoffset : + 'a . + unit -> + ('a FStar_Pervasives_Native.option, + ('a, unit, unit) initialization_preorder, + ('a, unit, unit) initialization_preorder) + LowStar_Monotonic_Buffer.mbuffer -> + FStar_UInt32.t -> + ('a FStar_Pervasives_Native.option, + ('a, unit, unit) initialization_preorder, + ('a, unit, unit) initialization_preorder) + LowStar_Monotonic_Buffer.mbuffer + = fun uu___ -> LowStar_Monotonic_Buffer.moffset +type ('a, 'i, 's) ipred = unit +type ('a, 'b, 'i) initialized_at = + ('a FStar_Pervasives_Native.option, unit, unit, unit, unit) + LowStar_Monotonic_Buffer.witnessed +let uindex : 'a . 'a ubuffer -> FStar_UInt32.t -> 'a = + fun b -> + fun i -> + let y_opt = LowStar_Monotonic_Buffer.index b i in + LowStar_Monotonic_Buffer.recall_p b (); + FStar_Pervasives_Native.__proj__Some__item__v y_opt +let uupd : 'a . 'a ubuffer -> FStar_UInt32.t -> 'a -> unit = + fun b -> + fun i -> + fun v -> + (let h = FStar_HyperStack_ST.get () in + LowStar_Monotonic_Buffer.upd' b i (FStar_Pervasives_Native.Some v)); + LowStar_Monotonic_Buffer.witness_p b () +type ('a, 'len) lubuffer = 'a ubuffer +type ('a, 'len, 'r) lubuffer_or_null = 'a ubuffer +let ugcmalloc : 'a . unit -> FStar_UInt32.t -> 'a ubuffer = + fun r -> + fun len -> + LowStar_Monotonic_Buffer.mgcmalloc () FStar_Pervasives_Native.None len +let ugcmalloc_partial : 'a . unit -> FStar_UInt32.t -> 'a ubuffer = + fun r -> + fun len -> + LowStar_Monotonic_Buffer.mgcmalloc () FStar_Pervasives_Native.None len +let umalloc : 'a . unit -> FStar_UInt32.t -> 'a ubuffer = + fun r -> + fun len -> + LowStar_Monotonic_Buffer.mmalloc () FStar_Pervasives_Native.None len +let umalloc_partial : 'a . unit -> FStar_UInt32.t -> 'a ubuffer = + fun r -> + fun len -> + LowStar_Monotonic_Buffer.mmalloc () FStar_Pervasives_Native.None len +let ualloca : 'a . FStar_UInt32.t -> 'a ubuffer = + fun len -> + LowStar_Monotonic_Buffer.malloca FStar_Pervasives_Native.None len +type ('a, 'rrel, 'rel, 'src, 'idxusrc, 'dst, 'idxudst, 'j) valid_j_for_blit = + unit +type ('a, 'rrel, 'rel, 'src, 'idxusrc, 'dst, 'idxudst, 'j, 'h0, + 'h1) ublit_post_j = unit +let ublit : + 'a 'rrel 'rel . + ('a, 'rrel, 'rel) LowStar_Monotonic_Buffer.mbuffer -> + FStar_UInt32.t -> + 'a ubuffer -> FStar_UInt32.t -> FStar_UInt32.t -> unit + = + fun src -> + fun idx_src -> + fun dst -> + fun idx_dst -> + fun len -> + let rec aux j = + if j = len + then () + else + if FStar_UInt32.lt j len + then + ((let uu___2 = + LowStar_Monotonic_Buffer.index src + (FStar_UInt32.add idx_src j) in + uupd dst (FStar_UInt32.add idx_dst j) uu___2); + aux (FStar_UInt32.add j Stdint.Uint32.one)) + else () in + aux Stdint.Uint32.zero +let witness_initialized : 'a . 'a ubuffer -> Prims.nat -> unit = + fun b -> fun i -> LowStar_Monotonic_Buffer.witness_p b () +let recall_initialized : 'a . 'a ubuffer -> Prims.nat -> unit = + fun b -> fun i -> LowStar_Monotonic_Buffer.recall_p b () \ No newline at end of file diff --git a/ocaml/fstar-lib/generated/LowStar_Vector.ml b/ocaml/fstar-lib/generated/LowStar_Vector.ml new file mode 100644 index 00000000000..022f29b49e0 --- /dev/null +++ b/ocaml/fstar-lib/generated/LowStar_Vector.ml @@ -0,0 +1,165 @@ +open Prims +type uint32_t = FStar_UInt32.t +let (max_uint32 : uint32_t) = (Stdint.Uint32.of_string "4294967295") +type 'a vector_str = + | Vec of uint32_t * uint32_t * 'a LowStar_Buffer.buffer +let uu___is_Vec : 'a . 'a vector_str -> Prims.bool = fun projectee -> true +let __proj__Vec__item__sz : 'a . 'a vector_str -> uint32_t = + fun projectee -> match projectee with | Vec (sz, cap, vs) -> sz +let __proj__Vec__item__cap : 'a . 'a vector_str -> uint32_t = + fun projectee -> match projectee with | Vec (sz, cap, vs) -> cap +let __proj__Vec__item__vs : 'a . 'a vector_str -> 'a LowStar_Buffer.buffer = + fun projectee -> match projectee with | Vec (sz, cap, vs) -> vs +type 'a vector = 'a vector_str +let size_of : 'a . 'a vector -> uint32_t = + fun vec -> match vec with | Vec (sz, cap, vs) -> sz +let capacity_of : 'a . 'a vector -> uint32_t = + fun vec -> match vec with | Vec (sz, cap, vs) -> cap +let is_empty : 'a . 'a vector -> Prims.bool = + fun vec -> (match vec with | Vec (sz, cap, vs) -> sz) = Stdint.Uint32.zero +type ('a, 'h, 'vec) live = + ('a, unit, unit, unit, unit) LowStar_Monotonic_Buffer.live +type ('a, 'vec) freeable = + ('a, unit, unit, unit) LowStar_Monotonic_Buffer.freeable + +type ('h0, 'h1) hmap_dom_eq = (unit, unit, unit) FStar_Set.equal +let alloc_empty : 'a . unit -> 'a vector = + fun uu___ -> + Vec + (Stdint.Uint32.zero, Stdint.Uint32.zero, + (LowStar_Monotonic_Buffer.mnull ())) +let alloc_rid : 'a . uint32_t -> 'a -> unit -> 'a vector = + fun len -> + fun v -> + fun rid -> + let uu___ = LowStar_Monotonic_Buffer.mmalloc () v len in + Vec (len, len, uu___) +let alloc : 'a . uint32_t -> 'a -> 'a vector = + fun len -> fun v -> alloc_rid len v () +let alloc_reserve : 'a . uint32_t -> 'a -> unit -> 'a vector = + fun len -> + fun ia -> + fun rid -> + let uu___ = LowStar_Monotonic_Buffer.mmalloc () ia len in + Vec (Stdint.Uint32.zero, len, uu___) +let alloc_by_buffer : 'a . uint32_t -> 'a LowStar_Buffer.buffer -> 'a vector + = fun len -> fun buf -> Vec (len, len, buf) +let free : 'a . 'a vector -> unit = + fun vec -> + LowStar_Monotonic_Buffer.free (match vec with | Vec (sz, cap, vs) -> vs) +let index : 'a . 'a vector -> uint32_t -> 'a = + fun vec -> + fun i -> + LowStar_Monotonic_Buffer.index + (match vec with | Vec (sz, cap, vs) -> vs) i +let front : 'a . 'a vector -> 'a = + fun vec -> + LowStar_Monotonic_Buffer.index (match vec with | Vec (sz, cap, vs) -> vs) + Stdint.Uint32.zero +let back : 'a . 'a vector -> 'a = + fun vec -> + LowStar_Monotonic_Buffer.index (match vec with | Vec (sz, cap, vs) -> vs) + (FStar_UInt32.sub (match vec with | Vec (sz, cap, vs) -> sz) + Stdint.Uint32.one) +let clear : 'a . 'a vector -> 'a vector = + fun vec -> + Vec + (Stdint.Uint32.zero, (match vec with | Vec (sz, cap, vs) -> cap), + (match vec with | Vec (sz, cap, vs) -> vs)) +let assign : 'a . 'a vector -> uint32_t -> 'a -> unit = + fun vec -> + fun i -> + fun v -> + let hh0 = FStar_HyperStack_ST.get () in + (let uu___1 = + LowStar_Monotonic_Buffer.msub + (match vec with | Vec (sz, cap, vs) -> vs) i () in + let h = FStar_HyperStack_ST.get () in + LowStar_Monotonic_Buffer.upd' uu___1 Stdint.Uint32.zero v); + (let hh1 = FStar_HyperStack_ST.get () in ()) +let (resize_ratio : uint32_t) = (Stdint.Uint32.of_int (2)) +let (new_capacity : uint32_t -> uint32_t) = + fun cap -> + if FStar_UInt32.gte cap (FStar_UInt32.div max_uint32 resize_ratio) + then max_uint32 + else + if cap = Stdint.Uint32.zero + then Stdint.Uint32.one + else FStar_UInt32.mul cap resize_ratio +let insert : 'a . 'a vector -> 'a -> 'a vector = + fun vec -> + fun v -> + let sz = match vec with | Vec (sz1, cap, vs) -> sz1 in + let cap = match vec with | Vec (sz1, cap1, vs) -> cap1 in + let vs = match vec with | Vec (sz1, cap1, vs1) -> vs1 in + if sz = cap + then + let ncap = new_capacity cap in + let nvs = LowStar_Monotonic_Buffer.mmalloc () v ncap in + (LowStar_Monotonic_Buffer.blit vs Stdint.Uint32.zero nvs + Stdint.Uint32.zero sz; + (let h = FStar_HyperStack_ST.get () in + LowStar_Monotonic_Buffer.upd' nvs sz v); + LowStar_Monotonic_Buffer.free vs; + Vec ((FStar_UInt32.add sz Stdint.Uint32.one), ncap, nvs)) + else + ((let h = FStar_HyperStack_ST.get () in + LowStar_Monotonic_Buffer.upd' vs sz v); + Vec ((FStar_UInt32.add sz Stdint.Uint32.one), cap, vs)) +let flush : 'a . 'a vector -> 'a -> uint32_t -> 'a vector = + fun vec -> + fun ia -> + fun i -> + let fsz = + FStar_UInt32.sub (match vec with | Vec (sz, cap, vs) -> sz) i in + let asz = + if (match vec with | Vec (sz, cap, vs) -> sz) = i + then Stdint.Uint32.one + else fsz in + let vs = match vec with | Vec (sz, cap, vs1) -> vs1 in + let fvs = LowStar_Monotonic_Buffer.mmalloc () ia asz in + LowStar_Monotonic_Buffer.blit vs i fvs Stdint.Uint32.zero fsz; + LowStar_Monotonic_Buffer.free vs; + Vec (fsz, asz, fvs) +let shrink : 'a . 'a vector -> uint32_t -> 'a vector = + fun vec -> + fun new_size -> + Vec + (new_size, (match vec with | Vec (sz, cap, vs) -> cap), + (match vec with | Vec (sz, cap, vs) -> vs)) +let rec fold_left_buffer : + 'a 'b . + uint32_t -> 'a LowStar_Buffer.buffer -> ('b -> 'a -> 'b) -> 'b -> 'b + = + fun len -> + fun buf -> + fun f -> + fun ib -> + if len = Stdint.Uint32.zero + then ib + else + (let uu___1 = + LowStar_Monotonic_Buffer.msub buf Stdint.Uint32.one () in + let uu___2 = + let uu___3 = + LowStar_Monotonic_Buffer.index buf Stdint.Uint32.zero in + f ib uu___3 in + fold_left_buffer (FStar_UInt32.sub len Stdint.Uint32.one) uu___1 + f uu___2) +let fold_left : 'a 'b . 'a vector -> ('b -> 'a -> 'b) -> 'b -> 'b = + fun vec -> + fun f -> + fun ib -> + let uu___ = + LowStar_Monotonic_Buffer.msub + (match vec with | Vec (sz, cap, vs) -> vs) Stdint.Uint32.zero () in + fold_left_buffer (match vec with | Vec (sz, cap, vs) -> sz) uu___ f + ib +type ('a, 'seq, 'i, 'j, 'p) forall_seq = unit +type ('a, 'h, 'buf, 'i, 'j, 'p) forall_buffer = unit +type ('a, 'h, 'vec, 'i, 'j, 'p) forall_ = unit +type ('a, 'h, 'vec, 'p) forall_all = unit +type ('a, 'seq, 'i, 'j, 'p) forall2_seq = unit +type ('a, 'h, 'buf, 'i, 'j, 'p) forall2_buffer = unit +type ('a, 'h, 'vec, 'i, 'j, 'p) forall2 = unit +type ('a, 'h, 'vec, 'p) forall2_all = unit \ No newline at end of file diff --git a/ocaml/fstar-lib/generated/Steel_Effect_Common.ml b/ocaml/fstar-lib/generated/Steel_Effect_Common.ml new file mode 100644 index 00000000000..afb14f087b1 --- /dev/null +++ b/ocaml/fstar-lib/generated/Steel_Effect_Common.ml @@ -0,0 +1,14801 @@ +open Prims +type true_p = unit +type ('a, 'hp) selector' = unit +type ('a, 'hp, 'sel) sel_depends_only_on = unit +type ('a, 'hp, 'sel) sel_depends_only_on_core = unit +type ('a, 'hp) selector = unit +let (normal_steps : FStar_Pervasives.norm_step Prims.list) = + [FStar_Pervasives.delta_attr + ["Steel.Effect.Common.__steel_reduce__"; + "Steel.Effect.Common.__inner_steel_reduce__"]; + FStar_Pervasives.delta_only + ["Steel.Effect.Common.__proj__Mkvprop'__item__t"; + "Steel.Effect.Common.__proj__Mkvprop'__item__hp"; + "Steel.Effect.Common.__proj__Mkvprop'__item__sel"; + "FStar.Algebra.CommMonoid.Equiv.__proj__CM__item__mult"; + "FStar.Algebra.CommMonoid.Equiv.__proj__CM__item__unit"]; + FStar_Pervasives.delta_qualifier ["unfold"]; + FStar_Pervasives.iota; + FStar_Pervasives.zeta; + FStar_Pervasives.primops; + FStar_Pervasives.simplify] +let normal : 'a . 'a -> 'a = fun x -> x +type 'p t_of = Obj.t +type pre_t = unit +type 'a post_t = unit +type ('p, 'q) can_be_split = unit +type ('a, 'p, 'q) can_be_split_forall = unit +type ('p, 't1, 't2) can_be_split_dep = unit +type ('a, 'p, 't1, 't2) can_be_split_forall_dep = unit +type ('p1, 'p2) prop_and = unit +type ('a, 't1, 't2) equiv_forall = unit +type ('a, 'b, 't1, 't2) can_be_split_post = unit +type ('p, 'q) equiv = unit +type 'pre rmem' = unit +type ('frame, 'h) valid_rmem = unit +type 'pre rmem = unit +type 'pre req_t = unit +type ('pre, 'a, 'post) ens_t = unit +type ('framed, 'frame) maybe_emp = Obj.t +type ('a, 'framed, 'frame) maybe_emp_dep = Obj.t + + +type ('frame, 'h0, 'h1) frame_equalities' = Obj.t +let (frame_vc_norm : unit -> (unit, unit) FStar_Tactics_Effect.tac_repr) = + fun uu___ -> + FStar_Tactics_Builtins.with_compat_pre_core Prims.int_zero + (fun uu___1 -> + FStar_Tactics_Effect.tac_bind + (Prims.mk_range "Steel.Effect.Common.fsti" (Prims.of_int (420)) + (Prims.of_int (2)) (Prims.of_int (425)) (Prims.of_int (32))) + (Prims.mk_range "Steel.Effect.Common.fsti" (Prims.of_int (432)) + (Prims.of_int (2)) (Prims.of_int (456)) (Prims.of_int (10))) + (Obj.magic + (FStar_Tactics_Builtins.norm + [FStar_Pervasives.delta_attr + ["Steel.Effect.Common.__steel_reduce__"]; + FStar_Pervasives.delta_only + ["Steel.Effect.Common.__proj__Mkvprop'__item__t"; + "Steel.Effect.Common.__proj__Mkvprop'__item__hp"; + "Steel.Effect.Common.__proj__Mkvprop'__item__sel"; + "FStar.Algebra.CommMonoid.Equiv.__proj__CM__item__mult"; + "FStar.Algebra.CommMonoid.Equiv.__proj__CM__item__unit"]; + FStar_Pervasives.delta_qualifier ["unfold"]; + FStar_Pervasives.iota; + FStar_Pervasives.zeta; + FStar_Pervasives.primops; + FStar_Pervasives.simplify])) + (fun uu___2 -> + (fun uu___2 -> + Obj.magic + (FStar_Tactics_Effect.tac_bind + (Prims.mk_range "Steel.Effect.Common.fsti" + (Prims.of_int (432)) (Prims.of_int (2)) + (Prims.of_int (447)) (Prims.of_int (4))) + (Prims.mk_range "Steel.Effect.Common.fsti" + (Prims.of_int (450)) (Prims.of_int (2)) + (Prims.of_int (456)) (Prims.of_int (10))) + (Obj.magic + (FStar_Tactics_Effect.tac_bind + (Prims.mk_range "Steel.Effect.Common.fsti" + (Prims.of_int (432)) (Prims.of_int (9)) + (Prims.of_int (447)) (Prims.of_int (4))) + (Prims.mk_range "Steel.Effect.Common.fsti" + (Prims.of_int (432)) (Prims.of_int (2)) + (Prims.of_int (447)) (Prims.of_int (4))) + (Obj.magic + (FStar_Tactics_Derived.repeat + (fun uu___3 -> + FStar_Tactics_Effect.tac_bind + (Prims.mk_range + "Steel.Effect.Common.fsti" + (Prims.of_int (434)) + (Prims.of_int (4)) + (Prims.of_int (434)) + (Prims.of_int (35))) + (Prims.mk_range + "Steel.Effect.Common.fsti" + (Prims.of_int (436)) + (Prims.of_int (4)) + (Prims.of_int (446)) + (Prims.of_int (12))) + (Obj.magic + (FStar_Tactics_Derived.apply_lemma + (FStar_Reflection_Builtins.pack_ln + (FStar_Reflection_Data.Tv_FVar + (FStar_Reflection_Builtins.pack_fv + ["Steel"; + "Effect"; + "Common"; + "elim_conjunction"]))))) + (fun uu___4 -> + (fun uu___4 -> + Obj.magic + (FStar_Tactics_Effect.tac_bind + (Prims.mk_range + "Steel.Effect.Common.fsti" + (Prims.of_int (436)) + (Prims.of_int (4)) + (Prims.of_int (436)) + (Prims.of_int (14))) + (Prims.mk_range + "Steel.Effect.Common.fsti" + (Prims.of_int (437)) + (Prims.of_int (4)) + (Prims.of_int (446)) + (Prims.of_int (12))) + (Obj.magic + (FStar_Tactics_Derived.dismiss + ())) + (fun uu___5 -> + (fun uu___5 -> + Obj.magic + (FStar_Tactics_Effect.tac_bind + (Prims.mk_range + "Steel.Effect.Common.fsti" + (Prims.of_int (437)) + (Prims.of_int (4)) + (Prims.of_int (437)) + (Prims.of_int (14))) + (Prims.mk_range + "Steel.Effect.Common.fsti" + (Prims.of_int (439)) + (Prims.of_int (4)) + (Prims.of_int (446)) + (Prims.of_int (12))) + (Obj.magic + (FStar_Tactics_Derived.dismiss + ())) + (fun uu___6 -> + (fun uu___6 + -> + Obj.magic + (FStar_Tactics_Effect.tac_bind + (Prims.mk_range + "Steel.Effect.Common.fsti" + (Prims.of_int (439)) + (Prims.of_int (4)) + (Prims.of_int (439)) + (Prims.of_int (12))) + (Prims.mk_range + "Steel.Effect.Common.fsti" + (Prims.of_int (441)) + (Prims.of_int (4)) + (Prims.of_int (446)) + (Prims.of_int (12))) + (Obj.magic + (FStar_Tactics_Logic.split + ())) + (fun + uu___7 -> + (fun + uu___7 -> + Obj.magic + (FStar_Tactics_Effect.tac_bind + (Prims.mk_range + "Steel.Effect.Common.fsti" + (Prims.of_int (441)) + (Prims.of_int (4)) + (Prims.of_int (441)) + (Prims.of_int (78))) + (Prims.mk_range + "Steel.Effect.Common.fsti" + (Prims.of_int (443)) + (Prims.of_int (4)) + (Prims.of_int (446)) + (Prims.of_int (12))) + (Obj.magic + (FStar_Tactics_Derived.or_else + (fun + uu___8 -> + FStar_Tactics_Effect.tac_bind + (Prims.mk_range + "Steel.Effect.Common.fsti" + (Prims.of_int (441)) + (Prims.of_int (22)) + (Prims.of_int (441)) + (Prims.of_int (52))) + (Prims.mk_range + "Steel.Effect.Common.fsti" + (Prims.of_int (441)) + (Prims.of_int (54)) + (Prims.of_int (441)) + (Prims.of_int (63))) + (Obj.magic + (FStar_Tactics_Derived.apply_lemma + (FStar_Reflection_Builtins.pack_ln + (FStar_Reflection_Data.Tv_FVar + (FStar_Reflection_Builtins.pack_fv + ["Steel"; + "Effect"; + "Common"; + "lemma_frame_emp"]))))) + (fun + uu___9 -> + (fun + uu___9 -> + Obj.magic + (FStar_Tactics_Derived.dismiss + ())) + uu___9)) + (fun + uu___8 -> + (fun + uu___8 -> + Obj.magic + (FStar_Tactics_Effect.lift_div_tac + (fun + uu___9 -> + ()))) + uu___8))) + (fun + uu___8 -> + (fun + uu___8 -> + Obj.magic + (FStar_Tactics_Effect.tac_bind + (Prims.mk_range + "Steel.Effect.Common.fsti" + (Prims.of_int (443)) + (Prims.of_int (4)) + (Prims.of_int (443)) + (Prims.of_int (86))) + (Prims.mk_range + "Steel.Effect.Common.fsti" + (Prims.of_int (444)) + (Prims.of_int (4)) + (Prims.of_int (446)) + (Prims.of_int (12))) + (Obj.magic + (FStar_Tactics_Derived.or_else + (fun + uu___9 -> + FStar_Tactics_Effect.tac_bind + (Prims.mk_range + "Steel.Effect.Common.fsti" + (Prims.of_int (443)) + (Prims.of_int (22)) + (Prims.of_int (443)) + (Prims.of_int (59))) + (Prims.mk_range + "Steel.Effect.Common.fsti" + (Prims.of_int (443)) + (Prims.of_int (61)) + (Prims.of_int (443)) + (Prims.of_int (71))) + (Obj.magic + (FStar_Tactics_Derived.apply_lemma + (FStar_Reflection_Builtins.pack_ln + (FStar_Reflection_Data.Tv_FVar + (FStar_Reflection_Builtins.pack_fv + ["Steel"; + "Effect"; + "Common"; + "lemma_frame_equalities"]))))) + (fun + uu___10 + -> + (fun + uu___10 + -> + Obj.magic + (FStar_Tactics_Derived.dismiss + ())) + uu___10)) + (fun + uu___9 -> + (fun + uu___9 -> + Obj.magic + (FStar_Tactics_Effect.lift_div_tac + (fun + uu___10 + -> ()))) + uu___9))) + (fun + uu___9 -> + (fun + uu___9 -> + Obj.magic + (FStar_Tactics_Effect.tac_bind + (Prims.mk_range + "Steel.Effect.Common.fsti" + (Prims.of_int (444)) + (Prims.of_int (4)) + (Prims.of_int (444)) + (Prims.of_int (21))) + (Prims.mk_range + "Steel.Effect.Common.fsti" + (Prims.of_int (446)) + (Prims.of_int (4)) + (Prims.of_int (446)) + (Prims.of_int (12))) + (Obj.magic + (FStar_Tactics_Builtins.norm + [ + FStar_Pervasives.delta_attr + ["Steel.Effect.Common.__steel_reduce__"; + "Steel.Effect.Common.__inner_steel_reduce__"]; + FStar_Pervasives.delta_only + ["Steel.Effect.Common.__proj__Mkvprop'__item__t"; + "Steel.Effect.Common.__proj__Mkvprop'__item__hp"; + "Steel.Effect.Common.__proj__Mkvprop'__item__sel"; + "FStar.Algebra.CommMonoid.Equiv.__proj__CM__item__mult"; + "FStar.Algebra.CommMonoid.Equiv.__proj__CM__item__unit"]; + FStar_Pervasives.delta_qualifier + ["unfold"]; + FStar_Pervasives.iota; + FStar_Pervasives.zeta; + FStar_Pervasives.primops; + FStar_Pervasives.simplify])) + (fun + uu___10 + -> + (fun + uu___10 + -> + Obj.magic + (FStar_Tactics_Derived.trefl + ())) + uu___10))) + uu___9))) + uu___8))) + uu___7))) + uu___6))) + uu___5))) uu___4)))) + (fun uu___3 -> + FStar_Tactics_Effect.lift_div_tac + (fun uu___4 -> ())))) + (fun uu___3 -> + (fun uu___3 -> + Obj.magic + (FStar_Tactics_Effect.tac_bind + (Prims.mk_range "Steel.Effect.Common.fsti" + (Prims.of_int (450)) (Prims.of_int (2)) + (Prims.of_int (450)) (Prims.of_int (76))) + (Prims.mk_range "Steel.Effect.Common.fsti" + (Prims.of_int (454)) (Prims.of_int (2)) + (Prims.of_int (456)) (Prims.of_int (10))) + (Obj.magic + (FStar_Tactics_Derived.or_else + (fun uu___4 -> + FStar_Tactics_Effect.tac_bind + (Prims.mk_range + "Steel.Effect.Common.fsti" + (Prims.of_int (450)) + (Prims.of_int (20)) + (Prims.of_int (450)) + (Prims.of_int (50))) + (Prims.mk_range + "Steel.Effect.Common.fsti" + (Prims.of_int (450)) + (Prims.of_int (52)) + (Prims.of_int (450)) + (Prims.of_int (61))) + (Obj.magic + (FStar_Tactics_Derived.apply_lemma + (FStar_Reflection_Builtins.pack_ln + (FStar_Reflection_Data.Tv_FVar + (FStar_Reflection_Builtins.pack_fv + ["Steel"; + "Effect"; + "Common"; + "lemma_frame_emp"]))))) + (fun uu___5 -> + (fun uu___5 -> + Obj.magic + (FStar_Tactics_Derived.dismiss + ())) uu___5)) + (fun uu___4 -> + (fun uu___4 -> + Obj.magic + (FStar_Tactics_Effect.lift_div_tac + (fun uu___5 -> ()))) uu___4))) + (fun uu___4 -> + (fun uu___4 -> + Obj.magic + (FStar_Tactics_Effect.tac_bind + (Prims.mk_range + "Steel.Effect.Common.fsti" + (Prims.of_int (454)) + (Prims.of_int (2)) + (Prims.of_int (454)) + (Prims.of_int (84))) + (Prims.mk_range + "Steel.Effect.Common.fsti" + (Prims.of_int (455)) + (Prims.of_int (2)) + (Prims.of_int (456)) + (Prims.of_int (10))) + (Obj.magic + (FStar_Tactics_Derived.or_else + (fun uu___5 -> + FStar_Tactics_Effect.tac_bind + (Prims.mk_range + "Steel.Effect.Common.fsti" + (Prims.of_int (454)) + (Prims.of_int (20)) + (Prims.of_int (454)) + (Prims.of_int (57))) + (Prims.mk_range + "Steel.Effect.Common.fsti" + (Prims.of_int (454)) + (Prims.of_int (59)) + (Prims.of_int (454)) + (Prims.of_int (69))) + (Obj.magic + (FStar_Tactics_Derived.apply_lemma + (FStar_Reflection_Builtins.pack_ln + (FStar_Reflection_Data.Tv_FVar + (FStar_Reflection_Builtins.pack_fv + ["Steel"; + "Effect"; + "Common"; + "lemma_frame_equalities"]))))) + (fun uu___6 -> + (fun uu___6 -> + Obj.magic + (FStar_Tactics_Derived.dismiss + ())) uu___6)) + (fun uu___5 -> + (fun uu___5 -> + Obj.magic + (FStar_Tactics_Effect.lift_div_tac + (fun uu___6 -> + ()))) uu___5))) + (fun uu___5 -> + (fun uu___5 -> + Obj.magic + (FStar_Tactics_Effect.tac_bind + (Prims.mk_range + "Steel.Effect.Common.fsti" + (Prims.of_int (455)) + (Prims.of_int (2)) + (Prims.of_int (455)) + (Prims.of_int (19))) + (Prims.mk_range + "Steel.Effect.Common.fsti" + (Prims.of_int (456)) + (Prims.of_int (2)) + (Prims.of_int (456)) + (Prims.of_int (10))) + (Obj.magic + (FStar_Tactics_Builtins.norm + [FStar_Pervasives.delta_attr + ["Steel.Effect.Common.__steel_reduce__"; + "Steel.Effect.Common.__inner_steel_reduce__"]; + FStar_Pervasives.delta_only + ["Steel.Effect.Common.__proj__Mkvprop'__item__t"; + "Steel.Effect.Common.__proj__Mkvprop'__item__hp"; + "Steel.Effect.Common.__proj__Mkvprop'__item__sel"; + "FStar.Algebra.CommMonoid.Equiv.__proj__CM__item__mult"; + "FStar.Algebra.CommMonoid.Equiv.__proj__CM__item__unit"]; + FStar_Pervasives.delta_qualifier + ["unfold"]; + FStar_Pervasives.iota; + FStar_Pervasives.zeta; + FStar_Pervasives.primops; + FStar_Pervasives.simplify])) + (fun uu___6 -> + (fun uu___6 -> + Obj.magic + (FStar_Tactics_Derived.trefl + ())) uu___6))) + uu___5))) uu___4))) uu___3))) + uu___2)) +let _ = + FStar_Tactics_Native.register_tactic "Steel.Effect.Common.frame_vc_norm" + (Prims.of_int (2)) + (fun psc -> + fun ncb -> + fun args -> + FStar_Tactics_InterpFuns.mk_tactic_interpretation_1 + (FStar_Tactics_Native.from_tactic_1 frame_vc_norm) + FStar_Syntax_Embeddings.e_unit FStar_Syntax_Embeddings.e_unit + psc ncb args) +type ('frame, 'h0, 'h1) frame_equalities = Obj.t +type ('v, 'p) vrefine_am = 'p +type ('v, 'p) vrefine_t = Obj.t + + +type ('v, 'p, 'x) vdep_payload = Obj.t +type ('v, 'p) vdep_t = (Obj.t, Obj.t) Prims.dtuple2 + + + +exception Appears +let (uu___is_Appears : Prims.exn -> Prims.bool) = + fun projectee -> match projectee with | Appears -> true | uu___ -> false +let (on_sort_bv : + (FStar_Reflection_Types.term -> (unit, unit) FStar_Tactics_Effect.tac_repr) + -> + FStar_Reflection_Types.bv -> (unit, unit) FStar_Tactics_Effect.tac_repr) + = + fun f -> + fun xbv -> + f + (FStar_Reflection_Builtins.inspect_bv xbv).FStar_Reflection_Data.bv_sort +let (on_sort_binder : + (FStar_Reflection_Types.term -> (unit, unit) FStar_Tactics_Effect.tac_repr) + -> + FStar_Reflection_Types.binder -> + (unit, unit) FStar_Tactics_Effect.tac_repr) + = + fun f -> + fun b -> + FStar_Tactics_Effect.tac_bind + (Prims.mk_range "Steel.Effect.Common.fsti" (Prims.of_int (656)) + (Prims.of_int (16)) (Prims.of_int (656)) (Prims.of_int (32))) + (Prims.mk_range "Steel.Effect.Common.fsti" (Prims.of_int (656)) + (Prims.of_int (2)) (Prims.of_int (657)) (Prims.of_int (17))) + (FStar_Tactics_Effect.lift_div_tac + (fun uu___ -> FStar_Reflection_Builtins.inspect_binder b)) + (fun uu___ -> + (fun uu___ -> + match uu___ with | (bv, q) -> Obj.magic (on_sort_bv f bv)) + uu___) +let rec (visit_tm : + (FStar_Reflection_Types.term -> (unit, unit) FStar_Tactics_Effect.tac_repr) + -> + FStar_Reflection_Types.term -> (unit, unit) FStar_Tactics_Effect.tac_repr) + = + fun ff -> + fun t -> + FStar_Tactics_Effect.tac_bind + (Prims.mk_range "Steel.Effect.Common.fsti" (Prims.of_int (660)) + (Prims.of_int (11)) (Prims.of_int (660)) (Prims.of_int (23))) + (Prims.mk_range "Steel.Effect.Common.fsti" (Prims.of_int (661)) + (Prims.of_int (2)) (Prims.of_int (702)) (Prims.of_int (9))) + (FStar_Tactics_Effect.lift_div_tac + (fun uu___ -> FStar_Reflection_Builtins.inspect_ln t)) + (fun uu___ -> + (fun tv -> + Obj.magic + (FStar_Tactics_Effect.tac_bind + (Prims.mk_range "Steel.Effect.Common.fsti" + (Prims.of_int (661)) (Prims.of_int (2)) + (Prims.of_int (702)) (Prims.of_int (3))) + (Prims.mk_range "Steel.Effect.Common.fsti" + (Prims.of_int (702)) (Prims.of_int (5)) + (Prims.of_int (702)) (Prims.of_int (9))) + (match tv with + | FStar_Reflection_Data.Tv_FVar uu___ -> + Obj.magic + (Obj.repr + (FStar_Tactics_Effect.lift_div_tac + (fun uu___1 -> ()))) + | FStar_Reflection_Data.Tv_UInst (uu___, uu___1) -> + Obj.magic + (Obj.repr + (FStar_Tactics_Effect.lift_div_tac + (fun uu___2 -> ()))) + | FStar_Reflection_Data.Tv_Var bv -> + Obj.magic (Obj.repr (on_sort_bv ff bv)) + | FStar_Reflection_Data.Tv_BVar bv -> + Obj.magic (Obj.repr (on_sort_bv ff bv)) + | FStar_Reflection_Data.Tv_Type uu___ -> + Obj.magic + (Obj.repr + (FStar_Tactics_Effect.lift_div_tac + (fun uu___1 -> ()))) + | FStar_Reflection_Data.Tv_Const c -> + Obj.magic + (Obj.repr + (FStar_Tactics_Effect.lift_div_tac + (fun uu___ -> ()))) + | FStar_Reflection_Data.Tv_Uvar (i, u) -> + Obj.magic + (Obj.repr + (FStar_Tactics_Effect.lift_div_tac + (fun uu___ -> ()))) + | FStar_Reflection_Data.Tv_Unknown -> + Obj.magic + (Obj.repr + (FStar_Tactics_Effect.lift_div_tac + (fun uu___ -> ()))) + | FStar_Reflection_Data.Tv_Arrow (b, c) -> + Obj.magic + (Obj.repr + (FStar_Tactics_Effect.tac_bind + (Prims.mk_range "Steel.Effect.Common.fsti" + (Prims.of_int (674)) (Prims.of_int (6)) + (Prims.of_int (674)) (Prims.of_int (25))) + (Prims.mk_range "Steel.Effect.Common.fsti" + (Prims.of_int (675)) (Prims.of_int (6)) + (Prims.of_int (675)) (Prims.of_int (21))) + (Obj.magic (on_sort_binder ff b)) + (fun uu___ -> + (fun uu___ -> Obj.magic (visit_comp ff c)) + uu___))) + | FStar_Reflection_Data.Tv_Abs (b, t1) -> + Obj.magic + (Obj.repr + (FStar_Tactics_Effect.tac_bind + (Prims.mk_range "Steel.Effect.Common.fsti" + (Prims.of_int (677)) (Prims.of_int (14)) + (Prims.of_int (677)) (Prims.of_int (44))) + (Prims.mk_range "Steel.Effect.Common.fsti" + (Prims.of_int (678)) (Prims.of_int (6)) + (Prims.of_int (678)) (Prims.of_int (19))) + (Obj.magic (on_sort_binder (visit_tm ff) b)) + (fun uu___ -> + (fun b1 -> Obj.magic (visit_tm ff t1)) + uu___))) + | FStar_Reflection_Data.Tv_App (l, (r, q)) -> + Obj.magic + (Obj.repr + (FStar_Tactics_Effect.tac_bind + (Prims.mk_range "Steel.Effect.Common.fsti" + (Prims.of_int (681)) (Prims.of_int (7)) + (Prims.of_int (681)) (Prims.of_int (20))) + (Prims.mk_range "Steel.Effect.Common.fsti" + (Prims.of_int (682)) (Prims.of_int (7)) + (Prims.of_int (682)) (Prims.of_int (20))) + (Obj.magic (visit_tm ff l)) + (fun uu___ -> + (fun uu___ -> Obj.magic (visit_tm ff r)) + uu___))) + | FStar_Reflection_Data.Tv_Refine (b, r) -> + Obj.magic (Obj.repr (visit_tm ff r)) + | FStar_Reflection_Data.Tv_Let (r, attrs, b, def, t1) -> + Obj.magic + (Obj.repr + (FStar_Tactics_Effect.tac_bind + (Prims.mk_range "Steel.Effect.Common.fsti" + (Prims.of_int (688)) (Prims.of_int (6)) + (Prims.of_int (688)) (Prims.of_int (21))) + (Prims.mk_range "Steel.Effect.Common.fsti" + (Prims.of_int (689)) (Prims.of_int (6)) + (Prims.of_int (689)) (Prims.of_int (19))) + (Obj.magic (visit_tm ff def)) + (fun uu___ -> + (fun uu___ -> Obj.magic (visit_tm ff t1)) + uu___))) + | FStar_Reflection_Data.Tv_Match (sc, uu___, brs) -> + Obj.magic + (Obj.repr + (FStar_Tactics_Effect.tac_bind + (Prims.mk_range "Steel.Effect.Common.fsti" + (Prims.of_int (692)) (Prims.of_int (6)) + (Prims.of_int (692)) (Prims.of_int (20))) + (Prims.mk_range "Steel.Effect.Common.fsti" + (Prims.of_int (693)) (Prims.of_int (6)) + (Prims.of_int (693)) (Prims.of_int (28))) + (Obj.magic (visit_tm ff sc)) + (fun uu___1 -> + (fun uu___1 -> + Obj.magic + (FStar_Tactics_Util.iter + (visit_br ff) brs)) uu___1))) + | FStar_Reflection_Data.Tv_AscribedT (e, t1, topt, uu___) + -> + Obj.magic + (Obj.repr + (FStar_Tactics_Effect.tac_bind + (Prims.mk_range "Steel.Effect.Common.fsti" + (Prims.of_int (696)) (Prims.of_int (6)) + (Prims.of_int (696)) (Prims.of_int (19))) + (Prims.mk_range "Steel.Effect.Common.fsti" + (Prims.of_int (697)) (Prims.of_int (6)) + (Prims.of_int (697)) (Prims.of_int (19))) + (Obj.magic (visit_tm ff e)) + (fun uu___1 -> + (fun uu___1 -> Obj.magic (visit_tm ff t1)) + uu___1))) + | FStar_Reflection_Data.Tv_AscribedC (e, c, topt, uu___) + -> Obj.magic (Obj.repr (visit_tm ff e))) + (fun uu___ -> (fun uu___ -> Obj.magic (ff t)) uu___))) + uu___) +and (visit_br : + (FStar_Reflection_Types.term -> (unit, unit) FStar_Tactics_Effect.tac_repr) + -> + FStar_Reflection_Data.branch -> + (unit, unit) FStar_Tactics_Effect.tac_repr) + = + fun ff -> + fun b -> + FStar_Tactics_Effect.tac_bind + (Prims.mk_range "Steel.Effect.Common.fsti" (Prims.of_int (705)) + (Prims.of_int (15)) (Prims.of_int (705)) (Prims.of_int (16))) + (Prims.mk_range "Steel.Effect.Common.fsti" (Prims.of_int (705)) + (Prims.of_int (2)) (Prims.of_int (706)) (Prims.of_int (15))) + (FStar_Tactics_Effect.lift_div_tac (fun uu___ -> b)) + (fun uu___ -> + (fun uu___ -> + match uu___ with | (p, t) -> Obj.magic (visit_tm ff t)) uu___) +and (visit_comp : + (FStar_Reflection_Types.term -> (unit, unit) FStar_Tactics_Effect.tac_repr) + -> + FStar_Reflection_Types.comp -> (unit, unit) FStar_Tactics_Effect.tac_repr) + = + fun ff -> + fun c -> + FStar_Tactics_Effect.tac_bind + (Prims.mk_range "Steel.Effect.Common.fsti" (Prims.of_int (709)) + (Prims.of_int (11)) (Prims.of_int (709)) (Prims.of_int (25))) + (Prims.mk_range "Steel.Effect.Common.fsti" (Prims.of_int (710)) + (Prims.of_int (2)) (Prims.of_int (722)) (Prims.of_int (30))) + (FStar_Tactics_Effect.lift_div_tac + (fun uu___ -> FStar_Reflection_Builtins.inspect_comp c)) + (fun uu___ -> + (fun cv -> + match cv with + | FStar_Reflection_Data.C_Total ret -> + Obj.magic (visit_tm ff ret) + | FStar_Reflection_Data.C_GTotal ret -> + Obj.magic (visit_tm ff ret) + | FStar_Reflection_Data.C_Lemma (pre, post, pats) -> + Obj.magic + (FStar_Tactics_Effect.tac_bind + (Prims.mk_range "Steel.Effect.Common.fsti" + (Prims.of_int (715)) (Prims.of_int (6)) + (Prims.of_int (715)) (Prims.of_int (21))) + (Prims.mk_range "Steel.Effect.Common.fsti" + (Prims.of_int (716)) (Prims.of_int (6)) + (Prims.of_int (717)) (Prims.of_int (22))) + (Obj.magic (visit_tm ff pre)) + (fun uu___ -> + (fun uu___ -> + Obj.magic + (FStar_Tactics_Effect.tac_bind + (Prims.mk_range "Steel.Effect.Common.fsti" + (Prims.of_int (716)) (Prims.of_int (6)) + (Prims.of_int (716)) (Prims.of_int (22))) + (Prims.mk_range "Steel.Effect.Common.fsti" + (Prims.of_int (717)) (Prims.of_int (6)) + (Prims.of_int (717)) (Prims.of_int (22))) + (Obj.magic (visit_tm ff post)) + (fun uu___1 -> + (fun uu___1 -> + Obj.magic (visit_tm ff pats)) uu___1))) + uu___)) + | FStar_Reflection_Data.C_Eff (us, eff, res, args, decrs) -> + Obj.magic + (FStar_Tactics_Effect.tac_bind + (Prims.mk_range "Steel.Effect.Common.fsti" + (Prims.of_int (720)) (Prims.of_int (6)) + (Prims.of_int (720)) (Prims.of_int (21))) + (Prims.mk_range "Steel.Effect.Common.fsti" + (Prims.of_int (721)) (Prims.of_int (6)) + (Prims.of_int (722)) (Prims.of_int (30))) + (Obj.magic (visit_tm ff res)) + (fun uu___ -> + (fun uu___ -> + Obj.magic + (FStar_Tactics_Effect.tac_bind + (Prims.mk_range "Steel.Effect.Common.fsti" + (Prims.of_int (721)) (Prims.of_int (6)) + (Prims.of_int (721)) (Prims.of_int (45))) + (Prims.mk_range "Steel.Effect.Common.fsti" + (Prims.of_int (722)) (Prims.of_int (6)) + (Prims.of_int (722)) (Prims.of_int (30))) + (Obj.magic + (FStar_Tactics_Util.iter + (fun uu___1 -> + match uu___1 with + | (a, q) -> visit_tm ff a) args)) + (fun uu___1 -> + (fun uu___1 -> + Obj.magic + (FStar_Tactics_Util.iter + (visit_tm ff) decrs)) uu___1))) + uu___))) uu___) +let (name_appears_in : + FStar_Reflection_Types.name -> + FStar_Reflection_Types.term -> + (Prims.bool, unit) FStar_Tactics_Effect.tac_repr) + = + fun nm -> + fun t -> + FStar_Tactics_Effect.tac_bind + (Prims.mk_range "Steel.Effect.Common.fsti" (Prims.of_int (728)) + (Prims.of_int (4)) (Prims.of_int (730)) (Prims.of_int (13))) + (Prims.mk_range "Steel.Effect.Common.fsti" (Prims.of_int (732)) + (Prims.of_int (2)) (Prims.of_int (734)) (Prims.of_int (16))) + (FStar_Tactics_Effect.lift_div_tac + (fun uu___ -> + fun t1 -> + FStar_Tactics_Effect.tac_bind + (Prims.mk_range "Steel.Effect.Common.fsti" + (Prims.of_int (727)) (Prims.of_int (10)) + (Prims.of_int (727)) (Prims.of_int (11))) + (Prims.mk_range "Steel.Effect.Common.fsti" + (Prims.of_int (728)) (Prims.of_int (4)) + (Prims.of_int (730)) (Prims.of_int (13))) + (Obj.magic (FStar_Tactics_Builtins.inspect t1)) + (fun uu___1 -> + (fun uu___1 -> + match uu___1 with + | FStar_Reflection_Data.Tv_FVar fv -> + Obj.magic + (Obj.repr + (if + (FStar_Reflection_Builtins.inspect_fv fv) + = nm + then + Obj.repr + (FStar_Tactics_Effect.raise Appears) + else + Obj.repr + (FStar_Tactics_Effect.lift_div_tac + (fun uu___3 -> ())))) + | t2 -> + Obj.magic + (Obj.repr + (FStar_Tactics_Effect.lift_div_tac + (fun uu___2 -> ())))) uu___1))) + (fun uu___ -> + (fun ff -> + Obj.magic + (FStar_Tactics_Derived.try_with + (fun uu___ -> + match () with + | () -> + FStar_Tactics_Effect.tac_bind + (Prims.mk_range "Steel.Effect.Common.fsti" + (Prims.of_int (732)) (Prims.of_int (6)) + (Prims.of_int (732)) (Prims.of_int (28))) + (Prims.mk_range "Steel.Effect.Common.fsti" + (Prims.of_int (732)) (Prims.of_int (30)) + (Prims.of_int (732)) (Prims.of_int (35))) + (Obj.magic + (FStar_Tactics_Effect.tac_bind + (Prims.mk_range "Steel.Effect.Common.fsti" + (Prims.of_int (732)) (Prims.of_int (13)) + (Prims.of_int (732)) (Prims.of_int (28))) + (Prims.mk_range "Steel.Effect.Common.fsti" + (Prims.of_int (732)) (Prims.of_int (6)) + (Prims.of_int (732)) (Prims.of_int (28))) + (Obj.magic (visit_tm ff t)) + (fun uu___1 -> + FStar_Tactics_Effect.lift_div_tac + (fun uu___2 -> ())))) + (fun uu___1 -> + FStar_Tactics_Effect.lift_div_tac + (fun uu___2 -> false))) + (fun uu___ -> + (fun uu___ -> + match uu___ with + | Appears -> + Obj.magic + (Obj.repr + (FStar_Tactics_Effect.lift_div_tac + (fun uu___1 -> true))) + | e -> + Obj.magic + (Obj.repr (FStar_Tactics_Effect.raise e))) + uu___))) uu___) +let (term_appears_in : + FStar_Reflection_Types.term -> + FStar_Reflection_Types.term -> + (Prims.bool, unit) FStar_Tactics_Effect.tac_repr) + = + fun t -> + fun i -> + FStar_Tactics_Effect.tac_bind + (Prims.mk_range "Steel.Effect.Common.fsti" (Prims.of_int (738)) + (Prims.of_int (18)) (Prims.of_int (738)) (Prims.of_int (49))) + (Prims.mk_range "Steel.Effect.Common.fsti" (Prims.of_int (738)) + (Prims.of_int (2)) (Prims.of_int (738)) (Prims.of_int (51))) + (Obj.magic + (FStar_Tactics_Effect.tac_bind + (Prims.mk_range "Steel.Effect.Common.fsti" (Prims.of_int (738)) + (Prims.of_int (30)) (Prims.of_int (738)) (Prims.of_int (48))) + (Prims.mk_range "Steel.Effect.Common.fsti" (Prims.of_int (738)) + (Prims.of_int (18)) (Prims.of_int (738)) (Prims.of_int (49))) + (Obj.magic (FStar_Tactics_Builtins.term_to_string t)) + (fun uu___ -> + FStar_Tactics_Effect.lift_div_tac + (fun uu___1 -> FStar_Reflection_Builtins.explode_qn uu___)))) + (fun uu___ -> + (fun uu___ -> Obj.magic (name_appears_in uu___ i)) uu___) +type atom = Prims.int +let rec (atoms_to_string : atom Prims.list -> Prims.string) = + fun l -> + match l with + | [] -> "" + | hd::tl -> + Prims.strcat (Prims.string_of_int hd) + (Prims.strcat " " (atoms_to_string tl)) +type exp = + | Unit + | Mult of exp * exp + | Atom of atom +let (uu___is_Unit : exp -> Prims.bool) = + fun projectee -> match projectee with | Unit -> true | uu___ -> false +let (uu___is_Mult : exp -> Prims.bool) = + fun projectee -> + match projectee with | Mult (_0, _1) -> true | uu___ -> false +let (__proj__Mult__item___0 : exp -> exp) = + fun projectee -> match projectee with | Mult (_0, _1) -> _0 +let (__proj__Mult__item___1 : exp -> exp) = + fun projectee -> match projectee with | Mult (_0, _1) -> _1 +let (uu___is_Atom : exp -> Prims.bool) = + fun projectee -> match projectee with | Atom _0 -> true | uu___ -> false +let (__proj__Atom__item___0 : exp -> atom) = + fun projectee -> match projectee with | Atom _0 -> _0 +type 'a amap = ((atom * 'a) Prims.list * 'a) +let const : 'a . 'a -> 'a amap = fun xa -> ([], xa) +let rec my_assoc : + 'key 'value . + 'key -> + ('key * 'value) Prims.list -> 'value FStar_Pervasives_Native.option + = + fun k -> + fun dict -> + match dict with + | [] -> FStar_Pervasives_Native.None + | (k', v')::q -> + if k = k' then FStar_Pervasives_Native.Some v' else my_assoc k q +let select : 'a . atom -> 'a amap -> 'a = + fun x -> + fun am -> + match my_assoc x (FStar_Pervasives_Native.fst am) with + | FStar_Pervasives_Native.Some a1 -> a1 + | uu___ -> FStar_Pervasives_Native.snd am +let update : 'a . atom -> 'a -> 'a amap -> 'a amap = + fun x -> + fun xa -> + fun am -> + (((x, xa) :: (FStar_Pervasives_Native.fst am)), + (FStar_Pervasives_Native.snd am)) +let (is_uvar : + FStar_Reflection_Types.term -> + (Prims.bool, unit) FStar_Tactics_Effect.tac_repr) + = + fun t -> + FStar_Tactics_Effect.tac_bind + (Prims.mk_range "Steel.Effect.Common.fsti" (Prims.of_int (791)) + (Prims.of_int (13)) (Prims.of_int (791)) (Prims.of_int (14))) + (Prims.mk_range "Steel.Effect.Common.fsti" (Prims.of_int (791)) + (Prims.of_int (34)) (Prims.of_int (796)) (Prims.of_int (14))) + (Obj.magic (FStar_Tactics_Builtins.inspect t)) + (fun uu___ -> + (fun uu___ -> + match uu___ with + | FStar_Reflection_Data.Tv_Uvar (uu___1, uu___2) -> + Obj.magic + (Obj.repr + (FStar_Tactics_Effect.lift_div_tac (fun uu___3 -> true))) + | FStar_Reflection_Data.Tv_App (uu___1, uu___2) -> + Obj.magic + (Obj.repr + (FStar_Tactics_Effect.tac_bind + (Prims.mk_range "Steel.Effect.Common.fsti" + (Prims.of_int (794)) (Prims.of_int (21)) + (Prims.of_int (794)) (Prims.of_int (34))) + (Prims.mk_range "Steel.Effect.Common.fsti" + (Prims.of_int (794)) (Prims.of_int (6)) + (Prims.of_int (795)) (Prims.of_int (17))) + (FStar_Tactics_Effect.lift_div_tac + (fun uu___3 -> + FStar_Reflection_Derived.collect_app t)) + (fun uu___3 -> + (fun uu___3 -> + match uu___3 with + | (hd, args) -> + Obj.magic + (FStar_Tactics_Effect.tac_bind + (Prims.mk_range + "Steel.Effect.Common.fsti" + (Prims.of_int (794)) + (Prims.of_int (10)) + (Prims.of_int (794)) + (Prims.of_int (12))) + (Prims.mk_range + "Steel.Effect.Common.fsti" + (Prims.of_int (795)) + (Prims.of_int (6)) + (Prims.of_int (795)) + (Prims.of_int (17))) + (Obj.magic + (FStar_Tactics_Builtins.inspect hd)) + (fun uu___4 -> + FStar_Tactics_Effect.lift_div_tac + (fun uu___5 -> + FStar_Reflection_Data.uu___is_Tv_Uvar + uu___4)))) uu___3))) + | uu___1 -> + Obj.magic + (Obj.repr + (FStar_Tactics_Effect.lift_div_tac (fun uu___2 -> false)))) + uu___) +let rec (get_candidates : + FStar_Reflection_Types.term -> + FStar_Reflection_Types.term Prims.list -> + (FStar_Reflection_Types.term Prims.list, unit) + FStar_Tactics_Effect.tac_repr) + = + fun t -> + fun l -> + FStar_Tactics_Effect.tac_bind + (Prims.mk_range "Steel.Effect.Common.fsti" (Prims.of_int (800)) + (Prims.of_int (16)) (Prims.of_int (800)) (Prims.of_int (29))) + (Prims.mk_range "Steel.Effect.Common.fsti" (Prims.of_int (800)) + (Prims.of_int (2)) (Prims.of_int (807)) (Prims.of_int (32))) + (FStar_Tactics_Effect.lift_div_tac + (fun uu___ -> FStar_Reflection_Derived.collect_app t)) + (fun uu___ -> + (fun uu___ -> + match uu___ with + | (name, uu___1) -> + (match l with + | [] -> + Obj.magic + (Obj.repr + (FStar_Tactics_Effect.lift_div_tac + (fun uu___2 -> []))) + | hd::tl -> + Obj.magic + (Obj.repr + (FStar_Tactics_Effect.tac_bind + (Prims.mk_range "Steel.Effect.Common.fsti" + (Prims.of_int (804)) (Prims.of_int (17)) + (Prims.of_int (804)) (Prims.of_int (31))) + (Prims.mk_range "Steel.Effect.Common.fsti" + (Prims.of_int (804)) (Prims.of_int (6)) + (Prims.of_int (807)) (Prims.of_int (32))) + (FStar_Tactics_Effect.lift_div_tac + (fun uu___2 -> + FStar_Reflection_Derived.collect_app hd)) + (fun uu___2 -> + (fun uu___2 -> + match uu___2 with + | (n, uu___3) -> + Obj.magic + (FStar_Tactics_Effect.tac_bind + (Prims.mk_range + "Steel.Effect.Common.fsti" + (Prims.of_int (805)) + (Prims.of_int (9)) + (Prims.of_int (805)) + (Prims.of_int (27))) + (Prims.mk_range + "Steel.Effect.Common.fsti" + (Prims.of_int (805)) + (Prims.of_int (6)) + (Prims.of_int (807)) + (Prims.of_int (32))) + (Obj.magic + (FStar_Tactics_Builtins.term_eq_old + n name)) + (fun uu___4 -> + (fun uu___4 -> + if uu___4 + then + Obj.magic + (FStar_Tactics_Effect.tac_bind + (Prims.mk_range + "Steel.Effect.Common.fsti" + (Prims.of_int (806)) + (Prims.of_int (12)) + (Prims.of_int (806)) + (Prims.of_int (33))) + (Prims.mk_range + "Steel.Effect.Common.fsti" + (Prims.of_int (805)) + (Prims.of_int (33)) + (Prims.of_int (807)) + (Prims.of_int (7))) + (Obj.magic + (get_candidates + t tl)) + (fun uu___5 -> + FStar_Tactics_Effect.lift_div_tac + (fun uu___6 + -> hd :: + uu___5))) + else + Obj.magic + (get_candidates t tl)) + uu___4))) uu___2))))) + uu___) +let rec (trivial_cancel : + atom -> atom Prims.list -> (Prims.bool * atom Prims.list)) = + fun t -> + fun l -> + match l with + | [] -> (false, l) + | hd::tl -> + if hd = t + then (true, tl) + else + (let uu___1 = trivial_cancel t tl in + match uu___1 with | (b, res) -> (b, (hd :: res))) +let rec (trivial_cancels : + atom Prims.list -> + atom Prims.list -> + FStar_Reflection_Types.term amap -> + ((atom Prims.list * atom Prims.list * atom Prims.list * atom + Prims.list), + unit) FStar_Tactics_Effect.tac_repr) + = + fun uu___2 -> + fun uu___1 -> + fun uu___ -> + (fun l1 -> + fun l2 -> + fun am -> + match l1 with + | [] -> + Obj.magic + (Obj.repr + (FStar_Tactics_Effect.lift_div_tac + (fun uu___ -> ([], l2, [], [])))) + | hd::tl -> + Obj.magic + (Obj.repr + (FStar_Tactics_Effect.tac_bind + (Prims.mk_range "Steel.Effect.Common.fsti" + (Prims.of_int (828)) (Prims.of_int (21)) + (Prims.of_int (828)) (Prims.of_int (41))) + (Prims.mk_range "Steel.Effect.Common.fsti" + (Prims.of_int (828)) (Prims.of_int (6)) + (Prims.of_int (831)) (Prims.of_int (76))) + (FStar_Tactics_Effect.lift_div_tac + (fun uu___ -> trivial_cancel hd l2)) + (fun uu___ -> + (fun uu___ -> + match uu___ with + | (b, l2') -> + Obj.magic + (FStar_Tactics_Effect.tac_bind + (Prims.mk_range + "Steel.Effect.Common.fsti" + (Prims.of_int (829)) + (Prims.of_int (37)) + (Prims.of_int (829)) + (Prims.of_int (62))) + (Prims.mk_range + "Steel.Effect.Common.fsti" + (Prims.of_int (829)) + (Prims.of_int (6)) + (Prims.of_int (831)) + (Prims.of_int (76))) + (Obj.magic + (trivial_cancels tl l2' am)) + (fun uu___1 -> + FStar_Tactics_Effect.lift_div_tac + (fun uu___2 -> + match uu___1 with + | (l1', l2'1, l1_del, + l2_del) -> + ((if b + then l1' + else hd :: l1'), + l2'1, + (if b + then hd :: l1_del + else l1_del), + (if b + then hd :: l2_del + else l2_del)))))) + uu___)))) uu___2 uu___1 uu___ +exception Failed +let (uu___is_Failed : Prims.exn -> Prims.bool) = + fun projectee -> match projectee with | Failed -> true | uu___ -> false +exception Success +let (uu___is_Success : Prims.exn -> Prims.bool) = + fun projectee -> match projectee with | Success -> true | uu___ -> false +let rec (print_atoms : + atom Prims.list -> + FStar_Reflection_Types.term amap -> + (Prims.string, unit) FStar_Tactics_Effect.tac_repr) + = + fun uu___1 -> + fun uu___ -> + (fun l -> + fun am -> + match l with + | [] -> + Obj.magic + (Obj.repr + (FStar_Tactics_Effect.lift_div_tac (fun uu___ -> ""))) + | hd::[] -> + Obj.magic + (Obj.repr + (FStar_Tactics_Builtins.term_to_string (select hd am))) + | hd::tl -> + Obj.magic + (Obj.repr + (FStar_Tactics_Effect.tac_bind + (Prims.mk_range "Steel.Effect.Common.fsti" + (Prims.of_int (841)) (Prims.of_int (14)) + (Prims.of_int (841)) (Prims.of_int (43))) + (Prims.mk_range "Steel.Effect.Common.fsti" + (Prims.of_int (841)) (Prims.of_int (14)) + (Prims.of_int (841)) (Prims.of_int (71))) + (Obj.magic + (FStar_Tactics_Builtins.term_to_string + (select hd am))) + (fun uu___ -> + (fun uu___ -> + Obj.magic + (FStar_Tactics_Effect.tac_bind + (Prims.mk_range "Steel.Effect.Common.fsti" + (Prims.of_int (841)) (Prims.of_int (46)) + (Prims.of_int (841)) (Prims.of_int (71))) + (Prims.mk_range "prims.fst" + (Prims.of_int (606)) (Prims.of_int (19)) + (Prims.of_int (606)) (Prims.of_int (31))) + (Obj.magic + (FStar_Tactics_Effect.tac_bind + (Prims.mk_range + "Steel.Effect.Common.fsti" + (Prims.of_int (841)) + (Prims.of_int (54)) + (Prims.of_int (841)) + (Prims.of_int (71))) + (Prims.mk_range "prims.fst" + (Prims.of_int (606)) + (Prims.of_int (19)) + (Prims.of_int (606)) + (Prims.of_int (31))) + (Obj.magic (print_atoms tl am)) + (fun uu___1 -> + FStar_Tactics_Effect.lift_div_tac + (fun uu___2 -> + Prims.strcat " * " uu___1)))) + (fun uu___1 -> + FStar_Tactics_Effect.lift_div_tac + (fun uu___2 -> + Prims.strcat uu___ uu___1)))) uu___)))) + uu___1 uu___ +let rec (try_candidates : + atom -> + atom Prims.list -> + FStar_Reflection_Types.term amap -> + ((atom * Prims.int), unit) FStar_Tactics_Effect.tac_repr) + = + fun uu___2 -> + fun uu___1 -> + fun uu___ -> + (fun t -> + fun l -> + fun am -> + match l with + | [] -> + Obj.magic + (Obj.repr + (FStar_Tactics_Effect.lift_div_tac + (fun uu___ -> (t, Prims.int_zero)))) + | hd::tl -> + Obj.magic + (Obj.repr + (FStar_Tactics_Effect.tac_bind + (Prims.mk_range "Steel.Effect.Common.fsti" + (Prims.of_int (851)) (Prims.of_int (9)) + (Prims.of_int (851)) (Prims.of_int (31))) + (Prims.mk_range "Steel.Effect.Common.fsti" + (Prims.of_int (851)) (Prims.of_int (6)) + (Prims.of_int (857)) (Prims.of_int (55))) + (Obj.magic (is_uvar (select hd am))) + (fun uu___ -> + (fun uu___ -> + if uu___ + then Obj.magic (try_candidates t tl am) + else + Obj.magic + (FStar_Tactics_Effect.tac_bind + (Prims.mk_range + "Steel.Effect.Common.fsti" + (Prims.of_int (854)) + (Prims.of_int (18)) + (Prims.of_int (855)) + (Prims.of_int (53))) + (Prims.mk_range + "Steel.Effect.Common.fsti" + (Prims.of_int (856)) + (Prims.of_int (8)) + (Prims.of_int (857)) + (Prims.of_int (55))) + (Obj.magic + (FStar_Tactics_Derived.try_with + (fun uu___2 -> + match () with + | () -> + FStar_Tactics_Effect.tac_bind + (Prims.mk_range + "Steel.Effect.Common.fsti" + (Prims.of_int (854)) + (Prims.of_int (25)) + (Prims.of_int (854)) + (Prims.of_int (59))) + (Prims.mk_range + "Steel.Effect.Common.fsti" + (Prims.of_int (854)) + (Prims.of_int (22)) + (Prims.of_int (854)) + (Prims.of_int (96))) + (Obj.magic + (FStar_Tactics_Derived.unify + (select t am) + (select hd am))) + (fun uu___3 -> + (fun uu___3 -> + if uu___3 + then + Obj.magic + (FStar_Tactics_Effect.raise + Success) + else + Obj.magic + (FStar_Tactics_Effect.raise + Failed)) + uu___3)) + (fun uu___2 -> + (fun uu___2 -> + Obj.magic + (FStar_Tactics_Effect.lift_div_tac + (fun uu___3 -> + match uu___2 with + | Success -> true + | uu___4 -> false))) + uu___2))) + (fun uu___2 -> + (fun res -> + Obj.magic + (FStar_Tactics_Effect.tac_bind + (Prims.mk_range + "Steel.Effect.Common.fsti" + (Prims.of_int (856)) + (Prims.of_int (21)) + (Prims.of_int (856)) + (Prims.of_int (43))) + (Prims.mk_range + "Steel.Effect.Common.fsti" + (Prims.of_int (856)) + (Prims.of_int (8)) + (Prims.of_int (857)) + (Prims.of_int (55))) + (Obj.magic + (try_candidates t tl am)) + (fun uu___2 -> + FStar_Tactics_Effect.lift_div_tac + (fun uu___3 -> + match uu___2 with + | (t', n') -> + if + res && + (hd <> t') + then + (hd, + (Prims.int_one + + n')) + else (t', n'))))) + uu___2))) uu___)))) uu___2 + uu___1 uu___ +let rec (remove_from_list : + atom -> + atom Prims.list -> (atom Prims.list, unit) FStar_Tactics_Effect.tac_repr) + = + fun uu___1 -> + fun uu___ -> + (fun t -> + fun l -> + match l with + | [] -> + Obj.magic + (Obj.repr + (FStar_Tactics_Effect.tac_bind + (Prims.mk_range "Steel.Effect.Common.fsti" + (Prims.of_int (863)) (Prims.of_int (10)) + (Prims.of_int (863)) (Prims.of_int (70))) + (Prims.mk_range "Steel.Effect.Common.fsti" + (Prims.of_int (863)) (Prims.of_int (72)) + (Prims.of_int (863)) (Prims.of_int (74))) + (Obj.magic + (FStar_Tactics_Derived.fail + "atom in remove_from_list not found: should not happen")) + (fun uu___ -> + FStar_Tactics_Effect.lift_div_tac + (fun uu___1 -> [])))) + | hd::tl -> + Obj.magic + (Obj.repr + (if t = hd + then + Obj.repr + (FStar_Tactics_Effect.lift_div_tac (fun uu___ -> tl)) + else + Obj.repr + (FStar_Tactics_Effect.tac_bind + (Prims.mk_range "Steel.Effect.Common.fsti" + (Prims.of_int (864)) (Prims.of_int (41)) + (Prims.of_int (864)) (Prims.of_int (62))) + (Prims.mk_range "Steel.Effect.Common.fsti" + (Prims.of_int (864)) (Prims.of_int (39)) + (Prims.of_int (864)) (Prims.of_int (41))) + (Obj.magic (remove_from_list t tl)) + (fun uu___1 -> + FStar_Tactics_Effect.lift_div_tac + (fun uu___2 -> hd :: uu___1)))))) uu___1 + uu___ +let rec (equivalent_lists_once : + atom Prims.list -> + atom Prims.list -> + atom Prims.list -> + atom Prims.list -> + FStar_Reflection_Types.term amap -> + ((atom Prims.list * atom Prims.list * atom Prims.list * atom + Prims.list), + unit) FStar_Tactics_Effect.tac_repr) + = + fun uu___4 -> + fun uu___3 -> + fun uu___2 -> + fun uu___1 -> + fun uu___ -> + (fun l1 -> + fun l2 -> + fun l1_del -> + fun l2_del -> + fun am -> + match l1 with + | [] -> + Obj.magic + (Obj.repr + (FStar_Tactics_Effect.lift_div_tac + (fun uu___ -> ([], l2, l1_del, l2_del)))) + | hd::tl -> + Obj.magic + (Obj.repr + (FStar_Tactics_Effect.tac_bind + (Prims.mk_range "Steel.Effect.Common.fsti" + (Prims.of_int (875)) + (Prims.of_int (15)) + (Prims.of_int (875)) + (Prims.of_int (38))) + (Prims.mk_range "Steel.Effect.Common.fsti" + (Prims.of_int (875)) (Prims.of_int (4)) + (Prims.of_int (883)) (Prims.of_int (5))) + (Obj.magic (try_candidates hd l2 am)) + (fun uu___ -> + (fun uu___ -> + match uu___ with + | (t, n) -> + if n = Prims.int_one + then + Obj.magic + (FStar_Tactics_Effect.tac_bind + (Prims.mk_range + "Steel.Effect.Common.fsti" + (Prims.of_int (877)) + (Prims.of_int (15)) + (Prims.of_int (877)) + (Prims.of_int (36))) + (Prims.mk_range + "Steel.Effect.Common.fsti" + (Prims.of_int (878)) + (Prims.of_int (6)) + (Prims.of_int (878)) + (Prims.of_int (61))) + (Obj.magic + (remove_from_list t l2)) + (fun uu___1 -> + (fun l21 -> + Obj.magic + (equivalent_lists_once + tl l21 (hd :: + l1_del) (t :: + l2_del) am)) + uu___1)) + else + Obj.magic + (FStar_Tactics_Effect.tac_bind + (Prims.mk_range + "Steel.Effect.Common.fsti" + (Prims.of_int (881)) + (Prims.of_int (41)) + (Prims.of_int (881)) + (Prims.of_int (85))) + (Prims.mk_range + "Steel.Effect.Common.fsti" + (Prims.of_int (879)) + (Prims.of_int (11)) + (Prims.of_int (883)) + (Prims.of_int (5))) + (Obj.magic + (equivalent_lists_once + tl l2 l1_del l2_del + am)) + (fun uu___2 -> + FStar_Tactics_Effect.lift_div_tac + (fun uu___3 -> + match uu___2 with + | (rem1, rem2, + l1'_del, + l2'_del) -> + ((hd :: + rem1), + rem2, + l1'_del, + l2'_del))))) + uu___)))) uu___4 uu___3 uu___2 uu___1 + uu___ +let rec (equivalent_lists_once_l2 : + atom Prims.list -> + atom Prims.list -> + atom Prims.list -> + atom Prims.list -> + FStar_Reflection_Types.term amap -> + ((atom Prims.list * atom Prims.list * atom Prims.list * atom + Prims.list), + unit) FStar_Tactics_Effect.tac_repr) + = + fun uu___4 -> + fun uu___3 -> + fun uu___2 -> + fun uu___1 -> + fun uu___ -> + (fun l1 -> + fun l2 -> + fun l1_del -> + fun l2_del -> + fun am -> + match l2 with + | [] -> + Obj.magic + (Obj.repr + (FStar_Tactics_Effect.lift_div_tac + (fun uu___ -> (l1, [], l1_del, l2_del)))) + | hd::tl -> + Obj.magic + (Obj.repr + (FStar_Tactics_Effect.tac_bind + (Prims.mk_range "Steel.Effect.Common.fsti" + (Prims.of_int (896)) (Prims.of_int (7)) + (Prims.of_int (896)) + (Prims.of_int (29))) + (Prims.mk_range "Steel.Effect.Common.fsti" + (Prims.of_int (896)) (Prims.of_int (4)) + (Prims.of_int (910)) (Prims.of_int (5))) + (Obj.magic (is_uvar (select hd am))) + (fun uu___ -> + (fun uu___ -> + if uu___ + then + Obj.magic + (FStar_Tactics_Effect.tac_bind + (Prims.mk_range + "Steel.Effect.Common.fsti" + (Prims.of_int (898)) + (Prims.of_int (41)) + (Prims.of_int (898)) + (Prims.of_int (88))) + (Prims.mk_range + "Steel.Effect.Common.fsti" + (Prims.of_int (898)) + (Prims.of_int (6)) + (Prims.of_int (899)) + (Prims.of_int (38))) + (Obj.magic + (equivalent_lists_once_l2 + l1 tl l1_del l2_del am)) + (fun uu___1 -> + FStar_Tactics_Effect.lift_div_tac + (fun uu___2 -> + match uu___1 with + | (rem1, rem2, + l1'_del, l2'_del) + -> + (rem1, (hd :: + rem2), l1'_del, + l2'_del)))) + else + Obj.magic + (FStar_Tactics_Effect.tac_bind + (Prims.mk_range + "Steel.Effect.Common.fsti" + (Prims.of_int (901)) + (Prims.of_int (17)) + (Prims.of_int (901)) + (Prims.of_int (40))) + (Prims.mk_range + "Steel.Effect.Common.fsti" + (Prims.of_int (900)) + (Prims.of_int (9)) + (Prims.of_int (910)) + (Prims.of_int (5))) + (Obj.magic + (try_candidates hd l1 am)) + (fun uu___2 -> + (fun uu___2 -> + match uu___2 with + | (t, n) -> + if + n = Prims.int_one + then + Obj.magic + (FStar_Tactics_Effect.tac_bind + (Prims.mk_range + "Steel.Effect.Common.fsti" + (Prims.of_int (903)) + (Prims.of_int (17)) + (Prims.of_int (903)) + (Prims.of_int (38))) + (Prims.mk_range + "Steel.Effect.Common.fsti" + (Prims.of_int (904)) + (Prims.of_int (8)) + (Prims.of_int (904)) + (Prims.of_int (66))) + (Obj.magic + ( + remove_from_list + t l1)) + (fun uu___3 + -> + (fun l11 + -> + Obj.magic + (equivalent_lists_once_l2 + l11 tl (t + :: + l1_del) + (hd :: + l2_del) + am)) + uu___3)) + else + Obj.magic + (FStar_Tactics_Effect.tac_bind + (Prims.mk_range + "Steel.Effect.Common.fsti" + (Prims.of_int (907)) + (Prims.of_int (43)) + (Prims.of_int (907)) + (Prims.of_int (90))) + (Prims.mk_range + "Steel.Effect.Common.fsti" + (Prims.of_int (905)) + (Prims.of_int (13)) + (Prims.of_int (909)) + (Prims.of_int (7))) + (Obj.magic + ( + equivalent_lists_once_l2 + l1 tl + l1_del + l2_del am)) + (fun uu___4 + -> + FStar_Tactics_Effect.lift_div_tac + (fun + uu___5 -> + match uu___4 + with + | + (rem1, + rem2, + l1'_del, + l2'_del) + -> + (rem1, + (hd :: + rem2), + l1'_del, + l2'_del))))) + uu___2))) uu___)))) + uu___4 uu___3 uu___2 uu___1 uu___ +let (get_head : + atom Prims.list -> + FStar_Reflection_Types.term amap -> FStar_Reflection_Types.term) + = + fun l -> + fun am -> + match l with + | [] -> + FStar_Reflection_Builtins.pack_ln + (FStar_Reflection_Data.Tv_Const FStar_Reflection_Data.C_Unit) + | hd::uu___ -> select hd am +let (is_only_uvar : + atom Prims.list -> + FStar_Reflection_Types.term amap -> + (Prims.bool, unit) FStar_Tactics_Effect.tac_repr) + = + fun uu___1 -> + fun uu___ -> + (fun l -> + fun am -> + if (FStar_List_Tot_Base.length l) = Prims.int_one + then + Obj.magic + (Obj.repr (is_uvar (select (FStar_List_Tot_Base.hd l) am))) + else + Obj.magic + (Obj.repr + (FStar_Tactics_Effect.lift_div_tac (fun uu___1 -> false)))) + uu___1 uu___ +let rec (try_unifying_remaining : + atom Prims.list -> + FStar_Reflection_Types.term -> + FStar_Reflection_Types.term amap -> + (unit, unit) FStar_Tactics_Effect.tac_repr) + = + fun uu___2 -> + fun uu___1 -> + fun uu___ -> + (fun l -> + fun u -> + fun am -> + match l with + | [] -> + Obj.magic + (Obj.repr + (FStar_Tactics_Effect.lift_div_tac (fun uu___ -> ()))) + | hd::tl -> + Obj.magic + (Obj.repr + (FStar_Tactics_Derived.try_with + (fun uu___ -> + match () with + | () -> + FStar_Tactics_Effect.tac_bind + (Prims.mk_range + "Steel.Effect.Common.fsti" + (Prims.of_int (928)) + (Prims.of_int (13)) + (Prims.of_int (928)) + (Prims.of_int (35))) + (Prims.mk_range + "Steel.Effect.Common.fsti" + (Prims.of_int (928)) + (Prims.of_int (10)) + (Prims.of_int (928)) + (Prims.of_int (72))) + (Obj.magic + (FStar_Tactics_Derived.unify u + (select hd am))) + (fun uu___1 -> + (fun uu___1 -> + if uu___1 + then + Obj.magic + (FStar_Tactics_Effect.raise + Success) + else + Obj.magic + (FStar_Tactics_Effect.raise + Failed)) uu___1)) + (fun uu___ -> + match uu___ with + | Success -> try_unifying_remaining tl u am + | uu___1 -> + FStar_Tactics_Effect.tac_bind + (Prims.mk_range + "Steel.Effect.Common.fsti" + (Prims.of_int (930)) + (Prims.of_int (18)) + (Prims.of_int (930)) + (Prims.of_int (93))) + (Prims.mk_range + "Steel.Effect.Common.fsti" + (Prims.of_int (930)) + (Prims.of_int (13)) + (Prims.of_int (930)) + (Prims.of_int (93))) + (Obj.magic + (FStar_Tactics_Effect.tac_bind + (Prims.mk_range + "Steel.Effect.Common.fsti" + (Prims.of_int (930)) + (Prims.of_int (63)) + (Prims.of_int (930)) + (Prims.of_int (92))) + (Prims.mk_range "prims.fst" + (Prims.of_int (606)) + (Prims.of_int (19)) + (Prims.of_int (606)) + (Prims.of_int (31))) + (Obj.magic + (FStar_Tactics_Builtins.term_to_string + (select hd am))) + (fun uu___2 -> + FStar_Tactics_Effect.lift_div_tac + (fun uu___3 -> + Prims.strcat + "could not find candidate for scrutinee " + uu___2)))) + (fun uu___2 -> + (fun uu___2 -> + Obj.magic + (FStar_Tactics_Derived.fail + uu___2)) uu___2))))) uu___2 + uu___1 uu___ +let (is_smt_binder : + FStar_Reflection_Types.binder -> + (Prims.bool, unit) FStar_Tactics_Effect.tac_repr) + = + fun b -> + FStar_Tactics_Effect.tac_bind + (Prims.mk_range "Steel.Effect.Common.fsti" (Prims.of_int (934)) + (Prims.of_int (20)) (Prims.of_int (934)) (Prims.of_int (36))) + (Prims.mk_range "Steel.Effect.Common.fsti" (Prims.of_int (934)) + (Prims.of_int (2)) (Prims.of_int (936)) (Prims.of_int (73))) + (FStar_Tactics_Effect.lift_div_tac + (fun uu___ -> FStar_Reflection_Builtins.inspect_binder b)) + (fun uu___ -> + (fun uu___ -> + match uu___ with + | (bv, aqual) -> + Obj.magic + (FStar_Tactics_Effect.tac_bind + (Prims.mk_range "Steel.Effect.Common.fsti" + (Prims.of_int (935)) (Prims.of_int (10)) + (Prims.of_int (935)) (Prims.of_int (19))) + (Prims.mk_range "Steel.Effect.Common.fsti" + (Prims.of_int (936)) (Prims.of_int (2)) + (Prims.of_int (936)) (Prims.of_int (73))) + (FStar_Tactics_Effect.lift_div_tac + (fun uu___1 -> FStar_Pervasives_Native.snd aqual)) + (fun uu___1 -> + (fun l -> + Obj.magic + (FStar_Tactics_Effect.tac_bind + (Prims.mk_range "Steel.Effect.Common.fsti" + (Prims.of_int (936)) (Prims.of_int (6)) + (Prims.of_int (936)) (Prims.of_int (73))) + (Prims.mk_range "Steel.Effect.Common.fsti" + (Prims.of_int (936)) (Prims.of_int (2)) + (Prims.of_int (936)) (Prims.of_int (73))) + (Obj.magic + (FStar_Tactics_Effect.tac_bind + (Prims.mk_range + "Steel.Effect.Common.fsti" + (Prims.of_int (936)) + (Prims.of_int (24)) + (Prims.of_int (936)) + (Prims.of_int (72))) + (Prims.mk_range + "Steel.Effect.Common.fsti" + (Prims.of_int (936)) + (Prims.of_int (6)) + (Prims.of_int (936)) + (Prims.of_int (73))) + (Obj.magic + (FStar_Tactics_Util.filter + (fun uu___1 -> + (fun t -> + Obj.magic + (FStar_Tactics_Effect.lift_div_tac + (fun uu___1 -> + FStar_Reflection_Derived.is_fvar + t + "Steel.Effect.Common.smt_fallback"))) + uu___1) l)) + (fun uu___1 -> + FStar_Tactics_Effect.lift_div_tac + (fun uu___2 -> + FStar_List_Tot_Base.isEmpty + uu___1)))) + (fun uu___1 -> + FStar_Tactics_Effect.lift_div_tac + (fun uu___2 -> Prims.op_Negation uu___1)))) + uu___1))) uu___) +let rec (new_args_for_smt_attrs : + FStar_Reflection_Types.env -> + FStar_Reflection_Data.argv Prims.list -> + FStar_Reflection_Types.typ -> + ((FStar_Reflection_Data.argv Prims.list * FStar_Reflection_Types.term + Prims.list), + unit) FStar_Tactics_Effect.tac_repr) + = + fun env -> + fun l -> + fun ty -> + FStar_Tactics_Effect.tac_bind + (Prims.mk_range "Steel.Effect.Common.fsti" (Prims.of_int (942)) + (Prims.of_int (4)) (Prims.of_int (943)) (Prims.of_int (23))) + (Prims.mk_range "Steel.Effect.Common.fsti" (Prims.of_int (945)) + (Prims.of_int (2)) (Prims.of_int (971)) (Prims.of_int (66))) + (FStar_Tactics_Effect.lift_div_tac + (fun uu___ -> + fun ty1 -> + FStar_Tactics_Effect.tac_bind + (Prims.mk_range "Steel.Effect.Common.fsti" + (Prims.of_int (942)) (Prims.of_int (12)) + (Prims.of_int (942)) (Prims.of_int (22))) + (Prims.mk_range "Steel.Effect.Common.fsti" + (Prims.of_int (943)) (Prims.of_int (4)) + (Prims.of_int (943)) (Prims.of_int (23))) + (Obj.magic (FStar_Tactics_Derived.cur_env ())) + (fun uu___1 -> + (fun e -> + Obj.magic + (FStar_Tactics_Builtins.ghost_uvar_env e ty1)) + uu___1))) + (fun uu___ -> + (fun fresh_ghost_uvar -> + Obj.magic + (FStar_Tactics_Effect.tac_bind + (Prims.mk_range "Steel.Effect.Common.fsti" + (Prims.of_int (945)) (Prims.of_int (8)) + (Prims.of_int (945)) (Prims.of_int (31))) + (Prims.mk_range "Steel.Effect.Common.fsti" + (Prims.of_int (945)) (Prims.of_int (2)) + (Prims.of_int (971)) (Prims.of_int (66))) + (Obj.magic + (FStar_Tactics_Effect.tac_bind + (Prims.mk_range "Steel.Effect.Common.fsti" + (Prims.of_int (945)) (Prims.of_int (11)) + (Prims.of_int (945)) (Prims.of_int (31))) + (Prims.mk_range "Steel.Effect.Common.fsti" + (Prims.of_int (945)) (Prims.of_int (8)) + (Prims.of_int (945)) (Prims.of_int (31))) + (Obj.magic + (FStar_Tactics_Derived.inspect_unascribe ty)) + (fun uu___ -> + FStar_Tactics_Effect.lift_div_tac + (fun uu___1 -> (l, uu___))))) + (fun uu___ -> + (fun uu___ -> + match uu___ with + | ((arg, aqualv)::tl, + FStar_Reflection_Data.Tv_Arrow (binder, comp)) + -> + Obj.magic + (Obj.repr + (FStar_Tactics_Effect.tac_bind + (Prims.mk_range + "Steel.Effect.Common.fsti" + (Prims.of_int (947)) + (Prims.of_int (20)) + (Prims.of_int (947)) + (Prims.of_int (40))) + (Prims.mk_range + "Steel.Effect.Common.fsti" + (Prims.of_int (948)) + (Prims.of_int (4)) + (Prims.of_int (969)) + (Prims.of_int (7))) + (Obj.magic (is_smt_binder binder)) + (fun uu___1 -> + (fun needs_smt -> + Obj.magic + (FStar_Tactics_Effect.tac_bind + (Prims.mk_range + "Steel.Effect.Common.fsti" + (Prims.of_int (949)) + (Prims.of_int (6)) + (Prims.of_int (955)) + (Prims.of_int (26))) + (Prims.mk_range + "Steel.Effect.Common.fsti" + (Prims.of_int (958)) + (Prims.of_int (4)) + (Prims.of_int (968)) + (Prims.of_int (68))) + (if needs_smt + then + Obj.magic + (Obj.repr + (FStar_Tactics_Effect.tac_bind + (Prims.mk_range + "Steel.Effect.Common.fsti" + (Prims.of_int (950)) + (Prims.of_int (21)) + (Prims.of_int (950)) + (Prims.of_int (31))) + (Prims.mk_range + "Steel.Effect.Common.fsti" + (Prims.of_int (951)) + (Prims.of_int (8)) + (Prims.of_int (954)) + (Prims.of_int (22))) + (Obj.magic + (FStar_Tactics_Builtins.tc + env arg)) + (fun uu___1 -> + (fun arg_ty + -> + Obj.magic + (FStar_Tactics_Effect.tac_bind + (Prims.mk_range + "Steel.Effect.Common.fsti" + (Prims.of_int (951)) + (Prims.of_int (19)) + (Prims.of_int (951)) + (Prims.of_int (42))) + (Prims.mk_range + "Steel.Effect.Common.fsti" + (Prims.of_int (952)) + (Prims.of_int (8)) + (Prims.of_int (954)) + (Prims.of_int (22))) + (Obj.magic + (fresh_ghost_uvar + arg_ty)) + (fun + uu___1 -> + (fun uvar + -> + Obj.magic + (FStar_Tactics_Effect.tac_bind + (Prims.mk_range + "Steel.Effect.Common.fsti" + (Prims.of_int (952)) + (Prims.of_int (8)) + (Prims.of_int (952)) + (Prims.of_int (21))) + (Prims.mk_range + "Steel.Effect.Common.fsti" + (Prims.of_int (953)) + (Prims.of_int (8)) + (Prims.of_int (954)) + (Prims.of_int (22))) + (Obj.magic + (FStar_Tactics_Builtins.unshelve + uvar)) + (fun + uu___1 -> + (fun + uu___1 -> + Obj.magic + (FStar_Tactics_Effect.tac_bind + (Prims.mk_range + "Steel.Effect.Common.fsti" + (Prims.of_int (953)) + (Prims.of_int (8)) + (Prims.of_int (953)) + (Prims.of_int (15))) + (Prims.mk_range + "Steel.Effect.Common.fsti" + (Prims.of_int (954)) + (Prims.of_int (8)) + (Prims.of_int (954)) + (Prims.of_int (22))) + (Obj.magic + (FStar_Tactics_Derived.flip + ())) + (fun + uu___2 -> + FStar_Tactics_Effect.lift_div_tac + (fun + uu___3 -> + (uvar, + aqualv))))) + uu___1))) + uu___1))) + uu___1))) + else + Obj.magic + (Obj.repr + (FStar_Tactics_Effect.lift_div_tac + (fun uu___2 -> + (arg, aqualv))))) + (fun uu___1 -> + (fun new_hd -> + Obj.magic + (FStar_Tactics_Effect.tac_bind + (Prims.mk_range + "Steel.Effect.Common.fsti" + (Prims.of_int (959)) + (Prims.of_int (6)) + (Prims.of_int (965)) + (Prims.of_int (75))) + (Prims.mk_range + "Steel.Effect.Common.fsti" + (Prims.of_int (967)) + (Prims.of_int (4)) + (Prims.of_int (968)) + (Prims.of_int (68))) + (match FStar_Reflection_Builtins.inspect_comp + comp + with + | FStar_Reflection_Data.C_Total + ty2 -> + Obj.magic + ( + Obj.repr + (FStar_Tactics_Effect.lift_div_tac + (fun + uu___1 -> + ty2))) + | FStar_Reflection_Data.C_Eff + (uu___1, + eff_name, + ty2, + uu___2, + uu___3) + -> + Obj.magic + ( + Obj.repr + (if + eff_name + = + ["Prims"; + "Tot"] + then + Obj.repr + (FStar_Tactics_Effect.lift_div_tac + (fun + uu___4 -> + ty2)) + else + Obj.repr + (FStar_Tactics_Derived.fail + "computation type not supported in definition of slprops"))) + | uu___1 -> + Obj.magic + ( + Obj.repr + (FStar_Tactics_Derived.fail + "computation type not supported in definition of slprops"))) + (fun uu___1 -> + (fun ty2 -> + Obj.magic + (FStar_Tactics_Effect.tac_bind + (Prims.mk_range + "Steel.Effect.Common.fsti" + (Prims.of_int (967)) + (Prims.of_int (28)) + (Prims.of_int (967)) + (Prims.of_int (61))) + (Prims.mk_range + "Steel.Effect.Common.fsti" + (Prims.of_int (967)) + (Prims.of_int (4)) + (Prims.of_int (968)) + (Prims.of_int (68))) + (Obj.magic + (new_args_for_smt_attrs + env tl + ty2)) + (fun + uu___1 -> + FStar_Tactics_Effect.lift_div_tac + (fun + uu___2 -> + match uu___1 + with + | + (tl_argv, + tl_terms) + -> + ((new_hd + :: + tl_argv), + (if + needs_smt + then arg + :: + tl_terms + else + tl_terms)))))) + uu___1))) + uu___1))) uu___1))) + | ([], FStar_Reflection_Data.Tv_FVar fv) -> + Obj.magic + (Obj.repr + (FStar_Tactics_Effect.lift_div_tac + (fun uu___1 -> ([], [])))) + | uu___1 -> + Obj.magic + (Obj.repr + (FStar_Tactics_Derived.fail + "should not happen. Is an slprop partially applied?"))) + uu___))) uu___) +let (rewrite_term_for_smt : + FStar_Reflection_Types.env -> + (FStar_Reflection_Types.term amap * FStar_Reflection_Types.term + Prims.list) -> + atom -> + ((FStar_Reflection_Types.term amap * FStar_Reflection_Types.term + Prims.list), + unit) FStar_Tactics_Effect.tac_repr) + = + fun env -> + fun am -> + fun a -> + FStar_Tactics_Effect.tac_bind + (Prims.mk_range "Steel.Effect.Common.fsti" (Prims.of_int (975)) + (Prims.of_int (30)) (Prims.of_int (975)) (Prims.of_int (32))) + (Prims.mk_range "Steel.Effect.Common.fsti" (Prims.of_int (975)) + (Prims.of_int (4)) (Prims.of_int (981)) (Prims.of_int (68))) + (FStar_Tactics_Effect.lift_div_tac (fun uu___ -> am)) + (fun uu___ -> + (fun uu___ -> + match uu___ with + | (am1, prev_uvar_terms) -> + Obj.magic + (FStar_Tactics_Effect.tac_bind + (Prims.mk_range "Steel.Effect.Common.fsti" + (Prims.of_int (976)) (Prims.of_int (15)) + (Prims.of_int (976)) (Prims.of_int (26))) + (Prims.mk_range "Steel.Effect.Common.fsti" + (Prims.of_int (977)) (Prims.of_int (4)) + (Prims.of_int (981)) (Prims.of_int (68))) + (FStar_Tactics_Effect.lift_div_tac + (fun uu___1 -> select a am1)) + (fun uu___1 -> + (fun term -> + Obj.magic + (FStar_Tactics_Effect.tac_bind + (Prims.mk_range + "Steel.Effect.Common.fsti" + (Prims.of_int (977)) + (Prims.of_int (19)) + (Prims.of_int (977)) + (Prims.of_int (35))) + (Prims.mk_range + "Steel.Effect.Common.fsti" + (Prims.of_int (977)) + (Prims.of_int (4)) + (Prims.of_int (981)) + (Prims.of_int (68))) + (FStar_Tactics_Effect.lift_div_tac + (fun uu___1 -> + FStar_Reflection_Derived.collect_app + term)) + (fun uu___1 -> + (fun uu___1 -> + match uu___1 with + | (hd, args) -> + Obj.magic + (FStar_Tactics_Effect.tac_bind + (Prims.mk_range + "Steel.Effect.Common.fsti" + (Prims.of_int (978)) + (Prims.of_int (12)) + (Prims.of_int (978)) + (Prims.of_int (21))) + (Prims.mk_range + "Steel.Effect.Common.fsti" + (Prims.of_int (979)) + (Prims.of_int (4)) + (Prims.of_int (981)) + (Prims.of_int (68))) + (Obj.magic + (FStar_Tactics_Builtins.tc + env hd)) + (fun uu___2 -> + (fun t -> + Obj.magic + (FStar_Tactics_Effect.tac_bind + (Prims.mk_range + "Steel.Effect.Common.fsti" + (Prims.of_int (979)) + (Prims.of_int (31)) + (Prims.of_int (979)) + (Prims.of_int (64))) + (Prims.mk_range + "Steel.Effect.Common.fsti" + (Prims.of_int (979)) + (Prims.of_int (4)) + (Prims.of_int (981)) + (Prims.of_int (68))) + (Obj.magic + (new_args_for_smt_attrs + env args + t)) + (fun uu___2 -> + FStar_Tactics_Effect.lift_div_tac + (fun + uu___3 -> + match uu___2 + with + | + (new_args, + uvar_terms) + -> + ((update + a + (FStar_Reflection_Derived.mk_app + hd + new_args) + am1), + (FStar_List_Tot_Base.append + uvar_terms + prev_uvar_terms)))))) + uu___2))) uu___1))) + uu___1))) uu___) +let fail_atoms : + 'a . + atom Prims.list -> + atom Prims.list -> + FStar_Reflection_Types.term amap -> + ('a, unit) FStar_Tactics_Effect.tac_repr + = + fun l1 -> + fun l2 -> + fun am -> + FStar_Tactics_Effect.tac_bind + (Prims.mk_range "Steel.Effect.Common.fsti" (Prims.of_int (985)) + (Prims.of_int (9)) (Prims.of_int (985)) (Prims.of_int (105))) + (Prims.mk_range "Steel.Effect.Common.fsti" (Prims.of_int (985)) + (Prims.of_int (4)) (Prims.of_int (985)) (Prims.of_int (105))) + (Obj.magic + (FStar_Tactics_Effect.tac_bind + (Prims.mk_range "Steel.Effect.Common.fsti" + (Prims.of_int (985)) (Prims.of_int (55)) + (Prims.of_int (985)) (Prims.of_int (104))) + (Prims.mk_range "prims.fst" (Prims.of_int (606)) + (Prims.of_int (19)) (Prims.of_int (606)) + (Prims.of_int (31))) + (Obj.magic + (FStar_Tactics_Effect.tac_bind + (Prims.mk_range "Steel.Effect.Common.fsti" + (Prims.of_int (985)) (Prims.of_int (55)) + (Prims.of_int (985)) (Prims.of_int (72))) + (Prims.mk_range "Steel.Effect.Common.fsti" + (Prims.of_int (985)) (Prims.of_int (55)) + (Prims.of_int (985)) (Prims.of_int (104))) + (Obj.magic (print_atoms l1 am)) + (fun uu___ -> + (fun uu___ -> + Obj.magic + (FStar_Tactics_Effect.tac_bind + (Prims.mk_range "Steel.Effect.Common.fsti" + (Prims.of_int (985)) (Prims.of_int (75)) + (Prims.of_int (985)) (Prims.of_int (104))) + (Prims.mk_range "prims.fst" + (Prims.of_int (606)) (Prims.of_int (19)) + (Prims.of_int (606)) (Prims.of_int (31))) + (Obj.magic + (FStar_Tactics_Effect.tac_bind + (Prims.mk_range + "Steel.Effect.Common.fsti" + (Prims.of_int (985)) + (Prims.of_int (87)) + (Prims.of_int (985)) + (Prims.of_int (104))) + (Prims.mk_range "prims.fst" + (Prims.of_int (606)) + (Prims.of_int (19)) + (Prims.of_int (606)) + (Prims.of_int (31))) + (Obj.magic (print_atoms l2 am)) + (fun uu___1 -> + FStar_Tactics_Effect.lift_div_tac + (fun uu___2 -> + Prims.strcat "\nand\n" uu___1)))) + (fun uu___1 -> + FStar_Tactics_Effect.lift_div_tac + (fun uu___2 -> + Prims.strcat uu___ uu___1)))) uu___))) + (fun uu___ -> + FStar_Tactics_Effect.lift_div_tac + (fun uu___1 -> + Prims.strcat + "could not find a solution for unifying\n" uu___)))) + (fun uu___ -> + (fun uu___ -> Obj.magic (FStar_Tactics_Derived.fail uu___)) + uu___) +let rec (equivalent_lists_fallback : + Prims.nat -> + atom Prims.list -> + atom Prims.list -> + atom Prims.list -> + atom Prims.list -> + FStar_Reflection_Types.term amap -> + ((atom Prims.list * atom Prims.list * Prims.bool), unit) + FStar_Tactics_Effect.tac_repr) + = + fun uu___5 -> + fun uu___4 -> + fun uu___3 -> + fun uu___2 -> + fun uu___1 -> + fun uu___ -> + (fun n -> + fun l1 -> + fun l2 -> + fun l1_del -> + fun l2_del -> + fun am -> + match l1 with + | [] -> + Obj.magic + (Obj.repr + (match l2 with + | [] -> + Obj.repr + (FStar_Tactics_Effect.lift_div_tac + (fun uu___ -> + (l1_del, l2_del, false))) + | hd::[] -> + Obj.repr + (FStar_Tactics_Effect.tac_bind + (Prims.mk_range + "Steel.Effect.Common.fsti" + (Prims.of_int (998)) + (Prims.of_int (9)) + (Prims.of_int (998)) + (Prims.of_int (31))) + (Prims.mk_range + "Steel.Effect.Common.fsti" + (Prims.of_int (998)) + (Prims.of_int (6)) + (Prims.of_int (1002)) + (Prims.of_int (84))) + (Obj.magic + (is_uvar (select hd am))) + (fun uu___ -> + (fun uu___ -> + if uu___ + then + Obj.magic + (Obj.repr + (FStar_Tactics_Effect.lift_div_tac + (fun uu___1 -> + (l1_del, (hd + :: + l2_del), + true)))) + else + Obj.magic + (Obj.repr + (FStar_Tactics_Effect.tac_bind + (Prims.mk_range + "Steel.Effect.Common.fsti" + (Prims.of_int (1002)) + (Prims.of_int (16)) + (Prims.of_int (1002)) + (Prims.of_int (84))) + (Prims.mk_range + "Steel.Effect.Common.fsti" + (Prims.of_int (1002)) + (Prims.of_int (11)) + (Prims.of_int (1002)) + (Prims.of_int (84))) + (Obj.magic + (FStar_Tactics_Effect.tac_bind + ( + Prims.mk_range + "Steel.Effect.Common.fsti" + (Prims.of_int (1002)) + (Prims.of_int (52)) + (Prims.of_int (1002)) + (Prims.of_int (83))) + ( + Prims.mk_range + "prims.fst" + (Prims.of_int (606)) + (Prims.of_int (19)) + (Prims.of_int (606)) + (Prims.of_int (31))) + ( + Obj.magic + (FStar_Tactics_Builtins.term_to_string + (get_head + l2 am))) + ( + fun + uu___2 -> + FStar_Tactics_Effect.lift_div_tac + (fun + uu___3 -> + Prims.strcat + "could not find candidates for " + uu___2)))) + (fun uu___2 -> + (fun uu___2 + -> + Obj.magic + (FStar_Tactics_Derived.fail + uu___2)) + uu___2)))) + uu___)) + | uu___ -> + Obj.repr + (FStar_Tactics_Effect.tac_bind + (Prims.mk_range + "Steel.Effect.Common.fsti" + (Prims.of_int (1003)) + (Prims.of_int (16)) + (Prims.of_int (1003)) + (Prims.of_int (84))) + (Prims.mk_range + "Steel.Effect.Common.fsti" + (Prims.of_int (1003)) + (Prims.of_int (11)) + (Prims.of_int (1003)) + (Prims.of_int (84))) + (Obj.magic + (FStar_Tactics_Effect.tac_bind + (Prims.mk_range + "Steel.Effect.Common.fsti" + (Prims.of_int (1003)) + (Prims.of_int (52)) + (Prims.of_int (1003)) + (Prims.of_int (83))) + (Prims.mk_range + "prims.fst" + (Prims.of_int (606)) + (Prims.of_int (19)) + (Prims.of_int (606)) + (Prims.of_int (31))) + (Obj.magic + (FStar_Tactics_Builtins.term_to_string + (get_head l2 am))) + (fun uu___1 -> + FStar_Tactics_Effect.lift_div_tac + (fun uu___2 -> + Prims.strcat + "could not find candidates for " + uu___1)))) + (fun uu___1 -> + (fun uu___1 -> + Obj.magic + (FStar_Tactics_Derived.fail + uu___1)) uu___1)))) + | uu___ -> + Obj.magic + (Obj.repr + (FStar_Tactics_Effect.tac_bind + (Prims.mk_range + "Steel.Effect.Common.fsti" + (Prims.of_int (1006)) + (Prims.of_int (7)) + (Prims.of_int (1006)) + (Prims.of_int (25))) + (Prims.mk_range + "Steel.Effect.Common.fsti" + (Prims.of_int (1006)) + (Prims.of_int (4)) + (Prims.of_int (1019)) + (Prims.of_int (68))) + (Obj.magic (is_only_uvar l2 am)) + (fun uu___1 -> + (fun uu___1 -> + if uu___1 + then + Obj.magic + (FStar_Tactics_Effect.tac_bind + (Prims.mk_range + "Steel.Effect.Common.fsti" + (Prims.of_int (1010)) + (Prims.of_int (6)) + (Prims.of_int (1010)) + (Prims.of_int (51))) + (Prims.mk_range + "Steel.Effect.Common.fsti" + (Prims.of_int (1011)) + (Prims.of_int (6)) + (Prims.of_int (1011)) + (Prims.of_int (69))) + (Obj.magic + (try_unifying_remaining + l1 (get_head l2 am) + am)) + (fun uu___2 -> + FStar_Tactics_Effect.lift_div_tac + (fun uu___3 -> + ((FStar_List_Tot_Base.append + l1_del l1), + (FStar_List_Tot_Base.append + l2_del l2), + false)))) + else + Obj.magic + (FStar_Tactics_Effect.tac_bind + (Prims.mk_range + "Steel.Effect.Common.fsti" + (Prims.of_int (1013)) + (Prims.of_int (41)) + (Prims.of_int (1013)) + (Prims.of_int (85))) + (Prims.mk_range + "Steel.Effect.Common.fsti" + (Prims.of_int (1013)) + (Prims.of_int (6)) + (Prims.of_int (1019)) + (Prims.of_int (68))) + (Obj.magic + (equivalent_lists_once + l1 l2 l1_del l2_del + am)) + (fun uu___3 -> + (fun uu___3 -> + match uu___3 with + | (rem1, rem2, + l1_del', + l2_del') -> + Obj.magic + (FStar_Tactics_Effect.tac_bind + (Prims.mk_range + "Steel.Effect.Common.fsti" + (Prims.of_int (1014)) + (Prims.of_int (15)) + (Prims.of_int (1014)) + (Prims.of_int (35))) + (Prims.mk_range + "Steel.Effect.Common.fsti" + (Prims.of_int (1015)) + (Prims.of_int (6)) + (Prims.of_int (1019)) + (Prims.of_int (68))) + (FStar_Tactics_Effect.lift_div_tac + (fun + uu___4 -> + FStar_List_Tot_Base.length + rem1)) + (fun + uu___4 -> + (fun n' + -> + if + n' >= n + then + Obj.magic + (fail_atoms + rem1 rem2 + am) + else + Obj.magic + (equivalent_lists_fallback + n' rem1 + rem2 + l1_del' + l2_del' + am)) + uu___4))) + uu___3))) uu___1)))) + uu___5 uu___4 uu___3 uu___2 uu___1 uu___ +let (replace_smt_uvars : + atom Prims.list -> + atom Prims.list -> + FStar_Reflection_Types.term amap -> + ((FStar_Reflection_Types.term amap * FStar_Reflection_Types.term + Prims.list), + unit) FStar_Tactics_Effect.tac_repr) + = + fun l1 -> + fun l2 -> + fun am -> + FStar_Tactics_Effect.tac_bind + (Prims.mk_range "Steel.Effect.Common.fsti" (Prims.of_int (1023)) + (Prims.of_int (14)) (Prims.of_int (1023)) (Prims.of_int (24))) + (Prims.mk_range "Steel.Effect.Common.fsti" (Prims.of_int (1024)) + (Prims.of_int (4)) (Prims.of_int (1024)) (Prims.of_int (52))) + (Obj.magic (FStar_Tactics_Derived.cur_env ())) + (fun uu___ -> + (fun env -> + Obj.magic + (FStar_Tactics_Util.fold_left (rewrite_term_for_smt env) + (am, []) l2)) uu___) +let rec (equivalent_lists' : + Prims.nat -> + Prims.bool -> + atom Prims.list -> + atom Prims.list -> + atom Prims.list -> + atom Prims.list -> + FStar_Reflection_Types.term amap -> + ((atom Prims.list * atom Prims.list * Prims.bool * + FStar_Reflection_Types.term Prims.list), + unit) FStar_Tactics_Effect.tac_repr) + = + fun uu___6 -> + fun uu___5 -> + fun uu___4 -> + fun uu___3 -> + fun uu___2 -> + fun uu___1 -> + fun uu___ -> + (fun n -> + fun use_smt -> + fun l1 -> + fun l2 -> + fun l1_del -> + fun l2_del -> + fun am -> + match l1 with + | [] -> + Obj.magic + (Obj.repr + (match l2 with + | [] -> + Obj.repr + (FStar_Tactics_Effect.lift_div_tac + (fun uu___ -> + (l1_del, l2_del, false, + []))) + | hd::[] -> + Obj.repr + (FStar_Tactics_Effect.tac_bind + (Prims.mk_range + "Steel.Effect.Common.fsti" + (Prims.of_int (1040)) + (Prims.of_int (9)) + (Prims.of_int (1040)) + (Prims.of_int (31))) + (Prims.mk_range + "Steel.Effect.Common.fsti" + (Prims.of_int (1040)) + (Prims.of_int (6)) + (Prims.of_int (1044)) + (Prims.of_int (84))) + (Obj.magic + (is_uvar (select hd am))) + (fun uu___ -> + (fun uu___ -> + if uu___ + then + Obj.magic + (Obj.repr + (FStar_Tactics_Effect.lift_div_tac + (fun uu___1 + -> + (l1_del, + (hd :: + l2_del), + true, [])))) + else + Obj.magic + (Obj.repr + (FStar_Tactics_Effect.tac_bind + (Prims.mk_range + "Steel.Effect.Common.fsti" + (Prims.of_int (1044)) + (Prims.of_int (16)) + (Prims.of_int (1044)) + (Prims.of_int (84))) + (Prims.mk_range + "Steel.Effect.Common.fsti" + (Prims.of_int (1044)) + (Prims.of_int (11)) + (Prims.of_int (1044)) + (Prims.of_int (84))) + (Obj.magic + (FStar_Tactics_Effect.tac_bind + (Prims.mk_range + "Steel.Effect.Common.fsti" + (Prims.of_int (1044)) + (Prims.of_int (52)) + (Prims.of_int (1044)) + (Prims.of_int (83))) + (Prims.mk_range + "prims.fst" + (Prims.of_int (606)) + (Prims.of_int (19)) + (Prims.of_int (606)) + (Prims.of_int (31))) + (Obj.magic + (FStar_Tactics_Builtins.term_to_string + (get_head + l2 am))) + (fun + uu___2 -> + FStar_Tactics_Effect.lift_div_tac + (fun + uu___3 -> + Prims.strcat + "could not find candidates for " + uu___2)))) + (fun uu___2 + -> + (fun + uu___2 -> + Obj.magic + (FStar_Tactics_Derived.fail + uu___2)) + uu___2)))) + uu___)) + | uu___ -> + Obj.repr + (FStar_Tactics_Effect.tac_bind + (Prims.mk_range + "Steel.Effect.Common.fsti" + (Prims.of_int (1045)) + (Prims.of_int (16)) + (Prims.of_int (1045)) + (Prims.of_int (84))) + (Prims.mk_range + "Steel.Effect.Common.fsti" + (Prims.of_int (1045)) + (Prims.of_int (11)) + (Prims.of_int (1045)) + (Prims.of_int (84))) + (Obj.magic + (FStar_Tactics_Effect.tac_bind + (Prims.mk_range + "Steel.Effect.Common.fsti" + (Prims.of_int (1045)) + (Prims.of_int (52)) + (Prims.of_int (1045)) + (Prims.of_int (83))) + (Prims.mk_range + "prims.fst" + (Prims.of_int (606)) + (Prims.of_int (19)) + (Prims.of_int (606)) + (Prims.of_int (31))) + (Obj.magic + (FStar_Tactics_Builtins.term_to_string + (get_head l2 am))) + (fun uu___1 -> + FStar_Tactics_Effect.lift_div_tac + (fun uu___2 -> + Prims.strcat + "could not find candidates for " + uu___1)))) + (fun uu___1 -> + (fun uu___1 -> + Obj.magic + (FStar_Tactics_Derived.fail + uu___1)) uu___1)))) + | uu___ -> + Obj.magic + (Obj.repr + (FStar_Tactics_Effect.tac_bind + (Prims.mk_range + "Steel.Effect.Common.fsti" + (Prims.of_int (1048)) + (Prims.of_int (7)) + (Prims.of_int (1048)) + (Prims.of_int (25))) + (Prims.mk_range + "Steel.Effect.Common.fsti" + (Prims.of_int (1048)) + (Prims.of_int (4)) + (Prims.of_int (1071)) + (Prims.of_int (70))) + (Obj.magic (is_only_uvar l2 am)) + (fun uu___1 -> + (fun uu___1 -> + if uu___1 + then + Obj.magic + (FStar_Tactics_Effect.tac_bind + (Prims.mk_range + "Steel.Effect.Common.fsti" + (Prims.of_int (1052)) + (Prims.of_int (6)) + (Prims.of_int (1052)) + (Prims.of_int (51))) + (Prims.mk_range + "Steel.Effect.Common.fsti" + (Prims.of_int (1053)) + (Prims.of_int (6)) + (Prims.of_int (1053)) + (Prims.of_int (73))) + (Obj.magic + (try_unifying_remaining + l1 + (get_head l2 am) + am)) + (fun uu___2 -> + FStar_Tactics_Effect.lift_div_tac + (fun uu___3 -> + ((FStar_List_Tot_Base.append + l1_del l1), + (FStar_List_Tot_Base.append + l2_del l2), + false, [])))) + else + Obj.magic + (FStar_Tactics_Effect.tac_bind + (Prims.mk_range + "Steel.Effect.Common.fsti" + (Prims.of_int (1055)) + (Prims.of_int (41)) + (Prims.of_int (1055)) + (Prims.of_int (85))) + (Prims.mk_range + "Steel.Effect.Common.fsti" + (Prims.of_int (1055)) + (Prims.of_int (6)) + (Prims.of_int (1071)) + (Prims.of_int (70))) + (Obj.magic + (equivalent_lists_once + l1 l2 l1_del + l2_del am)) + (fun uu___3 -> + (fun uu___3 -> + match uu___3 + with + | (rem1, rem2, + l1_del', + l2_del') -> + Obj.magic + ( + FStar_Tactics_Effect.tac_bind + (Prims.mk_range + "Steel.Effect.Common.fsti" + (Prims.of_int (1056)) + (Prims.of_int (15)) + (Prims.of_int (1056)) + (Prims.of_int (35))) + (Prims.mk_range + "Steel.Effect.Common.fsti" + (Prims.of_int (1057)) + (Prims.of_int (6)) + (Prims.of_int (1071)) + (Prims.of_int (70))) + (FStar_Tactics_Effect.lift_div_tac + (fun + uu___4 -> + FStar_List_Tot_Base.length + rem1)) + (fun + uu___4 -> + (fun n' + -> + if + n' >= n + then + Obj.magic + (FStar_Tactics_Effect.tac_bind + (Prims.mk_range + "Steel.Effect.Common.fsti" + (Prims.of_int (1059)) + (Prims.of_int (43)) + (Prims.of_int (1059)) + (Prims.of_int (96))) + (Prims.mk_range + "Steel.Effect.Common.fsti" + (Prims.of_int (1057)) + (Prims.of_int (22)) + (Prims.of_int (1071)) + (Prims.of_int (7))) + (Obj.magic + (equivalent_lists_once_l2 + rem1 rem2 + l1_del' + l2_del' + am)) + (fun + uu___4 -> + (fun + uu___4 -> + match uu___4 + with + | + (rem11, + rem21, + l1_del'1, + l2_del'1) + -> + Obj.magic + (FStar_Tactics_Effect.tac_bind + (Prims.mk_range + "Steel.Effect.Common.fsti" + (Prims.of_int (1060)) + (Prims.of_int (17)) + (Prims.of_int (1060)) + (Prims.of_int (37))) + (Prims.mk_range + "Steel.Effect.Common.fsti" + (Prims.of_int (1061)) + (Prims.of_int (8)) + (Prims.of_int (1070)) + (Prims.of_int (72))) + (FStar_Tactics_Effect.lift_div_tac + (fun + uu___5 -> + FStar_List_Tot_Base.length + rem11)) + (fun + uu___5 -> + (fun n'1 + -> + if + n'1 >= n + then + (if + use_smt + then + Obj.magic + (FStar_Tactics_Effect.tac_bind + (Prims.mk_range + "Steel.Effect.Common.fsti" + (Prims.of_int (1066)) + (Prims.of_int (38)) + (Prims.of_int (1066)) + (Prims.of_int (68))) + (Prims.mk_range + "Steel.Effect.Common.fsti" + (Prims.of_int (1066)) + (Prims.of_int (12)) + (Prims.of_int (1068)) + (Prims.of_int (37))) + (Obj.magic + (replace_smt_uvars + rem11 + rem21 am)) + (fun + uu___5 -> + (fun + uu___5 -> + match uu___5 + with + | + (new_am, + uvar_terms) + -> + Obj.magic + (FStar_Tactics_Effect.tac_bind + (Prims.mk_range + "Steel.Effect.Common.fsti" + (Prims.of_int (1067)) + (Prims.of_int (32)) + (Prims.of_int (1067)) + (Prims.of_int (93))) + (Prims.mk_range + "Steel.Effect.Common.fsti" + (Prims.of_int (1067)) + (Prims.of_int (12)) + (Prims.of_int (1068)) + (Prims.of_int (37))) + (Obj.magic + (equivalent_lists_fallback + n'1 rem11 + rem21 + l1_del'1 + l2_del'1 + new_am)) + (fun + uu___6 -> + FStar_Tactics_Effect.lift_div_tac + (fun + uu___7 -> + match uu___6 + with + | + (l1_f, + l2_f, b) + -> + (l1_f, + l2_f, b, + uvar_terms))))) + uu___5)) + else + Obj.magic + (fail_atoms + rem11 + rem21 am)) + else + Obj.magic + (equivalent_lists' + n'1 + use_smt + rem11 + rem21 + l1_del'1 + l2_del'1 + am)) + uu___5))) + uu___4)) + else + Obj.magic + (equivalent_lists' + n' + use_smt + rem1 rem2 + l1_del' + l2_del' + am)) + uu___4))) + uu___3))) uu___1)))) + uu___6 uu___5 uu___4 uu___3 uu___2 uu___1 uu___ +let rec (unifies_with_all_uvars : + FStar_Reflection_Types.term -> + atom Prims.list -> + FStar_Reflection_Types.term amap -> + (Prims.bool, unit) FStar_Tactics_Effect.tac_repr) + = + fun uu___2 -> + fun uu___1 -> + fun uu___ -> + (fun t -> + fun l -> + fun am -> + match l with + | [] -> + Obj.magic + (Obj.repr + (FStar_Tactics_Effect.lift_div_tac + (fun uu___ -> true))) + | hd::tl -> + Obj.magic + (Obj.repr + (FStar_Tactics_Effect.tac_bind + (Prims.mk_range "Steel.Effect.Common.fsti" + (Prims.of_int (1078)) (Prims.of_int (9)) + (Prims.of_int (1078)) (Prims.of_int (39))) + (Prims.mk_range "Steel.Effect.Common.fsti" + (Prims.of_int (1078)) (Prims.of_int (6)) + (Prims.of_int (1086)) (Prims.of_int (18))) + (Obj.magic (unifies_with_all_uvars t tl am)) + (fun uu___ -> + (fun uu___ -> + if uu___ + then + Obj.magic + (Obj.repr + (FStar_Tactics_Effect.tac_bind + (Prims.mk_range + "Steel.Effect.Common.fsti" + (Prims.of_int (1080)) + (Prims.of_int (19)) + (Prims.of_int (1080)) + (Prims.of_int (31))) + (Prims.mk_range + "Steel.Effect.Common.fsti" + (Prims.of_int (1081)) + (Prims.of_int (8)) + (Prims.of_int (1085)) + (Prims.of_int (19))) + (FStar_Tactics_Effect.lift_div_tac + (fun uu___1 -> select hd am)) + (fun uu___1 -> + (fun hd_t -> + Obj.magic + (FStar_Tactics_Effect.tac_bind + (Prims.mk_range + "Steel.Effect.Common.fsti" + (Prims.of_int (1081)) + (Prims.of_int (11)) + (Prims.of_int (1081)) + (Prims.of_int (23))) + (Prims.mk_range + "Steel.Effect.Common.fsti" + (Prims.of_int (1081)) + (Prims.of_int (8)) + (Prims.of_int (1085)) + (Prims.of_int (19))) + (Obj.magic + (is_uvar hd_t)) + (fun uu___1 -> + (fun uu___1 -> + if uu___1 + then + Obj.magic + (Obj.repr + (FStar_Tactics_Derived.try_with + (fun + uu___2 -> + match () + with + | + () -> + FStar_Tactics_Effect.tac_bind + (Prims.mk_range + "Steel.Effect.Common.fsti" + (Prims.of_int (1083)) + (Prims.of_int (17)) + (Prims.of_int (1083)) + (Prims.of_int (29))) + (Prims.mk_range + "Steel.Effect.Common.fsti" + (Prims.of_int (1083)) + (Prims.of_int (14)) + (Prims.of_int (1083)) + (Prims.of_int (66))) + (Obj.magic + (FStar_Tactics_Derived.unify + t hd_t)) + (fun + uu___3 -> + (fun + uu___3 -> + if uu___3 + then + Obj.magic + (FStar_Tactics_Effect.raise + Success) + else + Obj.magic + (FStar_Tactics_Effect.raise + Failed)) + uu___3)) + (fun + uu___2 -> + (fun + uu___2 -> + Obj.magic + (FStar_Tactics_Effect.lift_div_tac + (fun + uu___3 -> + match uu___2 + with + | + Success + -> true + | + uu___4 -> + false))) + uu___2))) + else + Obj.magic + (Obj.repr + (FStar_Tactics_Effect.lift_div_tac + (fun + uu___3 -> + true)))) + uu___1))) uu___1))) + else + Obj.magic + (Obj.repr + (FStar_Tactics_Effect.lift_div_tac + (fun uu___2 -> false)))) uu___)))) + uu___2 uu___1 uu___ +let rec (most_restricted_at_top : + atom Prims.list -> + atom Prims.list -> + FStar_Reflection_Types.term amap -> + (atom Prims.list, unit) FStar_Tactics_Effect.tac_repr) + = + fun uu___2 -> + fun uu___1 -> + fun uu___ -> + (fun l1 -> + fun l2 -> + fun am -> + match l1 with + | [] -> + Obj.magic + (Obj.repr + (FStar_Tactics_Effect.lift_div_tac (fun uu___ -> []))) + | hd::tl -> + Obj.magic + (Obj.repr + (FStar_Tactics_Effect.tac_bind + (Prims.mk_range "Steel.Effect.Common.fsti" + (Prims.of_int (1094)) (Prims.of_int (7)) + (Prims.of_int (1094)) (Prims.of_int (50))) + (Prims.mk_range "Steel.Effect.Common.fsti" + (Prims.of_int (1094)) (Prims.of_int (4)) + (Prims.of_int (1095)) (Prims.of_int (46))) + (Obj.magic + (unifies_with_all_uvars (select hd am) l2 am)) + (fun uu___ -> + (fun uu___ -> + if uu___ + then + Obj.magic + (FStar_Tactics_Effect.tac_bind + (Prims.mk_range + "Steel.Effect.Common.fsti" + (Prims.of_int (1094)) + (Prims.of_int (56)) + (Prims.of_int (1094)) + (Prims.of_int (89))) + (Prims.mk_range + "Steel.Effect.Common.fsti" + (Prims.of_int (1094)) + (Prims.of_int (56)) + (Prims.of_int (1094)) + (Prims.of_int (112))) + (Obj.magic + (most_restricted_at_top tl l2 am)) + (fun uu___1 -> + FStar_Tactics_Effect.lift_div_tac + (fun uu___2 -> + FStar_List_Tot_Base.append + uu___1 [hd]))) + else + Obj.magic + (FStar_Tactics_Effect.tac_bind + (Prims.mk_range + "Steel.Effect.Common.fsti" + (Prims.of_int (1095)) + (Prims.of_int (13)) + (Prims.of_int (1095)) + (Prims.of_int (46))) + (Prims.mk_range + "Steel.Effect.Common.fsti" + (Prims.of_int (1095)) + (Prims.of_int (11)) + (Prims.of_int (1095)) + (Prims.of_int (13))) + (Obj.magic + (most_restricted_at_top tl l2 am)) + (fun uu___2 -> + FStar_Tactics_Effect.lift_div_tac + (fun uu___3 -> hd :: uu___2)))) + uu___)))) uu___2 uu___1 uu___ +let (equivalent_lists : + Prims.bool -> + atom Prims.list -> + atom Prims.list -> + FStar_Reflection_Types.term amap -> + ((atom Prims.list * atom Prims.list * Prims.bool * + FStar_Reflection_Types.term Prims.list), + unit) FStar_Tactics_Effect.tac_repr) + = + fun use_smt -> + fun l1 -> + fun l2 -> + fun am -> + FStar_Tactics_Effect.tac_bind + (Prims.mk_range "Steel.Effect.Common.fsti" (Prims.of_int (1104)) + (Prims.of_int (31)) (Prims.of_int (1104)) (Prims.of_int (55))) + (Prims.mk_range "Steel.Effect.Common.fsti" (Prims.of_int (1104)) + (Prims.of_int (2)) (Prims.of_int (1108)) (Prims.of_int (39))) + (Obj.magic (trivial_cancels l1 l2 am)) + (fun uu___ -> + (fun uu___ -> + match uu___ with + | (l11, l21, l1_del, l2_del) -> + Obj.magic + (FStar_Tactics_Effect.tac_bind + (Prims.mk_range "Steel.Effect.Common.fsti" + (Prims.of_int (1105)) (Prims.of_int (11)) + (Prims.of_int (1105)) (Prims.of_int (42))) + (Prims.mk_range "Steel.Effect.Common.fsti" + (Prims.of_int (1106)) (Prims.of_int (2)) + (Prims.of_int (1108)) (Prims.of_int (39))) + (Obj.magic (most_restricted_at_top l11 l21 am)) + (fun uu___1 -> + (fun l12 -> + Obj.magic + (FStar_Tactics_Effect.tac_bind + (Prims.mk_range + "Steel.Effect.Common.fsti" + (Prims.of_int (1106)) + (Prims.of_int (10)) + (Prims.of_int (1106)) + (Prims.of_int (28))) + (Prims.mk_range + "Steel.Effect.Common.fsti" + (Prims.of_int (1107)) + (Prims.of_int (2)) + (Prims.of_int (1108)) + (Prims.of_int (39))) + (FStar_Tactics_Effect.lift_div_tac + (fun uu___1 -> + FStar_List_Tot_Base.length l12)) + (fun uu___1 -> + (fun n -> + Obj.magic + (FStar_Tactics_Effect.tac_bind + (Prims.mk_range + "Steel.Effect.Common.fsti" + (Prims.of_int (1107)) + (Prims.of_int (46)) + (Prims.of_int (1107)) + (Prims.of_int (96))) + (Prims.mk_range + "Steel.Effect.Common.fsti" + (Prims.of_int (1107)) + (Prims.of_int (2)) + (Prims.of_int (1108)) + (Prims.of_int (39))) + (Obj.magic + (equivalent_lists' n + use_smt l12 l21 l1_del + l2_del am)) + (fun uu___1 -> + FStar_Tactics_Effect.lift_div_tac + (fun uu___2 -> + match uu___1 with + | (l1_del1, l2_del1, + emp_frame, + uvar_terms) -> + (l1_del1, + l2_del1, + emp_frame, + uvar_terms))))) + uu___1))) uu___1))) uu___) +let rec (list_to_string : + FStar_Reflection_Types.term Prims.list -> + (Prims.string, unit) FStar_Tactics_Effect.tac_repr) + = + fun uu___ -> + (fun l -> + match l with + | [] -> + Obj.magic + (Obj.repr + (FStar_Tactics_Effect.lift_div_tac (fun uu___ -> "end"))) + | hd::tl -> + Obj.magic + (Obj.repr + (FStar_Tactics_Effect.tac_bind + (Prims.mk_range "Steel.Effect.Common.fsti" + (Prims.of_int (1117)) (Prims.of_int (14)) + (Prims.of_int (1117)) (Prims.of_int (31))) + (Prims.mk_range "Steel.Effect.Common.fsti" + (Prims.of_int (1117)) (Prims.of_int (14)) + (Prims.of_int (1117)) (Prims.of_int (57))) + (Obj.magic (FStar_Tactics_Builtins.term_to_string hd)) + (fun uu___ -> + (fun uu___ -> + Obj.magic + (FStar_Tactics_Effect.tac_bind + (Prims.mk_range "Steel.Effect.Common.fsti" + (Prims.of_int (1117)) (Prims.of_int (34)) + (Prims.of_int (1117)) (Prims.of_int (57))) + (Prims.mk_range "prims.fst" + (Prims.of_int (606)) (Prims.of_int (19)) + (Prims.of_int (606)) (Prims.of_int (31))) + (Obj.magic + (FStar_Tactics_Effect.tac_bind + (Prims.mk_range + "Steel.Effect.Common.fsti" + (Prims.of_int (1117)) + (Prims.of_int (40)) + (Prims.of_int (1117)) + (Prims.of_int (57))) + (Prims.mk_range "prims.fst" + (Prims.of_int (606)) + (Prims.of_int (19)) + (Prims.of_int (606)) + (Prims.of_int (31))) + (Obj.magic (list_to_string tl)) + (fun uu___1 -> + FStar_Tactics_Effect.lift_div_tac + (fun uu___2 -> + Prims.strcat " " uu___1)))) + (fun uu___1 -> + FStar_Tactics_Effect.lift_div_tac + (fun uu___2 -> Prims.strcat uu___ uu___1)))) + uu___)))) uu___ +let rec mdenote_gen : 'a . 'a -> ('a -> 'a -> 'a) -> 'a amap -> exp -> 'a = + fun unit -> + fun mult -> + fun am -> + fun e -> + match e with + | Unit -> unit + | Atom x -> select x am + | Mult (e1, e2) -> + mult (mdenote_gen unit mult am e1) + (mdenote_gen unit mult am e2) +let rec xsdenote_gen : + 'a . 'a -> ('a -> 'a -> 'a) -> 'a amap -> atom Prims.list -> 'a = + fun unit -> + fun mult -> + fun am -> + fun xs -> + match xs with + | [] -> unit + | x::[] -> select x am + | x::xs' -> mult (select x am) (xsdenote_gen unit mult am xs') +let mdenote : + 'a . + 'a FStar_Algebra_CommMonoid_Equiv.equiv -> + ('a, unit) FStar_Algebra_CommMonoid_Equiv.cm -> 'a amap -> exp -> 'a + = + fun eq -> + fun m -> + fun am -> + fun e -> + mdenote_gen + (FStar_Algebra_CommMonoid_Equiv.__proj__CM__item__unit eq m) + (FStar_Algebra_CommMonoid_Equiv.__proj__CM__item__mult eq m) am e +let xsdenote : + 'a . + 'a FStar_Algebra_CommMonoid_Equiv.equiv -> + ('a, unit) FStar_Algebra_CommMonoid_Equiv.cm -> + 'a amap -> atom Prims.list -> 'a + = + fun eq -> + fun m -> + fun am -> + fun xs -> + xsdenote_gen + (FStar_Algebra_CommMonoid_Equiv.__proj__CM__item__unit eq m) + (FStar_Algebra_CommMonoid_Equiv.__proj__CM__item__mult eq m) am + xs +let rec my_append : 't . 't Prims.list -> 't Prims.list -> 't Prims.list = + fun l1 -> + fun l2 -> match l1 with | [] -> l2 | a::q -> a :: (my_append q l2) +let rec (flatten : exp -> atom Prims.list) = + fun e -> + match e with + | Unit -> [] + | Atom x -> [x] + | Mult (e1, e2) -> my_append (flatten e1) (flatten e2) +let rec my_partition : + 'a . ('a -> Prims.bool) -> 'a Prims.list -> ('a Prims.list * 'a Prims.list) + = + fun f -> + fun l -> + match l with + | [] -> ([], []) + | hd::tl -> + let uu___ = my_partition f tl in + (match uu___ with + | (l1, l2) -> if f hd then ((hd :: l1), l2) else (l1, (hd :: l2))) +let my_bool_of_compare : + 'a . ('a -> 'a -> Prims.int) -> 'a -> 'a -> Prims.bool = + fun f -> fun x -> fun y -> (f x y) < Prims.int_zero +let rec my_sortWith : + 'a . ('a -> 'a -> Prims.int) -> 'a Prims.list -> 'a Prims.list = + fun f -> + fun l -> + match l with + | [] -> [] + | pivot::tl -> + let uu___ = my_partition (my_bool_of_compare f pivot) tl in + (match uu___ with + | (hi, lo) -> + my_append (my_sortWith f lo) (pivot :: (my_sortWith f hi))) +type permute = atom Prims.list -> atom Prims.list +let my_compare_of_bool : + 'a . ('a -> 'a -> Prims.bool) -> 'a -> 'a -> Prims.int = + fun rel -> + fun x -> + fun y -> + if rel x y + then (Prims.of_int (-1)) + else if x = y then Prims.int_zero else Prims.int_one +let (sort : permute) = my_sortWith (my_compare_of_bool (<)) +let rec (dismiss_slprops : + unit -> (unit, unit) FStar_Tactics_Effect.tac_repr) = + fun uu___ -> + FStar_Tactics_Effect.tac_bind + (Prims.mk_range "Steel.Effect.Common.fsti" (Prims.of_int (1559)) + (Prims.of_int (8)) (Prims.of_int (1559)) (Prims.of_int (38))) + (Prims.mk_range "Steel.Effect.Common.fsti" (Prims.of_int (1559)) + (Prims.of_int (2)) (Prims.of_int (1561)) (Prims.of_int (40))) + (Obj.magic + (FStar_Tactics_Effect.tac_bind + (Prims.mk_range "Steel.Effect.Common.fsti" (Prims.of_int (1559)) + (Prims.of_int (25)) (Prims.of_int (1559)) (Prims.of_int (38))) + (Prims.mk_range "Steel.Effect.Common.fsti" (Prims.of_int (1559)) + (Prims.of_int (8)) (Prims.of_int (1559)) (Prims.of_int (38))) + (Obj.magic (FStar_Tactics_Derived.cur_goal ())) + (fun uu___1 -> + (fun uu___1 -> + Obj.magic + (FStar_Reflection_Formula.term_as_formula' uu___1)) + uu___1))) + (fun uu___1 -> + (fun uu___1 -> + match uu___1 with + | FStar_Reflection_Formula.App (t, uu___2) -> + Obj.magic + (Obj.repr + (if FStar_Reflection_Derived.is_fvar t "Prims.squash" + then + Obj.repr + (FStar_Tactics_Effect.lift_div_tac + (fun uu___3 -> ())) + else + Obj.repr + (FStar_Tactics_Effect.tac_bind + (Prims.mk_range "Steel.Effect.Common.fsti" + (Prims.of_int (1560)) (Prims.of_int (55)) + (Prims.of_int (1560)) (Prims.of_int (64))) + (Prims.mk_range "Steel.Effect.Common.fsti" + (Prims.of_int (1560)) (Prims.of_int (66)) + (Prims.of_int (1560)) (Prims.of_int (84))) + (Obj.magic (FStar_Tactics_Derived.dismiss ())) + (fun uu___4 -> + (fun uu___4 -> Obj.magic (dismiss_slprops ())) + uu___4)))) + | uu___2 -> + Obj.magic + (Obj.repr + (FStar_Tactics_Effect.tac_bind + (Prims.mk_range "Steel.Effect.Common.fsti" + (Prims.of_int (1561)) (Prims.of_int (11)) + (Prims.of_int (1561)) (Prims.of_int (20))) + (Prims.mk_range "Steel.Effect.Common.fsti" + (Prims.of_int (1561)) (Prims.of_int (22)) + (Prims.of_int (1561)) (Prims.of_int (40))) + (Obj.magic (FStar_Tactics_Derived.dismiss ())) + (fun uu___3 -> + (fun uu___3 -> Obj.magic (dismiss_slprops ())) + uu___3)))) uu___1) +let rec (n_identity_left : + Prims.int -> + FStar_Reflection_Types.term -> + FStar_Reflection_Types.term -> + (unit, unit) FStar_Tactics_Effect.tac_repr) + = + fun n -> + fun eq -> + fun m -> + if n = Prims.int_zero + then + FStar_Tactics_Effect.tac_bind + (Prims.mk_range "Steel.Effect.Common.fsti" (Prims.of_int (1566)) + (Prims.of_int (6)) (Prims.of_int (1566)) (Prims.of_int (48))) + (Prims.mk_range "Steel.Effect.Common.fsti" (Prims.of_int (1568)) + (Prims.of_int (6)) (Prims.of_int (1568)) (Prims.of_int (18))) + (Obj.magic + (FStar_Tactics_Derived.apply_lemma + (FStar_Reflection_Builtins.pack_ln + (FStar_Reflection_Data.Tv_App + ((FStar_Reflection_Builtins.pack_ln + (FStar_Reflection_Data.Tv_FVar + (FStar_Reflection_Builtins.pack_fv + ["FStar"; + "Algebra"; + "CommMonoid"; + "Equiv"; + "__proj__EQ__item__reflexivity"]))), + (eq, FStar_Reflection_Data.Q_Explicit)))))) + (fun uu___ -> + (fun uu___ -> Obj.magic (FStar_Tactics_Builtins.set_goals [])) + uu___) + else + FStar_Tactics_Effect.tac_bind + (Prims.mk_range "Steel.Effect.Common.fsti" (Prims.of_int (1570)) + (Prims.of_int (6)) (Prims.of_int (1570)) (Prims.of_int (53))) + (Prims.mk_range "Steel.Effect.Common.fsti" (Prims.of_int (1572)) + (Prims.of_int (6)) (Prims.of_int (1573)) (Prims.of_int (32))) + (Obj.magic + (FStar_Tactics_Derived.apply_lemma + (FStar_Reflection_Builtins.pack_ln + (FStar_Reflection_Data.Tv_App + ((FStar_Reflection_Builtins.pack_ln + (FStar_Reflection_Data.Tv_App + ((FStar_Reflection_Builtins.pack_ln + (FStar_Reflection_Data.Tv_FVar + (FStar_Reflection_Builtins.pack_fv + ["Steel"; + "Effect"; + "Common"; + "identity_right_diff"]))), + (eq, FStar_Reflection_Data.Q_Explicit)))), + (m, FStar_Reflection_Data.Q_Explicit)))))) + (fun uu___1 -> + (fun uu___1 -> + Obj.magic + (FStar_Tactics_Effect.tac_bind + (Prims.mk_range "Steel.Effect.Common.fsti" + (Prims.of_int (1572)) (Prims.of_int (6)) + (Prims.of_int (1572)) (Prims.of_int (24))) + (Prims.mk_range "Steel.Effect.Common.fsti" + (Prims.of_int (1573)) (Prims.of_int (6)) + (Prims.of_int (1573)) (Prims.of_int (32))) + (Obj.magic (dismiss_slprops ())) + (fun uu___2 -> + (fun uu___2 -> + Obj.magic + (n_identity_left (n - Prims.int_one) eq m)) + uu___2))) uu___1) +let rec (where_aux : + Prims.nat -> + FStar_Reflection_Types.term -> + FStar_Reflection_Types.term Prims.list -> + (Prims.nat FStar_Pervasives_Native.option, unit) + FStar_Tactics_Effect.tac_repr) + = + fun uu___2 -> + fun uu___1 -> + fun uu___ -> + (fun n -> + fun x -> + fun xs -> + match xs with + | [] -> + Obj.magic + (Obj.repr + (FStar_Tactics_Effect.lift_div_tac + (fun uu___ -> FStar_Pervasives_Native.None))) + | x'::xs' -> + Obj.magic + (Obj.repr + (FStar_Tactics_Effect.tac_bind + (Prims.mk_range "Steel.Effect.Common.fsti" + (Prims.of_int (1616)) (Prims.of_int (18)) + (Prims.of_int (1616)) (Prims.of_int (34))) + (Prims.mk_range "Steel.Effect.Common.fsti" + (Prims.of_int (1616)) (Prims.of_int (15)) + (Prims.of_int (1616)) (Prims.of_int (73))) + (Obj.magic + (FStar_Tactics_Builtins.term_eq_old x x')) + (fun uu___ -> + (fun uu___ -> + if uu___ + then + Obj.magic + (Obj.repr + (FStar_Tactics_Effect.lift_div_tac + (fun uu___1 -> + FStar_Pervasives_Native.Some n))) + else + Obj.magic + (Obj.repr + (where_aux (n + Prims.int_one) x xs'))) + uu___)))) uu___2 uu___1 uu___ +let (where : + FStar_Reflection_Types.term -> + FStar_Reflection_Types.term Prims.list -> + (Prims.nat FStar_Pervasives_Native.option, unit) + FStar_Tactics_Effect.tac_repr) + = where_aux Prims.int_zero +let (fatom : + FStar_Reflection_Types.term -> + FStar_Reflection_Types.term Prims.list -> + FStar_Reflection_Types.term amap -> + ((exp * FStar_Reflection_Types.term Prims.list * + FStar_Reflection_Types.term amap), + unit) FStar_Tactics_Effect.tac_repr) + = + fun t -> + fun ts -> + fun am -> + FStar_Tactics_Effect.tac_bind + (Prims.mk_range "Steel.Effect.Common.fsti" (Prims.of_int (1620)) + (Prims.of_int (8)) (Prims.of_int (1620)) (Prims.of_int (18))) + (Prims.mk_range "Steel.Effect.Common.fsti" (Prims.of_int (1620)) + (Prims.of_int (2)) (Prims.of_int (1625)) (Prims.of_int (63))) + (Obj.magic (where t ts)) + (fun uu___ -> + (fun uu___ -> + match uu___ with + | FStar_Pervasives_Native.Some v -> + Obj.magic + (Obj.repr + (FStar_Tactics_Effect.lift_div_tac + (fun uu___1 -> ((Atom v), ts, am)))) + | FStar_Pervasives_Native.None -> + Obj.magic + (Obj.repr + (FStar_Tactics_Effect.tac_bind + (Prims.mk_range "Steel.Effect.Common.fsti" + (Prims.of_int (1623)) (Prims.of_int (17)) + (Prims.of_int (1623)) (Prims.of_int (40))) + (Prims.mk_range "Steel.Effect.Common.fsti" + (Prims.of_int (1624)) (Prims.of_int (4)) + (Prims.of_int (1625)) (Prims.of_int (63))) + (FStar_Tactics_Effect.lift_div_tac + (fun uu___1 -> FStar_List_Tot_Base.length ts)) + (fun uu___1 -> + (fun vfresh -> + Obj.magic + (FStar_Tactics_Effect.tac_bind + (Prims.mk_range + "Steel.Effect.Common.fsti" + (Prims.of_int (1624)) + (Prims.of_int (12)) + (Prims.of_int (1624)) + (Prims.of_int (36))) + (Prims.mk_range + "Steel.Effect.Common.fsti" + (Prims.of_int (1625)) + (Prims.of_int (4)) + (Prims.of_int (1625)) + (Prims.of_int (63))) + (Obj.magic + (FStar_Tactics_Derived.norm_term + [FStar_Pervasives.iota; + FStar_Pervasives.zeta] t)) + (fun t1 -> + FStar_Tactics_Effect.lift_div_tac + (fun uu___1 -> + ((Atom vfresh), + (FStar_List_Tot_Base.append + ts [t1]), + (update vfresh t1 am)))))) + uu___1)))) uu___) +let rec (reification_aux : + FStar_Reflection_Types.term Prims.list -> + FStar_Reflection_Types.term amap -> + FStar_Reflection_Types.term -> + FStar_Reflection_Types.term -> + FStar_Reflection_Types.term -> + ((exp * FStar_Reflection_Types.term Prims.list * + FStar_Reflection_Types.term amap), + unit) FStar_Tactics_Effect.tac_repr) + = + fun ts -> + fun am -> + fun mult -> + fun unit -> + fun t -> + FStar_Tactics_Effect.tac_bind + (Prims.mk_range "Steel.Effect.Common.fsti" + (Prims.of_int (1633)) (Prims.of_int (15)) + (Prims.of_int (1633)) (Prims.of_int (32))) + (Prims.mk_range "Steel.Effect.Common.fsti" + (Prims.of_int (1633)) (Prims.of_int (2)) + (Prims.of_int (1644)) (Prims.of_int (22))) + (FStar_Tactics_Effect.lift_div_tac + (fun uu___ -> + FStar_Reflection_Derived_Lemmas.collect_app_ref t)) + (fun uu___ -> + (fun uu___ -> + match uu___ with + | (hd, tl) -> + Obj.magic + (FStar_Tactics_Effect.tac_bind + (Prims.mk_range "Steel.Effect.Common.fsti" + (Prims.of_int (1634)) (Prims.of_int (8)) + (Prims.of_int (1634)) (Prims.of_int (57))) + (Prims.mk_range "Steel.Effect.Common.fsti" + (Prims.of_int (1634)) (Prims.of_int (2)) + (Prims.of_int (1644)) (Prims.of_int (22))) + (Obj.magic + (FStar_Tactics_Effect.tac_bind + (Prims.mk_range "Steel.Effect.Common.fsti" + (Prims.of_int (1634)) + (Prims.of_int (8)) + (Prims.of_int (1634)) + (Prims.of_int (28))) + (Prims.mk_range "Steel.Effect.Common.fsti" + (Prims.of_int (1634)) + (Prims.of_int (8)) + (Prims.of_int (1634)) + (Prims.of_int (57))) + (Obj.magic + (FStar_Tactics_Derived.inspect_unascribe + hd)) + (fun uu___1 -> + FStar_Tactics_Effect.lift_div_tac + (fun uu___2 -> + (uu___1, + (FStar_List_Tot_Base.list_unref + tl)))))) + (fun uu___1 -> + (fun uu___1 -> + match uu___1 with + | (FStar_Reflection_Data.Tv_FVar fv, + (t1, FStar_Reflection_Data.Q_Explicit):: + (t2, FStar_Reflection_Data.Q_Explicit)::[]) + -> + Obj.magic + (FStar_Tactics_Effect.tac_bind + (Prims.mk_range + "Steel.Effect.Common.fsti" + (Prims.of_int (1636)) + (Prims.of_int (7)) + (Prims.of_int (1636)) + (Prims.of_int (43))) + (Prims.mk_range + "Steel.Effect.Common.fsti" + (Prims.of_int (1636)) + (Prims.of_int (4)) + (Prims.of_int (1640)) + (Prims.of_int (22))) + (Obj.magic + (FStar_Tactics_Effect.tac_bind + (Prims.mk_range + "Steel.Effect.Common.fsti" + (Prims.of_int (1636)) + (Prims.of_int (19)) + (Prims.of_int (1636)) + (Prims.of_int (38))) + (Prims.mk_range + "Steel.Effect.Common.fsti" + (Prims.of_int (1636)) + (Prims.of_int (7)) + (Prims.of_int (1636)) + (Prims.of_int (43))) + (Obj.magic + (FStar_Tactics_Builtins.pack + (FStar_Reflection_Data.Tv_FVar + fv))) + (fun uu___2 -> + (fun uu___2 -> + Obj.magic + (FStar_Tactics_Builtins.term_eq_old + uu___2 mult)) + uu___2))) + (fun uu___2 -> + (fun uu___2 -> + if uu___2 + then + Obj.magic + (FStar_Tactics_Effect.tac_bind + (Prims.mk_range + "Steel.Effect.Common.fsti" + (Prims.of_int (1637)) + (Prims.of_int (29)) + (Prims.of_int (1637)) + (Prims.of_int (63))) + (Prims.mk_range + "Steel.Effect.Common.fsti" + (Prims.of_int (1637)) + (Prims.of_int (9)) + (Prims.of_int (1639)) + (Prims.of_int (31))) + (Obj.magic + (reification_aux + ts am mult + unit t1)) + (fun uu___3 -> + (fun uu___3 -> + match uu___3 + with + | (e1, ts1, + am1) -> + Obj.magic + (FStar_Tactics_Effect.tac_bind + (Prims.mk_range + "Steel.Effect.Common.fsti" + (Prims.of_int (1638)) + (Prims.of_int (29)) + (Prims.of_int (1638)) + (Prims.of_int (63))) + (Prims.mk_range + "Steel.Effect.Common.fsti" + (Prims.of_int (1638)) + (Prims.of_int (10)) + (Prims.of_int (1639)) + (Prims.of_int (30))) + (Obj.magic + (reification_aux + ts1 am1 + mult unit + t2)) + (fun + uu___4 -> + FStar_Tactics_Effect.lift_div_tac + (fun + uu___5 -> + match uu___4 + with + | + (e2, ts2, + am2) -> + ((Mult + (e1, e2)), + ts2, am2))))) + uu___3)) + else + Obj.magic (fatom t ts am)) + uu___2)) + | (uu___2, uu___3) -> + Obj.magic + (FStar_Tactics_Effect.tac_bind + (Prims.mk_range + "Steel.Effect.Common.fsti" + (Prims.of_int (1642)) + (Prims.of_int (7)) + (Prims.of_int (1642)) + (Prims.of_int (25))) + (Prims.mk_range + "Steel.Effect.Common.fsti" + (Prims.of_int (1642)) + (Prims.of_int (4)) + (Prims.of_int (1644)) + (Prims.of_int (22))) + (Obj.magic + (FStar_Tactics_Builtins.term_eq_old + t unit)) + (fun uu___4 -> + (fun uu___4 -> + if uu___4 + then + Obj.magic + (Obj.repr + (FStar_Tactics_Effect.lift_div_tac + (fun uu___5 -> + (Unit, ts, am)))) + else + Obj.magic + (Obj.repr + (fatom t ts am))) + uu___4))) uu___1))) uu___) +let (reification : + FStar_Reflection_Types.term -> + FStar_Reflection_Types.term -> + FStar_Reflection_Types.term Prims.list -> + FStar_Reflection_Types.term amap -> + FStar_Reflection_Types.term -> + ((exp * FStar_Reflection_Types.term Prims.list * + FStar_Reflection_Types.term amap), + unit) FStar_Tactics_Effect.tac_repr) + = + fun eq -> + fun m -> + fun ts -> + fun am -> + fun t -> + FStar_Tactics_Effect.tac_bind + (Prims.mk_range "Steel.Effect.Common.fsti" + (Prims.of_int (1649)) (Prims.of_int (13)) + (Prims.of_int (1649)) (Prims.of_int (63))) + (Prims.mk_range "Steel.Effect.Common.fsti" + (Prims.of_int (1650)) (Prims.of_int (2)) + (Prims.of_int (1652)) (Prims.of_int (35))) + (Obj.magic + (FStar_Tactics_Derived.norm_term + [FStar_Pervasives.iota; + FStar_Pervasives.zeta; + FStar_Pervasives.delta] + (FStar_Reflection_Builtins.pack_ln + (FStar_Reflection_Data.Tv_App + ((FStar_Reflection_Builtins.pack_ln + (FStar_Reflection_Data.Tv_FVar + (FStar_Reflection_Builtins.pack_fv + ["FStar"; + "Algebra"; + "CommMonoid"; + "Equiv"; + "__proj__CM__item__mult"]))), + (m, FStar_Reflection_Data.Q_Explicit)))))) + (fun uu___ -> + (fun mult -> + Obj.magic + (FStar_Tactics_Effect.tac_bind + (Prims.mk_range "Steel.Effect.Common.fsti" + (Prims.of_int (1650)) (Prims.of_int (13)) + (Prims.of_int (1650)) (Prims.of_int (63))) + (Prims.mk_range "Steel.Effect.Common.fsti" + (Prims.of_int (1651)) (Prims.of_int (2)) + (Prims.of_int (1652)) (Prims.of_int (35))) + (Obj.magic + (FStar_Tactics_Derived.norm_term + [FStar_Pervasives.iota; + FStar_Pervasives.zeta; + FStar_Pervasives.delta] + (FStar_Reflection_Builtins.pack_ln + (FStar_Reflection_Data.Tv_App + ((FStar_Reflection_Builtins.pack_ln + (FStar_Reflection_Data.Tv_FVar + (FStar_Reflection_Builtins.pack_fv + ["FStar"; + "Algebra"; + "CommMonoid"; + "Equiv"; + "__proj__CM__item__unit"]))), + (m, FStar_Reflection_Data.Q_Explicit)))))) + (fun uu___ -> + (fun unit -> + Obj.magic + (FStar_Tactics_Effect.tac_bind + (Prims.mk_range + "Steel.Effect.Common.fsti" + (Prims.of_int (1651)) + (Prims.of_int (13)) + (Prims.of_int (1651)) + (Prims.of_int (37))) + (Prims.mk_range + "Steel.Effect.Common.fsti" + (Prims.of_int (1652)) + (Prims.of_int (2)) + (Prims.of_int (1652)) + (Prims.of_int (35))) + (Obj.magic + (FStar_Tactics_Derived.norm_term + [FStar_Pervasives.iota; + FStar_Pervasives.zeta] t)) + (fun uu___ -> + (fun t1 -> + Obj.magic + (reification_aux ts am mult unit + t1)) uu___))) uu___))) uu___) +let rec (convert_map : + (atom * FStar_Reflection_Types.term) Prims.list -> + FStar_Reflection_Types.term) + = + fun m -> + match m with + | [] -> + FStar_Reflection_Builtins.pack_ln + (FStar_Reflection_Data.Tv_FVar + (FStar_Reflection_Builtins.pack_fv ["Prims"; "Nil"])) + | (a, t)::ps -> + let a1 = + FStar_Reflection_Builtins.pack_ln + (FStar_Reflection_Data.Tv_Const (FStar_Reflection_Data.C_Int a)) in + let uu___ = convert_map ps in + let uu___1 = t in + let uu___2 = a1 in + FStar_Reflection_Builtins.pack_ln + (FStar_Reflection_Data.Tv_App + ((FStar_Reflection_Builtins.pack_ln + (FStar_Reflection_Data.Tv_App + ((FStar_Reflection_Builtins.pack_ln + (FStar_Reflection_Data.Tv_FVar + (FStar_Reflection_Builtins.pack_fv + ["Prims"; "Cons"]))), + ((FStar_Reflection_Builtins.pack_ln + (FStar_Reflection_Data.Tv_App + ((FStar_Reflection_Builtins.pack_ln + (FStar_Reflection_Data.Tv_App + ((FStar_Reflection_Builtins.pack_ln + (FStar_Reflection_Data.Tv_FVar + (FStar_Reflection_Builtins.pack_fv + ["FStar"; + "Pervasives"; + "Native"; + "Mktuple2"]))), + (uu___2, + FStar_Reflection_Data.Q_Explicit)))), + (uu___1, FStar_Reflection_Data.Q_Explicit)))), + FStar_Reflection_Data.Q_Explicit)))), + (uu___, FStar_Reflection_Data.Q_Explicit))) +let (convert_am : + FStar_Reflection_Types.term amap -> FStar_Reflection_Types.term) = + fun am -> + let uu___ = am in + match uu___ with + | (map, def) -> + let uu___1 = def in + let uu___2 = convert_map map in + FStar_Reflection_Builtins.pack_ln + (FStar_Reflection_Data.Tv_App + ((FStar_Reflection_Builtins.pack_ln + (FStar_Reflection_Data.Tv_App + ((FStar_Reflection_Builtins.pack_ln + (FStar_Reflection_Data.Tv_FVar + (FStar_Reflection_Builtins.pack_fv + ["FStar"; "Pervasives"; "Native"; "Mktuple2"]))), + (uu___2, FStar_Reflection_Data.Q_Explicit)))), + (uu___1, FStar_Reflection_Data.Q_Explicit))) +let rec (quote_exp : exp -> FStar_Reflection_Types.term) = + fun e -> + match e with + | Unit -> + FStar_Reflection_Builtins.pack_ln + (FStar_Reflection_Data.Tv_FVar + (FStar_Reflection_Builtins.pack_fv + ["Steel"; "Effect"; "Common"; "Unit"])) + | Mult (e1, e2) -> + let uu___ = quote_exp e2 in + let uu___1 = quote_exp e1 in + FStar_Reflection_Builtins.pack_ln + (FStar_Reflection_Data.Tv_App + ((FStar_Reflection_Builtins.pack_ln + (FStar_Reflection_Data.Tv_App + ((FStar_Reflection_Builtins.pack_ln + (FStar_Reflection_Data.Tv_FVar + (FStar_Reflection_Builtins.pack_fv + ["Steel"; "Effect"; "Common"; "Mult"]))), + (uu___1, FStar_Reflection_Data.Q_Explicit)))), + (uu___, FStar_Reflection_Data.Q_Explicit))) + | Atom n -> + let nt = + FStar_Reflection_Builtins.pack_ln + (FStar_Reflection_Data.Tv_Const (FStar_Reflection_Data.C_Int n)) in + FStar_Reflection_Builtins.pack_ln + (FStar_Reflection_Data.Tv_App + ((FStar_Reflection_Builtins.pack_ln + (FStar_Reflection_Data.Tv_FVar + (FStar_Reflection_Builtins.pack_fv + ["Steel"; "Effect"; "Common"; "Atom"]))), + (nt, FStar_Reflection_Data.Q_Explicit))) +let rec (quote_atoms : atom Prims.list -> FStar_Reflection_Types.term) = + fun l -> + match l with + | [] -> + FStar_Reflection_Builtins.pack_ln + (FStar_Reflection_Data.Tv_FVar + (FStar_Reflection_Builtins.pack_fv ["Prims"; "Nil"])) + | hd::tl -> + let nt = + FStar_Reflection_Builtins.pack_ln + (FStar_Reflection_Data.Tv_Const (FStar_Reflection_Data.C_Int hd)) in + let uu___ = quote_atoms tl in + let uu___1 = nt in + FStar_Reflection_Builtins.pack_ln + (FStar_Reflection_Data.Tv_App + ((FStar_Reflection_Builtins.pack_ln + (FStar_Reflection_Data.Tv_App + ((FStar_Reflection_Builtins.pack_ln + (FStar_Reflection_Data.Tv_FVar + (FStar_Reflection_Builtins.pack_fv + ["Prims"; "Cons"]))), + (uu___1, FStar_Reflection_Data.Q_Explicit)))), + (uu___, FStar_Reflection_Data.Q_Explicit))) +let (normal_tac_steps : FStar_Pervasives.norm_step Prims.list) = + [FStar_Pervasives.primops; + FStar_Pervasives.iota; + FStar_Pervasives.zeta; + FStar_Pervasives.delta_only + ["Steel.Effect.Common.mdenote"; + "Steel.Effect.Common.select"; + "Steel.Effect.Common.my_assoc"; + "Steel.Effect.Common.my_append"; + "Steel.Effect.Common.flatten"; + "Steel.Effect.Common.sort"; + "Steel.Effect.Common.my_sortWith"; + "Steel.Effect.Common.my_partition"; + "Steel.Effect.Common.my_bool_of_compare"; + "Steel.Effect.Common.my_compare_of_bool"; + "FStar.Pervasives.Native.fst"; + "FStar.Pervasives.Native.__proj__Mktuple2__item___1"; + "FStar.Pervasives.Native.snd"; + "FStar.Pervasives.Native.__proj__Mktuple2__item___2"; + "FStar.Algebra.CommMonoid.Equiv.__proj__CM__item__unit"; + "FStar.Algebra.CommMonoid.Equiv.__proj__CM__item__mult"; + "Steel.Effect.Common.rm"]] +let normal_tac : 'a . 'a -> 'a = fun x -> x +exception Result of (atom Prims.list * atom Prims.list * Prims.bool * + FStar_Reflection_Types.term Prims.list) +let (uu___is_Result : Prims.exn -> Prims.bool) = + fun projectee -> + match projectee with | Result uu___ -> true | uu___ -> false +let (__proj__Result__item__uu___ : + Prims.exn -> + (atom Prims.list * atom Prims.list * Prims.bool * + FStar_Reflection_Types.term Prims.list)) + = fun projectee -> match projectee with | Result uu___ -> uu___ +let (close_equality_typ' : + FStar_Reflection_Types.term -> (unit, unit) FStar_Tactics_Effect.tac_repr) + = + fun t -> + FStar_Tactics_Effect.tac_bind + (Prims.mk_range "Steel.Effect.Common.fsti" (Prims.of_int (1713)) + (Prims.of_int (10)) (Prims.of_int (1713)) (Prims.of_int (28))) + (Prims.mk_range "Steel.Effect.Common.fsti" (Prims.of_int (1714)) + (Prims.of_int (2)) (Prims.of_int (1716)) (Prims.of_int (11))) + (Obj.magic (FStar_Reflection_Formula.term_as_formula' t)) + (fun uu___ -> + (fun f -> + match f with + | FStar_Reflection_Formula.Comp + (FStar_Reflection_Formula.Eq (FStar_Pervasives_Native.Some + u), l, uu___) + -> + Obj.magic + (Obj.repr + (FStar_Tactics_Effect.tac_bind + (Prims.mk_range "Steel.Effect.Common.fsti" + (Prims.of_int (1715)) (Prims.of_int (33)) + (Prims.of_int (1715)) (Prims.of_int (42))) + (Prims.mk_range "Steel.Effect.Common.fsti" + (Prims.of_int (1715)) (Prims.of_int (30)) + (Prims.of_int (1715)) (Prims.of_int (95))) + (Obj.magic (is_uvar u)) + (fun uu___1 -> + (fun uu___1 -> + if uu___1 + then + Obj.magic + (Obj.repr + (FStar_Tactics_Effect.tac_bind + (Prims.mk_range + "Steel.Effect.Common.fsti" + (Prims.of_int (1715)) + (Prims.of_int (49)) + (Prims.of_int (1715)) + (Prims.of_int (59))) + (Prims.mk_range + "Steel.Effect.Common.fsti" + (Prims.of_int (1715)) + (Prims.of_int (61)) + (Prims.of_int (1715)) + (Prims.of_int (94))) + (Obj.magic + (FStar_Tactics_Builtins.unshelve u)) + (fun uu___2 -> + (fun uu___2 -> + Obj.magic + (FStar_Tactics_Effect.tac_bind + (Prims.mk_range + "Steel.Effect.Common.fsti" + (Prims.of_int (1715)) + (Prims.of_int (76)) + (Prims.of_int (1715)) + (Prims.of_int (94))) + (Prims.mk_range + "Steel.Effect.Common.fsti" + (Prims.of_int (1715)) + (Prims.of_int (61)) + (Prims.of_int (1715)) + (Prims.of_int (94))) + (Obj.magic + (FStar_Tactics_Effect.tac_bind + (Prims.mk_range + "Steel.Effect.Common.fsti" + (Prims.of_int (1715)) + (Prims.of_int (80)) + (Prims.of_int (1715)) + (Prims.of_int (91))) + (Prims.mk_range + "Steel.Effect.Common.fsti" + (Prims.of_int (1715)) + (Prims.of_int (76)) + (Prims.of_int (1715)) + (Prims.of_int (94))) + (Obj.magic + (FStar_Tactics_Derived.cur_env + ())) + (fun uu___3 -> + (fun uu___3 -> + Obj.magic + (FStar_Tactics_Builtins.tc + uu___3 l)) + uu___3))) + (fun uu___3 -> + (fun uu___3 -> + Obj.magic + (FStar_Tactics_Derived.exact_with_ref + uu___3)) uu___3))) + uu___2))) + else + Obj.magic + (Obj.repr + (FStar_Tactics_Effect.lift_div_tac + (fun uu___3 -> ())))) uu___1))) + | uu___ -> + Obj.magic + (Obj.repr + (FStar_Tactics_Effect.lift_div_tac (fun uu___1 -> ())))) + uu___) +let (close_equality_typ : + FStar_Reflection_Types.term -> (unit, unit) FStar_Tactics_Effect.tac_repr) + = fun t -> visit_tm close_equality_typ' t +exception Postpone of Prims.string +let (uu___is_Postpone : Prims.exn -> Prims.bool) = + fun projectee -> + match projectee with | Postpone uu___ -> true | uu___ -> false +let (__proj__Postpone__item__uu___ : Prims.exn -> Prims.string) = + fun projectee -> match projectee with | Postpone uu___ -> uu___ +let (bor : Prims.bool -> Prims.bool -> Prims.bool) = (||) +let (is_and : FStar_Reflection_Types.term -> Prims.bool) = + fun t -> + FStar_Reflection_Derived.is_any_fvar t + ["Prims.l_and"; "Steel.Effect.Common.prop_and"] +let (is_squash : FStar_Reflection_Types.term -> Prims.bool) = + fun t -> + FStar_Reflection_Derived.is_any_fvar t + ["Prims.squash"; "Prims.auto_squash"] +let (is_star : FStar_Reflection_Types.term -> Prims.bool) = + fun t -> + FStar_Reflection_Derived.is_any_fvar t + ["Steel.Effect.Common.star"; "Steel.Effect.Common.VStar"] +let (is_star_or_unit : FStar_Reflection_Types.term -> Prims.bool) = + fun t -> + FStar_Reflection_Derived.is_any_fvar t + ["Steel.Effect.Common.star"; + "Steel.Effect.Common.VStar"; + "Steel.Effect.Common.VUnit"] +let rec (unify_pr_with_true : + FStar_Reflection_Types.term -> (unit, unit) FStar_Tactics_Effect.tac_repr) + = + fun pr -> + FStar_Tactics_Effect.tac_bind + (Prims.mk_range "Steel.Effect.Common.fsti" (Prims.of_int (1790)) + (Prims.of_int (15)) (Prims.of_int (1790)) (Prims.of_int (29))) + (Prims.mk_range "Steel.Effect.Common.fsti" (Prims.of_int (1790)) + (Prims.of_int (2)) (Prims.of_int (1811)) (Prims.of_int (73))) + (FStar_Tactics_Effect.lift_div_tac + (fun uu___ -> FStar_Reflection_Derived.collect_app pr)) + (fun uu___ -> + (fun uu___ -> + match uu___ with + | (hd, tl) -> + if is_and hd + then + (match tl with + | (pr_l, uu___1)::(pr_r, uu___2)::[] -> + Obj.magic + (FStar_Tactics_Effect.tac_bind + (Prims.mk_range "Steel.Effect.Common.fsti" + (Prims.of_int (1795)) (Prims.of_int (6)) + (Prims.of_int (1795)) (Prims.of_int (29))) + (Prims.mk_range "Steel.Effect.Common.fsti" + (Prims.of_int (1796)) (Prims.of_int (6)) + (Prims.of_int (1796)) (Prims.of_int (29))) + (Obj.magic (unify_pr_with_true pr_l)) + (fun uu___3 -> + (fun uu___3 -> + Obj.magic (unify_pr_with_true pr_r)) uu___3)) + | uu___1 -> + Obj.magic + (FStar_Tactics_Derived.fail + "unify_pr_with_true: ill-formed /\\")) + else + Obj.magic + (FStar_Tactics_Effect.tac_bind + (Prims.mk_range "Steel.Effect.Common.fsti" + (Prims.of_int (1799)) (Prims.of_int (10)) + (Prims.of_int (1799)) (Prims.of_int (30))) + (Prims.mk_range "Steel.Effect.Common.fsti" + (Prims.of_int (1799)) (Prims.of_int (4)) + (Prims.of_int (1811)) (Prims.of_int (73))) + (Obj.magic + (FStar_Tactics_Derived.inspect_unascribe hd)) + (fun uu___2 -> + (fun uu___2 -> + match uu___2 with + | FStar_Reflection_Data.Tv_Uvar (uu___3, uu___4) + -> + Obj.magic + (Obj.repr + (FStar_Tactics_Effect.tac_bind + (Prims.mk_range + "Steel.Effect.Common.fsti" + (Prims.of_int (1801)) + (Prims.of_int (9)) + (Prims.of_int (1801)) + (Prims.of_int (27))) + (Prims.mk_range + "Steel.Effect.Common.fsti" + (Prims.of_int (1801)) + (Prims.of_int (6)) + (Prims.of_int (1805)) + (Prims.of_int (9))) + (Obj.magic + (FStar_Tactics_Derived.unify pr + (FStar_Reflection_Builtins.pack_ln + (FStar_Reflection_Data.Tv_FVar + (FStar_Reflection_Builtins.pack_fv + ["Steel"; + "Effect"; + "Common"; + "true_p"]))))) + (fun uu___5 -> + (fun uu___5 -> + if uu___5 + then + Obj.magic + (Obj.repr + (FStar_Tactics_Effect.lift_div_tac + (fun uu___6 -> ()))) + else + Obj.magic + (Obj.repr + (FStar_Tactics_Derived.fail + "unify_pr_with_true: could not unify SMT prop with True"))) + uu___5))) + | uu___3 -> + Obj.magic + (Obj.repr + (if + (FStar_List_Tot_Base.length + (FStar_Reflection_Builtins.free_uvars + pr)) + = Prims.int_zero + then + Obj.repr + (FStar_Tactics_Effect.lift_div_tac + (fun uu___4 -> ())) + else + Obj.repr + (FStar_Tactics_Effect.raise + (Postpone + "unify_pr_with_true: some uvars are still there"))))) + uu___2))) uu___) +let rec (set_abduction_variable_term : + FStar_Reflection_Types.term -> + (FStar_Reflection_Types.term, unit) FStar_Tactics_Effect.tac_repr) + = + fun pr -> + FStar_Tactics_Effect.tac_bind + (Prims.mk_range "Steel.Effect.Common.fsti" (Prims.of_int (1831)) + (Prims.of_int (15)) (Prims.of_int (1831)) (Prims.of_int (29))) + (Prims.mk_range "Steel.Effect.Common.fsti" (Prims.of_int (1831)) + (Prims.of_int (2)) (Prims.of_int (1852)) (Prims.of_int (54))) + (FStar_Tactics_Effect.lift_div_tac + (fun uu___ -> FStar_Reflection_Derived.collect_app pr)) + (fun uu___ -> + (fun uu___ -> + match uu___ with + | (hd, tl) -> + if is_and hd + then + (match tl with + | (pr_l, FStar_Reflection_Data.Q_Explicit)::(pr_r, + FStar_Reflection_Data.Q_Explicit)::[] + -> + if + (FStar_List_Tot_Base.length + (FStar_Reflection_Builtins.free_uvars pr_r)) + = Prims.int_zero + then + Obj.magic + (FStar_Tactics_Effect.tac_bind + (Prims.mk_range "Steel.Effect.Common.fsti" + (Prims.of_int (1838)) (Prims.of_int (18)) + (Prims.of_int (1838)) (Prims.of_int (50))) + (Prims.mk_range "Steel.Effect.Common.fsti" + (Prims.of_int (1839)) (Prims.of_int (8)) + (Prims.of_int (1839)) (Prims.of_int (53))) + (Obj.magic (set_abduction_variable_term pr_l)) + (fun arg -> + FStar_Tactics_Effect.lift_div_tac + (fun uu___1 -> + FStar_Reflection_Derived.mk_app + (FStar_Reflection_Builtins.pack_ln + (FStar_Reflection_Data.Tv_FVar + (FStar_Reflection_Builtins.pack_fv + ["Steel"; + "Effect"; + "Common"; + "elim_and_l_squash"]))) + [(arg, + FStar_Reflection_Data.Q_Explicit)]))) + else + if + (FStar_List_Tot_Base.length + (FStar_Reflection_Builtins.free_uvars pr_l)) + = Prims.int_zero + then + Obj.magic + (FStar_Tactics_Effect.tac_bind + (Prims.mk_range "Steel.Effect.Common.fsti" + (Prims.of_int (1842)) (Prims.of_int (18)) + (Prims.of_int (1842)) (Prims.of_int (50))) + (Prims.mk_range "Steel.Effect.Common.fsti" + (Prims.of_int (1843)) (Prims.of_int (8)) + (Prims.of_int (1843)) (Prims.of_int (53))) + (Obj.magic (set_abduction_variable_term pr_r)) + (fun arg -> + FStar_Tactics_Effect.lift_div_tac + (fun uu___2 -> + FStar_Reflection_Derived.mk_app + (FStar_Reflection_Builtins.pack_ln + (FStar_Reflection_Data.Tv_FVar + (FStar_Reflection_Builtins.pack_fv + ["Steel"; + "Effect"; + "Common"; + "elim_and_r_squash"]))) + [(arg, + FStar_Reflection_Data.Q_Explicit)]))) + else + Obj.magic + (FStar_Tactics_Effect.raise + (Postpone + "set_abduction_variable_term: there are still uvars on both sides of l_and")) + | uu___1 -> + Obj.magic + (FStar_Tactics_Derived.fail + "set_abduction_variable: ill-formed /\\")) + else + Obj.magic + (FStar_Tactics_Effect.tac_bind + (Prims.mk_range "Steel.Effect.Common.fsti" + (Prims.of_int (1831)) (Prims.of_int (6)) + (Prims.of_int (1831)) (Prims.of_int (8))) + (Prims.mk_range "Steel.Effect.Common.fsti" + (Prims.of_int (1849)) (Prims.of_int (4)) + (Prims.of_int (1852)) (Prims.of_int (54))) + (Obj.magic (FStar_Tactics_Builtins.inspect hd)) + (fun uu___2 -> + (fun uu___2 -> + match uu___2 with + | FStar_Reflection_Data.Tv_Uvar (uu___3, uu___4) + -> + Obj.magic + (Obj.repr + (FStar_Tactics_Effect.lift_div_tac + (fun uu___5 -> + FStar_Reflection_Derived.mk_app + (FStar_Reflection_Builtins.pack_ln + (FStar_Reflection_Data.Tv_FVar + (FStar_Reflection_Builtins.pack_fv + ["Steel"; + "Effect"; + "Common"; + "_return_squash"]))) + [((FStar_Reflection_Builtins.pack_ln + (FStar_Reflection_Data.Tv_Const + FStar_Reflection_Data.C_Unit)), + FStar_Reflection_Data.Q_Explicit)]))) + | uu___3 -> + Obj.magic + (Obj.repr + (FStar_Tactics_Derived.fail + "set_abduction_variable: cannot unify"))) + uu___2))) uu___) +let (set_abduction_variable : + unit -> (unit, unit) FStar_Tactics_Effect.tac_repr) = + fun uu___ -> + FStar_Tactics_Effect.tac_bind + (Prims.mk_range "Steel.Effect.Common.fsti" (Prims.of_int (1855)) + (Prims.of_int (10)) (Prims.of_int (1855)) (Prims.of_int (21))) + (Prims.mk_range "Steel.Effect.Common.fsti" (Prims.of_int (1856)) + (Prims.of_int (2)) (Prims.of_int (1862)) (Prims.of_int (33))) + (Obj.magic (FStar_Tactics_Derived.cur_goal ())) + (fun uu___1 -> + (fun g -> + Obj.magic + (FStar_Tactics_Effect.tac_bind + (Prims.mk_range "Steel.Effect.Common.fsti" + (Prims.of_int (1856)) (Prims.of_int (8)) + (Prims.of_int (1856)) (Prims.of_int (27))) + (Prims.mk_range "Steel.Effect.Common.fsti" + (Prims.of_int (1856)) (Prims.of_int (2)) + (Prims.of_int (1862)) (Prims.of_int (33))) + (Obj.magic (FStar_Tactics_Derived.inspect_unascribe g)) + (fun uu___1 -> + (fun uu___1 -> + match uu___1 with + | FStar_Reflection_Data.Tv_Arrow (b, uu___2) -> + Obj.magic + (FStar_Tactics_Effect.tac_bind + (Prims.mk_range "Steel.Effect.Common.fsti" + (Prims.of_int (1858)) (Prims.of_int (18)) + (Prims.of_int (1858)) (Prims.of_int (34))) + (Prims.mk_range "Steel.Effect.Common.fsti" + (Prims.of_int (1858)) (Prims.of_int (4)) + (Prims.of_int (1861)) (Prims.of_int (42))) + (FStar_Tactics_Effect.lift_div_tac + (fun uu___3 -> + FStar_Reflection_Builtins.inspect_binder + b)) + (fun uu___3 -> + (fun uu___3 -> + match uu___3 with + | (bv, uu___4) -> + Obj.magic + (FStar_Tactics_Effect.tac_bind + (Prims.mk_range + "Steel.Effect.Common.fsti" + (Prims.of_int (1859)) + (Prims.of_int (13)) + (Prims.of_int (1859)) + (Prims.of_int (26))) + (Prims.mk_range + "Steel.Effect.Common.fsti" + (Prims.of_int (1860)) + (Prims.of_int (4)) + (Prims.of_int (1861)) + (Prims.of_int (42))) + (FStar_Tactics_Effect.lift_div_tac + (fun uu___5 -> + FStar_Reflection_Builtins.inspect_bv + bv)) + (fun uu___5 -> + (fun bv1 -> + Obj.magic + (FStar_Tactics_Effect.tac_bind + (Prims.mk_range + "Steel.Effect.Common.fsti" + (Prims.of_int (1860)) + (Prims.of_int (13)) + (Prims.of_int (1860)) + (Prims.of_int (23))) + (Prims.mk_range + "Steel.Effect.Common.fsti" + (Prims.of_int (1861)) + (Prims.of_int (4)) + (Prims.of_int (1861)) + (Prims.of_int (42))) + (FStar_Tactics_Effect.lift_div_tac + (fun uu___5 -> + bv1.FStar_Reflection_Data.bv_sort)) + (fun uu___5 -> + (fun pr -> + Obj.magic + (FStar_Tactics_Effect.tac_bind + (Prims.mk_range + "Steel.Effect.Common.fsti" + (Prims.of_int (1861)) + (Prims.of_int (10)) + (Prims.of_int (1861)) + (Prims.of_int (42))) + (Prims.mk_range + "Steel.Effect.Common.fsti" + (Prims.of_int (1861)) + (Prims.of_int (4)) + (Prims.of_int (1861)) + (Prims.of_int (42))) + (Obj.magic + (set_abduction_variable_term + pr)) + (fun + uu___5 -> + (fun + uu___5 -> + Obj.magic + (FStar_Tactics_Derived.exact + uu___5)) + uu___5))) + uu___5))) + uu___5))) uu___3)) + | uu___2 -> + Obj.magic + (FStar_Tactics_Derived.fail "Not an arrow goal")) + uu___1))) uu___1) +let (canon_l_r : + Prims.bool -> + FStar_Reflection_Types.term -> + FStar_Reflection_Types.term -> + FStar_Reflection_Types.term -> + FStar_Reflection_Types.term -> + FStar_Reflection_Types.term -> + FStar_Reflection_Types.term -> + FStar_Reflection_Types.term -> + FStar_Reflection_Types.term -> + (unit, unit) FStar_Tactics_Effect.tac_repr) + = + fun use_smt -> + fun carrier_t -> + fun eq -> + fun m -> + fun pr -> + fun pr_bind -> + fun lhs -> + fun rel -> + fun rhs -> + FStar_Tactics_Effect.tac_bind + (Prims.mk_range "Steel.Effect.Common.fsti" + (Prims.of_int (1870)) (Prims.of_int (15)) + (Prims.of_int (1870)) (Prims.of_int (67))) + (Prims.mk_range "Steel.Effect.Common.fsti" + (Prims.of_int (1871)) (Prims.of_int (2)) + (Prims.of_int (2077)) (Prims.of_int (29))) + (Obj.magic + (FStar_Tactics_Derived.norm_term + [FStar_Pervasives.iota; + FStar_Pervasives.zeta; + FStar_Pervasives.delta] + (FStar_Reflection_Builtins.pack_ln + (FStar_Reflection_Data.Tv_App + ((FStar_Reflection_Builtins.pack_ln + (FStar_Reflection_Data.Tv_FVar + (FStar_Reflection_Builtins.pack_fv + ["FStar"; + "Algebra"; + "CommMonoid"; + "Equiv"; + "__proj__CM__item__unit"]))), + (m, FStar_Reflection_Data.Q_Explicit)))))) + (fun uu___ -> + (fun m_unit -> + Obj.magic + (FStar_Tactics_Effect.tac_bind + (Prims.mk_range "Steel.Effect.Common.fsti" + (Prims.of_int (1871)) (Prims.of_int (15)) + (Prims.of_int (1871)) (Prims.of_int (67))) + (Prims.mk_range "Steel.Effect.Common.fsti" + (Prims.of_int (1873)) (Prims.of_int (2)) + (Prims.of_int (2077)) (Prims.of_int (29))) + (Obj.magic + (FStar_Tactics_Derived.norm_term + [FStar_Pervasives.iota; + FStar_Pervasives.zeta; + FStar_Pervasives.delta] + (FStar_Reflection_Builtins.pack_ln + (FStar_Reflection_Data.Tv_App + ((FStar_Reflection_Builtins.pack_ln + (FStar_Reflection_Data.Tv_FVar + (FStar_Reflection_Builtins.pack_fv + ["FStar"; + "Algebra"; + "CommMonoid"; + "Equiv"; + "__proj__CM__item__mult"]))), + (m, + FStar_Reflection_Data.Q_Explicit)))))) + (fun uu___ -> + (fun m_mult -> + Obj.magic + (FStar_Tactics_Effect.tac_bind + (Prims.mk_range + "Steel.Effect.Common.fsti" + (Prims.of_int (1873)) + (Prims.of_int (11)) + (Prims.of_int (1873)) + (Prims.of_int (23))) + (Prims.mk_range + "Steel.Effect.Common.fsti" + (Prims.of_int (1874)) + (Prims.of_int (2)) + (Prims.of_int (2077)) + (Prims.of_int (29))) + (FStar_Tactics_Effect.lift_div_tac + (fun uu___ -> const m_unit)) + (fun uu___ -> + (fun am -> + Obj.magic + (FStar_Tactics_Effect.tac_bind + (Prims.mk_range + "Steel.Effect.Common.fsti" + (Prims.of_int (1874)) + (Prims.of_int (25)) + (Prims.of_int (1874)) + (Prims.of_int (51))) + (Prims.mk_range + "Steel.Effect.Common.fsti" + (Prims.of_int (1874)) + (Prims.of_int (2)) + (Prims.of_int (2077)) + (Prims.of_int (29))) + (Obj.magic + (reification eq m + [] am lhs)) + (fun uu___ -> + (fun uu___ -> + match uu___ with + | (r1_raw, ts, + am1) -> + Obj.magic + (FStar_Tactics_Effect.tac_bind + (Prims.mk_range + "Steel.Effect.Common.fsti" + (Prims.of_int (1875)) + (Prims.of_int (25)) + (Prims.of_int (1875)) + (Prims.of_int (51))) + (Prims.mk_range + "Steel.Effect.Common.fsti" + (Prims.of_int (1875)) + (Prims.of_int (2)) + (Prims.of_int (2077)) + (Prims.of_int (29))) + (Obj.magic + (reification + eq m ts + am1 rhs)) + (fun + uu___1 -> + (fun + uu___1 -> + match uu___1 + with + | + (r2_raw, + uu___2, + am2) -> + Obj.magic + (FStar_Tactics_Effect.tac_bind + (Prims.mk_range + "Steel.Effect.Common.fsti" + (Prims.of_int (1879)) + (Prims.of_int (4)) + (Prims.of_int (1884)) + (Prims.of_int (56))) + (Prims.mk_range + "Steel.Effect.Common.fsti" + (Prims.of_int (1878)) + (Prims.of_int (2)) + (Prims.of_int (2077)) + (Prims.of_int (29))) + (Obj.magic + (FStar_Tactics_Derived.try_with + (fun + uu___3 -> + match () + with + | + () -> + FStar_Tactics_Effect.tac_bind + (Prims.mk_range + "Steel.Effect.Common.fsti" + (Prims.of_int (1880)) + (Prims.of_int (16)) + (Prims.of_int (1880)) + (Prims.of_int (77))) + (Prims.mk_range + "Steel.Effect.Common.fsti" + (Prims.of_int (1881)) + (Prims.of_int (6)) + (Prims.of_int (1881)) + (Prims.of_int (24))) + (Obj.magic + (equivalent_lists + use_smt + (flatten + r1_raw) + (flatten + r2_raw) + am2)) + (fun + uu___4 -> + (fun res + -> + Obj.magic + (FStar_Tactics_Effect.raise + (Result + res))) + uu___4)) + (fun + uu___3 -> + (fun + uu___3 -> + match uu___3 + with + | + FStar_Tactics_Common.TacticFailure + m1 -> + Obj.magic + (Obj.repr + (FStar_Tactics_Derived.fail + m1)) + | + Result + res -> + Obj.magic + (Obj.repr + (FStar_Tactics_Effect.lift_div_tac + (fun + uu___4 -> + res))) + | + uu___4 -> + Obj.magic + (Obj.repr + (FStar_Tactics_Derived.fail + "uncaught exception in equivalent_lists"))) + uu___3))) + (fun + uu___3 -> + (fun + uu___3 -> + match uu___3 + with + | + (l1_raw, + l2_raw, + emp_frame, + uvar_terms) + -> + Obj.magic + (FStar_Tactics_Effect.tac_bind + (Prims.mk_range + "Steel.Effect.Common.fsti" + (Prims.of_int (1904)) + (Prims.of_int (33)) + (Prims.of_int (1906)) + (Prims.of_int (20))) + (Prims.mk_range + "Steel.Effect.Common.fsti" + (Prims.of_int (1908)) + (Prims.of_int (2)) + (Prims.of_int (2077)) + (Prims.of_int (29))) + (Obj.magic + (FStar_Tactics_Util.mapi + (fun i -> + fun + uu___4 -> + match uu___4 + with + | + (a, + uu___5) + -> + FStar_Tactics_Effect.tac_bind + (Prims.mk_range + "Steel.Effect.Common.fsti" + (Prims.of_int (1905)) + (Prims.of_int (12)) + (Prims.of_int (1905)) + (Prims.of_int (62))) + (Prims.mk_range + "Steel.Effect.Common.fsti" + (Prims.of_int (1906)) + (Prims.of_int (4)) + (Prims.of_int (1906)) + (Prims.of_int (10))) + (Obj.magic + (FStar_Tactics_Builtins.fresh_bv_named + (Prims.strcat + "x" + (Prims.string_of_int + i)) + carrier_t)) + (fun x -> + FStar_Tactics_Effect.lift_div_tac + (fun + uu___6 -> + (a, x)))) + (FStar_Pervasives_Native.fst + am2))) + (fun + uu___4 -> + (fun + am_bv -> + Obj.magic + (FStar_Tactics_Effect.tac_bind + (Prims.mk_range + "Steel.Effect.Common.fsti" + (Prims.of_int (1908)) + (Prims.of_int (31)) + (Prims.of_int (1908)) + (Prims.of_int (85))) + (Prims.mk_range + "Steel.Effect.Common.fsti" + (Prims.of_int (1910)) + (Prims.of_int (2)) + (Prims.of_int (2077)) + (Prims.of_int (29))) + (Obj.magic + (FStar_Tactics_Effect.tac_bind + (Prims.mk_range + "Steel.Effect.Common.fsti" + (Prims.of_int (1908)) + (Prims.of_int (31)) + (Prims.of_int (1908)) + (Prims.of_int (77))) + (Prims.mk_range + "Steel.Effect.Common.fsti" + (Prims.of_int (1908)) + (Prims.of_int (31)) + (Prims.of_int (1908)) + (Prims.of_int (85))) + (Obj.magic + (FStar_Tactics_Util.map + (fun + uu___4 -> + match uu___4 + with + | + (a, bv) + -> + FStar_Tactics_Effect.tac_bind + (Prims.mk_range + "Steel.Effect.Common.fsti" + (Prims.of_int (1908)) + (Prims.of_int (54)) + (Prims.of_int (1908)) + (Prims.of_int (70))) + (Prims.mk_range + "Steel.Effect.Common.fsti" + (Prims.of_int (1908)) + (Prims.of_int (51)) + (Prims.of_int (1908)) + (Prims.of_int (70))) + (Obj.magic + (FStar_Tactics_Builtins.pack + (FStar_Reflection_Data.Tv_Var + bv))) + (fun + uu___5 -> + FStar_Tactics_Effect.lift_div_tac + (fun + uu___6 -> + (a, + uu___5)))) + am_bv)) + (fun + uu___4 -> + FStar_Tactics_Effect.lift_div_tac + (fun + uu___5 -> + (uu___4, + (FStar_Pervasives_Native.snd + am2)))))) + (fun + uu___4 -> + (fun + am_bv_term + -> + Obj.magic + (FStar_Tactics_Effect.tac_bind + (Prims.mk_range + "Steel.Effect.Common.fsti" + (Prims.of_int (1910)) + (Prims.of_int (34)) + (Prims.of_int (1914)) + (Prims.of_int (5))) + (Prims.mk_range + "Steel.Effect.Common.fsti" + (Prims.of_int (1916)) + (Prims.of_int (2)) + (Prims.of_int (2077)) + (Prims.of_int (29))) + (FStar_Tactics_Effect.lift_div_tac + (fun + uu___4 -> + fun e -> + mdenote_gen + m_unit + (fun t1 + -> + fun t2 -> + FStar_Reflection_Derived.mk_app + m_mult + [ + (t1, + FStar_Reflection_Data.Q_Explicit); + (t2, + FStar_Reflection_Data.Q_Explicit)]) + am_bv_term + e)) + (fun + uu___4 -> + (fun + mdenote_tm + -> + Obj.magic + (FStar_Tactics_Effect.tac_bind + (Prims.mk_range + "Steel.Effect.Common.fsti" + (Prims.of_int (1916)) + (Prims.of_int (41)) + (Prims.of_int (1920)) + (Prims.of_int (5))) + (Prims.mk_range + "Steel.Effect.Common.fsti" + (Prims.of_int (1924)) + (Prims.of_int (2)) + (Prims.of_int (2077)) + (Prims.of_int (29))) + (FStar_Tactics_Effect.lift_div_tac + (fun + uu___4 -> + fun l -> + xsdenote_gen + m_unit + (fun t1 + -> + fun t2 -> + FStar_Reflection_Derived.mk_app + m_mult + [ + (t1, + FStar_Reflection_Data.Q_Explicit); + (t2, + FStar_Reflection_Data.Q_Explicit)]) + am_bv_term + l)) + (fun + uu___4 -> + (fun + xsdenote_tm + -> + Obj.magic + (FStar_Tactics_Effect.tac_bind + (Prims.mk_range + "Steel.Effect.Common.fsti" + (Prims.of_int (1924)) + (Prims.of_int (18)) + (Prims.of_int (1924)) + (Prims.of_int (35))) + (Prims.mk_range + "Steel.Effect.Common.fsti" + (Prims.of_int (1925)) + (Prims.of_int (2)) + (Prims.of_int (2077)) + (Prims.of_int (29))) + (FStar_Tactics_Effect.lift_div_tac + (fun + uu___4 -> + mdenote_tm + r1_raw)) + (fun + uu___4 -> + (fun + lhs_named + -> + Obj.magic + (FStar_Tactics_Effect.tac_bind + (Prims.mk_range + "Steel.Effect.Common.fsti" + (Prims.of_int (1925)) + (Prims.of_int (18)) + (Prims.of_int (1925)) + (Prims.of_int (35))) + (Prims.mk_range + "Steel.Effect.Common.fsti" + (Prims.of_int (1927)) + (Prims.of_int (2)) + (Prims.of_int (2077)) + (Prims.of_int (29))) + (FStar_Tactics_Effect.lift_div_tac + (fun + uu___4 -> + mdenote_tm + r2_raw)) + (fun + uu___4 -> + (fun + rhs_named + -> + Obj.magic + (FStar_Tactics_Effect.tac_bind + (Prims.mk_range + "Steel.Effect.Common.fsti" + (Prims.of_int (1927)) + (Prims.of_int (25)) + (Prims.of_int (1927)) + (Prims.of_int (43))) + (Prims.mk_range + "Steel.Effect.Common.fsti" + (Prims.of_int (1928)) + (Prims.of_int (2)) + (Prims.of_int (2077)) + (Prims.of_int (29))) + (FStar_Tactics_Effect.lift_div_tac + (fun + uu___4 -> + xsdenote_tm + l1_raw)) + (fun + uu___4 -> + (fun + sorted_lhs_named + -> + Obj.magic + (FStar_Tactics_Effect.tac_bind + (Prims.mk_range + "Steel.Effect.Common.fsti" + (Prims.of_int (1928)) + (Prims.of_int (25)) + (Prims.of_int (1928)) + (Prims.of_int (43))) + (Prims.mk_range + "Steel.Effect.Common.fsti" + (Prims.of_int (1936)) + (Prims.of_int (2)) + (Prims.of_int (2077)) + (Prims.of_int (29))) + (FStar_Tactics_Effect.lift_div_tac + (fun + uu___4 -> + xsdenote_tm + l2_raw)) + (fun + uu___4 -> + (fun + sorted_rhs_named + -> + Obj.magic + (FStar_Tactics_Effect.tac_bind + (Prims.mk_range + "Steel.Effect.Common.fsti" + (Prims.of_int (1937)) + (Prims.of_int (4)) + (Prims.of_int (1937)) + (Prims.of_int (49))) + (Prims.mk_range + "Steel.Effect.Common.fsti" + (Prims.of_int (1939)) + (Prims.of_int (2)) + (Prims.of_int (2077)) + (Prims.of_int (29))) + (FStar_Tactics_Effect.lift_div_tac + (fun + uu___4 -> + fun l -> + fun r -> + FStar_Reflection_Derived.mk_app + rel + [ + (l, + FStar_Reflection_Data.Q_Explicit); + (r, + FStar_Reflection_Data.Q_Explicit)])) + (fun + uu___4 -> + (fun + mk_rel -> + Obj.magic + (FStar_Tactics_Effect.tac_bind + (Prims.mk_range + "Steel.Effect.Common.fsti" + (Prims.of_int (1939)) + (Prims.of_int (16)) + (Prims.of_int (1939)) + (Prims.of_int (42))) + (Prims.mk_range + "Steel.Effect.Common.fsti" + (Prims.of_int (1940)) + (Prims.of_int (2)) + (Prims.of_int (2077)) + (Prims.of_int (29))) + (FStar_Tactics_Effect.lift_div_tac + (fun + uu___4 -> + mk_rel + lhs_named + rhs_named)) + (fun + uu___4 -> + (fun + imp_rhs + -> + Obj.magic + (FStar_Tactics_Effect.tac_bind + (Prims.mk_range + "Steel.Effect.Common.fsti" + (Prims.of_int (1940)) + (Prims.of_int (16)) + (Prims.of_int (1940)) + (Prims.of_int (56))) + (Prims.mk_range + "Steel.Effect.Common.fsti" + (Prims.of_int (1942)) + (Prims.of_int (2)) + (Prims.of_int (2077)) + (Prims.of_int (29))) + (FStar_Tactics_Effect.lift_div_tac + (fun + uu___4 -> + mk_rel + sorted_lhs_named + sorted_rhs_named)) + (fun + uu___4 -> + (fun + imp_lhs + -> + Obj.magic + (FStar_Tactics_Effect.tac_bind + (Prims.mk_range + "Steel.Effect.Common.fsti" + (Prims.of_int (1943)) + (Prims.of_int (4)) + (Prims.of_int (1943)) + (Prims.of_int (91))) + (Prims.mk_range + "Steel.Effect.Common.fsti" + (Prims.of_int (1947)) + (Prims.of_int (2)) + (Prims.of_int (2077)) + (Prims.of_int (29))) + (Obj.magic + (FStar_Tactics_Effect.tac_bind + (Prims.mk_range + "Steel.Effect.Common.fsti" + (Prims.of_int (1943)) + (Prims.of_int (11)) + (Prims.of_int (1943)) + (Prims.of_int (44))) + (Prims.mk_range + "Steel.Effect.Common.fsti" + (Prims.of_int (1943)) + (Prims.of_int (4)) + (Prims.of_int (1943)) + (Prims.of_int (91))) + (Obj.magic + (FStar_Tactics_Builtins.pack + (FStar_Reflection_Data.Tv_FVar + (FStar_Reflection_Builtins.pack_fv + FStar_Reflection_Const.imp_qn)))) + (fun + uu___4 -> + FStar_Tactics_Effect.lift_div_tac + (fun + uu___5 -> + FStar_Reflection_Derived.mk_app + uu___4 + [ + (imp_lhs, + FStar_Reflection_Data.Q_Explicit); + (imp_rhs, + FStar_Reflection_Data.Q_Explicit)])))) + (fun + uu___4 -> + (fun imp + -> + Obj.magic + (FStar_Tactics_Effect.tac_bind + (Prims.mk_range + "Steel.Effect.Common.fsti" + (Prims.of_int (1947)) + (Prims.of_int (17)) + (Prims.of_int (1951)) + (Prims.of_int (74))) + (Prims.mk_range + "Steel.Effect.Common.fsti" + (Prims.of_int (1956)) + (Prims.of_int (2)) + (Prims.of_int (2077)) + (Prims.of_int (29))) + (Obj.magic + (FStar_Tactics_Util.fold_right + (fun + uu___4 -> + fun t -> + match uu___4 + with + | + (uu___5, + bv) -> + FStar_Tactics_Effect.tac_bind + (Prims.mk_range + "Steel.Effect.Common.fsti" + (Prims.of_int (1948)) + (Prims.of_int (12)) + (Prims.of_int (1948)) + (Prims.of_int (40))) + (Prims.mk_range + "Steel.Effect.Common.fsti" + (Prims.of_int (1949)) + (Prims.of_int (4)) + (Prims.of_int (1951)) + (Prims.of_int (63))) + (FStar_Tactics_Effect.lift_div_tac + (fun + uu___6 -> + FStar_Reflection_Builtins.pack_binder + bv + FStar_Reflection_Data.Q_Explicit + [])) + (fun + uu___6 -> + (fun b -> + Obj.magic + (FStar_Tactics_Effect.tac_bind + (Prims.mk_range + "Steel.Effect.Common.fsti" + (Prims.of_int (1949)) + (Prims.of_int (12)) + (Prims.of_int (1949)) + (Prims.of_int (26))) + (Prims.mk_range + "Steel.Effect.Common.fsti" + (Prims.of_int (1950)) + (Prims.of_int (4)) + (Prims.of_int (1951)) + (Prims.of_int (63))) + (FStar_Tactics_Effect.lift_div_tac + (fun + uu___6 -> + FStar_Reflection_Builtins.close_term + b t)) + (fun + uu___6 -> + (fun t1 + -> + Obj.magic + (FStar_Tactics_Effect.tac_bind + (Prims.mk_range + "Steel.Effect.Common.fsti" + (Prims.of_int (1950)) + (Prims.of_int (12)) + (Prims.of_int (1950)) + (Prims.of_int (32))) + (Prims.mk_range + "Steel.Effect.Common.fsti" + (Prims.of_int (1951)) + (Prims.of_int (4)) + (Prims.of_int (1951)) + (Prims.of_int (63))) + (FStar_Tactics_Effect.lift_div_tac + (fun + uu___6 -> + FStar_Reflection_Builtins.pack_ln + (FStar_Reflection_Data.Tv_Abs + (b, t1)))) + (fun + uu___6 -> + (fun t2 + -> + Obj.magic + (FStar_Tactics_Effect.tac_bind + (Prims.mk_range + "Steel.Effect.Common.fsti" + (Prims.of_int (1951)) + (Prims.of_int (11)) + (Prims.of_int (1951)) + (Prims.of_int (47))) + (Prims.mk_range + "Steel.Effect.Common.fsti" + (Prims.of_int (1951)) + (Prims.of_int (4)) + (Prims.of_int (1951)) + (Prims.of_int (63))) + (Obj.magic + (FStar_Tactics_Builtins.pack + (FStar_Reflection_Data.Tv_FVar + (FStar_Reflection_Builtins.pack_fv + FStar_Reflection_Const.forall_qn)))) + (fun + uu___6 -> + FStar_Tactics_Effect.lift_div_tac + (fun + uu___7 -> + FStar_Reflection_Derived.mk_app + uu___6 + [ + (t2, + FStar_Reflection_Data.Q_Explicit)])))) + uu___6))) + uu___6))) + uu___6)) + am_bv imp)) + (fun + uu___4 -> + (fun + aux_goal + -> + Obj.magic + (FStar_Tactics_Effect.tac_bind + (Prims.mk_range + "Steel.Effect.Common.fsti" + (Prims.of_int (1956)) + (Prims.of_int (2)) + (Prims.of_int (1956)) + (Prims.of_int (33))) + (Prims.mk_range + "Steel.Effect.Common.fsti" + (Prims.of_int (1962)) + (Prims.of_int (2)) + (Prims.of_int (2077)) + (Prims.of_int (29))) + (Obj.magic + (FStar_Tactics_Derived.apply_lemma + (FStar_Reflection_Builtins.pack_ln + (FStar_Reflection_Data.Tv_App + ((FStar_Reflection_Builtins.pack_ln + (FStar_Reflection_Data.Tv_FVar + (FStar_Reflection_Builtins.pack_fv + ["Steel"; + "Effect"; + "Common"; + "cut"]))), + (aux_goal, + FStar_Reflection_Data.Q_Explicit)))))) + (fun + uu___4 -> + (fun + uu___4 -> + Obj.magic + (FStar_Tactics_Effect.tac_bind + (Prims.mk_range + "Steel.Effect.Common.fsti" + (Prims.of_int (1962)) + (Prims.of_int (2)) + (Prims.of_int (1962)) + (Prims.of_int (10))) + (Prims.mk_range + "Steel.Effect.Common.fsti" + (Prims.of_int (1966)) + (Prims.of_int (2)) + (Prims.of_int (2077)) + (Prims.of_int (29))) + (Obj.magic + (FStar_Tactics_Logic.split + ())) + (fun + uu___5 -> + (fun + uu___5 -> + Obj.magic + (FStar_Tactics_Effect.tac_bind + (Prims.mk_range + "Steel.Effect.Common.fsti" + (Prims.of_int (1966)) + (Prims.of_int (2)) + (Prims.of_int (2034)) + (Prims.of_int (8))) + (Prims.mk_range + "Steel.Effect.Common.fsti" + (Prims.of_int (2036)) + (Prims.of_int (2)) + (Prims.of_int (2077)) + (Prims.of_int (29))) + (Obj.magic + (FStar_Tactics_Derived.focus + (fun + uu___6 -> + FStar_Tactics_Effect.tac_bind + (Prims.mk_range + "Steel.Effect.Common.fsti" + (Prims.of_int (1974)) + (Prims.of_int (13)) + (Prims.of_int (1977)) + (Prims.of_int (49))) + (Prims.mk_range + "Steel.Effect.Common.fsti" + (Prims.of_int (1981)) + (Prims.of_int (4)) + (Prims.of_int (2034)) + (Prims.of_int (7))) + (Obj.magic + (FStar_Tactics_Effect.tac_bind + (Prims.mk_range + "Steel.Effect.Common.fsti" + (Prims.of_int (1974)) + (Prims.of_int (13)) + (Prims.of_int (1977)) + (Prims.of_int (41))) + (Prims.mk_range + "Steel.Effect.Common.fsti" + (Prims.of_int (1974)) + (Prims.of_int (13)) + (Prims.of_int (1977)) + (Prims.of_int (49))) + (Obj.magic + (FStar_Tactics_Util.fold_left + (fun am3 + -> + fun + uu___7 -> + match uu___7 + with + | + (a, + uu___8) + -> + FStar_Tactics_Effect.tac_bind + (Prims.mk_range + "Steel.Effect.Common.fsti" + (Prims.of_int (1975)) + (Prims.of_int (14)) + (Prims.of_int (1975)) + (Prims.of_int (29))) + (Prims.mk_range + "Steel.Effect.Common.fsti" + (Prims.of_int (1976)) + (Prims.of_int (6)) + (Prims.of_int (1977)) + (Prims.of_int (31))) + (Obj.magic + (FStar_Tactics_Logic.forall_intro + ())) + (fun + uu___9 -> + (fun b -> + Obj.magic + (FStar_Tactics_Effect.tac_bind + (Prims.mk_range + "Steel.Effect.Common.fsti" + (Prims.of_int (1976)) + (Prims.of_int (18)) + (Prims.of_int (1976)) + (Prims.of_int (34))) + (Prims.mk_range + "Steel.Effect.Common.fsti" + (Prims.of_int (1976)) + (Prims.of_int (6)) + (Prims.of_int (1977)) + (Prims.of_int (31))) + (FStar_Tactics_Effect.lift_div_tac + (fun + uu___9 -> + FStar_Reflection_Builtins.inspect_binder + b)) + (fun + uu___9 -> + (fun + uu___9 -> + match uu___9 + with + | + (bv, + uu___10) + -> + Obj.magic + (FStar_Tactics_Effect.tac_bind + (Prims.mk_range + "Steel.Effect.Common.fsti" + (Prims.of_int (1977)) + (Prims.of_int (6)) + (Prims.of_int (1977)) + (Prims.of_int (27))) + (Prims.mk_range + "Steel.Effect.Common.fsti" + (Prims.of_int (1977)) + (Prims.of_int (27)) + (Prims.of_int (1977)) + (Prims.of_int (29))) + (Obj.magic + (FStar_Tactics_Effect.tac_bind + (Prims.mk_range + "Steel.Effect.Common.fsti" + (Prims.of_int (1977)) + (Prims.of_int (10)) + (Prims.of_int (1977)) + (Prims.of_int (26))) + (Prims.mk_range + "Steel.Effect.Common.fsti" + (Prims.of_int (1977)) + (Prims.of_int (6)) + (Prims.of_int (1977)) + (Prims.of_int (27))) + (Obj.magic + (FStar_Tactics_Builtins.pack + (FStar_Reflection_Data.Tv_Var + bv))) + (fun + uu___11 + -> + FStar_Tactics_Effect.lift_div_tac + (fun + uu___12 + -> + (a, + uu___11))))) + (fun + uu___11 + -> + FStar_Tactics_Effect.lift_div_tac + (fun + uu___12 + -> + uu___11 + :: am3)))) + uu___9))) + uu___9)) + [] am_bv)) + (fun + uu___7 -> + FStar_Tactics_Effect.lift_div_tac + (fun + uu___8 -> + (uu___7, + (FStar_Pervasives_Native.snd + am2)))))) + (fun + uu___7 -> + (fun am3 + -> + Obj.magic + (FStar_Tactics_Effect.tac_bind + (Prims.mk_range + "Steel.Effect.Common.fsti" + (Prims.of_int (1981)) + (Prims.of_int (12)) + (Prims.of_int (1981)) + (Prims.of_int (28))) + (Prims.mk_range + "Steel.Effect.Common.fsti" + (Prims.of_int (1985)) + (Prims.of_int (4)) + (Prims.of_int (2034)) + (Prims.of_int (7))) + (Obj.magic + (FStar_Tactics_Logic.implies_intro + ())) + (fun + uu___7 -> + (fun b -> + Obj.magic + (FStar_Tactics_Effect.tac_bind + (Prims.mk_range + "Steel.Effect.Common.fsti" + (Prims.of_int (1985)) + (Prims.of_int (13)) + (Prims.of_int (1985)) + (Prims.of_int (26))) + (Prims.mk_range + "Steel.Effect.Common.fsti" + (Prims.of_int (1986)) + (Prims.of_int (4)) + (Prims.of_int (2034)) + (Prims.of_int (7))) + (FStar_Tactics_Effect.lift_div_tac + (fun + uu___7 -> + convert_am + am3)) + (fun + uu___7 -> + (fun am4 + -> + Obj.magic + (FStar_Tactics_Effect.tac_bind + (Prims.mk_range + "Steel.Effect.Common.fsti" + (Prims.of_int (1986)) + (Prims.of_int (13)) + (Prims.of_int (1986)) + (Prims.of_int (29))) + (Prims.mk_range + "Steel.Effect.Common.fsti" + (Prims.of_int (1987)) + (Prims.of_int (4)) + (Prims.of_int (2034)) + (Prims.of_int (7))) + (FStar_Tactics_Effect.lift_div_tac + (fun + uu___7 -> + quote_exp + r1_raw)) + (fun + uu___7 -> + (fun r1 + -> + Obj.magic + (FStar_Tactics_Effect.tac_bind + (Prims.mk_range + "Steel.Effect.Common.fsti" + (Prims.of_int (1987)) + (Prims.of_int (13)) + (Prims.of_int (1987)) + (Prims.of_int (29))) + (Prims.mk_range + "Steel.Effect.Common.fsti" + (Prims.of_int (1989)) + (Prims.of_int (4)) + (Prims.of_int (2034)) + (Prims.of_int (7))) + (FStar_Tactics_Effect.lift_div_tac + (fun + uu___7 -> + quote_exp + r2_raw)) + (fun + uu___7 -> + (fun r2 + -> + Obj.magic + (FStar_Tactics_Effect.tac_bind + (Prims.mk_range + "Steel.Effect.Common.fsti" + (Prims.of_int (1989)) + (Prims.of_int (4)) + (Prims.of_int (1991)) + (Prims.of_int (54))) + (Prims.mk_range + "Steel.Effect.Common.fsti" + (Prims.of_int (1993)) + (Prims.of_int (4)) + (Prims.of_int (2034)) + (Prims.of_int (7))) + (Obj.magic + (FStar_Tactics_Derived.change_sq + (FStar_Reflection_Builtins.pack_ln + (FStar_Reflection_Data.Tv_App + ((FStar_Reflection_Builtins.pack_ln + (FStar_Reflection_Data.Tv_FVar + (FStar_Reflection_Builtins.pack_fv + ["Steel"; + "Effect"; + "Common"; + "normal_tac"]))), + ((FStar_Reflection_Builtins.pack_ln + (FStar_Reflection_Data.Tv_App + ((FStar_Reflection_Builtins.pack_ln + (FStar_Reflection_Data.Tv_App + ((FStar_Reflection_Builtins.pack_ln + (FStar_Reflection_Data.Tv_App + ((FStar_Reflection_Builtins.pack_ln + (FStar_Reflection_Data.Tv_FVar + (FStar_Reflection_Builtins.pack_fv + ["FStar"; + "Algebra"; + "CommMonoid"; + "Equiv"; + "__proj__EQ__item__eq"]))), + (eq, + FStar_Reflection_Data.Q_Explicit)))), + ((FStar_Reflection_Builtins.pack_ln + (FStar_Reflection_Data.Tv_App + ((FStar_Reflection_Builtins.pack_ln + (FStar_Reflection_Data.Tv_App + ((FStar_Reflection_Builtins.pack_ln + (FStar_Reflection_Data.Tv_App + ((FStar_Reflection_Builtins.pack_ln + (FStar_Reflection_Data.Tv_App + ((FStar_Reflection_Builtins.pack_ln + (FStar_Reflection_Data.Tv_FVar + (FStar_Reflection_Builtins.pack_fv + ["Steel"; + "Effect"; + "Common"; + "mdenote"]))), + (eq, + FStar_Reflection_Data.Q_Explicit)))), + (m, + FStar_Reflection_Data.Q_Explicit)))), + (am4, + FStar_Reflection_Data.Q_Explicit)))), + (r1, + FStar_Reflection_Data.Q_Explicit)))), + FStar_Reflection_Data.Q_Explicit)))), + ((FStar_Reflection_Builtins.pack_ln + (FStar_Reflection_Data.Tv_App + ((FStar_Reflection_Builtins.pack_ln + (FStar_Reflection_Data.Tv_App + ((FStar_Reflection_Builtins.pack_ln + (FStar_Reflection_Data.Tv_App + ((FStar_Reflection_Builtins.pack_ln + (FStar_Reflection_Data.Tv_App + ((FStar_Reflection_Builtins.pack_ln + (FStar_Reflection_Data.Tv_FVar + (FStar_Reflection_Builtins.pack_fv + ["Steel"; + "Effect"; + "Common"; + "mdenote"]))), + (eq, + FStar_Reflection_Data.Q_Explicit)))), + (m, + FStar_Reflection_Data.Q_Explicit)))), + (am4, + FStar_Reflection_Data.Q_Explicit)))), + (r2, + FStar_Reflection_Data.Q_Explicit)))), + FStar_Reflection_Data.Q_Explicit)))), + FStar_Reflection_Data.Q_Explicit)))))) + (fun + uu___7 -> + (fun + uu___7 -> + Obj.magic + (FStar_Tactics_Effect.tac_bind + (Prims.mk_range + "Steel.Effect.Common.fsti" + (Prims.of_int (1993)) + (Prims.of_int (4)) + (Prims.of_int (1993)) + (Prims.of_int (30))) + (Prims.mk_range + "Steel.Effect.Common.fsti" + (Prims.of_int (1994)) + (Prims.of_int (4)) + (Prims.of_int (2034)) + (Prims.of_int (7))) + (Obj.magic + (FStar_Tactics_Derived.apply_lemma + (FStar_Reflection_Builtins.pack_ln + (FStar_Reflection_Data.Tv_FVar + (FStar_Reflection_Builtins.pack_fv + ["Steel"; + "Effect"; + "Common"; + "normal_elim"]))))) + (fun + uu___8 -> + (fun + uu___8 -> + Obj.magic + (FStar_Tactics_Effect.tac_bind + (Prims.mk_range + "Steel.Effect.Common.fsti" + (Prims.of_int (1994)) + (Prims.of_int (4)) + (Prims.of_int (1994)) + (Prims.of_int (28))) + (Prims.mk_range + "Steel.Effect.Common.fsti" + (Prims.of_int (1996)) + (Prims.of_int (4)) + (Prims.of_int (2034)) + (Prims.of_int (7))) + (Obj.magic + (FStar_Tactics_Derived.apply + (FStar_Reflection_Builtins.pack_ln + (FStar_Reflection_Data.Tv_FVar + (FStar_Reflection_Builtins.pack_fv + ["Steel"; + "Effect"; + "Common"; + "monoid_reflect"]))))) + (fun + uu___9 -> + (fun + uu___9 -> + Obj.magic + (FStar_Tactics_Effect.tac_bind + (Prims.mk_range + "Steel.Effect.Common.fsti" + (Prims.of_int (1996)) + (Prims.of_int (13)) + (Prims.of_int (1996)) + (Prims.of_int (31))) + (Prims.mk_range + "Steel.Effect.Common.fsti" + (Prims.of_int (1997)) + (Prims.of_int (4)) + (Prims.of_int (2034)) + (Prims.of_int (7))) + (FStar_Tactics_Effect.lift_div_tac + (fun + uu___10 + -> + quote_atoms + l1_raw)) + (fun + uu___10 + -> + (fun l1 + -> + Obj.magic + (FStar_Tactics_Effect.tac_bind + (Prims.mk_range + "Steel.Effect.Common.fsti" + (Prims.of_int (1997)) + (Prims.of_int (13)) + (Prims.of_int (1997)) + (Prims.of_int (31))) + (Prims.mk_range + "Steel.Effect.Common.fsti" + (Prims.of_int (1999)) + (Prims.of_int (4)) + (Prims.of_int (2034)) + (Prims.of_int (7))) + (FStar_Tactics_Effect.lift_div_tac + (fun + uu___10 + -> + quote_atoms + l2_raw)) + (fun + uu___10 + -> + (fun l2 + -> + Obj.magic + (FStar_Tactics_Effect.tac_bind + (Prims.mk_range + "Steel.Effect.Common.fsti" + (Prims.of_int (1999)) + (Prims.of_int (4)) + (Prims.of_int (1999)) + (Prims.of_int (70))) + (Prims.mk_range + "Steel.Effect.Common.fsti" + (Prims.of_int (2001)) + (Prims.of_int (4)) + (Prims.of_int (2034)) + (Prims.of_int (7))) + (Obj.magic + (FStar_Tactics_Derived.apply_lemma + (FStar_Reflection_Builtins.pack_ln + (FStar_Reflection_Data.Tv_App + ((FStar_Reflection_Builtins.pack_ln + (FStar_Reflection_Data.Tv_App + ((FStar_Reflection_Builtins.pack_ln + (FStar_Reflection_Data.Tv_App + ((FStar_Reflection_Builtins.pack_ln + (FStar_Reflection_Data.Tv_App + ((FStar_Reflection_Builtins.pack_ln + (FStar_Reflection_Data.Tv_App + ((FStar_Reflection_Builtins.pack_ln + (FStar_Reflection_Data.Tv_FVar + (FStar_Reflection_Builtins.pack_fv + ["Steel"; + "Effect"; + "Common"; + "equivalent_sorted"]))), + (eq, + FStar_Reflection_Data.Q_Explicit)))), + (m, + FStar_Reflection_Data.Q_Explicit)))), + (am4, + FStar_Reflection_Data.Q_Explicit)))), + (l1, + FStar_Reflection_Data.Q_Explicit)))), + (l2, + FStar_Reflection_Data.Q_Explicit)))))) + (fun + uu___10 + -> + (fun + uu___10 + -> + Obj.magic + (FStar_Tactics_Effect.tac_bind + (Prims.mk_range + "Steel.Effect.Common.fsti" + (Prims.of_int (2001)) + (Prims.of_int (7)) + (Prims.of_int (2001)) + (Prims.of_int (37))) + (Prims.mk_range + "Steel.Effect.Common.fsti" + (Prims.of_int (2001)) + (Prims.of_int (4)) + (Prims.of_int (2034)) + (Prims.of_int (7))) + (Obj.magic + (FStar_Tactics_Effect.tac_bind + (Prims.mk_range + "Steel.Effect.Common.fsti" + (Prims.of_int (2001)) + (Prims.of_int (7)) + (Prims.of_int (2001)) + (Prims.of_int (33))) + (Prims.mk_range + "Steel.Effect.Common.fsti" + (Prims.of_int (2001)) + (Prims.of_int (7)) + (Prims.of_int (2001)) + (Prims.of_int (37))) + (Obj.magic + (FStar_Tactics_Effect.tac_bind + (Prims.mk_range + "Steel.Effect.Common.fsti" + (Prims.of_int (2001)) + (Prims.of_int (23)) + (Prims.of_int (2001)) + (Prims.of_int (33))) + (Prims.mk_range + "Steel.Effect.Common.fsti" + (Prims.of_int (2001)) + (Prims.of_int (7)) + (Prims.of_int (2001)) + (Prims.of_int (33))) + (Obj.magic + (FStar_Tactics_Derived.goals + ())) + (fun + uu___11 + -> + FStar_Tactics_Effect.lift_div_tac + (fun + uu___12 + -> + FStar_List_Tot_Base.length + uu___11)))) + (fun + uu___11 + -> + FStar_Tactics_Effect.lift_div_tac + (fun + uu___12 + -> + uu___11 = + Prims.int_zero)))) + (fun + uu___11 + -> + (fun + uu___11 + -> + if + uu___11 + then + Obj.magic + (Obj.repr + (FStar_Tactics_Effect.lift_div_tac + (fun + uu___12 + -> ()))) + else + Obj.magic + (Obj.repr + (FStar_Tactics_Effect.tac_bind + (Prims.mk_range + "Steel.Effect.Common.fsti" + (Prims.of_int (2003)) + (Prims.of_int (6)) + (Prims.of_int (2017)) + (Prims.of_int (7))) + (Prims.mk_range + "Steel.Effect.Common.fsti" + (Prims.of_int (2021)) + (Prims.of_int (6)) + (Prims.of_int (2033)) + (Prims.of_int (30))) + (Obj.magic + (FStar_Tactics_Builtins.norm + [FStar_Pervasives.primops; + FStar_Pervasives.iota; + FStar_Pervasives.zeta; + FStar_Pervasives.delta_only + ["Steel.Effect.Common.xsdenote"; + "Steel.Effect.Common.select"; + "Steel.Effect.Common.my_assoc"; + "Steel.Effect.Common.my_append"; + "Steel.Effect.Common.flatten"; + "Steel.Effect.Common.sort"; + "Steel.Effect.Common.my_sortWith"; + "Steel.Effect.Common.my_partition"; + "Steel.Effect.Common.my_bool_of_compare"; + "Steel.Effect.Common.my_compare_of_bool"; + "FStar.Pervasives.Native.fst"; + "FStar.Pervasives.Native.__proj__Mktuple2__item___1"; + "FStar.Pervasives.Native.snd"; + "FStar.Pervasives.Native.__proj__Mktuple2__item___2"; + "FStar.Algebra.CommMonoid.Equiv.__proj__CM__item__unit"; + "FStar.Algebra.CommMonoid.Equiv.__proj__CM__item__mult"; + "Steel.Effect.Common.rm"; + "FStar.Algebra.CommMonoid.Equiv.__proj__EQ__item__eq"; + "Steel.Effect.Common.req"; + "Steel.Effect.Common.star"]])) + (fun + uu___13 + -> + (fun + uu___13 + -> + Obj.magic + (FStar_Tactics_Effect.tac_bind + (Prims.mk_range + "Steel.Effect.Common.fsti" + (Prims.of_int (2021)) + (Prims.of_int (6)) + (Prims.of_int (2021)) + (Prims.of_int (14))) + (Prims.mk_range + "Steel.Effect.Common.fsti" + (Prims.of_int (2022)) + (Prims.of_int (6)) + (Prims.of_int (2033)) + (Prims.of_int (30))) + (Obj.magic + (FStar_Tactics_Logic.split + ())) + (fun + uu___14 + -> + (fun + uu___14 + -> + Obj.magic + (FStar_Tactics_Effect.tac_bind + (Prims.mk_range + "Steel.Effect.Common.fsti" + (Prims.of_int (2022)) + (Prims.of_int (6)) + (Prims.of_int (2022)) + (Prims.of_int (14))) + (Prims.mk_range + "Steel.Effect.Common.fsti" + (Prims.of_int (2026)) + (Prims.of_int (6)) + (Prims.of_int (2033)) + (Prims.of_int (30))) + (Obj.magic + (FStar_Tactics_Logic.split + ())) + (fun + uu___15 + -> + (fun + uu___15 + -> + Obj.magic + (FStar_Tactics_Effect.tac_bind + (Prims.mk_range + "Steel.Effect.Common.fsti" + (Prims.of_int (2026)) + (Prims.of_int (6)) + (Prims.of_int (2026)) + (Prims.of_int (14))) + (Prims.mk_range + "Steel.Effect.Common.fsti" + (Prims.of_int (2027)) + (Prims.of_int (6)) + (Prims.of_int (2033)) + (Prims.of_int (30))) + (Obj.magic + (FStar_Tactics_Derived.trefl + ())) + (fun + uu___16 + -> + (fun + uu___16 + -> + Obj.magic + (FStar_Tactics_Effect.tac_bind + (Prims.mk_range + "Steel.Effect.Common.fsti" + (Prims.of_int (2027)) + (Prims.of_int (6)) + (Prims.of_int (2027)) + (Prims.of_int (14))) + (Prims.mk_range + "Steel.Effect.Common.fsti" + (Prims.of_int (2032)) + (Prims.of_int (6)) + (Prims.of_int (2033)) + (Prims.of_int (30))) + (Obj.magic + (FStar_Tactics_Derived.trefl + ())) + (fun + uu___17 + -> + (fun + uu___17 + -> + Obj.magic + (FStar_Tactics_Effect.tac_bind + (Prims.mk_range + "Steel.Effect.Common.fsti" + (Prims.of_int (2032)) + (Prims.of_int (6)) + (Prims.of_int (2032)) + (Prims.of_int (41))) + (Prims.mk_range + "Steel.Effect.Common.fsti" + (Prims.of_int (2033)) + (Prims.of_int (6)) + (Prims.of_int (2033)) + (Prims.of_int (30))) + (Obj.magic + (FStar_Tactics_Derived.apply + (FStar_Reflection_Builtins.pack_ln + (FStar_Reflection_Data.Tv_FVar + (FStar_Reflection_Builtins.pack_fv + ["FStar"; + "Squash"; + "return_squash"]))))) + (fun + uu___18 + -> + (fun + uu___18 + -> + Obj.magic + (FStar_Tactics_Effect.tac_bind + (Prims.mk_range + "Steel.Effect.Common.fsti" + (Prims.of_int (2033)) + (Prims.of_int (12)) + (Prims.of_int (2033)) + (Prims.of_int (30))) + (Prims.mk_range + "Steel.Effect.Common.fsti" + (Prims.of_int (2033)) + (Prims.of_int (6)) + (Prims.of_int (2033)) + (Prims.of_int (30))) + (Obj.magic + (FStar_Tactics_Derived.binder_to_term + b)) + (fun + uu___19 + -> + (fun + uu___19 + -> + Obj.magic + (FStar_Tactics_Derived.exact + uu___19)) + uu___19))) + uu___18))) + uu___17))) + uu___16))) + uu___15))) + uu___14))) + uu___13)))) + uu___11))) + uu___10))) + uu___10))) + uu___10))) + uu___9))) + uu___8))) + uu___7))) + uu___7))) + uu___7))) + uu___7))) + uu___7))) + uu___7)))) + (fun + uu___6 -> + (fun + uu___6 -> + Obj.magic + (FStar_Tactics_Effect.tac_bind + (Prims.mk_range + "Steel.Effect.Common.fsti" + (Prims.of_int (2036)) + (Prims.of_int (2)) + (Prims.of_int (2036)) + (Prims.of_int (19))) + (Prims.mk_range + "Steel.Effect.Common.fsti" + (Prims.of_int (2042)) + (Prims.of_int (2)) + (Prims.of_int (2077)) + (Prims.of_int (29))) + (Obj.magic + (dismiss_slprops + ())) + (fun + uu___7 -> + (fun + uu___7 -> + Obj.magic + (FStar_Tactics_Effect.tac_bind + (Prims.mk_range + "Steel.Effect.Common.fsti" + (Prims.of_int (2042)) + (Prims.of_int (2)) + (Prims.of_int (2042)) + (Prims.of_int (76))) + (Prims.mk_range + "Steel.Effect.Common.fsti" + (Prims.of_int (2046)) + (Prims.of_int (2)) + (Prims.of_int (2077)) + (Prims.of_int (29))) + (Obj.magic + (FStar_Tactics_Effect.tac_bind + (Prims.mk_range + "Steel.Effect.Common.fsti" + (Prims.of_int (2042)) + (Prims.of_int (9)) + (Prims.of_int (2042)) + (Prims.of_int (76))) + (Prims.mk_range + "Steel.Effect.Common.fsti" + (Prims.of_int (2042)) + (Prims.of_int (2)) + (Prims.of_int (2042)) + (Prims.of_int (76))) + (Obj.magic + (FStar_Tactics_Util.repeatn + (FStar_List_Tot_Base.length + am_bv) + (fun + uu___8 -> + FStar_Tactics_Derived.apply_lemma + (FStar_Reflection_Builtins.pack_ln + (FStar_Reflection_Data.Tv_FVar + (FStar_Reflection_Builtins.pack_fv + ["Steel"; + "Effect"; + "Common"; + "inst_bv"])))))) + (fun + uu___8 -> + FStar_Tactics_Effect.lift_div_tac + (fun + uu___9 -> + ())))) + (fun + uu___8 -> + (fun + uu___8 -> + Obj.magic + (FStar_Tactics_Effect.tac_bind + (Prims.mk_range + "Steel.Effect.Common.fsti" + (Prims.of_int (2046)) + (Prims.of_int (2)) + (Prims.of_int (2046)) + (Prims.of_int (29))) + (Prims.mk_range + "Steel.Effect.Common.fsti" + (Prims.of_int (2054)) + (Prims.of_int (2)) + (Prims.of_int (2077)) + (Prims.of_int (29))) + (Obj.magic + (FStar_Tactics_Derived.apply_lemma + (FStar_Reflection_Builtins.pack_ln + (FStar_Reflection_Data.Tv_FVar + (FStar_Reflection_Builtins.pack_fv + ["Steel"; + "Effect"; + "Common"; + "modus_ponens"]))))) + (fun + uu___9 -> + (fun + uu___9 -> + match uvar_terms + with + | + [] -> + Obj.magic + (FStar_Tactics_Derived.focus + (fun + uu___10 + -> + FStar_Tactics_Derived.try_with + (fun + uu___11 + -> + match () + with + | + () -> + FStar_Tactics_Effect.tac_bind + (Prims.mk_range + "Steel.Effect.Common.fsti" + (Prims.of_int (2058)) + (Prims.of_int (8)) + (Prims.of_int (2058)) + (Prims.of_int (31))) + (Prims.mk_range + "Steel.Effect.Common.fsti" + (Prims.of_int (2059)) + (Prims.of_int (8)) + (Prims.of_int (2063)) + (Prims.of_int (41))) + (Obj.magic + (FStar_Tactics_Derived.apply_lemma + (FStar_Reflection_Builtins.pack_ln + (FStar_Reflection_Data.Tv_FVar + (FStar_Reflection_Builtins.pack_fv + ["Steel"; + "Effect"; + "Common"; + "and_true"]))))) + (fun + uu___12 + -> + (fun + uu___12 + -> + Obj.magic + (FStar_Tactics_Effect.tac_bind + (Prims.mk_range + "Steel.Effect.Common.fsti" + (Prims.of_int (2059)) + (Prims.of_int (8)) + (Prims.of_int (2059)) + (Prims.of_int (16))) + (Prims.mk_range + "Steel.Effect.Common.fsti" + (Prims.of_int (2060)) + (Prims.of_int (8)) + (Prims.of_int (2063)) + (Prims.of_int (41))) + (Obj.magic + (FStar_Tactics_Logic.split + ())) + (fun + uu___13 + -> + (fun + uu___13 + -> + Obj.magic + (FStar_Tactics_Effect.tac_bind + (Prims.mk_range + "Steel.Effect.Common.fsti" + (Prims.of_int (2060)) + (Prims.of_int (8)) + (Prims.of_int (2061)) + (Prims.of_int (55))) + (Prims.mk_range + "Steel.Effect.Common.fsti" + (Prims.of_int (2062)) + (Prims.of_int (8)) + (Prims.of_int (2063)) + (Prims.of_int (41))) + (if + emp_frame + then + Obj.magic + (FStar_Tactics_Derived.apply_lemma + (FStar_Reflection_Builtins.pack_ln + (FStar_Reflection_Data.Tv_App + ((FStar_Reflection_Builtins.pack_ln + (FStar_Reflection_Data.Tv_App + ((FStar_Reflection_Builtins.pack_ln + (FStar_Reflection_Data.Tv_FVar + (FStar_Reflection_Builtins.pack_fv + ["Steel"; + "Effect"; + "Common"; + "identity_left"]))), + (eq, + FStar_Reflection_Data.Q_Explicit)))), + (m, + FStar_Reflection_Data.Q_Explicit))))) + else + Obj.magic + (FStar_Tactics_Derived.apply_lemma + (FStar_Reflection_Builtins.pack_ln + (FStar_Reflection_Data.Tv_App + ((FStar_Reflection_Builtins.pack_ln + (FStar_Reflection_Data.Tv_FVar + (FStar_Reflection_Builtins.pack_fv + ["FStar"; + "Algebra"; + "CommMonoid"; + "Equiv"; + "__proj__EQ__item__reflexivity"]))), + (eq, + FStar_Reflection_Data.Q_Explicit)))))) + (fun + uu___14 + -> + (fun + uu___14 + -> + Obj.magic + (FStar_Tactics_Effect.tac_bind + (Prims.mk_range + "Steel.Effect.Common.fsti" + (Prims.of_int (2062)) + (Prims.of_int (8)) + (Prims.of_int (2062)) + (Prims.of_int (29))) + (Prims.mk_range + "Steel.Effect.Common.fsti" + (Prims.of_int (2063)) + (Prims.of_int (8)) + (Prims.of_int (2063)) + (Prims.of_int (41))) + (Obj.magic + (unify_pr_with_true + pr)) + (fun + uu___15 + -> + (fun + uu___15 + -> + Obj.magic + (FStar_Tactics_Derived.apply_lemma + (FStar_Reflection_Builtins.pack_ln + (FStar_Reflection_Data.Tv_FVar + (FStar_Reflection_Builtins.pack_fv + ["Steel"; + "Effect"; + "Common"; + "solve_implies_true"]))))) + uu___15))) + uu___14))) + uu___13))) + uu___12)) + (fun + uu___11 + -> + match uu___11 + with + | + FStar_Tactics_Common.TacticFailure + msg -> + FStar_Tactics_Derived.fail + (Prims.strcat + "Cannot unify pr with true: " + msg) + | + e -> + FStar_Tactics_Effect.raise + e))) + | + l -> + Obj.magic + (FStar_Tactics_Effect.tac_bind + (Prims.mk_range + "Steel.Effect.Common.fsti" + (Prims.of_int (2069)) + (Prims.of_int (4)) + (Prims.of_int (2073)) + (Prims.of_int (5))) + (Prims.mk_range + "Steel.Effect.Common.fsti" + (Prims.of_int (2074)) + (Prims.of_int (4)) + (Prims.of_int (2077)) + (Prims.of_int (29))) + (if + emp_frame + then + Obj.magic + (FStar_Tactics_Derived.apply_lemma + (FStar_Reflection_Builtins.pack_ln + (FStar_Reflection_Data.Tv_App + ((FStar_Reflection_Builtins.pack_ln + (FStar_Reflection_Data.Tv_App + ((FStar_Reflection_Builtins.pack_ln + (FStar_Reflection_Data.Tv_FVar + (FStar_Reflection_Builtins.pack_fv + ["Steel"; + "Effect"; + "Common"; + "identity_left_smt"]))), + (eq, + FStar_Reflection_Data.Q_Explicit)))), + (m, + FStar_Reflection_Data.Q_Explicit))))) + else + Obj.magic + (FStar_Tactics_Derived.apply_lemma + (FStar_Reflection_Builtins.pack_ln + (FStar_Reflection_Data.Tv_App + ((FStar_Reflection_Builtins.pack_ln + (FStar_Reflection_Data.Tv_FVar + (FStar_Reflection_Builtins.pack_fv + ["Steel"; + "Effect"; + "Common"; + "smt_reflexivity"]))), + (eq, + FStar_Reflection_Data.Q_Explicit)))))) + (fun + uu___10 + -> + (fun + uu___10 + -> + Obj.magic + (FStar_Tactics_Effect.tac_bind + (Prims.mk_range + "Steel.Effect.Common.fsti" + (Prims.of_int (2074)) + (Prims.of_int (4)) + (Prims.of_int (2074)) + (Prims.of_int (16))) + (Prims.mk_range + "Steel.Effect.Common.fsti" + (Prims.of_int (2075)) + (Prims.of_int (4)) + (Prims.of_int (2077)) + (Prims.of_int (29))) + (Obj.magic + (FStar_Tactics_Builtins.t_trefl + true)) + (fun + uu___11 + -> + (fun + uu___11 + -> + Obj.magic + (FStar_Tactics_Effect.tac_bind + (Prims.mk_range + "Steel.Effect.Common.fsti" + (Prims.of_int (2075)) + (Prims.of_int (4)) + (Prims.of_int (2075)) + (Prims.of_int (35))) + (Prims.mk_range + "Steel.Effect.Common.fsti" + (Prims.of_int (2076)) + (Prims.of_int (4)) + (Prims.of_int (2077)) + (Prims.of_int (29))) + (Obj.magic + (FStar_Tactics_Effect.tac_bind + (Prims.mk_range + "Steel.Effect.Common.fsti" + (Prims.of_int (2075)) + (Prims.of_int (23)) + (Prims.of_int (2075)) + (Prims.of_int (35))) + (Prims.mk_range + "Steel.Effect.Common.fsti" + (Prims.of_int (2075)) + (Prims.of_int (4)) + (Prims.of_int (2075)) + (Prims.of_int (35))) + (Obj.magic + (FStar_Tactics_Derived.cur_goal + ())) + (fun + uu___12 + -> + (fun + uu___12 + -> + Obj.magic + (close_equality_typ + uu___12)) + uu___12))) + (fun + uu___12 + -> + (fun + uu___12 + -> + Obj.magic + (FStar_Tactics_Effect.tac_bind + (Prims.mk_range + "Steel.Effect.Common.fsti" + (Prims.of_int (2076)) + (Prims.of_int (4)) + (Prims.of_int (2076)) + (Prims.of_int (13))) + (Prims.mk_range + "Steel.Effect.Common.fsti" + (Prims.of_int (2077)) + (Prims.of_int (4)) + (Prims.of_int (2077)) + (Prims.of_int (29))) + (Obj.magic + (FStar_Tactics_Builtins.revert + ())) + (fun + uu___13 + -> + (fun + uu___13 + -> + Obj.magic + (set_abduction_variable + ())) + uu___13))) + uu___12))) + uu___11))) + uu___10))) + uu___9))) + uu___8))) + uu___7))) + uu___6))) + uu___5))) + uu___4))) + uu___4))) + uu___4))) + uu___4))) + uu___4))) + uu___4))) + uu___4))) + uu___4))) + uu___4))) + uu___4))) + uu___4))) + uu___4))) + uu___4))) + uu___4))) + uu___3))) + uu___1))) + uu___))) uu___))) + uu___))) uu___) +let (canon_monoid : + Prims.bool -> + FStar_Reflection_Types.term -> + FStar_Reflection_Types.term -> + FStar_Reflection_Types.term -> + FStar_Reflection_Types.term -> + FStar_Reflection_Types.term -> + (unit, unit) FStar_Tactics_Effect.tac_repr) + = + fun use_smt -> + fun carrier_t -> + fun eq -> + fun m -> + fun pr -> + fun pr_bind -> + FStar_Tactics_Effect.tac_bind + (Prims.mk_range "Steel.Effect.Common.fsti" + (Prims.of_int (2082)) (Prims.of_int (2)) + (Prims.of_int (2082)) (Prims.of_int (19))) + (Prims.mk_range "Steel.Effect.Common.fsti" + (Prims.of_int (2083)) (Prims.of_int (2)) + (Prims.of_int (2102)) (Prims.of_int (68))) + (Obj.magic + (FStar_Tactics_Builtins.norm + [FStar_Pervasives.iota; FStar_Pervasives.zeta])) + (fun uu___ -> + (fun uu___ -> + Obj.magic + (FStar_Tactics_Effect.tac_bind + (Prims.mk_range "Steel.Effect.Common.fsti" + (Prims.of_int (2083)) (Prims.of_int (10)) + (Prims.of_int (2083)) (Prims.of_int (21))) + (Prims.mk_range "Steel.Effect.Common.fsti" + (Prims.of_int (2085)) (Prims.of_int (2)) + (Prims.of_int (2102)) (Prims.of_int (68))) + (Obj.magic (FStar_Tactics_Derived.cur_goal ())) + (fun uu___1 -> + (fun t -> + Obj.magic + (FStar_Tactics_Effect.tac_bind + (Prims.mk_range + "Steel.Effect.Common.fsti" + (Prims.of_int (2085)) + (Prims.of_int (19)) + (Prims.of_int (2085)) + (Prims.of_int (36))) + (Prims.mk_range + "Steel.Effect.Common.fsti" + (Prims.of_int (2085)) + (Prims.of_int (2)) + (Prims.of_int (2102)) + (Prims.of_int (68))) + (FStar_Tactics_Effect.lift_div_tac + (fun uu___1 -> + FStar_Reflection_Derived_Lemmas.collect_app_ref + t)) + (fun uu___1 -> + (fun uu___1 -> + match uu___1 with + | (sq, rel_xy) -> + (match rel_xy with + | (rel_xy1, uu___2)::[] -> + Obj.magic + (FStar_Tactics_Effect.tac_bind + (Prims.mk_range + "Steel.Effect.Common.fsti" + (Prims.of_int (2090)) + (Prims.of_int (21)) + (Prims.of_int (2090)) + (Prims.of_int (43))) + (Prims.mk_range + "Steel.Effect.Common.fsti" + (Prims.of_int (2090)) + (Prims.of_int (7)) + (Prims.of_int (2100)) + (Prims.of_int (8))) + (FStar_Tactics_Effect.lift_div_tac + (fun uu___3 -> + FStar_Reflection_Derived_Lemmas.collect_app_ref + rel_xy1)) + (fun uu___3 -> + (fun uu___3 -> + match uu___3 + with + | (rel, xy) + -> + if + (FStar_List_Tot_Base.length + xy) >= + (Prims.of_int (2)) + then + (match + ((FStar_List_Tot_Base.index + xy + ((FStar_List_Tot_Base.length + xy) - + (Prims.of_int (2)))), + (FStar_List_Tot_Base.index + xy + ((FStar_List_Tot_Base.length + xy) - + Prims.int_one))) + with + | + ((lhs, + FStar_Reflection_Data.Q_Explicit), + (rhs, + FStar_Reflection_Data.Q_Explicit)) + -> + Obj.magic + (canon_l_r + use_smt + carrier_t + eq m pr + pr_bind + lhs rel + rhs) + | + uu___4 -> + Obj.magic + (FStar_Tactics_Derived.fail + "Goal should have been an application of a binary relation to 2 explicit arguments")) + else + Obj.magic + (FStar_Tactics_Derived.fail + "Goal should have been an application of a binary relation to n implicit and 2 explicit arguments")) + uu___3)) + | uu___2 -> + Obj.magic + (FStar_Tactics_Derived.fail + "Goal should be squash applied to a binary relation"))) + uu___1))) uu___1))) uu___) +let (canon' : + Prims.bool -> + FStar_Reflection_Types.term -> + FStar_Reflection_Types.term -> + (unit, unit) FStar_Tactics_Effect.tac_repr) + = + fun use_smt -> + fun pr -> + fun pr_bind -> + FStar_Tactics_Effect.tac_bind + (Prims.mk_range "Steel.Effect.Common.fsti" (Prims.of_int (2106)) + (Prims.of_int (23)) (Prims.of_int (2106)) (Prims.of_int (59))) + (Prims.mk_range "Steel.Effect.Common.fsti" (Prims.of_int (2106)) + (Prims.of_int (2)) (Prims.of_int (2106)) (Prims.of_int (83))) + (Obj.magic + (FStar_Tactics_Builtins.pack + (FStar_Reflection_Data.Tv_FVar + (FStar_Reflection_Builtins.pack_fv + ["Steel.Effect.Common.vprop"])))) + (fun uu___ -> + (fun uu___ -> + Obj.magic + (canon_monoid use_smt uu___ + (FStar_Reflection_Builtins.pack_ln + (FStar_Reflection_Data.Tv_FVar + (FStar_Reflection_Builtins.pack_fv + ["Steel"; "Effect"; "Common"; "req"]))) + (FStar_Reflection_Builtins.pack_ln + (FStar_Reflection_Data.Tv_FVar + (FStar_Reflection_Builtins.pack_fv + ["Steel"; "Effect"; "Common"; "rm"]))) pr + pr_bind)) uu___) +let rec (slterm_nbr_uvars : + FStar_Reflection_Types.term -> + (Prims.int, unit) FStar_Tactics_Effect.tac_repr) + = + fun t -> + FStar_Tactics_Effect.tac_bind + (Prims.mk_range "Steel.Effect.Common.fsti" (Prims.of_int (2110)) + (Prims.of_int (8)) (Prims.of_int (2110)) (Prims.of_int (27))) + (Prims.mk_range "Steel.Effect.Common.fsti" (Prims.of_int (2110)) + (Prims.of_int (2)) (Prims.of_int (2120)) (Prims.of_int (10))) + (Obj.magic (FStar_Tactics_Derived.inspect_unascribe t)) + (fun uu___ -> + (fun uu___ -> + match uu___ with + | FStar_Reflection_Data.Tv_Uvar (uu___1, uu___2) -> + Obj.magic + (Obj.repr + (FStar_Tactics_Effect.lift_div_tac + (fun uu___3 -> Prims.int_one))) + | FStar_Reflection_Data.Tv_App (uu___1, uu___2) -> + Obj.magic + (Obj.repr + (FStar_Tactics_Effect.tac_bind + (Prims.mk_range "Steel.Effect.Common.fsti" + (Prims.of_int (2113)) (Prims.of_int (19)) + (Prims.of_int (2113)) (Prims.of_int (32))) + (Prims.mk_range "Steel.Effect.Common.fsti" + (Prims.of_int (2113)) (Prims.of_int (4)) + (Prims.of_int (2118)) (Prims.of_int (10))) + (FStar_Tactics_Effect.lift_div_tac + (fun uu___3 -> + FStar_Reflection_Derived.collect_app t)) + (fun uu___3 -> + (fun uu___3 -> + match uu___3 with + | (hd, args) -> + if is_star_or_unit hd + then Obj.magic (slterm_nbr_uvars_argv args) + else + Obj.magic + (FStar_Tactics_Effect.tac_bind + (Prims.mk_range + "Steel.Effect.Common.fsti" + (Prims.of_int (2117)) + (Prims.of_int (12)) + (Prims.of_int (2117)) + (Prims.of_int (22))) + (Prims.mk_range + "Steel.Effect.Common.fsti" + (Prims.of_int (2117)) + (Prims.of_int (9)) + (Prims.of_int (2118)) + (Prims.of_int (10))) + (Obj.magic (is_uvar hd)) + (fun uu___5 -> + FStar_Tactics_Effect.lift_div_tac + (fun uu___6 -> + if uu___5 + then Prims.int_one + else Prims.int_zero)))) + uu___3))) + | FStar_Reflection_Data.Tv_Abs (uu___1, t1) -> + Obj.magic (Obj.repr (slterm_nbr_uvars t1)) + | uu___1 -> + Obj.magic + (Obj.repr + (FStar_Tactics_Effect.lift_div_tac + (fun uu___2 -> Prims.int_zero)))) uu___) +and (slterm_nbr_uvars_argv : + FStar_Reflection_Data.argv Prims.list -> + (Prims.int, unit) FStar_Tactics_Effect.tac_repr) + = + fun args -> + FStar_Tactics_Util.fold_left + (fun n -> + fun uu___ -> + match uu___ with + | (x, uu___1) -> + FStar_Tactics_Effect.tac_bind + (Prims.mk_range "Steel.Effect.Common.fsti" + (Prims.of_int (2123)) (Prims.of_int (33)) + (Prims.of_int (2123)) (Prims.of_int (51))) + (Prims.mk_range "Steel.Effect.Common.fsti" + (Prims.of_int (2123)) (Prims.of_int (29)) + (Prims.of_int (2123)) (Prims.of_int (51))) + (Obj.magic (slterm_nbr_uvars x)) + (fun uu___2 -> + FStar_Tactics_Effect.lift_div_tac + (fun uu___3 -> n + uu___2))) Prims.int_zero args +let rec (all_guards_solved : + FStar_Reflection_Types.term -> + (Prims.bool, unit) FStar_Tactics_Effect.tac_repr) + = + fun t -> + FStar_Tactics_Effect.tac_bind + (Prims.mk_range "Steel.Effect.Common.fsti" (Prims.of_int (2128)) + (Prims.of_int (8)) (Prims.of_int (2128)) (Prims.of_int (27))) + (Prims.mk_range "Steel.Effect.Common.fsti" (Prims.of_int (2128)) + (Prims.of_int (2)) (Prims.of_int (2150)) (Prims.of_int (13))) + (Obj.magic (FStar_Tactics_Derived.inspect_unascribe t)) + (fun uu___ -> + (fun uu___ -> + match uu___ with + | FStar_Reflection_Data.Tv_Abs (uu___1, t1) -> + Obj.magic (Obj.repr (all_guards_solved t1)) + | FStar_Reflection_Data.Tv_App (uu___1, uu___2) -> + Obj.magic + (Obj.repr + (FStar_Tactics_Effect.tac_bind + (Prims.mk_range "Steel.Effect.Common.fsti" + (Prims.of_int (2131)) (Prims.of_int (19)) + (Prims.of_int (2131)) (Prims.of_int (32))) + (Prims.mk_range "Steel.Effect.Common.fsti" + (Prims.of_int (2131)) (Prims.of_int (4)) + (Prims.of_int (2149)) (Prims.of_int (10))) + (FStar_Tactics_Effect.lift_div_tac + (fun uu___3 -> + FStar_Reflection_Derived.collect_app t)) + (fun uu___3 -> + (fun uu___3 -> + match uu___3 with + | (hd, args) -> + if + FStar_Reflection_Derived.is_fvar hd + "Steel.Effect.Common.guard_vprop" + then + Obj.magic + (FStar_Tactics_Effect.tac_bind + (Prims.mk_range + "Steel.Effect.Common.fsti" + (Prims.of_int (2134)) + (Prims.of_int (6)) + (Prims.of_int (2134)) + (Prims.of_int (32))) + (Prims.mk_range + "Steel.Effect.Common.fsti" + (Prims.of_int (2134)) + (Prims.of_int (6)) + (Prims.of_int (2134)) + (Prims.of_int (36))) + (Obj.magic + (slterm_nbr_uvars_argv args)) + (fun uu___4 -> + FStar_Tactics_Effect.lift_div_tac + (fun uu___5 -> + uu___4 = Prims.int_zero))) + else + Obj.magic + (FStar_Tactics_Effect.tac_bind + (Prims.mk_range + "Steel.Effect.Common.fsti" + (Prims.of_int (2135)) + (Prims.of_int (12)) + (Prims.of_int (2135)) + (Prims.of_int (38))) + (Prims.mk_range + "Steel.Effect.Common.fsti" + (Prims.of_int (2135)) + (Prims.of_int (9)) + (Prims.of_int (2149)) + (Prims.of_int (10))) + (Obj.magic + (FStar_Tactics_Effect.tac_bind + (Prims.mk_range + "Steel.Effect.Common.fsti" + (Prims.of_int (2135)) + (Prims.of_int (16)) + (Prims.of_int (2135)) + (Prims.of_int (38))) + (Prims.mk_range + "Steel.Effect.Common.fsti" + (Prims.of_int (2135)) + (Prims.of_int (12)) + (Prims.of_int (2135)) + (Prims.of_int (38))) + (Obj.magic + (all_guards_solved hd)) + (fun uu___5 -> + FStar_Tactics_Effect.lift_div_tac + (fun uu___6 -> + Prims.op_Negation + uu___5)))) + (fun uu___5 -> + (fun uu___5 -> + if uu___5 + then + Obj.magic + (Obj.repr + (FStar_Tactics_Effect.lift_div_tac + (fun uu___6 -> false))) + else + Obj.magic + (Obj.repr + (FStar_List_Tot_Base.fold_left + (fun tac -> + fun uu___7 -> + match uu___7 + with + | (tm, uu___8) + -> + (fun uu___9 + -> + FStar_Tactics_Effect.tac_bind + (Prims.mk_range + "Steel.Effect.Common.fsti" + (Prims.of_int (2141)) + (Prims.of_int (15)) + (Prims.of_int (2141)) + (Prims.of_int (35))) + (Prims.mk_range + "Steel.Effect.Common.fsti" + (Prims.of_int (2141)) + (Prims.of_int (12)) + (Prims.of_int (2143)) + (Prims.of_int (22))) + (Obj.magic + (all_guards_solved + tm)) + (fun + uu___10 + -> + (fun + uu___10 + -> + if + uu___10 + then + Obj.magic + (Obj.repr + (tac ())) + else + Obj.magic + (Obj.repr + (FStar_Tactics_Effect.lift_div_tac + (fun + uu___12 + -> false)))) + uu___10))) + (fun uu___7 -> + (fun uu___7 -> + Obj.magic + (FStar_Tactics_Effect.lift_div_tac + ( + fun + uu___8 -> + true))) + uu___7) args ()))) + uu___5))) uu___3))) + | uu___1 -> + Obj.magic + (Obj.repr + (FStar_Tactics_Effect.lift_div_tac (fun uu___2 -> true)))) + uu___) +let (unfold_guard : unit -> (Prims.bool, unit) FStar_Tactics_Effect.tac_repr) + = + fun uu___ -> + FStar_Tactics_Effect.tac_bind + (Prims.mk_range "Steel.Effect.Common.fsti" (Prims.of_int (2153)) + (Prims.of_int (5)) (Prims.of_int (2153)) (Prims.of_int (36))) + (Prims.mk_range "Steel.Effect.Common.fsti" (Prims.of_int (2153)) + (Prims.of_int (2)) (Prims.of_int (2158)) (Prims.of_int (9))) + (Obj.magic + (FStar_Tactics_Effect.tac_bind + (Prims.mk_range "Steel.Effect.Common.fsti" (Prims.of_int (2153)) + (Prims.of_int (23)) (Prims.of_int (2153)) (Prims.of_int (36))) + (Prims.mk_range "Steel.Effect.Common.fsti" (Prims.of_int (2153)) + (Prims.of_int (5)) (Prims.of_int (2153)) (Prims.of_int (36))) + (Obj.magic (FStar_Tactics_Derived.cur_goal ())) + (fun uu___1 -> + (fun uu___1 -> Obj.magic (all_guards_solved uu___1)) uu___1))) + (fun uu___1 -> + (fun uu___1 -> + if uu___1 + then + Obj.magic + (Obj.repr + (FStar_Tactics_Effect.tac_bind + (Prims.mk_range "Steel.Effect.Common.fsti" + (Prims.of_int (2155)) (Prims.of_int (4)) + (Prims.of_int (2155)) (Prims.of_int (56))) + (Prims.mk_range "Steel.Effect.Common.fsti" + (Prims.of_int (2156)) (Prims.of_int (4)) + (Prims.of_int (2156)) (Prims.of_int (8))) + (Obj.magic + (FStar_Tactics_Derived.focus + (fun uu___2 -> + FStar_Tactics_Builtins.norm + [FStar_Pervasives.delta_only + ["Steel.Effect.Common.guard_vprop"]]))) + (fun uu___2 -> + FStar_Tactics_Effect.lift_div_tac + (fun uu___3 -> true)))) + else + Obj.magic + (Obj.repr + (FStar_Tactics_Effect.lift_div_tac (fun uu___3 -> false)))) + uu___1) +let rec (term_is_uvar : + FStar_Reflection_Types.term -> + Prims.int -> (Prims.bool, unit) FStar_Tactics_Effect.tac_repr) + = + fun t -> + fun i -> + FStar_Tactics_Effect.tac_bind + (Prims.mk_range "Steel.Effect.Common.fsti" (Prims.of_int (2160)) + (Prims.of_int (22)) (Prims.of_int (2160)) (Prims.of_int (23))) + (Prims.mk_range "Steel.Effect.Common.fsti" (Prims.of_int (2160)) + (Prims.of_int (53)) (Prims.of_int (2165)) (Prims.of_int (14))) + (Obj.magic (FStar_Tactics_Builtins.inspect t)) + (fun uu___ -> + (fun uu___ -> + match uu___ with + | FStar_Reflection_Data.Tv_Uvar (i', uu___1) -> + Obj.magic + (Obj.repr + (FStar_Tactics_Effect.lift_div_tac + (fun uu___2 -> i = i'))) + | FStar_Reflection_Data.Tv_App (uu___1, uu___2) -> + Obj.magic + (Obj.repr + (FStar_Tactics_Effect.tac_bind + (Prims.mk_range "Steel.Effect.Common.fsti" + (Prims.of_int (2163)) (Prims.of_int (21)) + (Prims.of_int (2163)) (Prims.of_int (34))) + (Prims.mk_range "Steel.Effect.Common.fsti" + (Prims.of_int (2163)) (Prims.of_int (6)) + (Prims.of_int (2164)) (Prims.of_int (23))) + (FStar_Tactics_Effect.lift_div_tac + (fun uu___3 -> + FStar_Reflection_Derived.collect_app t)) + (fun uu___3 -> + (fun uu___3 -> + match uu___3 with + | (hd, args) -> Obj.magic (term_is_uvar hd i)) + uu___3))) + | uu___1 -> + Obj.magic + (Obj.repr + (FStar_Tactics_Effect.lift_div_tac + (fun uu___2 -> false)))) uu___) +let rec (dismiss_all_but_last' : + FStar_Tactics_Types.goal Prims.list -> + (unit, unit) FStar_Tactics_Effect.tac_repr) + = + fun l -> + match l with + | [] -> FStar_Tactics_Builtins.set_goals l + | uu___::[] -> FStar_Tactics_Builtins.set_goals l + | uu___::q -> dismiss_all_but_last' q +let (dismiss_all_but_last : + unit -> (unit, unit) FStar_Tactics_Effect.tac_repr) = + fun uu___ -> + FStar_Tactics_Effect.tac_bind + (Prims.mk_range "Steel.Effect.Common.fsti" (Prims.of_int (2177)) + (Prims.of_int (24)) (Prims.of_int (2177)) (Prims.of_int (34))) + (Prims.mk_range "Steel.Effect.Common.fsti" (Prims.of_int (2177)) + (Prims.of_int (2)) (Prims.of_int (2177)) (Prims.of_int (34))) + (Obj.magic (FStar_Tactics_Derived.goals ())) + (fun uu___1 -> + (fun uu___1 -> Obj.magic (dismiss_all_but_last' uu___1)) uu___1) +let rec (dismiss_non_squash_goals' : + FStar_Tactics_Types.goal Prims.list -> + FStar_Tactics_Types.goal Prims.list -> + (unit, unit) FStar_Tactics_Effect.tac_repr) + = + fun keep -> + fun goals -> + match goals with + | [] -> FStar_Tactics_Builtins.set_goals (FStar_List_Tot_Base.rev keep) + | hd::tl -> + FStar_Tactics_Effect.tac_bind + (Prims.mk_range "Steel.Effect.Common.fsti" (Prims.of_int (2184)) + (Prims.of_int (13)) (Prims.of_int (2184)) (Prims.of_int (44))) + (Prims.mk_range "Steel.Effect.Common.fsti" (Prims.of_int (2185)) + (Prims.of_int (5)) (Prims.of_int (2192)) (Prims.of_int (40))) + (Obj.magic + (FStar_Reflection_Formula.term_as_formula' + (FStar_Tactics_Types.goal_type hd))) + (fun uu___ -> + (fun f -> + match f with + | FStar_Reflection_Formula.App (hs, uu___) -> + if is_squash hs + then + Obj.magic (dismiss_non_squash_goals' (hd :: keep) tl) + else Obj.magic (dismiss_non_squash_goals' keep tl) + | uu___ -> Obj.magic (dismiss_non_squash_goals' keep tl)) + uu___) +let (dismiss_non_squash_goals : + unit -> (unit, unit) FStar_Tactics_Effect.tac_repr) = + fun uu___ -> + FStar_Tactics_Effect.tac_bind + (Prims.mk_range "Steel.Effect.Common.fsti" (Prims.of_int (2195)) + (Prims.of_int (10)) (Prims.of_int (2195)) (Prims.of_int (18))) + (Prims.mk_range "Steel.Effect.Common.fsti" (Prims.of_int (2196)) + (Prims.of_int (2)) (Prims.of_int (2196)) (Prims.of_int (32))) + (Obj.magic (FStar_Tactics_Derived.goals ())) + (fun uu___1 -> + (fun g -> Obj.magic (dismiss_non_squash_goals' [] g)) uu___1) +let rec (term_mem : + FStar_Reflection_Types.term -> + FStar_Reflection_Types.term Prims.list -> + (Prims.bool, unit) FStar_Tactics_Effect.tac_repr) + = + fun uu___1 -> + fun uu___ -> + (fun te -> + fun l -> + match l with + | [] -> + Obj.magic + (Obj.repr + (FStar_Tactics_Effect.lift_div_tac (fun uu___ -> false))) + | t'::q -> + Obj.magic + (Obj.repr + (FStar_Tactics_Effect.tac_bind + (Prims.mk_range "Steel.Effect.Common.fsti" + (Prims.of_int (2202)) (Prims.of_int (7)) + (Prims.of_int (2202)) (Prims.of_int (26))) + (Prims.mk_range "Steel.Effect.Common.fsti" + (Prims.of_int (2202)) (Prims.of_int (4)) + (Prims.of_int (2202)) (Prims.of_int (55))) + (Obj.magic (FStar_Tactics_Builtins.term_eq_old te t')) + (fun uu___ -> + (fun uu___ -> + if uu___ + then + Obj.magic + (Obj.repr + (FStar_Tactics_Effect.lift_div_tac + (fun uu___1 -> true))) + else Obj.magic (Obj.repr (term_mem te q))) uu___)))) + uu___1 uu___ +let rec (lookup_by_term_attr' : + FStar_Reflection_Types.term -> + FStar_Reflection_Types.env -> + FStar_Reflection_Types.fv Prims.list -> + FStar_Reflection_Types.fv Prims.list -> + (FStar_Reflection_Types.fv Prims.list, unit) + FStar_Tactics_Effect.tac_repr) + = + fun uu___3 -> + fun uu___2 -> + fun uu___1 -> + fun uu___ -> + (fun attr -> + fun e -> + fun found -> + fun l -> + match l with + | [] -> + Obj.magic + (Obj.repr + (FStar_Tactics_Effect.lift_div_tac + (fun uu___ -> FStar_List_Tot_Base.rev found))) + | f::q -> + Obj.magic + (Obj.repr + (FStar_Tactics_Effect.tac_bind + (Prims.mk_range "Steel.Effect.Common.fsti" + (Prims.of_int (2209)) (Prims.of_int (12)) + (Prims.of_int (2209)) (Prims.of_int (24))) + (Prims.mk_range "Steel.Effect.Common.fsti" + (Prims.of_int (2210)) (Prims.of_int (10)) + (Prims.of_int (2218)) (Prims.of_int (42))) + (FStar_Tactics_Effect.lift_div_tac + (fun uu___ -> + FStar_Reflection_Builtins.inspect_fv f)) + (fun uu___ -> + (fun n -> + match FStar_Reflection_Builtins.lookup_typ + e n + with + | FStar_Pervasives_Native.None -> + Obj.magic + (lookup_by_term_attr' attr e found + q) + | FStar_Pervasives_Native.Some se -> + Obj.magic + (FStar_Tactics_Effect.tac_bind + (Prims.mk_range + "Steel.Effect.Common.fsti" + (Prims.of_int (2214)) + (Prims.of_int (8)) + (Prims.of_int (2216)) + (Prims.of_int (18))) + (Prims.mk_range + "Steel.Effect.Common.fsti" + (Prims.of_int (2218)) + (Prims.of_int (6)) + (Prims.of_int (2218)) + (Prims.of_int (42))) + (Obj.magic + (FStar_Tactics_Effect.tac_bind + (Prims.mk_range + "Steel.Effect.Common.fsti" + (Prims.of_int (2214)) + (Prims.of_int (11)) + (Prims.of_int (2214)) + (Prims.of_int (42))) + (Prims.mk_range + "Steel.Effect.Common.fsti" + (Prims.of_int (2214)) + (Prims.of_int (8)) + (Prims.of_int (2216)) + (Prims.of_int (18))) + (Obj.magic + (term_mem attr + (FStar_Reflection_Builtins.sigelt_attrs + se))) + (fun uu___ -> + FStar_Tactics_Effect.lift_div_tac + (fun uu___1 -> + if uu___ + then f :: found + else found)))) + (fun uu___ -> + (fun found' -> + Obj.magic + (lookup_by_term_attr' + attr e found' q)) + uu___))) uu___)))) uu___3 + uu___2 uu___1 uu___ +let (lookup_by_term_attr : + FStar_Reflection_Types.term -> + FStar_Reflection_Types.term -> + (FStar_Reflection_Types.fv Prims.list, unit) + FStar_Tactics_Effect.tac_repr) + = + fun label_attr -> + fun attr -> + FStar_Tactics_Effect.tac_bind + (Prims.mk_range "Steel.Effect.Common.fsti" (Prims.of_int (2222)) + (Prims.of_int (10)) (Prims.of_int (2222)) (Prims.of_int (20))) + (Prims.mk_range "Steel.Effect.Common.fsti" (Prims.of_int (2223)) + (Prims.of_int (2)) (Prims.of_int (2224)) (Prims.of_int (43))) + (Obj.magic (FStar_Tactics_Derived.cur_env ())) + (fun uu___ -> + (fun e -> + Obj.magic + (FStar_Tactics_Effect.tac_bind + (Prims.mk_range "Steel.Effect.Common.fsti" + (Prims.of_int (2223)) (Prims.of_int (19)) + (Prims.of_int (2223)) (Prims.of_int (43))) + (Prims.mk_range "Steel.Effect.Common.fsti" + (Prims.of_int (2224)) (Prims.of_int (2)) + (Prims.of_int (2224)) (Prims.of_int (43))) + (FStar_Tactics_Effect.lift_div_tac + (fun uu___ -> + FStar_Reflection_Builtins.lookup_attr label_attr e)) + (fun uu___ -> + (fun candidates -> + Obj.magic + (lookup_by_term_attr' attr e [] candidates)) uu___))) + uu___) +let rec (bring_last_goal_on_top' : + FStar_Tactics_Types.goal Prims.list -> + FStar_Tactics_Types.goal Prims.list -> + (unit, unit) FStar_Tactics_Effect.tac_repr) + = + fun others -> + fun goals -> + match goals with + | [] -> + FStar_Tactics_Builtins.set_goals (FStar_List_Tot_Base.rev others) + | last::[] -> + FStar_Tactics_Builtins.set_goals (last :: + (FStar_List_Tot_Base.rev others)) + | a::q -> bring_last_goal_on_top' (a :: others) q +let (bring_last_goal_on_top : + unit -> (unit, unit) FStar_Tactics_Effect.tac_repr) = + fun uu___ -> + FStar_Tactics_Effect.tac_bind + (Prims.mk_range "Steel.Effect.Common.fsti" (Prims.of_int (2233)) + (Prims.of_int (10)) (Prims.of_int (2233)) (Prims.of_int (18))) + (Prims.mk_range "Steel.Effect.Common.fsti" (Prims.of_int (2234)) + (Prims.of_int (2)) (Prims.of_int (2234)) (Prims.of_int (30))) + (Obj.magic (FStar_Tactics_Derived.goals ())) + (fun uu___1 -> + (fun g -> Obj.magic (bring_last_goal_on_top' [] g)) uu___1) +let rec (extract_contexts : + FStar_Reflection_Types.term -> + FStar_Reflection_Types.term -> + FStar_Reflection_Types.term -> + FStar_Reflection_Types.term -> + FStar_Reflection_Types.term -> + ((unit -> (unit, unit) FStar_Tactics_Effect.tac_repr) + FStar_Pervasives_Native.option, + unit) FStar_Tactics_Effect.tac_repr) + = + fun lemma_left -> + fun lemma_right -> + fun label_attr -> + fun attr -> + fun t -> + FStar_Tactics_Effect.tac_bind + (Prims.mk_range "Steel.Effect.Common.fsti" + (Prims.of_int (2241)) (Prims.of_int (15)) + (Prims.of_int (2241)) (Prims.of_int (28))) + (Prims.mk_range "Steel.Effect.Common.fsti" + (Prims.of_int (2241)) (Prims.of_int (2)) + (Prims.of_int (2292)) (Prims.of_int (7))) + (FStar_Tactics_Effect.lift_div_tac + (fun uu___ -> FStar_Reflection_Derived.collect_app t)) + (fun uu___ -> + (fun uu___ -> + match uu___ with + | (hd, tl) -> + if is_star hd + then + Obj.magic + (Obj.repr + (match tl with + | (t_left, FStar_Reflection_Data.Q_Explicit):: + (t_right, + FStar_Reflection_Data.Q_Explicit)::[] + -> + Obj.repr + (FStar_Tactics_Effect.tac_bind + (Prims.mk_range + "Steel.Effect.Common.fsti" + (Prims.of_int (2247)) + (Prims.of_int (8)) + (Prims.of_int (2254)) + (Prims.of_int (11))) + (Prims.mk_range + "Steel.Effect.Common.fsti" + (Prims.of_int (2256)) + (Prims.of_int (12)) + (Prims.of_int (2269)) + (Prims.of_int (9))) + (FStar_Tactics_Effect.lift_div_tac + (fun uu___1 -> + fun uu___2 -> + FStar_Tactics_Effect.tac_bind + (Prims.mk_range + "Steel.Effect.Common.fsti" + (Prims.of_int (2247)) + (Prims.of_int (14)) + (Prims.of_int (2247)) + (Prims.of_int (77))) + (Prims.mk_range + "Steel.Effect.Common.fsti" + (Prims.of_int (2247)) + (Prims.of_int (8)) + (Prims.of_int (2254)) + (Prims.of_int (11))) + (Obj.magic + (extract_contexts + lemma_left + lemma_right + label_attr attr + t_right)) + (fun uu___3 -> + FStar_Tactics_Effect.lift_div_tac + (fun uu___4 -> + match uu___3 with + | FStar_Pervasives_Native.None + -> + FStar_Pervasives_Native.None + | FStar_Pervasives_Native.Some + f -> + FStar_Pervasives_Native.Some + ((fun uu___5 + -> + FStar_Tactics_Effect.tac_bind + (Prims.mk_range + "Steel.Effect.Common.fsti" + (Prims.of_int (2251)) + (Prims.of_int (12)) + (Prims.of_int (2251)) + (Prims.of_int (35))) + (Prims.mk_range + "Steel.Effect.Common.fsti" + (Prims.of_int (2252)) + (Prims.of_int (12)) + (Prims.of_int (2253)) + (Prims.of_int (16))) + (Obj.magic + (FStar_Tactics_Derived.apply_lemma + lemma_right)) + (fun + uu___6 -> + (fun + uu___6 -> + Obj.magic + (FStar_Tactics_Effect.tac_bind + (Prims.mk_range + "Steel.Effect.Common.fsti" + (Prims.of_int (2252)) + (Prims.of_int (12)) + (Prims.of_int (2252)) + (Prims.of_int (35))) + (Prims.mk_range + "Steel.Effect.Common.fsti" + (Prims.of_int (2253)) + (Prims.of_int (12)) + (Prims.of_int (2253)) + (Prims.of_int (16))) + (Obj.magic + (dismiss_all_but_last + ())) + (fun + uu___7 -> + (fun + uu___7 -> + Obj.magic + (f ())) + uu___7))) + uu___6))))))) + (fun uu___1 -> + (fun extract_right -> + Obj.magic + (FStar_Tactics_Effect.tac_bind + (Prims.mk_range + "Steel.Effect.Common.fsti" + (Prims.of_int (2256)) + (Prims.of_int (18)) + (Prims.of_int (2256)) + (Prims.of_int (80))) + (Prims.mk_range + "Steel.Effect.Common.fsti" + (Prims.of_int (2256)) + (Prims.of_int (12)) + (Prims.of_int (2269)) + (Prims.of_int (9))) + (Obj.magic + (extract_contexts + lemma_left + lemma_right + label_attr attr + t_left)) + (fun uu___1 -> + (fun uu___1 -> + match uu___1 with + | FStar_Pervasives_Native.None + -> + Obj.magic + (Obj.repr + (extract_right + ())) + | FStar_Pervasives_Native.Some + f -> + Obj.magic + (Obj.repr + (FStar_Tactics_Effect.lift_div_tac + (fun + uu___2 -> + FStar_Pervasives_Native.Some + (fun + uu___3 -> + FStar_Tactics_Derived.try_with + (fun + uu___4 -> + match () + with + | + () -> + FStar_Tactics_Effect.tac_bind + (Prims.mk_range + "Steel.Effect.Common.fsti" + (Prims.of_int (2261)) + (Prims.of_int (12)) + (Prims.of_int (2261)) + (Prims.of_int (34))) + (Prims.mk_range + "Steel.Effect.Common.fsti" + (Prims.of_int (2262)) + (Prims.of_int (12)) + (Prims.of_int (2263)) + (Prims.of_int (16))) + (Obj.magic + (FStar_Tactics_Derived.apply_lemma + lemma_left)) + (fun + uu___5 -> + (fun + uu___5 -> + Obj.magic + (FStar_Tactics_Effect.tac_bind + (Prims.mk_range + "Steel.Effect.Common.fsti" + (Prims.of_int (2262)) + (Prims.of_int (12)) + (Prims.of_int (2262)) + (Prims.of_int (35))) + (Prims.mk_range + "Steel.Effect.Common.fsti" + (Prims.of_int (2263)) + (Prims.of_int (12)) + (Prims.of_int (2263)) + (Prims.of_int (16))) + (Obj.magic + (dismiss_all_but_last + ())) + (fun + uu___6 -> + (fun + uu___6 -> + Obj.magic + (f ())) + uu___6))) + uu___5)) + (fun + uu___4 -> + FStar_Tactics_Effect.tac_bind + (Prims.mk_range + "Steel.Effect.Common.fsti" + (Prims.of_int (2265)) + (Prims.of_int (24)) + (Prims.of_int (2265)) + (Prims.of_int (40))) + (Prims.mk_range + "Steel.Effect.Common.fsti" + (Prims.of_int (2265)) + (Prims.of_int (18)) + (Prims.of_int (2267)) + (Prims.of_int (28))) + (Obj.magic + (extract_right + ())) + (fun + uu___5 -> + (fun + uu___5 -> + match uu___5 + with + | + FStar_Pervasives_Native.None + -> + Obj.magic + (FStar_Tactics_Derived.fail + "no context on the right either") + | + FStar_Pervasives_Native.Some + g -> + Obj.magic + (g ())) + uu___5))))))) + uu___1))) uu___1)) + | uu___1 -> + Obj.repr + (FStar_Tactics_Effect.lift_div_tac + (fun uu___2 -> + FStar_Pervasives_Native.None)))) + else + Obj.magic + (Obj.repr + (FStar_Tactics_Effect.tac_bind + (Prims.mk_range "Steel.Effect.Common.fsti" + (Prims.of_int (2274)) (Prims.of_int (6)) + (Prims.of_int (2284)) + (Prims.of_int (71))) + (Prims.mk_range "Steel.Effect.Common.fsti" + (Prims.of_int (2286)) (Prims.of_int (4)) + (Prims.of_int (2292)) (Prims.of_int (7))) + (Obj.magic + (FStar_Tactics_Effect.tac_bind + (Prims.mk_range + "Steel.Effect.Common.fsti" + (Prims.of_int (2274)) + (Prims.of_int (18)) + (Prims.of_int (2277)) + (Prims.of_int (17))) + (Prims.mk_range + "Steel.Effect.Common.fsti" + (Prims.of_int (2279)) + (Prims.of_int (6)) + (Prims.of_int (2284)) + (Prims.of_int (71))) + (Obj.magic + (FStar_Tactics_Effect.tac_bind + (Prims.mk_range + "Steel.Effect.Common.fsti" + (Prims.of_int (2274)) + (Prims.of_int (24)) + (Prims.of_int (2274)) + (Prims.of_int (44))) + (Prims.mk_range + "Steel.Effect.Common.fsti" + (Prims.of_int (2274)) + (Prims.of_int (18)) + (Prims.of_int (2277)) + (Prims.of_int (17))) + (Obj.magic + (FStar_Tactics_Derived.inspect_unascribe + hd)) + (fun uu___2 -> + FStar_Tactics_Effect.lift_div_tac + (fun uu___3 -> + match uu___2 with + | FStar_Reflection_Data.Tv_FVar + fv -> + FStar_Pervasives_Native.Some + fv + | FStar_Reflection_Data.Tv_UInst + (fv, uu___4) -> + FStar_Pervasives_Native.Some + fv + | uu___4 -> + FStar_Pervasives_Native.None)))) + (fun uu___2 -> + (fun hd_fv -> + match hd_fv with + | FStar_Pervasives_Native.None + -> + Obj.magic + (Obj.repr + (FStar_Tactics_Effect.lift_div_tac + (fun uu___2 -> []))) + | FStar_Pervasives_Native.Some + hd_fv1 -> + Obj.magic + (Obj.repr + (FStar_Tactics_Effect.tac_bind + (Prims.mk_range + "Steel.Effect.Common.fsti" + (Prims.of_int (2282)) + (Prims.of_int (20)) + (Prims.of_int (2282)) + (Prims.of_int (49))) + (Prims.mk_range + "Steel.Effect.Common.fsti" + (Prims.of_int (2283)) + (Prims.of_int (8)) + (Prims.of_int (2284)) + (Prims.of_int (71))) + (FStar_Tactics_Effect.lift_div_tac + (fun uu___2 -> + FStar_Reflection_Builtins.implode_qn + (FStar_Reflection_Builtins.inspect_fv + hd_fv1))) + (fun uu___2 -> + (fun hd_s' -> + Obj.magic + (FStar_Tactics_Effect.tac_bind + (Prims.mk_range + "Steel.Effect.Common.fsti" + (Prims.of_int (2283)) + (Prims.of_int (19)) + (Prims.of_int (2283)) + (Prims.of_int (51))) + (Prims.mk_range + "Steel.Effect.Common.fsti" + (Prims.of_int (2284)) + (Prims.of_int (8)) + (Prims.of_int (2284)) + (Prims.of_int (71))) + (Obj.magic + (FStar_Tactics_Builtins.pack + (FStar_Reflection_Data.Tv_Const + (FStar_Reflection_Data.C_String + hd_s')))) + (fun + uu___2 -> + (fun hd_s + -> + Obj.magic + (lookup_by_term_attr + label_attr + (FStar_Reflection_Derived.mk_app + attr + [ + (hd_s, + FStar_Reflection_Data.Q_Explicit)]))) + uu___2))) + uu___2)))) + uu___2))) + (fun candidates -> + FStar_Tactics_Effect.lift_div_tac + (fun uu___2 -> + if Prims.uu___is_Nil candidates + then FStar_Pervasives_Native.None + else + FStar_Pervasives_Native.Some + ((fun uu___4 -> + FStar_Tactics_Effect.tac_bind + (Prims.mk_range + "Steel.Effect.Common.fsti" + (Prims.of_int (2290)) + (Prims.of_int (8)) + (Prims.of_int (2290)) + (Prims.of_int (104))) + (Prims.mk_range + "Steel.Effect.Common.fsti" + (Prims.of_int (2291)) + (Prims.of_int (8)) + (Prims.of_int (2291)) + (Prims.of_int (35))) + (Obj.magic + (FStar_Tactics_Derived.first + (FStar_List_Tot_Base.map + (fun candidate + -> + fun uu___5 -> + FStar_Tactics_Effect.tac_bind + ( + Prims.mk_range + "Steel.Effect.Common.fsti" + (Prims.of_int (2290)) + (Prims.of_int (60)) + (Prims.of_int (2290)) + (Prims.of_int (79))) + ( + Prims.mk_range + "Steel.Effect.Common.fsti" + (Prims.of_int (2290)) + (Prims.of_int (48)) + (Prims.of_int (2290)) + (Prims.of_int (79))) + ( + Obj.magic + (FStar_Tactics_Builtins.pack + (FStar_Reflection_Data.Tv_FVar + candidate))) + ( + fun + uu___6 -> + (fun + uu___6 -> + Obj.magic + (FStar_Tactics_Derived.apply_lemma + uu___6)) + uu___6)) + candidates))) + (fun uu___5 -> + (fun uu___5 -> + Obj.magic + (dismiss_non_squash_goals + ())) uu___5)))))))) + uu___) +let (extract_cbs_contexts : + FStar_Reflection_Types.term -> + ((unit -> (unit, unit) FStar_Tactics_Effect.tac_repr) + FStar_Pervasives_Native.option, + unit) FStar_Tactics_Effect.tac_repr) + = + extract_contexts + (FStar_Reflection_Builtins.pack_ln + (FStar_Reflection_Data.Tv_FVar + (FStar_Reflection_Builtins.pack_fv + ["Steel"; "Effect"; "Common"; "can_be_split_congr_l"]))) + (FStar_Reflection_Builtins.pack_ln + (FStar_Reflection_Data.Tv_FVar + (FStar_Reflection_Builtins.pack_fv + ["Steel"; "Effect"; "Common"; "can_be_split_congr_r"]))) + (FStar_Reflection_Builtins.pack_ln + (FStar_Reflection_Data.Tv_FVar + (FStar_Reflection_Builtins.pack_fv + ["Steel"; "Effect"; "Common"; "solve_can_be_split_lookup"]))) + (FStar_Reflection_Builtins.pack_ln + (FStar_Reflection_Data.Tv_FVar + (FStar_Reflection_Builtins.pack_fv + ["Steel"; "Effect"; "Common"; "solve_can_be_split_for"]))) +let (open_existentials : unit -> (unit, unit) FStar_Tactics_Effect.tac_repr) + = + fun uu___ -> + FStar_Tactics_Effect.tac_bind + (Prims.mk_range "Steel.Effect.Common.fsti" (Prims.of_int (2302)) + (Prims.of_int (15)) (Prims.of_int (2302)) (Prims.of_int (25))) + (Prims.mk_range "Steel.Effect.Common.fsti" (Prims.of_int (2303)) + (Prims.of_int (7)) (Prims.of_int (2326)) (Prims.of_int (57))) + (Obj.magic (FStar_Tactics_Derived.cur_env ())) + (fun uu___1 -> + (fun e -> + Obj.magic + (FStar_Tactics_Effect.tac_bind + (Prims.mk_range "Steel.Effect.Common.fsti" + (Prims.of_int (2303)) (Prims.of_int (7)) + (Prims.of_int (2304)) (Prims.of_int (66))) + (Prims.mk_range "Steel.Effect.Common.fsti" + (Prims.of_int (2305)) (Prims.of_int (7)) + (Prims.of_int (2326)) (Prims.of_int (57))) + (if + Prims.uu___is_Nil + (FStar_Reflection_Builtins.lookup_attr + (FStar_Reflection_Builtins.pack_ln + (FStar_Reflection_Data.Tv_FVar + (FStar_Reflection_Builtins.pack_fv + ["Steel"; + "Effect"; + "Common"; + "solve_can_be_split_lookup"]))) e) + then + Obj.magic + (Obj.repr + (FStar_Tactics_Derived.fail + "Tactic disabled: no available lemmas in context")) + else + Obj.magic + (Obj.repr + (FStar_Tactics_Effect.lift_div_tac + (fun uu___2 -> ())))) + (fun uu___1 -> + (fun uu___1 -> + Obj.magic + (FStar_Tactics_Effect.tac_bind + (Prims.mk_range "Steel.Effect.Common.fsti" + (Prims.of_int (2305)) (Prims.of_int (7)) + (Prims.of_int (2305)) (Prims.of_int (39))) + (Prims.mk_range "Steel.Effect.Common.fsti" + (Prims.of_int (2306)) (Prims.of_int (7)) + (Prims.of_int (2326)) (Prims.of_int (57))) + (Obj.magic + (FStar_Tactics_Builtins.norm + [FStar_Pervasives.delta_attr + ["Steel.Effect.Common.__reduce__"]])) + (fun uu___2 -> + (fun uu___2 -> + Obj.magic + (FStar_Tactics_Effect.tac_bind + (Prims.mk_range + "Steel.Effect.Common.fsti" + (Prims.of_int (2306)) + (Prims.of_int (16)) + (Prims.of_int (2306)) + (Prims.of_int (27))) + (Prims.mk_range + "Steel.Effect.Common.fsti" + (Prims.of_int (2307)) + (Prims.of_int (7)) + (Prims.of_int (2326)) + (Prims.of_int (57))) + (Obj.magic + (FStar_Tactics_Derived.cur_goal ())) + (fun uu___3 -> + (fun t0 -> + match FStar_Reflection_Derived.collect_app + t0 + with + | (uu___3, + (t1, + FStar_Reflection_Data.Q_Explicit)::[]) + -> + Obj.magic + (FStar_Tactics_Effect.tac_bind + (Prims.mk_range + "Steel.Effect.Common.fsti" + (Prims.of_int (2309)) + (Prims.of_int (22)) + (Prims.of_int (2309)) + (Prims.of_int (36))) + (Prims.mk_range + "Steel.Effect.Common.fsti" + (Prims.of_int (2309)) + (Prims.of_int (9)) + (Prims.of_int (2325)) + (Prims.of_int (60))) + (FStar_Tactics_Effect.lift_div_tac + (fun uu___4 -> + FStar_Reflection_Derived.collect_app + t1)) + (fun uu___4 -> + (fun uu___4 -> + match uu___4 with + | (hd, tl) -> + if + FStar_Reflection_Derived.is_fvar + hd + "Steel.Effect.Common.can_be_split" + then + (match tl + with + | + uu___5:: + (rhs, + FStar_Reflection_Data.Q_Explicit)::[] + -> + Obj.magic + (FStar_Tactics_Effect.tac_bind + (Prims.mk_range + "Steel.Effect.Common.fsti" + (Prims.of_int (2314)) + (Prims.of_int (25)) + (Prims.of_int (2314)) + (Prims.of_int (49))) + (Prims.mk_range + "Steel.Effect.Common.fsti" + (Prims.of_int (2314)) + (Prims.of_int (19)) + (Prims.of_int (2321)) + (Prims.of_int (42))) + (Obj.magic + (extract_cbs_contexts + rhs)) + (fun + uu___6 -> + (fun + uu___6 -> + match uu___6 + with + | + FStar_Pervasives_Native.None + -> + Obj.magic + (FStar_Tactics_Derived.fail + "open_existentials: no context found") + | + FStar_Pervasives_Native.Some + f -> + Obj.magic + (FStar_Tactics_Effect.tac_bind + (Prims.mk_range + "Steel.Effect.Common.fsti" + (Prims.of_int (2317)) + (Prims.of_int (17)) + (Prims.of_int (2317)) + (Prims.of_int (54))) + (Prims.mk_range + "Steel.Effect.Common.fsti" + (Prims.of_int (2318)) + (Prims.of_int (17)) + (Prims.of_int (2321)) + (Prims.of_int (42))) + (Obj.magic + (FStar_Tactics_Derived.apply_lemma + (FStar_Reflection_Builtins.pack_ln + (FStar_Reflection_Data.Tv_FVar + (FStar_Reflection_Builtins.pack_fv + ["Steel"; + "Effect"; + "Common"; + "can_be_split_trans_rev"]))))) + (fun + uu___7 -> + (fun + uu___7 -> + Obj.magic + (FStar_Tactics_Effect.tac_bind + (Prims.mk_range + "Steel.Effect.Common.fsti" + (Prims.of_int (2318)) + (Prims.of_int (17)) + (Prims.of_int (2318)) + (Prims.of_int (40))) + (Prims.mk_range + "Steel.Effect.Common.fsti" + (Prims.of_int (2319)) + (Prims.of_int (17)) + (Prims.of_int (2321)) + (Prims.of_int (42))) + (Obj.magic + (dismiss_all_but_last + ())) + (fun + uu___8 -> + (fun + uu___8 -> + Obj.magic + (FStar_Tactics_Effect.tac_bind + (Prims.mk_range + "Steel.Effect.Common.fsti" + (Prims.of_int (2319)) + (Prims.of_int (17)) + (Prims.of_int (2319)) + (Prims.of_int (25))) + (Prims.mk_range + "Steel.Effect.Common.fsti" + (Prims.of_int (2320)) + (Prims.of_int (17)) + (Prims.of_int (2321)) + (Prims.of_int (42))) + (Obj.magic + (FStar_Tactics_Logic.split + ())) + (fun + uu___9 -> + (fun + uu___9 -> + Obj.magic + (FStar_Tactics_Effect.tac_bind + (Prims.mk_range + "Steel.Effect.Common.fsti" + (Prims.of_int (2320)) + (Prims.of_int (17)) + (Prims.of_int (2320)) + (Prims.of_int (24))) + (Prims.mk_range + "Steel.Effect.Common.fsti" + (Prims.of_int (2321)) + (Prims.of_int (17)) + (Prims.of_int (2321)) + (Prims.of_int (42))) + (Obj.magic + (FStar_Tactics_Derived.focus + f)) + (fun + uu___10 + -> + (fun + uu___10 + -> + Obj.magic + (bring_last_goal_on_top + ())) + uu___10))) + uu___9))) + uu___8))) + uu___7))) + uu___6)) + | + uu___5 -> + Obj.magic + (FStar_Tactics_Derived.fail + "open_existentials: ill-formed can_be_split")) + else + Obj.magic + ( + FStar_Tactics_Derived.fail + "open_existentials: not a can_be_split goal")) + uu___4)) + | uu___3 -> + Obj.magic + (FStar_Tactics_Derived.fail + "open_existentials: not a squash goal")) + uu___3))) uu___2))) uu___1))) + uu___1) +let (try_open_existentials : + unit -> (Prims.bool, unit) FStar_Tactics_Effect.tac_repr) = + fun uu___ -> + FStar_Tactics_Derived.focus + (fun uu___1 -> + FStar_Tactics_Derived.try_with + (fun uu___2 -> + match () with + | () -> + FStar_Tactics_Effect.tac_bind + (Prims.mk_range "Steel.Effect.Common.fsti" + (Prims.of_int (2331)) (Prims.of_int (6)) + (Prims.of_int (2331)) (Prims.of_int (26))) + (Prims.mk_range "Steel.Effect.Common.fsti" + (Prims.of_int (2332)) (Prims.of_int (6)) + (Prims.of_int (2332)) (Prims.of_int (10))) + (Obj.magic (open_existentials ())) + (fun uu___3 -> + FStar_Tactics_Effect.lift_div_tac (fun uu___4 -> true))) + (fun uu___2 -> + (fun uu___2 -> + Obj.magic + (FStar_Tactics_Effect.lift_div_tac (fun uu___3 -> false))) + uu___2)) +let rec (solve_can_be_split : + FStar_Reflection_Data.argv Prims.list -> + (Prims.bool, unit) FStar_Tactics_Effect.tac_repr) + = + fun uu___ -> + (fun args -> + match args with + | (t1, uu___)::(t2, uu___1)::[] -> + Obj.magic + (Obj.repr + (FStar_Tactics_Effect.tac_bind + (Prims.mk_range "Steel.Effect.Common.fsti" + (Prims.of_int (2348)) (Prims.of_int (17)) + (Prims.of_int (2348)) (Prims.of_int (36))) + (Prims.mk_range "Steel.Effect.Common.fsti" + (Prims.of_int (2349)) (Prims.of_int (6)) + (Prims.of_int (2380)) (Prims.of_int (18))) + (Obj.magic (slterm_nbr_uvars t1)) + (fun uu___2 -> + (fun lnbr -> + Obj.magic + (FStar_Tactics_Effect.tac_bind + (Prims.mk_range "Steel.Effect.Common.fsti" + (Prims.of_int (2349)) (Prims.of_int (17)) + (Prims.of_int (2349)) (Prims.of_int (36))) + (Prims.mk_range "Steel.Effect.Common.fsti" + (Prims.of_int (2350)) (Prims.of_int (6)) + (Prims.of_int (2380)) (Prims.of_int (18))) + (Obj.magic (slterm_nbr_uvars t2)) + (fun uu___2 -> + (fun rnbr -> + Obj.magic + (FStar_Tactics_Effect.tac_bind + (Prims.mk_range + "Steel.Effect.Common.fsti" + (Prims.of_int (2351)) + (Prims.of_int (8)) + (Prims.of_int (2353)) + (Prims.of_int (18))) + (Prims.mk_range + "Steel.Effect.Common.fsti" + (Prims.of_int (2350)) + (Prims.of_int (6)) + (Prims.of_int (2380)) + (Prims.of_int (18))) + (if (lnbr + rnbr) <= Prims.int_one + then + Obj.magic + (Obj.repr (unfold_guard ())) + else + Obj.magic + (Obj.repr + (FStar_Tactics_Effect.lift_div_tac + (fun uu___3 -> false)))) + (fun uu___2 -> + (fun uu___2 -> + if uu___2 + then + Obj.magic + (Obj.repr + (FStar_Tactics_Derived.try_with + (fun uu___3 -> + match () with + | () -> + FStar_Tactics_Effect.tac_bind + (Prims.mk_range + "Steel.Effect.Common.fsti" + (Prims.of_int (2357)) + (Prims.of_int (10)) + (Prims.of_int (2373)) + (Prims.of_int (57))) + (Prims.mk_range + "Steel.Effect.Common.fsti" + (Prims.of_int (2374)) + (Prims.of_int (10)) + (Prims.of_int (2374)) + (Prims.of_int (14))) + (Obj.magic + (FStar_Tactics_Derived.focus + (fun + uu___4 -> + FStar_Tactics_Effect.tac_bind + (Prims.mk_range + "Steel.Effect.Common.fsti" + (Prims.of_int (2357)) + (Prims.of_int (26)) + (Prims.of_int (2357)) + (Prims.of_int (59))) + (Prims.mk_range + "Steel.Effect.Common.fsti" + (Prims.of_int (2358)) + (Prims.of_int (21)) + (Prims.of_int (2373)) + (Prims.of_int (56))) + (Obj.magic + (FStar_Tactics_Derived.apply_lemma + (FStar_Reflection_Builtins.pack_ln + (FStar_Reflection_Data.Tv_FVar + (FStar_Reflection_Builtins.pack_fv + ["Steel"; + "Effect"; + "Common"; + "equiv_can_be_split"]))))) + (fun + uu___5 -> + (fun + uu___5 -> + Obj.magic + (FStar_Tactics_Effect.tac_bind + (Prims.mk_range + "Steel.Effect.Common.fsti" + (Prims.of_int (2358)) + (Prims.of_int (21)) + (Prims.of_int (2358)) + (Prims.of_int (38))) + (Prims.mk_range + "Steel.Effect.Common.fsti" + (Prims.of_int (2361)) + (Prims.of_int (21)) + (Prims.of_int (2373)) + (Prims.of_int (56))) + (Obj.magic + (dismiss_slprops + ())) + (fun + uu___6 -> + (fun + uu___6 -> + Obj.magic + (FStar_Tactics_Derived.or_else + (fun + uu___7 -> + FStar_Tactics_Derived.apply_lemma + (FStar_Reflection_Builtins.pack_ln + (FStar_Reflection_Data.Tv_FVar + (FStar_Reflection_Builtins.pack_fv + ["Steel"; + "Effect"; + "Common"; + "equiv_refl"])))) + (fun + uu___7 -> + FStar_Tactics_Effect.tac_bind + (Prims.mk_range + "Steel.Effect.Common.fsti" + (Prims.of_int (2363)) + (Prims.of_int (22)) + (Prims.of_int (2363)) + (Prims.of_int (63))) + (Prims.mk_range + "Steel.Effect.Common.fsti" + (Prims.of_int (2365)) + (Prims.of_int (23)) + (Prims.of_int (2373)) + (Prims.of_int (55))) + (if + rnbr = + Prims.int_zero + then + Obj.magic + (Obj.repr + (FStar_Tactics_Derived.apply_lemma + (FStar_Reflection_Builtins.pack_ln + (FStar_Reflection_Data.Tv_FVar + (FStar_Reflection_Builtins.pack_fv + ["Steel"; + "Effect"; + "Common"; + "equiv_sym"]))))) + else + Obj.magic + (Obj.repr + (FStar_Tactics_Effect.lift_div_tac + (fun + uu___9 -> + ())))) + (fun + uu___8 -> + (fun + uu___8 -> + Obj.magic + (FStar_Tactics_Effect.tac_bind + (Prims.mk_range + "Steel.Effect.Common.fsti" + (Prims.of_int (2365)) + (Prims.of_int (23)) + (Prims.of_int (2372)) + (Prims.of_int (48))) + (Prims.mk_range + "Steel.Effect.Common.fsti" + (Prims.of_int (2373)) + (Prims.of_int (23)) + (Prims.of_int (2373)) + (Prims.of_int (55))) + (Obj.magic + (FStar_Tactics_Builtins.norm + [ + FStar_Pervasives.delta_only + ["FStar.Algebra.CommMonoid.Equiv.__proj__CM__item__unit"; + "FStar.Algebra.CommMonoid.Equiv.__proj__CM__item__mult"; + "Steel.Effect.Common.rm"; + "FStar.Pervasives.Native.__proj__Mktuple2__item___1"; + "FStar.Pervasives.Native.__proj__Mktuple2__item___2"; + "FStar.Pervasives.Native.fst"; + "FStar.Pervasives.Native.snd"]; + FStar_Pervasives.delta_attr + ["Steel.Effect.Common.__reduce__"]; + FStar_Pervasives.primops; + FStar_Pervasives.iota; + FStar_Pervasives.zeta])) + (fun + uu___9 -> + (fun + uu___9 -> + Obj.magic + (canon' + false + (FStar_Reflection_Builtins.pack_ln + (FStar_Reflection_Data.Tv_FVar + (FStar_Reflection_Builtins.pack_fv + ["Steel"; + "Effect"; + "Common"; + "true_p"]))) + (FStar_Reflection_Builtins.pack_ln + (FStar_Reflection_Data.Tv_FVar + (FStar_Reflection_Builtins.pack_fv + ["Steel"; + "Effect"; + "Common"; + "true_p"]))))) + uu___9))) + uu___8)))) + uu___6))) + uu___5)))) + (fun uu___4 + -> + FStar_Tactics_Effect.lift_div_tac + (fun + uu___5 -> + true))) + (fun uu___3 -> + FStar_Tactics_Effect.tac_bind + (Prims.mk_range + "Steel.Effect.Common.fsti" + (Prims.of_int (2377)) + (Prims.of_int (28)) + (Prims.of_int (2377)) + (Prims.of_int (52))) + (Prims.mk_range + "Steel.Effect.Common.fsti" + (Prims.of_int (2378)) + (Prims.of_int (10)) + (Prims.of_int (2379)) + (Prims.of_int (20))) + (Obj.magic + (try_open_existentials + ())) + (fun uu___4 -> + (fun + opened_some + -> + if + opened_some + then + Obj.magic + (Obj.repr + (solve_can_be_split + args)) + else + Obj.magic + (Obj.repr + (FStar_Tactics_Effect.lift_div_tac + (fun + uu___5 -> + false)))) + uu___4)))) + else + Obj.magic + (Obj.repr + (FStar_Tactics_Effect.lift_div_tac + (fun uu___4 -> false)))) + uu___2))) uu___2))) uu___2))) + | uu___ -> + Obj.magic + (Obj.repr + (FStar_Tactics_Effect.lift_div_tac (fun uu___1 -> false)))) + uu___ +let (solve_can_be_split_dep : + FStar_Reflection_Data.argv Prims.list -> + (Prims.bool, unit) FStar_Tactics_Effect.tac_repr) + = + fun args -> + match args with + | (p, uu___)::(t1, uu___1)::(t2, uu___2)::[] -> + FStar_Tactics_Effect.tac_bind + (Prims.mk_range "Steel.Effect.Common.fsti" (Prims.of_int (2388)) + (Prims.of_int (17)) (Prims.of_int (2388)) (Prims.of_int (36))) + (Prims.mk_range "Steel.Effect.Common.fsti" (Prims.of_int (2389)) + (Prims.of_int (6)) (Prims.of_int (2420)) (Prims.of_int (18))) + (Obj.magic (slterm_nbr_uvars t1)) + (fun uu___3 -> + (fun lnbr -> + Obj.magic + (FStar_Tactics_Effect.tac_bind + (Prims.mk_range "Steel.Effect.Common.fsti" + (Prims.of_int (2389)) (Prims.of_int (17)) + (Prims.of_int (2389)) (Prims.of_int (36))) + (Prims.mk_range "Steel.Effect.Common.fsti" + (Prims.of_int (2390)) (Prims.of_int (6)) + (Prims.of_int (2420)) (Prims.of_int (18))) + (Obj.magic (slterm_nbr_uvars t2)) + (fun uu___3 -> + (fun rnbr -> + Obj.magic + (FStar_Tactics_Effect.tac_bind + (Prims.mk_range "Steel.Effect.Common.fsti" + (Prims.of_int (2391)) (Prims.of_int (8)) + (Prims.of_int (2393)) (Prims.of_int (18))) + (Prims.mk_range "Steel.Effect.Common.fsti" + (Prims.of_int (2390)) (Prims.of_int (6)) + (Prims.of_int (2420)) (Prims.of_int (18))) + (if (lnbr + rnbr) <= Prims.int_one + then Obj.magic (Obj.repr (unfold_guard ())) + else + Obj.magic + (Obj.repr + (FStar_Tactics_Effect.lift_div_tac + (fun uu___4 -> false)))) + (fun uu___3 -> + (fun uu___3 -> + if uu___3 + then + Obj.magic + (Obj.repr + (FStar_Tactics_Effect.tac_bind + (Prims.mk_range + "Steel.Effect.Common.fsti" + (Prims.of_int (2396)) + (Prims.of_int (8)) + (Prims.of_int (2416)) + (Prims.of_int (36))) + (Prims.mk_range + "Steel.Effect.Common.fsti" + (Prims.of_int (2418)) + (Prims.of_int (8)) + (Prims.of_int (2418)) + (Prims.of_int (12))) + (Obj.magic + (FStar_Tactics_Derived.focus + (fun uu___4 -> + FStar_Tactics_Effect.tac_bind + (Prims.mk_range + "Steel.Effect.Common.fsti" + (Prims.of_int (2397)) + (Prims.of_int (23)) + (Prims.of_int (2397)) + (Prims.of_int (39))) + (Prims.mk_range + "Steel.Effect.Common.fsti" + (Prims.of_int (2398)) + (Prims.of_int (10)) + (Prims.of_int (2416)) + (Prims.of_int (35))) + (Obj.magic + (FStar_Tactics_Logic.implies_intro + ())) + (fun uu___5 -> + (fun p_bind -> + Obj.magic + (FStar_Tactics_Effect.tac_bind + (Prims.mk_range + "Steel.Effect.Common.fsti" + (Prims.of_int (2398)) + (Prims.of_int (10)) + (Prims.of_int (2398)) + (Prims.of_int (43))) + (Prims.mk_range + "Steel.Effect.Common.fsti" + (Prims.of_int (2399)) + (Prims.of_int (10)) + (Prims.of_int (2416)) + (Prims.of_int (35))) + (Obj.magic + (FStar_Tactics_Derived.apply_lemma + (FStar_Reflection_Builtins.pack_ln + (FStar_Reflection_Data.Tv_FVar + (FStar_Reflection_Builtins.pack_fv + ["Steel"; + "Effect"; + "Common"; + "equiv_can_be_split"]))))) + (fun + uu___5 -> + (fun + uu___5 -> + Obj.magic + (FStar_Tactics_Effect.tac_bind + (Prims.mk_range + "Steel.Effect.Common.fsti" + (Prims.of_int (2399)) + (Prims.of_int (10)) + (Prims.of_int (2399)) + (Prims.of_int (28))) + (Prims.mk_range + "Steel.Effect.Common.fsti" + (Prims.of_int (2400)) + (Prims.of_int (10)) + (Prims.of_int (2416)) + (Prims.of_int (35))) + (Obj.magic + (dismiss_slprops + ())) + (fun + uu___6 -> + (fun + uu___6 -> + Obj.magic + (FStar_Tactics_Derived.or_else + (fun + uu___7 -> + FStar_Tactics_Effect.tac_bind + (Prims.mk_range + "Steel.Effect.Common.fsti" + (Prims.of_int (2402)) + (Prims.of_int (22)) + (Prims.of_int (2402)) + (Prims.of_int (39))) + (Prims.mk_range + "Steel.Effect.Common.fsti" + (Prims.of_int (2403)) + (Prims.of_int (14)) + (Prims.of_int (2404)) + (Prims.of_int (39))) + (Obj.magic + (FStar_Tactics_Derived.unify + p + (FStar_Reflection_Builtins.pack_ln + (FStar_Reflection_Data.Tv_FVar + (FStar_Reflection_Builtins.pack_fv + ["Steel"; + "Effect"; + "Common"; + "true_p"]))))) + (fun + uu___8 -> + (fun b -> + Obj.magic + (FStar_Tactics_Effect.tac_bind + (Prims.mk_range + "Steel.Effect.Common.fsti" + (Prims.of_int (2403)) + (Prims.of_int (14)) + (Prims.of_int (2403)) + (Prims.of_int (69))) + (Prims.mk_range + "Steel.Effect.Common.fsti" + (Prims.of_int (2404)) + (Prims.of_int (14)) + (Prims.of_int (2404)) + (Prims.of_int (39))) + (if + Prims.op_Negation + b + then + Obj.magic + (Obj.repr + (FStar_Tactics_Derived.fail + "could not unify SMT prop with True")) + else + Obj.magic + (Obj.repr + (FStar_Tactics_Effect.lift_div_tac + (fun + uu___9 -> + ())))) + (fun + uu___8 -> + (fun + uu___8 -> + Obj.magic + (FStar_Tactics_Derived.apply_lemma + (FStar_Reflection_Builtins.pack_ln + (FStar_Reflection_Data.Tv_FVar + (FStar_Reflection_Builtins.pack_fv + ["Steel"; + "Effect"; + "Common"; + "equiv_refl"]))))) + uu___8))) + uu___8)) + (fun + uu___7 -> + FStar_Tactics_Effect.tac_bind + (Prims.mk_range + "Steel.Effect.Common.fsti" + (Prims.of_int (2406)) + (Prims.of_int (14)) + (Prims.of_int (2406)) + (Prims.of_int (68))) + (Prims.mk_range + "Steel.Effect.Common.fsti" + (Prims.of_int (2407)) + (Prims.of_int (14)) + (Prims.of_int (2416)) + (Prims.of_int (34))) + (if + (lnbr <> + Prims.int_zero) + && + (rnbr = + Prims.int_zero) + then + Obj.magic + (Obj.repr + (FStar_Tactics_Derived.apply_lemma + (FStar_Reflection_Builtins.pack_ln + (FStar_Reflection_Data.Tv_FVar + (FStar_Reflection_Builtins.pack_fv + ["Steel"; + "Effect"; + "Common"; + "equiv_sym"]))))) + else + Obj.magic + (Obj.repr + (FStar_Tactics_Effect.lift_div_tac + (fun + uu___9 -> + ())))) + (fun + uu___8 -> + (fun + uu___8 -> + Obj.magic + (FStar_Tactics_Effect.tac_bind + (Prims.mk_range + "Steel.Effect.Common.fsti" + (Prims.of_int (2407)) + (Prims.of_int (14)) + (Prims.of_int (2407)) + (Prims.of_int (54))) + (Prims.mk_range + "Steel.Effect.Common.fsti" + (Prims.of_int (2408)) + (Prims.of_int (14)) + (Prims.of_int (2416)) + (Prims.of_int (34))) + (Obj.magic + (FStar_Tactics_Derived.or_else + (fun + uu___9 -> + FStar_Tactics_Derived.flip + ()) + (fun + uu___9 -> + (fun + uu___9 -> + Obj.magic + (FStar_Tactics_Effect.lift_div_tac + (fun + uu___10 + -> ()))) + uu___9))) + (fun + uu___9 -> + (fun + uu___9 -> + Obj.magic + (FStar_Tactics_Effect.tac_bind + (Prims.mk_range + "Steel.Effect.Common.fsti" + (Prims.of_int (2408)) + (Prims.of_int (14)) + (Prims.of_int (2415)) + (Prims.of_int (39))) + (Prims.mk_range + "Steel.Effect.Common.fsti" + (Prims.of_int (2416)) + (Prims.of_int (14)) + (Prims.of_int (2416)) + (Prims.of_int (34))) + (Obj.magic + (FStar_Tactics_Builtins.norm + [ + FStar_Pervasives.delta_only + ["FStar.Algebra.CommMonoid.Equiv.__proj__CM__item__unit"; + "FStar.Algebra.CommMonoid.Equiv.__proj__CM__item__mult"; + "Steel.Effect.Common.rm"; + "FStar.Pervasives.Native.__proj__Mktuple2__item___1"; + "FStar.Pervasives.Native.__proj__Mktuple2__item___2"; + "FStar.Pervasives.Native.fst"; + "FStar.Pervasives.Native.snd"]; + FStar_Pervasives.delta_attr + ["Steel.Effect.Common.__reduce__"]; + FStar_Pervasives.primops; + FStar_Pervasives.iota; + FStar_Pervasives.zeta])) + (fun + uu___10 + -> + (fun + uu___10 + -> + Obj.magic + (FStar_Tactics_Effect.tac_bind + (Prims.mk_range + "Steel.Effect.Common.fsti" + (Prims.of_int (2397)) + (Prims.of_int (14)) + (Prims.of_int (2397)) + (Prims.of_int (20))) + (Prims.mk_range + "Steel.Effect.Common.fsti" + (Prims.of_int (2416)) + (Prims.of_int (14)) + (Prims.of_int (2416)) + (Prims.of_int (34))) + (Obj.magic + (FStar_Tactics_Derived.binder_to_term + p_bind)) + (fun + uu___11 + -> + (fun + uu___11 + -> + Obj.magic + (canon' + true p + uu___11)) + uu___11))) + uu___10))) + uu___9))) + uu___8)))) + uu___6))) + uu___5))) + uu___5)))) + (fun uu___4 -> + FStar_Tactics_Effect.lift_div_tac + (fun uu___5 -> true)))) + else + Obj.magic + (Obj.repr + (FStar_Tactics_Effect.lift_div_tac + (fun uu___5 -> false)))) + uu___3))) uu___3))) uu___3) + | uu___ -> FStar_Tactics_Derived.fail "ill-formed can_be_split_dep" +let (solve_can_be_split_forall : + FStar_Reflection_Data.argv Prims.list -> + (Prims.bool, unit) FStar_Tactics_Effect.tac_repr) + = + fun args -> + match args with + | uu___::(t1, uu___1)::(t2, uu___2)::[] -> + FStar_Tactics_Effect.tac_bind + (Prims.mk_range "Steel.Effect.Common.fsti" (Prims.of_int (2432)) + (Prims.of_int (17)) (Prims.of_int (2432)) (Prims.of_int (36))) + (Prims.mk_range "Steel.Effect.Common.fsti" (Prims.of_int (2433)) + (Prims.of_int (6)) (Prims.of_int (2458)) (Prims.of_int (18))) + (Obj.magic (slterm_nbr_uvars t1)) + (fun uu___3 -> + (fun lnbr -> + Obj.magic + (FStar_Tactics_Effect.tac_bind + (Prims.mk_range "Steel.Effect.Common.fsti" + (Prims.of_int (2433)) (Prims.of_int (17)) + (Prims.of_int (2433)) (Prims.of_int (36))) + (Prims.mk_range "Steel.Effect.Common.fsti" + (Prims.of_int (2434)) (Prims.of_int (6)) + (Prims.of_int (2458)) (Prims.of_int (18))) + (Obj.magic (slterm_nbr_uvars t2)) + (fun uu___3 -> + (fun rnbr -> + Obj.magic + (FStar_Tactics_Effect.tac_bind + (Prims.mk_range "Steel.Effect.Common.fsti" + (Prims.of_int (2435)) (Prims.of_int (8)) + (Prims.of_int (2437)) (Prims.of_int (18))) + (Prims.mk_range "Steel.Effect.Common.fsti" + (Prims.of_int (2434)) (Prims.of_int (6)) + (Prims.of_int (2458)) (Prims.of_int (18))) + (if (lnbr + rnbr) <= Prims.int_one + then Obj.magic (Obj.repr (unfold_guard ())) + else + Obj.magic + (Obj.repr + (FStar_Tactics_Effect.lift_div_tac + (fun uu___4 -> false)))) + (fun uu___3 -> + (fun uu___3 -> + if uu___3 + then + Obj.magic + (Obj.repr + (FStar_Tactics_Effect.tac_bind + (Prims.mk_range + "Steel.Effect.Common.fsti" + (Prims.of_int (2440)) + (Prims.of_int (8)) + (Prims.of_int (2456)) + (Prims.of_int (46))) + (Prims.mk_range + "Steel.Effect.Common.fsti" + (Prims.of_int (2457)) + (Prims.of_int (8)) + (Prims.of_int (2457)) + (Prims.of_int (12))) + (Obj.magic + (FStar_Tactics_Derived.focus + (fun uu___4 -> + FStar_Tactics_Effect.tac_bind + (Prims.mk_range + "Steel.Effect.Common.fsti" + (Prims.of_int (2441)) + (Prims.of_int (10)) + (Prims.of_int (2441)) + (Prims.of_int (33))) + (Prims.mk_range + "Steel.Effect.Common.fsti" + (Prims.of_int (2442)) + (Prims.of_int (10)) + (Prims.of_int (2456)) + (Prims.of_int (45))) + (Obj.magic + (FStar_Tactics_Effect.tac_bind + (Prims.mk_range + "Steel.Effect.Common.fsti" + (Prims.of_int (2441)) + (Prims.of_int (17)) + (Prims.of_int (2441)) + (Prims.of_int (33))) + (Prims.mk_range + "Steel.Effect.Common.fsti" + (Prims.of_int (2441)) + (Prims.of_int (10)) + (Prims.of_int (2441)) + (Prims.of_int (33))) + (Obj.magic + ( + FStar_Tactics_Logic.forall_intro + ())) + (fun uu___5 + -> + FStar_Tactics_Effect.lift_div_tac + (fun + uu___6 -> + ())))) + (fun uu___5 -> + (fun uu___5 -> + Obj.magic + (FStar_Tactics_Effect.tac_bind + (Prims.mk_range + "Steel.Effect.Common.fsti" + (Prims.of_int (2442)) + (Prims.of_int (10)) + (Prims.of_int (2442)) + (Prims.of_int (43))) + (Prims.mk_range + "Steel.Effect.Common.fsti" + (Prims.of_int (2443)) + (Prims.of_int (10)) + (Prims.of_int (2456)) + (Prims.of_int (45))) + (Obj.magic + (FStar_Tactics_Derived.apply_lemma + (FStar_Reflection_Builtins.pack_ln + (FStar_Reflection_Data.Tv_FVar + (FStar_Reflection_Builtins.pack_fv + ["Steel"; + "Effect"; + "Common"; + "equiv_can_be_split"]))))) + (fun + uu___6 -> + (fun + uu___6 -> + Obj.magic + (FStar_Tactics_Effect.tac_bind + (Prims.mk_range + "Steel.Effect.Common.fsti" + (Prims.of_int (2443)) + (Prims.of_int (10)) + (Prims.of_int (2443)) + (Prims.of_int (27))) + (Prims.mk_range + "Steel.Effect.Common.fsti" + (Prims.of_int (2444)) + (Prims.of_int (10)) + (Prims.of_int (2456)) + (Prims.of_int (45))) + (Obj.magic + (dismiss_slprops + ())) + (fun + uu___7 -> + (fun + uu___7 -> + Obj.magic + (FStar_Tactics_Derived.or_else + (fun + uu___8 -> + FStar_Tactics_Derived.apply_lemma + (FStar_Reflection_Builtins.pack_ln + (FStar_Reflection_Data.Tv_FVar + (FStar_Reflection_Builtins.pack_fv + ["Steel"; + "Effect"; + "Common"; + "equiv_refl"])))) + (fun + uu___8 -> + FStar_Tactics_Effect.tac_bind + (Prims.mk_range + "Steel.Effect.Common.fsti" + (Prims.of_int (2446)) + (Prims.of_int (12)) + (Prims.of_int (2446)) + (Prims.of_int (66))) + (Prims.mk_range + "Steel.Effect.Common.fsti" + (Prims.of_int (2447)) + (Prims.of_int (12)) + (Prims.of_int (2456)) + (Prims.of_int (44))) + (if + (lnbr <> + Prims.int_zero) + && + (rnbr = + Prims.int_zero) + then + Obj.magic + (Obj.repr + (FStar_Tactics_Derived.apply_lemma + (FStar_Reflection_Builtins.pack_ln + (FStar_Reflection_Data.Tv_FVar + (FStar_Reflection_Builtins.pack_fv + ["Steel"; + "Effect"; + "Common"; + "equiv_sym"]))))) + else + Obj.magic + (Obj.repr + (FStar_Tactics_Effect.lift_div_tac + (fun + uu___10 + -> ())))) + (fun + uu___9 -> + (fun + uu___9 -> + Obj.magic + (FStar_Tactics_Effect.tac_bind + (Prims.mk_range + "Steel.Effect.Common.fsti" + (Prims.of_int (2447)) + (Prims.of_int (12)) + (Prims.of_int (2447)) + (Prims.of_int (52))) + (Prims.mk_range + "Steel.Effect.Common.fsti" + (Prims.of_int (2448)) + (Prims.of_int (12)) + (Prims.of_int (2456)) + (Prims.of_int (44))) + (Obj.magic + (FStar_Tactics_Derived.or_else + (fun + uu___10 + -> + FStar_Tactics_Derived.flip + ()) + (fun + uu___10 + -> + (fun + uu___10 + -> + Obj.magic + (FStar_Tactics_Effect.lift_div_tac + (fun + uu___11 + -> ()))) + uu___10))) + (fun + uu___10 + -> + (fun + uu___10 + -> + Obj.magic + (FStar_Tactics_Effect.tac_bind + (Prims.mk_range + "Steel.Effect.Common.fsti" + (Prims.of_int (2448)) + (Prims.of_int (12)) + (Prims.of_int (2455)) + (Prims.of_int (37))) + (Prims.mk_range + "Steel.Effect.Common.fsti" + (Prims.of_int (2456)) + (Prims.of_int (12)) + (Prims.of_int (2456)) + (Prims.of_int (44))) + (Obj.magic + (FStar_Tactics_Builtins.norm + [ + FStar_Pervasives.delta_only + ["FStar.Algebra.CommMonoid.Equiv.__proj__CM__item__unit"; + "FStar.Algebra.CommMonoid.Equiv.__proj__CM__item__mult"; + "Steel.Effect.Common.rm"; + "FStar.Pervasives.Native.__proj__Mktuple2__item___1"; + "FStar.Pervasives.Native.__proj__Mktuple2__item___2"; + "FStar.Pervasives.Native.fst"; + "FStar.Pervasives.Native.snd"]; + FStar_Pervasives.delta_attr + ["Steel.Effect.Common.__reduce__"]; + FStar_Pervasives.primops; + FStar_Pervasives.iota; + FStar_Pervasives.zeta])) + (fun + uu___11 + -> + (fun + uu___11 + -> + Obj.magic + (canon' + false + (FStar_Reflection_Builtins.pack_ln + (FStar_Reflection_Data.Tv_FVar + (FStar_Reflection_Builtins.pack_fv + ["Steel"; + "Effect"; + "Common"; + "true_p"]))) + (FStar_Reflection_Builtins.pack_ln + (FStar_Reflection_Data.Tv_FVar + (FStar_Reflection_Builtins.pack_fv + ["Steel"; + "Effect"; + "Common"; + "true_p"]))))) + uu___11))) + uu___10))) + uu___9)))) + uu___7))) + uu___6))) + uu___5)))) + (fun uu___4 -> + FStar_Tactics_Effect.lift_div_tac + (fun uu___5 -> true)))) + else + Obj.magic + (Obj.repr + (FStar_Tactics_Effect.lift_div_tac + (fun uu___5 -> false)))) + uu___3))) uu___3))) uu___3) + | uu___ -> + FStar_Tactics_Derived.fail + "Ill-formed can_be_split_forall, should not happen" +let (extract_cbs_forall_dep_contexts : + FStar_Reflection_Types.term -> + ((unit -> (unit, unit) FStar_Tactics_Effect.tac_repr) + FStar_Pervasives_Native.option, + unit) FStar_Tactics_Effect.tac_repr) + = + extract_contexts + (FStar_Reflection_Builtins.pack_ln + (FStar_Reflection_Data.Tv_FVar + (FStar_Reflection_Builtins.pack_fv + ["Steel"; "Effect"; "Common"; "can_be_split_forall_dep_congr_l"]))) + (FStar_Reflection_Builtins.pack_ln + (FStar_Reflection_Data.Tv_FVar + (FStar_Reflection_Builtins.pack_fv + ["Steel"; "Effect"; "Common"; "can_be_split_forall_dep_congr_r"]))) + (FStar_Reflection_Builtins.pack_ln + (FStar_Reflection_Data.Tv_FVar + (FStar_Reflection_Builtins.pack_fv + ["Steel"; + "Effect"; + "Common"; + "solve_can_be_split_forall_dep_lookup"]))) + (FStar_Reflection_Builtins.pack_ln + (FStar_Reflection_Data.Tv_FVar + (FStar_Reflection_Builtins.pack_fv + ["Steel"; + "Effect"; + "Common"; + "solve_can_be_split_forall_dep_for"]))) +let (open_existentials_forall_dep : + unit -> (unit, unit) FStar_Tactics_Effect.tac_repr) = + fun uu___ -> + FStar_Tactics_Effect.tac_bind + (Prims.mk_range "Steel.Effect.Common.fsti" (Prims.of_int (2476)) + (Prims.of_int (10)) (Prims.of_int (2476)) (Prims.of_int (20))) + (Prims.mk_range "Steel.Effect.Common.fsti" (Prims.of_int (2477)) + (Prims.of_int (2)) (Prims.of_int (2515)) (Prims.of_int (71))) + (Obj.magic (FStar_Tactics_Derived.cur_env ())) + (fun uu___1 -> + (fun e -> + Obj.magic + (FStar_Tactics_Effect.tac_bind + (Prims.mk_range "Steel.Effect.Common.fsti" + (Prims.of_int (2477)) (Prims.of_int (2)) + (Prims.of_int (2478)) (Prims.of_int (61))) + (Prims.mk_range "Steel.Effect.Common.fsti" + (Prims.of_int (2479)) (Prims.of_int (2)) + (Prims.of_int (2515)) (Prims.of_int (71))) + (if + Prims.uu___is_Nil + (FStar_Reflection_Builtins.lookup_attr + (FStar_Reflection_Builtins.pack_ln + (FStar_Reflection_Data.Tv_FVar + (FStar_Reflection_Builtins.pack_fv + ["Steel"; + "Effect"; + "Common"; + "solve_can_be_split_forall_dep_lookup"]))) + e) + then + Obj.magic + (Obj.repr + (FStar_Tactics_Derived.fail + "Tactic disabled: no available lemmas in context")) + else + Obj.magic + (Obj.repr + (FStar_Tactics_Effect.lift_div_tac + (fun uu___2 -> ())))) + (fun uu___1 -> + (fun uu___1 -> + Obj.magic + (FStar_Tactics_Effect.tac_bind + (Prims.mk_range "Steel.Effect.Common.fsti" + (Prims.of_int (2479)) (Prims.of_int (2)) + (Prims.of_int (2487)) (Prims.of_int (3))) + (Prims.mk_range "Steel.Effect.Common.fsti" + (Prims.of_int (2488)) (Prims.of_int (2)) + (Prims.of_int (2515)) (Prims.of_int (71))) + (Obj.magic + (FStar_Tactics_Builtins.norm + [FStar_Pervasives.delta_only + ["FStar.Algebra.CommMonoid.Equiv.__proj__CM__item__unit"; + "FStar.Algebra.CommMonoid.Equiv.__proj__CM__item__mult"; + "Steel.Effect.Common.rm"]; + FStar_Pervasives.iota; + FStar_Pervasives.delta_attr + ["Steel.Effect.Common.__reduce__"]])) + (fun uu___2 -> + (fun uu___2 -> + Obj.magic + (FStar_Tactics_Effect.tac_bind + (Prims.mk_range + "Steel.Effect.Common.fsti" + (Prims.of_int (2488)) + (Prims.of_int (11)) + (Prims.of_int (2488)) + (Prims.of_int (22))) + (Prims.mk_range + "Steel.Effect.Common.fsti" + (Prims.of_int (2489)) + (Prims.of_int (2)) + (Prims.of_int (2515)) + (Prims.of_int (71))) + (Obj.magic + (FStar_Tactics_Derived.cur_goal ())) + (fun uu___3 -> + (fun t0 -> + match FStar_Reflection_Derived.collect_app + t0 + with + | (uu___3, + (t1, + FStar_Reflection_Data.Q_Explicit)::[]) + -> + Obj.magic + (FStar_Tactics_Effect.tac_bind + (Prims.mk_range + "Steel.Effect.Common.fsti" + (Prims.of_int (2491)) + (Prims.of_int (17)) + (Prims.of_int (2491)) + (Prims.of_int (31))) + (Prims.mk_range + "Steel.Effect.Common.fsti" + (Prims.of_int (2491)) + (Prims.of_int (4)) + (Prims.of_int (2513)) + (Prims.of_int (78))) + (FStar_Tactics_Effect.lift_div_tac + (fun uu___4 -> + FStar_Reflection_Derived.collect_app + t1)) + (fun uu___4 -> + (fun uu___4 -> + match uu___4 with + | (hd, tl) -> + if + FStar_Reflection_Derived.is_fvar + hd + "Steel.Effect.Common.can_be_split_forall_dep" + then + (match tl + with + | + uu___5::uu___6:: + (rhs, + FStar_Reflection_Data.Q_Explicit)::[] + -> + Obj.magic + (FStar_Tactics_Effect.tac_bind + (Prims.mk_range + "Steel.Effect.Common.fsti" + (Prims.of_int (2497)) + (Prims.of_int (20)) + (Prims.of_int (2497)) + (Prims.of_int (41))) + (Prims.mk_range + "Steel.Effect.Common.fsti" + (Prims.of_int (2497)) + (Prims.of_int (14)) + (Prims.of_int (2509)) + (Prims.of_int (71))) + (Obj.magic + (FStar_Tactics_Derived.inspect_unascribe + rhs)) + (fun + uu___7 -> + (fun + uu___7 -> + match uu___7 + with + | + FStar_Reflection_Data.Tv_Abs + (uu___8, + body) -> + Obj.magic + (FStar_Tactics_Effect.tac_bind + (Prims.mk_range + "Steel.Effect.Common.fsti" + (Prims.of_int (2499)) + (Prims.of_int (22)) + (Prims.of_int (2499)) + (Prims.of_int (58))) + (Prims.mk_range + "Steel.Effect.Common.fsti" + (Prims.of_int (2499)) + (Prims.of_int (16)) + (Prims.of_int (2507)) + (Prims.of_int (44))) + (Obj.magic + (extract_cbs_forall_dep_contexts + body)) + (fun + uu___9 -> + (fun + uu___9 -> + match uu___9 + with + | + FStar_Pervasives_Native.None + -> + Obj.magic + (FStar_Tactics_Derived.fail + "open_existentials_forall_dep: no candidate") + | + FStar_Pervasives_Native.Some + f -> + Obj.magic + (FStar_Tactics_Effect.tac_bind + (Prims.mk_range + "Steel.Effect.Common.fsti" + (Prims.of_int (2502)) + (Prims.of_int (12)) + (Prims.of_int (2502)) + (Prims.of_int (60))) + (Prims.mk_range + "Steel.Effect.Common.fsti" + (Prims.of_int (2503)) + (Prims.of_int (12)) + (Prims.of_int (2507)) + (Prims.of_int (44))) + (Obj.magic + (FStar_Tactics_Derived.apply_lemma + (FStar_Reflection_Builtins.pack_ln + (FStar_Reflection_Data.Tv_FVar + (FStar_Reflection_Builtins.pack_fv + ["Steel"; + "Effect"; + "Common"; + "can_be_split_forall_dep_trans_rev"]))))) + (fun + uu___10 + -> + (fun + uu___10 + -> + Obj.magic + (FStar_Tactics_Effect.tac_bind + (Prims.mk_range + "Steel.Effect.Common.fsti" + (Prims.of_int (2503)) + (Prims.of_int (12)) + (Prims.of_int (2503)) + (Prims.of_int (35))) + (Prims.mk_range + "Steel.Effect.Common.fsti" + (Prims.of_int (2504)) + (Prims.of_int (12)) + (Prims.of_int (2507)) + (Prims.of_int (44))) + (Obj.magic + (dismiss_all_but_last + ())) + (fun + uu___11 + -> + (fun + uu___11 + -> + Obj.magic + (FStar_Tactics_Effect.tac_bind + (Prims.mk_range + "Steel.Effect.Common.fsti" + (Prims.of_int (2504)) + (Prims.of_int (12)) + (Prims.of_int (2504)) + (Prims.of_int (20))) + (Prims.mk_range + "Steel.Effect.Common.fsti" + (Prims.of_int (2505)) + (Prims.of_int (12)) + (Prims.of_int (2507)) + (Prims.of_int (44))) + (Obj.magic + (FStar_Tactics_Logic.split + ())) + (fun + uu___12 + -> + (fun + uu___12 + -> + Obj.magic + (FStar_Tactics_Effect.tac_bind + (Prims.mk_range + "Steel.Effect.Common.fsti" + (Prims.of_int (2505)) + (Prims.of_int (12)) + (Prims.of_int (2505)) + (Prims.of_int (19))) + (Prims.mk_range + "Steel.Effect.Common.fsti" + (Prims.of_int (2506)) + (Prims.of_int (12)) + (Prims.of_int (2507)) + (Prims.of_int (44))) + (Obj.magic + (FStar_Tactics_Derived.focus + f)) + (fun + uu___13 + -> + (fun + uu___13 + -> + Obj.magic + (FStar_Tactics_Effect.tac_bind + (Prims.mk_range + "Steel.Effect.Common.fsti" + (Prims.of_int (2506)) + (Prims.of_int (12)) + (Prims.of_int (2506)) + (Prims.of_int (37))) + (Prims.mk_range + "Steel.Effect.Common.fsti" + (Prims.of_int (2507)) + (Prims.of_int (12)) + (Prims.of_int (2507)) + (Prims.of_int (44))) + (Obj.magic + (bring_last_goal_on_top + ())) + (fun + uu___14 + -> + (fun + uu___14 + -> + Obj.magic + (FStar_Tactics_Effect.tac_bind + (Prims.mk_range + "Steel.Effect.Common.fsti" + (Prims.of_int (2507)) + (Prims.of_int (15)) + (Prims.of_int (2507)) + (Prims.of_int (31))) + (Prims.mk_range + "Steel.Effect.Common.fsti" + (Prims.of_int (2507)) + (Prims.of_int (12)) + (Prims.of_int (2507)) + (Prims.of_int (44))) + (Obj.magic + (FStar_Tactics_Effect.tac_bind + (Prims.mk_range + "Steel.Effect.Common.fsti" + (Prims.of_int (2507)) + (Prims.of_int (21)) + (Prims.of_int (2507)) + (Prims.of_int (31))) + (Prims.mk_range + "Steel.Effect.Common.fsti" + (Prims.of_int (2507)) + (Prims.of_int (15)) + (Prims.of_int (2507)) + (Prims.of_int (31))) + (Obj.magic + (FStar_Tactics_Derived.goals + ())) + (fun + uu___15 + -> + FStar_Tactics_Effect.lift_div_tac + (fun + uu___16 + -> + Prims.uu___is_Cons + uu___15)))) + (fun + uu___15 + -> + (fun + uu___15 + -> + if + uu___15 + then + Obj.magic + (Obj.repr + (FStar_Tactics_Builtins.norm + [])) + else + Obj.magic + (Obj.repr + (FStar_Tactics_Effect.lift_div_tac + (fun + uu___17 + -> ())))) + uu___15))) + uu___14))) + uu___13))) + uu___12))) + uu___11))) + uu___10))) + uu___9)) + | + uu___8 -> + Obj.magic + (FStar_Tactics_Derived.fail + "open_existentials_forall_dep : not an abstraction")) + uu___7)) + | + (uu___5, + FStar_Reflection_Data.Q_Implicit)::uu___6::uu___7:: + (rhs, + FStar_Reflection_Data.Q_Explicit)::[] + -> + Obj.magic + (FStar_Tactics_Effect.tac_bind + (Prims.mk_range + "Steel.Effect.Common.fsti" + (Prims.of_int (2497)) + (Prims.of_int (20)) + (Prims.of_int (2497)) + (Prims.of_int (41))) + (Prims.mk_range + "Steel.Effect.Common.fsti" + (Prims.of_int (2497)) + (Prims.of_int (14)) + (Prims.of_int (2509)) + (Prims.of_int (71))) + (Obj.magic + (FStar_Tactics_Derived.inspect_unascribe + rhs)) + (fun + uu___8 -> + (fun + uu___8 -> + match uu___8 + with + | + FStar_Reflection_Data.Tv_Abs + (uu___9, + body) -> + Obj.magic + (FStar_Tactics_Effect.tac_bind + (Prims.mk_range + "Steel.Effect.Common.fsti" + (Prims.of_int (2499)) + (Prims.of_int (22)) + (Prims.of_int (2499)) + (Prims.of_int (58))) + (Prims.mk_range + "Steel.Effect.Common.fsti" + (Prims.of_int (2499)) + (Prims.of_int (16)) + (Prims.of_int (2507)) + (Prims.of_int (44))) + (Obj.magic + (extract_cbs_forall_dep_contexts + body)) + (fun + uu___10 + -> + (fun + uu___10 + -> + match uu___10 + with + | + FStar_Pervasives_Native.None + -> + Obj.magic + (FStar_Tactics_Derived.fail + "open_existentials_forall_dep: no candidate") + | + FStar_Pervasives_Native.Some + f -> + Obj.magic + (FStar_Tactics_Effect.tac_bind + (Prims.mk_range + "Steel.Effect.Common.fsti" + (Prims.of_int (2502)) + (Prims.of_int (12)) + (Prims.of_int (2502)) + (Prims.of_int (60))) + (Prims.mk_range + "Steel.Effect.Common.fsti" + (Prims.of_int (2503)) + (Prims.of_int (12)) + (Prims.of_int (2507)) + (Prims.of_int (44))) + (Obj.magic + (FStar_Tactics_Derived.apply_lemma + (FStar_Reflection_Builtins.pack_ln + (FStar_Reflection_Data.Tv_FVar + (FStar_Reflection_Builtins.pack_fv + ["Steel"; + "Effect"; + "Common"; + "can_be_split_forall_dep_trans_rev"]))))) + (fun + uu___11 + -> + (fun + uu___11 + -> + Obj.magic + (FStar_Tactics_Effect.tac_bind + (Prims.mk_range + "Steel.Effect.Common.fsti" + (Prims.of_int (2503)) + (Prims.of_int (12)) + (Prims.of_int (2503)) + (Prims.of_int (35))) + (Prims.mk_range + "Steel.Effect.Common.fsti" + (Prims.of_int (2504)) + (Prims.of_int (12)) + (Prims.of_int (2507)) + (Prims.of_int (44))) + (Obj.magic + (dismiss_all_but_last + ())) + (fun + uu___12 + -> + (fun + uu___12 + -> + Obj.magic + (FStar_Tactics_Effect.tac_bind + (Prims.mk_range + "Steel.Effect.Common.fsti" + (Prims.of_int (2504)) + (Prims.of_int (12)) + (Prims.of_int (2504)) + (Prims.of_int (20))) + (Prims.mk_range + "Steel.Effect.Common.fsti" + (Prims.of_int (2505)) + (Prims.of_int (12)) + (Prims.of_int (2507)) + (Prims.of_int (44))) + (Obj.magic + (FStar_Tactics_Logic.split + ())) + (fun + uu___13 + -> + (fun + uu___13 + -> + Obj.magic + (FStar_Tactics_Effect.tac_bind + (Prims.mk_range + "Steel.Effect.Common.fsti" + (Prims.of_int (2505)) + (Prims.of_int (12)) + (Prims.of_int (2505)) + (Prims.of_int (19))) + (Prims.mk_range + "Steel.Effect.Common.fsti" + (Prims.of_int (2506)) + (Prims.of_int (12)) + (Prims.of_int (2507)) + (Prims.of_int (44))) + (Obj.magic + (FStar_Tactics_Derived.focus + f)) + (fun + uu___14 + -> + (fun + uu___14 + -> + Obj.magic + (FStar_Tactics_Effect.tac_bind + (Prims.mk_range + "Steel.Effect.Common.fsti" + (Prims.of_int (2506)) + (Prims.of_int (12)) + (Prims.of_int (2506)) + (Prims.of_int (37))) + (Prims.mk_range + "Steel.Effect.Common.fsti" + (Prims.of_int (2507)) + (Prims.of_int (12)) + (Prims.of_int (2507)) + (Prims.of_int (44))) + (Obj.magic + (bring_last_goal_on_top + ())) + (fun + uu___15 + -> + (fun + uu___15 + -> + Obj.magic + (FStar_Tactics_Effect.tac_bind + (Prims.mk_range + "Steel.Effect.Common.fsti" + (Prims.of_int (2507)) + (Prims.of_int (15)) + (Prims.of_int (2507)) + (Prims.of_int (31))) + (Prims.mk_range + "Steel.Effect.Common.fsti" + (Prims.of_int (2507)) + (Prims.of_int (12)) + (Prims.of_int (2507)) + (Prims.of_int (44))) + (Obj.magic + (FStar_Tactics_Effect.tac_bind + (Prims.mk_range + "Steel.Effect.Common.fsti" + (Prims.of_int (2507)) + (Prims.of_int (21)) + (Prims.of_int (2507)) + (Prims.of_int (31))) + (Prims.mk_range + "Steel.Effect.Common.fsti" + (Prims.of_int (2507)) + (Prims.of_int (15)) + (Prims.of_int (2507)) + (Prims.of_int (31))) + (Obj.magic + (FStar_Tactics_Derived.goals + ())) + (fun + uu___16 + -> + FStar_Tactics_Effect.lift_div_tac + (fun + uu___17 + -> + Prims.uu___is_Cons + uu___16)))) + (fun + uu___16 + -> + (fun + uu___16 + -> + if + uu___16 + then + Obj.magic + (Obj.repr + (FStar_Tactics_Builtins.norm + [])) + else + Obj.magic + (Obj.repr + (FStar_Tactics_Effect.lift_div_tac + (fun + uu___18 + -> ())))) + uu___16))) + uu___15))) + uu___14))) + uu___13))) + uu___12))) + uu___11))) + uu___10)) + | + uu___9 -> + Obj.magic + (FStar_Tactics_Derived.fail + "open_existentials_forall_dep : not an abstraction")) + uu___8)) + | + uu___5 -> + Obj.magic + (FStar_Tactics_Derived.fail + "open_existentials_forall_dep : wrong number of arguments to can_be_split_forall_dep")) + else + Obj.magic + ( + FStar_Tactics_Derived.fail + "open_existentials_forall_dep : not a can_be_split_forall_dep goal")) + uu___4)) + | uu___3 -> + Obj.magic + (FStar_Tactics_Derived.fail + "open_existentials_forall_dep : not a squash/auto_squash goal")) + uu___3))) uu___2))) uu___1))) + uu___1) +let (try_open_existentials_forall_dep : + unit -> (Prims.bool, unit) FStar_Tactics_Effect.tac_repr) = + fun uu___ -> + FStar_Tactics_Derived.focus + (fun uu___1 -> + FStar_Tactics_Derived.try_with + (fun uu___2 -> + match () with + | () -> + FStar_Tactics_Effect.tac_bind + (Prims.mk_range "Steel.Effect.Common.fsti" + (Prims.of_int (2521)) (Prims.of_int (6)) + (Prims.of_int (2521)) (Prims.of_int (37))) + (Prims.mk_range "Steel.Effect.Common.fsti" + (Prims.of_int (2522)) (Prims.of_int (6)) + (Prims.of_int (2522)) (Prims.of_int (10))) + (Obj.magic (open_existentials_forall_dep ())) + (fun uu___3 -> + FStar_Tactics_Effect.lift_div_tac (fun uu___4 -> true))) + (fun uu___2 -> + (fun uu___2 -> + Obj.magic + (FStar_Tactics_Effect.lift_div_tac (fun uu___3 -> false))) + uu___2)) +let rec (solve_can_be_split_forall_dep : + FStar_Reflection_Data.argv Prims.list -> + (Prims.bool, unit) FStar_Tactics_Effect.tac_repr) + = + fun args -> + match args with + | uu___::(pr, uu___1)::(t1, uu___2)::(t2, uu___3)::[] -> + FStar_Tactics_Effect.tac_bind + (Prims.mk_range "Steel.Effect.Common.fsti" (Prims.of_int (2530)) + (Prims.of_int (17)) (Prims.of_int (2530)) (Prims.of_int (36))) + (Prims.mk_range "Steel.Effect.Common.fsti" (Prims.of_int (2531)) + (Prims.of_int (6)) (Prims.of_int (2575)) (Prims.of_int (18))) + (Obj.magic (slterm_nbr_uvars t1)) + (fun uu___4 -> + (fun lnbr -> + Obj.magic + (FStar_Tactics_Effect.tac_bind + (Prims.mk_range "Steel.Effect.Common.fsti" + (Prims.of_int (2531)) (Prims.of_int (17)) + (Prims.of_int (2531)) (Prims.of_int (36))) + (Prims.mk_range "Steel.Effect.Common.fsti" + (Prims.of_int (2532)) (Prims.of_int (6)) + (Prims.of_int (2575)) (Prims.of_int (18))) + (Obj.magic (slterm_nbr_uvars t2)) + (fun uu___4 -> + (fun rnbr -> + Obj.magic + (FStar_Tactics_Effect.tac_bind + (Prims.mk_range "Steel.Effect.Common.fsti" + (Prims.of_int (2533)) (Prims.of_int (8)) + (Prims.of_int (2535)) (Prims.of_int (18))) + (Prims.mk_range "Steel.Effect.Common.fsti" + (Prims.of_int (2532)) (Prims.of_int (6)) + (Prims.of_int (2575)) (Prims.of_int (18))) + (if (lnbr + rnbr) <= Prims.int_one + then Obj.magic (Obj.repr (unfold_guard ())) + else + Obj.magic + (Obj.repr + (FStar_Tactics_Effect.lift_div_tac + (fun uu___5 -> false)))) + (fun uu___4 -> + (fun uu___4 -> + if uu___4 + then + Obj.magic + (Obj.repr + (FStar_Tactics_Derived.try_with + (fun uu___5 -> + match () with + | () -> + FStar_Tactics_Effect.tac_bind + (Prims.mk_range + "Steel.Effect.Common.fsti" + (Prims.of_int (2539)) + (Prims.of_int (9)) + (Prims.of_int (2563)) + (Prims.of_int (37))) + (Prims.mk_range + "Steel.Effect.Common.fsti" + (Prims.of_int (2565)) + (Prims.of_int (9)) + (Prims.of_int (2565)) + (Prims.of_int (13))) + (Obj.magic + (FStar_Tactics_Derived.focus + (fun uu___6 -> + FStar_Tactics_Effect.tac_bind + ( + Prims.mk_range + "Steel.Effect.Common.fsti" + (Prims.of_int (2540)) + (Prims.of_int (10)) + (Prims.of_int (2540)) + (Prims.of_int (17))) + ( + Prims.mk_range + "Steel.Effect.Common.fsti" + (Prims.of_int (2541)) + (Prims.of_int (10)) + (Prims.of_int (2563)) + (Prims.of_int (36))) + ( + Obj.magic + (FStar_Tactics_Builtins.norm + [])) + ( + fun + uu___7 -> + (fun + uu___7 -> + Obj.magic + (FStar_Tactics_Effect.tac_bind + (Prims.mk_range + "Steel.Effect.Common.fsti" + (Prims.of_int (2541)) + (Prims.of_int (18)) + (Prims.of_int (2541)) + (Prims.of_int (33))) + (Prims.mk_range + "Steel.Effect.Common.fsti" + (Prims.of_int (2542)) + (Prims.of_int (10)) + (Prims.of_int (2563)) + (Prims.of_int (36))) + (Obj.magic + (FStar_Tactics_Logic.forall_intro + ())) + (fun + uu___8 -> + (fun x -> + Obj.magic + (FStar_Tactics_Effect.tac_bind + (Prims.mk_range + "Steel.Effect.Common.fsti" + (Prims.of_int (2542)) + (Prims.of_int (19)) + (Prims.of_int (2542)) + (Prims.of_int (61))) + (Prims.mk_range + "Steel.Effect.Common.fsti" + (Prims.of_int (2543)) + (Prims.of_int (10)) + (Prims.of_int (2563)) + (Prims.of_int (36))) + (Obj.magic + (FStar_Tactics_Effect.tac_bind + (Prims.mk_range + "Steel.Effect.Common.fsti" + (Prims.of_int (2542)) + (Prims.of_int (29)) + (Prims.of_int (2542)) + (Prims.of_int (61))) + (Prims.mk_range + "Steel.Effect.Common.fsti" + (Prims.of_int (2542)) + (Prims.of_int (19)) + (Prims.of_int (2542)) + (Prims.of_int (61))) + (Obj.magic + (FStar_Tactics_Effect.tac_bind + (Prims.mk_range + "Steel.Effect.Common.fsti" + (Prims.of_int (2542)) + (Prims.of_int (30)) + (Prims.of_int (2542)) + (Prims.of_int (60))) + (Prims.mk_range + "Steel.Effect.Common.fsti" + (Prims.of_int (2542)) + (Prims.of_int (29)) + (Prims.of_int (2542)) + (Prims.of_int (61))) + (Obj.magic + (FStar_Tactics_Effect.tac_bind + (Prims.mk_range + "Steel.Effect.Common.fsti" + (Prims.of_int (2542)) + (Prims.of_int (31)) + (Prims.of_int (2542)) + (Prims.of_int (47))) + (Prims.mk_range + "Steel.Effect.Common.fsti" + (Prims.of_int (2542)) + (Prims.of_int (30)) + (Prims.of_int (2542)) + (Prims.of_int (60))) + (Obj.magic + (FStar_Tactics_Derived.binder_to_term + x)) + (fun + uu___8 -> + FStar_Tactics_Effect.lift_div_tac + (fun + uu___9 -> + (uu___8, + FStar_Reflection_Data.Q_Explicit))))) + (fun + uu___8 -> + FStar_Tactics_Effect.lift_div_tac + (fun + uu___9 -> + [uu___8])))) + (fun + uu___8 -> + FStar_Tactics_Effect.lift_div_tac + (fun + uu___9 -> + FStar_Reflection_Derived.mk_app + pr uu___8)))) + (fun + uu___8 -> + (fun pr1 + -> + Obj.magic + (FStar_Tactics_Effect.tac_bind + (Prims.mk_range + "Steel.Effect.Common.fsti" + (Prims.of_int (2543)) + (Prims.of_int (23)) + (Prims.of_int (2543)) + (Prims.of_int (39))) + (Prims.mk_range + "Steel.Effect.Common.fsti" + (Prims.of_int (2544)) + (Prims.of_int (10)) + (Prims.of_int (2563)) + (Prims.of_int (36))) + (Obj.magic + (FStar_Tactics_Logic.implies_intro + ())) + (fun + uu___8 -> + (fun + p_bind -> + Obj.magic + (FStar_Tactics_Effect.tac_bind + (Prims.mk_range + "Steel.Effect.Common.fsti" + (Prims.of_int (2544)) + (Prims.of_int (10)) + (Prims.of_int (2544)) + (Prims.of_int (43))) + (Prims.mk_range + "Steel.Effect.Common.fsti" + (Prims.of_int (2545)) + (Prims.of_int (10)) + (Prims.of_int (2563)) + (Prims.of_int (36))) + (Obj.magic + (FStar_Tactics_Derived.apply_lemma + (FStar_Reflection_Builtins.pack_ln + (FStar_Reflection_Data.Tv_FVar + (FStar_Reflection_Builtins.pack_fv + ["Steel"; + "Effect"; + "Common"; + "equiv_can_be_split"]))))) + (fun + uu___8 -> + (fun + uu___8 -> + Obj.magic + (FStar_Tactics_Effect.tac_bind + (Prims.mk_range + "Steel.Effect.Common.fsti" + (Prims.of_int (2545)) + (Prims.of_int (10)) + (Prims.of_int (2545)) + (Prims.of_int (49))) + (Prims.mk_range + "Steel.Effect.Common.fsti" + (Prims.of_int (2546)) + (Prims.of_int (10)) + (Prims.of_int (2563)) + (Prims.of_int (36))) + (Obj.magic + (FStar_Tactics_Derived.or_else + (fun + uu___9 -> + FStar_Tactics_Derived.flip + ()) + (fun + uu___9 -> + (fun + uu___9 -> + Obj.magic + (FStar_Tactics_Effect.lift_div_tac + (fun + uu___10 + -> ()))) + uu___9))) + (fun + uu___9 -> + (fun + uu___9 -> + Obj.magic + (FStar_Tactics_Effect.tac_bind + (Prims.mk_range + "Steel.Effect.Common.fsti" + (Prims.of_int (2546)) + (Prims.of_int (19)) + (Prims.of_int (2546)) + (Prims.of_int (34))) + (Prims.mk_range + "Steel.Effect.Common.fsti" + (Prims.of_int (2547)) + (Prims.of_int (10)) + (Prims.of_int (2563)) + (Prims.of_int (36))) + (Obj.magic + (FStar_Tactics_Derived.norm_term + [] pr1)) + (fun + uu___10 + -> + (fun pr2 + -> + Obj.magic + (FStar_Tactics_Derived.or_else + (fun + uu___10 + -> + FStar_Tactics_Effect.tac_bind + (Prims.mk_range + "Steel.Effect.Common.fsti" + (Prims.of_int (2549)) + (Prims.of_int (22)) + (Prims.of_int (2549)) + (Prims.of_int (40))) + (Prims.mk_range + "Steel.Effect.Common.fsti" + (Prims.of_int (2550)) + (Prims.of_int (14)) + (Prims.of_int (2551)) + (Prims.of_int (39))) + (Obj.magic + (FStar_Tactics_Derived.unify + pr2 + (FStar_Reflection_Builtins.pack_ln + (FStar_Reflection_Data.Tv_FVar + (FStar_Reflection_Builtins.pack_fv + ["Steel"; + "Effect"; + "Common"; + "true_p"]))))) + (fun + uu___11 + -> + (fun b -> + Obj.magic + (FStar_Tactics_Effect.tac_bind + (Prims.mk_range + "Steel.Effect.Common.fsti" + (Prims.of_int (2550)) + (Prims.of_int (14)) + (Prims.of_int (2550)) + (Prims.of_int (69))) + (Prims.mk_range + "Steel.Effect.Common.fsti" + (Prims.of_int (2551)) + (Prims.of_int (14)) + (Prims.of_int (2551)) + (Prims.of_int (39))) + (if + Prims.op_Negation + b + then + Obj.magic + (Obj.repr + (FStar_Tactics_Derived.fail + "could not unify SMT prop with True")) + else + Obj.magic + (Obj.repr + (FStar_Tactics_Effect.lift_div_tac + (fun + uu___12 + -> ())))) + (fun + uu___11 + -> + (fun + uu___11 + -> + Obj.magic + (FStar_Tactics_Derived.apply_lemma + (FStar_Reflection_Builtins.pack_ln + (FStar_Reflection_Data.Tv_FVar + (FStar_Reflection_Builtins.pack_fv + ["Steel"; + "Effect"; + "Common"; + "equiv_refl"]))))) + uu___11))) + uu___11)) + (fun + uu___10 + -> + FStar_Tactics_Effect.tac_bind + (Prims.mk_range + "Steel.Effect.Common.fsti" + (Prims.of_int (2553)) + (Prims.of_int (14)) + (Prims.of_int (2553)) + (Prims.of_int (68))) + (Prims.mk_range + "Steel.Effect.Common.fsti" + (Prims.of_int (2554)) + (Prims.of_int (14)) + (Prims.of_int (2563)) + (Prims.of_int (35))) + (if + (lnbr <> + Prims.int_zero) + && + (rnbr = + Prims.int_zero) + then + Obj.magic + (Obj.repr + (FStar_Tactics_Derived.apply_lemma + (FStar_Reflection_Builtins.pack_ln + (FStar_Reflection_Data.Tv_FVar + (FStar_Reflection_Builtins.pack_fv + ["Steel"; + "Effect"; + "Common"; + "equiv_sym"]))))) + else + Obj.magic + (Obj.repr + (FStar_Tactics_Effect.lift_div_tac + (fun + uu___12 + -> ())))) + (fun + uu___11 + -> + (fun + uu___11 + -> + Obj.magic + (FStar_Tactics_Effect.tac_bind + (Prims.mk_range + "Steel.Effect.Common.fsti" + (Prims.of_int (2554)) + (Prims.of_int (14)) + (Prims.of_int (2554)) + (Prims.of_int (54))) + (Prims.mk_range + "Steel.Effect.Common.fsti" + (Prims.of_int (2555)) + (Prims.of_int (14)) + (Prims.of_int (2563)) + (Prims.of_int (35))) + (Obj.magic + (FStar_Tactics_Derived.or_else + (fun + uu___12 + -> + FStar_Tactics_Derived.flip + ()) + (fun + uu___12 + -> + (fun + uu___12 + -> + Obj.magic + (FStar_Tactics_Effect.lift_div_tac + (fun + uu___13 + -> ()))) + uu___12))) + (fun + uu___12 + -> + (fun + uu___12 + -> + Obj.magic + (FStar_Tactics_Effect.tac_bind + (Prims.mk_range + "Steel.Effect.Common.fsti" + (Prims.of_int (2555)) + (Prims.of_int (14)) + (Prims.of_int (2562)) + (Prims.of_int (39))) + (Prims.mk_range + "Steel.Effect.Common.fsti" + (Prims.of_int (2563)) + (Prims.of_int (14)) + (Prims.of_int (2563)) + (Prims.of_int (35))) + (Obj.magic + (FStar_Tactics_Builtins.norm + [ + FStar_Pervasives.delta_only + ["FStar.Algebra.CommMonoid.Equiv.__proj__CM__item__unit"; + "FStar.Algebra.CommMonoid.Equiv.__proj__CM__item__mult"; + "Steel.Effect.Common.rm"; + "FStar.Pervasives.Native.__proj__Mktuple2__item___1"; + "FStar.Pervasives.Native.__proj__Mktuple2__item___2"; + "FStar.Pervasives.Native.fst"; + "FStar.Pervasives.Native.snd"]; + FStar_Pervasives.delta_attr + ["Steel.Effect.Common.__reduce__"]; + FStar_Pervasives.primops; + FStar_Pervasives.iota; + FStar_Pervasives.zeta])) + (fun + uu___13 + -> + (fun + uu___13 + -> + Obj.magic + (FStar_Tactics_Effect.tac_bind + (Prims.mk_range + "Steel.Effect.Common.fsti" + (Prims.of_int (2543)) + (Prims.of_int (14)) + (Prims.of_int (2543)) + (Prims.of_int (20))) + (Prims.mk_range + "Steel.Effect.Common.fsti" + (Prims.of_int (2563)) + (Prims.of_int (14)) + (Prims.of_int (2563)) + (Prims.of_int (35))) + (Obj.magic + (FStar_Tactics_Derived.binder_to_term + p_bind)) + (fun + uu___14 + -> + (fun + uu___14 + -> + Obj.magic + (canon' + true pr2 + uu___14)) + uu___14))) + uu___13))) + uu___12))) + uu___11)))) + uu___10))) + uu___9))) + uu___8))) + uu___8))) + uu___8))) + uu___8))) + uu___7)))) + (fun uu___6 -> + FStar_Tactics_Effect.lift_div_tac + (fun uu___7 -> + true))) + (fun uu___5 -> + (fun uu___5 -> + match uu___5 with + | Postpone msg -> + Obj.magic + (Obj.repr + (FStar_Tactics_Effect.lift_div_tac + (fun uu___6 + -> false))) + | FStar_Tactics_Common.TacticFailure + msg -> + Obj.magic + (Obj.repr + (FStar_Tactics_Effect.tac_bind + (Prims.mk_range + "Steel.Effect.Common.fsti" + (Prims.of_int (2570)) + (Prims.of_int (22)) + (Prims.of_int (2570)) + (Prims.of_int (57))) + (Prims.mk_range + "Steel.Effect.Common.fsti" + (Prims.of_int (2571)) + (Prims.of_int (9)) + (Prims.of_int (2573)) + (Prims.of_int (22))) + (Obj.magic + (try_open_existentials_forall_dep + ())) + (fun uu___6 + -> + (fun + opened -> + if opened + then + Obj.magic + (solve_can_be_split_forall_dep + args) + else + Obj.magic + (FStar_Tactics_Derived.fail + msg)) + uu___6))) + | uu___6 -> + Obj.magic + (Obj.repr + (FStar_Tactics_Derived.fail + "Unexpected exception in framing tactic"))) + uu___5))) + else + Obj.magic + (Obj.repr + (FStar_Tactics_Effect.lift_div_tac + (fun uu___6 -> false)))) + uu___4))) uu___4))) uu___4) + | uu___ -> + FStar_Tactics_Derived.fail + "Ill-formed can_be_split_forall_dep, should not happen" +let (solve_equiv_forall : + FStar_Reflection_Data.argv Prims.list -> + (Prims.bool, unit) FStar_Tactics_Effect.tac_repr) + = + fun args -> + match args with + | uu___::(t1, uu___1)::(t2, uu___2)::[] -> + FStar_Tactics_Effect.tac_bind + (Prims.mk_range "Steel.Effect.Common.fsti" (Prims.of_int (2583)) + (Prims.of_int (17)) (Prims.of_int (2583)) (Prims.of_int (36))) + (Prims.mk_range "Steel.Effect.Common.fsti" (Prims.of_int (2584)) + (Prims.of_int (6)) (Prims.of_int (2612)) (Prims.of_int (18))) + (Obj.magic (slterm_nbr_uvars t1)) + (fun uu___3 -> + (fun lnbr -> + Obj.magic + (FStar_Tactics_Effect.tac_bind + (Prims.mk_range "Steel.Effect.Common.fsti" + (Prims.of_int (2584)) (Prims.of_int (17)) + (Prims.of_int (2584)) (Prims.of_int (36))) + (Prims.mk_range "Steel.Effect.Common.fsti" + (Prims.of_int (2585)) (Prims.of_int (6)) + (Prims.of_int (2612)) (Prims.of_int (18))) + (Obj.magic (slterm_nbr_uvars t2)) + (fun uu___3 -> + (fun rnbr -> + Obj.magic + (FStar_Tactics_Effect.tac_bind + (Prims.mk_range "Steel.Effect.Common.fsti" + (Prims.of_int (2586)) (Prims.of_int (8)) + (Prims.of_int (2588)) (Prims.of_int (18))) + (Prims.mk_range "Steel.Effect.Common.fsti" + (Prims.of_int (2585)) (Prims.of_int (6)) + (Prims.of_int (2612)) (Prims.of_int (18))) + (if (lnbr + rnbr) <= Prims.int_one + then Obj.magic (Obj.repr (unfold_guard ())) + else + Obj.magic + (Obj.repr + (FStar_Tactics_Effect.lift_div_tac + (fun uu___4 -> false)))) + (fun uu___3 -> + (fun uu___3 -> + if uu___3 + then + Obj.magic + (Obj.repr + (FStar_Tactics_Effect.tac_bind + (Prims.mk_range + "Steel.Effect.Common.fsti" + (Prims.of_int (2591)) + (Prims.of_int (8)) + (Prims.of_int (2610)) + (Prims.of_int (62))) + (Prims.mk_range + "Steel.Effect.Common.fsti" + (Prims.of_int (2611)) + (Prims.of_int (8)) + (Prims.of_int (2611)) + (Prims.of_int (12))) + (Obj.magic + (FStar_Tactics_Derived.focus + (fun uu___4 -> + FStar_Tactics_Effect.tac_bind + (Prims.mk_range + "Steel.Effect.Common.fsti" + (Prims.of_int (2591)) + (Prims.of_int (24)) + (Prims.of_int (2591)) + (Prims.of_int (56))) + (Prims.mk_range + "Steel.Effect.Common.fsti" + (Prims.of_int (2592)) + (Prims.of_int (22)) + (Prims.of_int (2610)) + (Prims.of_int (61))) + (Obj.magic + (FStar_Tactics_Derived.apply_lemma + (FStar_Reflection_Builtins.pack_ln + ( + FStar_Reflection_Data.Tv_FVar + (FStar_Reflection_Builtins.pack_fv + ["Steel"; + "Effect"; + "Common"; + "equiv_forall_elim"]))))) + (fun uu___5 -> + (fun uu___5 -> + Obj.magic + (FStar_Tactics_Effect.tac_bind + (Prims.mk_range + "Steel.Effect.Common.fsti" + (Prims.of_int (2592)) + (Prims.of_int (28)) + (Prims.of_int (2592)) + (Prims.of_int (36))) + (Prims.mk_range + "Steel.Effect.Common.fsti" + (Prims.of_int (2592)) + (Prims.of_int (22)) + (Prims.of_int (2610)) + (Prims.of_int (61))) + (Obj.magic + (FStar_Tactics_Derived.goals + ())) + (fun + uu___6 -> + (fun + uu___6 -> + match uu___6 + with + | + [] -> + Obj.magic + (Obj.repr + (FStar_Tactics_Effect.lift_div_tac + (fun + uu___7 -> + ()))) + | + uu___7 -> + Obj.magic + (Obj.repr + (FStar_Tactics_Effect.tac_bind + (Prims.mk_range + "Steel.Effect.Common.fsti" + (Prims.of_int (2595)) + (Prims.of_int (24)) + (Prims.of_int (2595)) + (Prims.of_int (42))) + (Prims.mk_range + "Steel.Effect.Common.fsti" + (Prims.of_int (2596)) + (Prims.of_int (24)) + (Prims.of_int (2610)) + (Prims.of_int (61))) + (Obj.magic + (dismiss_slprops + ())) + (fun + uu___8 -> + (fun + uu___8 -> + Obj.magic + (FStar_Tactics_Effect.tac_bind + (Prims.mk_range + "Steel.Effect.Common.fsti" + (Prims.of_int (2596)) + (Prims.of_int (24)) + (Prims.of_int (2596)) + (Prims.of_int (47))) + (Prims.mk_range + "Steel.Effect.Common.fsti" + (Prims.of_int (2597)) + (Prims.of_int (24)) + (Prims.of_int (2610)) + (Prims.of_int (61))) + (Obj.magic + (FStar_Tactics_Effect.tac_bind + (Prims.mk_range + "Steel.Effect.Common.fsti" + (Prims.of_int (2596)) + (Prims.of_int (31)) + (Prims.of_int (2596)) + (Prims.of_int (47))) + (Prims.mk_range + "Steel.Effect.Common.fsti" + (Prims.of_int (2596)) + (Prims.of_int (24)) + (Prims.of_int (2596)) + (Prims.of_int (47))) + (Obj.magic + (FStar_Tactics_Logic.forall_intro + ())) + (fun + uu___9 -> + FStar_Tactics_Effect.lift_div_tac + (fun + uu___10 + -> ())))) + (fun + uu___9 -> + (fun + uu___9 -> + Obj.magic + (FStar_Tactics_Derived.or_else + (fun + uu___10 + -> + FStar_Tactics_Derived.apply_lemma + (FStar_Reflection_Builtins.pack_ln + (FStar_Reflection_Data.Tv_FVar + (FStar_Reflection_Builtins.pack_fv + ["Steel"; + "Effect"; + "Common"; + "equiv_refl"])))) + (fun + uu___10 + -> + FStar_Tactics_Effect.tac_bind + (Prims.mk_range + "Steel.Effect.Common.fsti" + (Prims.of_int (2600)) + (Prims.of_int (28)) + (Prims.of_int (2600)) + (Prims.of_int (82))) + (Prims.mk_range + "Steel.Effect.Common.fsti" + (Prims.of_int (2601)) + (Prims.of_int (28)) + (Prims.of_int (2610)) + (Prims.of_int (60))) + (if + (lnbr <> + Prims.int_zero) + && + (rnbr = + Prims.int_zero) + then + Obj.magic + (Obj.repr + (FStar_Tactics_Derived.apply_lemma + (FStar_Reflection_Builtins.pack_ln + (FStar_Reflection_Data.Tv_FVar + (FStar_Reflection_Builtins.pack_fv + ["Steel"; + "Effect"; + "Common"; + "equiv_sym"]))))) + else + Obj.magic + (Obj.repr + (FStar_Tactics_Effect.lift_div_tac + (fun + uu___12 + -> ())))) + (fun + uu___11 + -> + (fun + uu___11 + -> + Obj.magic + (FStar_Tactics_Effect.tac_bind + (Prims.mk_range + "Steel.Effect.Common.fsti" + (Prims.of_int (2601)) + (Prims.of_int (28)) + (Prims.of_int (2601)) + (Prims.of_int (68))) + (Prims.mk_range + "Steel.Effect.Common.fsti" + (Prims.of_int (2602)) + (Prims.of_int (28)) + (Prims.of_int (2610)) + (Prims.of_int (60))) + (Obj.magic + (FStar_Tactics_Derived.or_else + (fun + uu___12 + -> + FStar_Tactics_Derived.flip + ()) + (fun + uu___12 + -> + (fun + uu___12 + -> + Obj.magic + (FStar_Tactics_Effect.lift_div_tac + (fun + uu___13 + -> ()))) + uu___12))) + (fun + uu___12 + -> + (fun + uu___12 + -> + Obj.magic + (FStar_Tactics_Effect.tac_bind + (Prims.mk_range + "Steel.Effect.Common.fsti" + (Prims.of_int (2602)) + (Prims.of_int (28)) + (Prims.of_int (2609)) + (Prims.of_int (54))) + (Prims.mk_range + "Steel.Effect.Common.fsti" + (Prims.of_int (2610)) + (Prims.of_int (28)) + (Prims.of_int (2610)) + (Prims.of_int (60))) + (Obj.magic + (FStar_Tactics_Builtins.norm + [ + FStar_Pervasives.delta_only + ["FStar.Algebra.CommMonoid.Equiv.__proj__CM__item__unit"; + "FStar.Algebra.CommMonoid.Equiv.__proj__CM__item__mult"; + "Steel.Effect.Common.rm"; + "FStar.Pervasives.Native.__proj__Mktuple2__item___1"; + "FStar.Pervasives.Native.__proj__Mktuple2__item___2"; + "FStar.Pervasives.Native.fst"; + "FStar.Pervasives.Native.snd"]; + FStar_Pervasives.delta_attr + ["Steel.Effect.Common.__reduce__"]; + FStar_Pervasives.primops; + FStar_Pervasives.iota; + FStar_Pervasives.zeta])) + (fun + uu___13 + -> + (fun + uu___13 + -> + Obj.magic + (canon' + false + (FStar_Reflection_Builtins.pack_ln + (FStar_Reflection_Data.Tv_FVar + (FStar_Reflection_Builtins.pack_fv + ["Steel"; + "Effect"; + "Common"; + "true_p"]))) + (FStar_Reflection_Builtins.pack_ln + (FStar_Reflection_Data.Tv_FVar + (FStar_Reflection_Builtins.pack_fv + ["Steel"; + "Effect"; + "Common"; + "true_p"]))))) + uu___13))) + uu___12))) + uu___11)))) + uu___9))) + uu___8)))) + uu___6))) + uu___5)))) + (fun uu___4 -> + FStar_Tactics_Effect.lift_div_tac + (fun uu___5 -> true)))) + else + Obj.magic + (Obj.repr + (FStar_Tactics_Effect.lift_div_tac + (fun uu___5 -> false)))) + uu___3))) uu___3))) uu___3) + | uu___ -> + FStar_Tactics_Derived.fail + "Ill-formed equiv_forall, should not happen" +let (solve_equiv : + FStar_Reflection_Data.argv Prims.list -> + (Prims.bool, unit) FStar_Tactics_Effect.tac_repr) + = + fun args -> + match args with + | (t1, uu___)::(t2, uu___1)::[] -> + FStar_Tactics_Effect.tac_bind + (Prims.mk_range "Steel.Effect.Common.fsti" (Prims.of_int (2620)) + (Prims.of_int (17)) (Prims.of_int (2620)) (Prims.of_int (36))) + (Prims.mk_range "Steel.Effect.Common.fsti" (Prims.of_int (2621)) + (Prims.of_int (6)) (Prims.of_int (2645)) (Prims.of_int (18))) + (Obj.magic (slterm_nbr_uvars t1)) + (fun uu___2 -> + (fun lnbr -> + Obj.magic + (FStar_Tactics_Effect.tac_bind + (Prims.mk_range "Steel.Effect.Common.fsti" + (Prims.of_int (2621)) (Prims.of_int (17)) + (Prims.of_int (2621)) (Prims.of_int (36))) + (Prims.mk_range "Steel.Effect.Common.fsti" + (Prims.of_int (2622)) (Prims.of_int (6)) + (Prims.of_int (2645)) (Prims.of_int (18))) + (Obj.magic (slterm_nbr_uvars t2)) + (fun uu___2 -> + (fun rnbr -> + Obj.magic + (FStar_Tactics_Effect.tac_bind + (Prims.mk_range "Steel.Effect.Common.fsti" + (Prims.of_int (2623)) (Prims.of_int (8)) + (Prims.of_int (2625)) (Prims.of_int (18))) + (Prims.mk_range "Steel.Effect.Common.fsti" + (Prims.of_int (2622)) (Prims.of_int (6)) + (Prims.of_int (2645)) (Prims.of_int (18))) + (if (lnbr + rnbr) <= Prims.int_one + then Obj.magic (Obj.repr (unfold_guard ())) + else + Obj.magic + (Obj.repr + (FStar_Tactics_Effect.lift_div_tac + (fun uu___3 -> false)))) + (fun uu___2 -> + (fun uu___2 -> + if uu___2 + then + Obj.magic + (Obj.repr + (FStar_Tactics_Effect.tac_bind + (Prims.mk_range + "Steel.Effect.Common.fsti" + (Prims.of_int (2628)) + (Prims.of_int (8)) + (Prims.of_int (2642)) + (Prims.of_int (48))) + (Prims.mk_range + "Steel.Effect.Common.fsti" + (Prims.of_int (2643)) + (Prims.of_int (8)) + (Prims.of_int (2643)) + (Prims.of_int (12))) + (Obj.magic + (FStar_Tactics_Derived.focus + (fun uu___3 -> + FStar_Tactics_Derived.or_else + (fun uu___4 -> + FStar_Tactics_Derived.apply_lemma + (FStar_Reflection_Builtins.pack_ln + (FStar_Reflection_Data.Tv_FVar + (FStar_Reflection_Builtins.pack_fv + ["Steel"; + "Effect"; + "Common"; + "equiv_refl"])))) + (fun uu___4 -> + FStar_Tactics_Effect.tac_bind + (Prims.mk_range + "Steel.Effect.Common.fsti" + (Prims.of_int (2632)) + (Prims.of_int (14)) + (Prims.of_int (2632)) + (Prims.of_int (68))) + (Prims.mk_range + "Steel.Effect.Common.fsti" + (Prims.of_int (2633)) + (Prims.of_int (14)) + (Prims.of_int (2642)) + (Prims.of_int (46))) + (if + (lnbr <> + Prims.int_zero) + && + (rnbr = + Prims.int_zero) + then + Obj.magic + (Obj.repr + (FStar_Tactics_Derived.apply_lemma + (FStar_Reflection_Builtins.pack_ln + (FStar_Reflection_Data.Tv_FVar + (FStar_Reflection_Builtins.pack_fv + ["Steel"; + "Effect"; + "Common"; + "equiv_sym"]))))) + else + Obj.magic + (Obj.repr + (FStar_Tactics_Effect.lift_div_tac + (fun + uu___6 -> + ())))) + (fun uu___5 + -> + (fun + uu___5 -> + Obj.magic + (FStar_Tactics_Effect.tac_bind + (Prims.mk_range + "Steel.Effect.Common.fsti" + (Prims.of_int (2633)) + (Prims.of_int (14)) + (Prims.of_int (2633)) + (Prims.of_int (54))) + (Prims.mk_range + "Steel.Effect.Common.fsti" + (Prims.of_int (2634)) + (Prims.of_int (14)) + (Prims.of_int (2642)) + (Prims.of_int (46))) + (Obj.magic + (FStar_Tactics_Derived.or_else + (fun + uu___6 -> + FStar_Tactics_Derived.flip + ()) + (fun + uu___6 -> + (fun + uu___6 -> + Obj.magic + (FStar_Tactics_Effect.lift_div_tac + (fun + uu___7 -> + ()))) + uu___6))) + (fun + uu___6 -> + (fun + uu___6 -> + Obj.magic + (FStar_Tactics_Effect.tac_bind + (Prims.mk_range + "Steel.Effect.Common.fsti" + (Prims.of_int (2634)) + (Prims.of_int (14)) + (Prims.of_int (2641)) + (Prims.of_int (40))) + (Prims.mk_range + "Steel.Effect.Common.fsti" + (Prims.of_int (2642)) + (Prims.of_int (14)) + (Prims.of_int (2642)) + (Prims.of_int (46))) + (Obj.magic + (FStar_Tactics_Builtins.norm + [ + FStar_Pervasives.delta_only + ["FStar.Algebra.CommMonoid.Equiv.__proj__CM__item__unit"; + "FStar.Algebra.CommMonoid.Equiv.__proj__CM__item__mult"; + "Steel.Effect.Common.rm"; + "FStar.Pervasives.Native.__proj__Mktuple2__item___1"; + "FStar.Pervasives.Native.__proj__Mktuple2__item___2"; + "FStar.Pervasives.Native.fst"; + "FStar.Pervasives.Native.snd"]; + FStar_Pervasives.delta_attr + ["Steel.Effect.Common.__reduce__"]; + FStar_Pervasives.primops; + FStar_Pervasives.iota; + FStar_Pervasives.zeta])) + (fun + uu___7 -> + (fun + uu___7 -> + Obj.magic + (canon' + false + (FStar_Reflection_Builtins.pack_ln + (FStar_Reflection_Data.Tv_FVar + (FStar_Reflection_Builtins.pack_fv + ["Steel"; + "Effect"; + "Common"; + "true_p"]))) + (FStar_Reflection_Builtins.pack_ln + (FStar_Reflection_Data.Tv_FVar + (FStar_Reflection_Builtins.pack_fv + ["Steel"; + "Effect"; + "Common"; + "true_p"]))))) + uu___7))) + uu___6))) + uu___5))))) + (fun uu___3 -> + FStar_Tactics_Effect.lift_div_tac + (fun uu___4 -> true)))) + else + Obj.magic + (Obj.repr + (FStar_Tactics_Effect.lift_div_tac + (fun uu___4 -> false)))) + uu___2))) uu___2))) uu___2) + | uu___ -> + FStar_Tactics_Derived.fail "Ill-formed equiv, should not happen" +let (solve_can_be_split_post : + FStar_Reflection_Data.argv Prims.list -> + (Prims.bool, unit) FStar_Tactics_Effect.tac_repr) + = + fun args -> + match args with + | uu___::uu___1::(t1, uu___2)::(t2, uu___3)::[] -> + FStar_Tactics_Effect.tac_bind + (Prims.mk_range "Steel.Effect.Common.fsti" (Prims.of_int (2653)) + (Prims.of_int (17)) (Prims.of_int (2653)) (Prims.of_int (36))) + (Prims.mk_range "Steel.Effect.Common.fsti" (Prims.of_int (2654)) + (Prims.of_int (6)) (Prims.of_int (2685)) (Prims.of_int (18))) + (Obj.magic (slterm_nbr_uvars t1)) + (fun uu___4 -> + (fun lnbr -> + Obj.magic + (FStar_Tactics_Effect.tac_bind + (Prims.mk_range "Steel.Effect.Common.fsti" + (Prims.of_int (2654)) (Prims.of_int (17)) + (Prims.of_int (2654)) (Prims.of_int (36))) + (Prims.mk_range "Steel.Effect.Common.fsti" + (Prims.of_int (2655)) (Prims.of_int (6)) + (Prims.of_int (2685)) (Prims.of_int (18))) + (Obj.magic (slterm_nbr_uvars t2)) + (fun uu___4 -> + (fun rnbr -> + Obj.magic + (FStar_Tactics_Effect.tac_bind + (Prims.mk_range "Steel.Effect.Common.fsti" + (Prims.of_int (2656)) (Prims.of_int (8)) + (Prims.of_int (2658)) (Prims.of_int (18))) + (Prims.mk_range "Steel.Effect.Common.fsti" + (Prims.of_int (2655)) (Prims.of_int (6)) + (Prims.of_int (2685)) (Prims.of_int (18))) + (if (lnbr + rnbr) <= Prims.int_one + then Obj.magic (Obj.repr (unfold_guard ())) + else + Obj.magic + (Obj.repr + (FStar_Tactics_Effect.lift_div_tac + (fun uu___5 -> false)))) + (fun uu___4 -> + (fun uu___4 -> + if uu___4 + then + Obj.magic + (Obj.repr + (FStar_Tactics_Effect.tac_bind + (Prims.mk_range + "Steel.Effect.Common.fsti" + (Prims.of_int (2661)) + (Prims.of_int (8)) + (Prims.of_int (2683)) + (Prims.of_int (62))) + (Prims.mk_range + "Steel.Effect.Common.fsti" + (Prims.of_int (2684)) + (Prims.of_int (8)) + (Prims.of_int (2684)) + (Prims.of_int (12))) + (Obj.magic + (FStar_Tactics_Derived.focus + (fun uu___5 -> + FStar_Tactics_Effect.tac_bind + (Prims.mk_range + "Steel.Effect.Common.fsti" + (Prims.of_int (2661)) + (Prims.of_int (24)) + (Prims.of_int (2661)) + (Prims.of_int (30))) + (Prims.mk_range + "Steel.Effect.Common.fsti" + (Prims.of_int (2662)) + (Prims.of_int (22)) + (Prims.of_int (2683)) + (Prims.of_int (61))) + (Obj.magic + (FStar_Tactics_Builtins.norm + [])) + (fun uu___6 -> + (fun uu___6 -> + Obj.magic + (FStar_Tactics_Effect.tac_bind + (Prims.mk_range + "Steel.Effect.Common.fsti" + (Prims.of_int (2662)) + (Prims.of_int (30)) + (Prims.of_int (2662)) + (Prims.of_int (42))) + (Prims.mk_range + "Steel.Effect.Common.fsti" + (Prims.of_int (2663)) + (Prims.of_int (22)) + (Prims.of_int (2683)) + (Prims.of_int (61))) + (Obj.magic + (FStar_Tactics_Derived._cur_goal + ())) + (fun + uu___7 -> + (fun g -> + Obj.magic + (FStar_Tactics_Effect.tac_bind + (Prims.mk_range + "Steel.Effect.Common.fsti" + (Prims.of_int (2663)) + (Prims.of_int (22)) + (Prims.of_int (2663)) + (Prims.of_int (45))) + (Prims.mk_range + "Steel.Effect.Common.fsti" + (Prims.of_int (2664)) + (Prims.of_int (22)) + (Prims.of_int (2683)) + (Prims.of_int (61))) + (Obj.magic + (FStar_Tactics_Effect.tac_bind + (Prims.mk_range + "Steel.Effect.Common.fsti" + (Prims.of_int (2663)) + (Prims.of_int (29)) + (Prims.of_int (2663)) + (Prims.of_int (45))) + (Prims.mk_range + "Steel.Effect.Common.fsti" + (Prims.of_int (2663)) + (Prims.of_int (22)) + (Prims.of_int (2663)) + (Prims.of_int (45))) + (Obj.magic + (FStar_Tactics_Logic.forall_intro + ())) + (fun + uu___7 -> + FStar_Tactics_Effect.lift_div_tac + (fun + uu___8 -> + ())))) + (fun + uu___7 -> + (fun + uu___7 -> + Obj.magic + (FStar_Tactics_Effect.tac_bind + (Prims.mk_range + "Steel.Effect.Common.fsti" + (Prims.of_int (2664)) + (Prims.of_int (22)) + (Prims.of_int (2664)) + (Prims.of_int (54))) + (Prims.mk_range + "Steel.Effect.Common.fsti" + (Prims.of_int (2665)) + (Prims.of_int (22)) + (Prims.of_int (2683)) + (Prims.of_int (61))) + (Obj.magic + (FStar_Tactics_Derived.apply_lemma + (FStar_Reflection_Builtins.pack_ln + (FStar_Reflection_Data.Tv_FVar + (FStar_Reflection_Builtins.pack_fv + ["Steel"; + "Effect"; + "Common"; + "equiv_forall_elim"]))))) + (fun + uu___8 -> + (fun + uu___8 -> + Obj.magic + (FStar_Tactics_Effect.tac_bind + (Prims.mk_range + "Steel.Effect.Common.fsti" + (Prims.of_int (2665)) + (Prims.of_int (28)) + (Prims.of_int (2665)) + (Prims.of_int (36))) + (Prims.mk_range + "Steel.Effect.Common.fsti" + (Prims.of_int (2665)) + (Prims.of_int (22)) + (Prims.of_int (2683)) + (Prims.of_int (61))) + (Obj.magic + (FStar_Tactics_Derived.goals + ())) + (fun + uu___9 -> + (fun + uu___9 -> + match uu___9 + with + | + [] -> + Obj.magic + (Obj.repr + (FStar_Tactics_Effect.lift_div_tac + (fun + uu___10 + -> ()))) + | + uu___10 + -> + Obj.magic + (Obj.repr + (FStar_Tactics_Effect.tac_bind + (Prims.mk_range + "Steel.Effect.Common.fsti" + (Prims.of_int (2668)) + (Prims.of_int (24)) + (Prims.of_int (2668)) + (Prims.of_int (42))) + (Prims.mk_range + "Steel.Effect.Common.fsti" + (Prims.of_int (2669)) + (Prims.of_int (24)) + (Prims.of_int (2683)) + (Prims.of_int (61))) + (Obj.magic + (dismiss_slprops + ())) + (fun + uu___11 + -> + (fun + uu___11 + -> + Obj.magic + (FStar_Tactics_Effect.tac_bind + (Prims.mk_range + "Steel.Effect.Common.fsti" + (Prims.of_int (2669)) + (Prims.of_int (24)) + (Prims.of_int (2669)) + (Prims.of_int (47))) + (Prims.mk_range + "Steel.Effect.Common.fsti" + (Prims.of_int (2670)) + (Prims.of_int (24)) + (Prims.of_int (2683)) + (Prims.of_int (61))) + (Obj.magic + (FStar_Tactics_Effect.tac_bind + (Prims.mk_range + "Steel.Effect.Common.fsti" + (Prims.of_int (2669)) + (Prims.of_int (31)) + (Prims.of_int (2669)) + (Prims.of_int (47))) + (Prims.mk_range + "Steel.Effect.Common.fsti" + (Prims.of_int (2669)) + (Prims.of_int (24)) + (Prims.of_int (2669)) + (Prims.of_int (47))) + (Obj.magic + (FStar_Tactics_Logic.forall_intro + ())) + (fun + uu___12 + -> + FStar_Tactics_Effect.lift_div_tac + (fun + uu___13 + -> ())))) + (fun + uu___12 + -> + (fun + uu___12 + -> + Obj.magic + (FStar_Tactics_Derived.or_else + (fun + uu___13 + -> + FStar_Tactics_Derived.apply_lemma + (FStar_Reflection_Builtins.pack_ln + (FStar_Reflection_Data.Tv_FVar + (FStar_Reflection_Builtins.pack_fv + ["Steel"; + "Effect"; + "Common"; + "equiv_refl"])))) + (fun + uu___13 + -> + FStar_Tactics_Effect.tac_bind + (Prims.mk_range + "Steel.Effect.Common.fsti" + (Prims.of_int (2673)) + (Prims.of_int (28)) + (Prims.of_int (2673)) + (Prims.of_int (82))) + (Prims.mk_range + "Steel.Effect.Common.fsti" + (Prims.of_int (2674)) + (Prims.of_int (28)) + (Prims.of_int (2683)) + (Prims.of_int (60))) + (if + (lnbr <> + Prims.int_zero) + && + (rnbr = + Prims.int_zero) + then + Obj.magic + (Obj.repr + (FStar_Tactics_Derived.apply_lemma + (FStar_Reflection_Builtins.pack_ln + (FStar_Reflection_Data.Tv_FVar + (FStar_Reflection_Builtins.pack_fv + ["Steel"; + "Effect"; + "Common"; + "equiv_sym"]))))) + else + Obj.magic + (Obj.repr + (FStar_Tactics_Effect.lift_div_tac + (fun + uu___15 + -> ())))) + (fun + uu___14 + -> + (fun + uu___14 + -> + Obj.magic + (FStar_Tactics_Effect.tac_bind + (Prims.mk_range + "Steel.Effect.Common.fsti" + (Prims.of_int (2674)) + (Prims.of_int (28)) + (Prims.of_int (2674)) + (Prims.of_int (68))) + (Prims.mk_range + "Steel.Effect.Common.fsti" + (Prims.of_int (2675)) + (Prims.of_int (28)) + (Prims.of_int (2683)) + (Prims.of_int (60))) + (Obj.magic + (FStar_Tactics_Derived.or_else + (fun + uu___15 + -> + FStar_Tactics_Derived.flip + ()) + (fun + uu___15 + -> + (fun + uu___15 + -> + Obj.magic + (FStar_Tactics_Effect.lift_div_tac + (fun + uu___16 + -> ()))) + uu___15))) + (fun + uu___15 + -> + (fun + uu___15 + -> + Obj.magic + (FStar_Tactics_Effect.tac_bind + (Prims.mk_range + "Steel.Effect.Common.fsti" + (Prims.of_int (2675)) + (Prims.of_int (28)) + (Prims.of_int (2682)) + (Prims.of_int (54))) + (Prims.mk_range + "Steel.Effect.Common.fsti" + (Prims.of_int (2683)) + (Prims.of_int (28)) + (Prims.of_int (2683)) + (Prims.of_int (60))) + (Obj.magic + (FStar_Tactics_Builtins.norm + [ + FStar_Pervasives.delta_only + ["FStar.Algebra.CommMonoid.Equiv.__proj__CM__item__unit"; + "FStar.Algebra.CommMonoid.Equiv.__proj__CM__item__mult"; + "Steel.Effect.Common.rm"; + "FStar.Pervasives.Native.__proj__Mktuple2__item___1"; + "FStar.Pervasives.Native.__proj__Mktuple2__item___2"; + "FStar.Pervasives.Native.fst"; + "FStar.Pervasives.Native.snd"]; + FStar_Pervasives.delta_attr + ["Steel.Effect.Common.__reduce__"]; + FStar_Pervasives.primops; + FStar_Pervasives.iota; + FStar_Pervasives.zeta])) + (fun + uu___16 + -> + (fun + uu___16 + -> + Obj.magic + (canon' + false + (FStar_Reflection_Builtins.pack_ln + (FStar_Reflection_Data.Tv_FVar + (FStar_Reflection_Builtins.pack_fv + ["Steel"; + "Effect"; + "Common"; + "true_p"]))) + (FStar_Reflection_Builtins.pack_ln + (FStar_Reflection_Data.Tv_FVar + (FStar_Reflection_Builtins.pack_fv + ["Steel"; + "Effect"; + "Common"; + "true_p"]))))) + uu___16))) + uu___15))) + uu___14)))) + uu___12))) + uu___11)))) + uu___9))) + uu___8))) + uu___7))) + uu___7))) + uu___6)))) + (fun uu___5 -> + FStar_Tactics_Effect.lift_div_tac + (fun uu___6 -> true)))) + else + Obj.magic + (Obj.repr + (FStar_Tactics_Effect.lift_div_tac + (fun uu___6 -> false)))) + uu___4))) uu___4))) uu___4) + | uu___ -> FStar_Tactics_Derived.fail "ill-formed can_be_split_post" +let (is_return_eq : + FStar_Reflection_Types.term -> + FStar_Reflection_Types.term -> + (Prims.bool, unit) FStar_Tactics_Effect.tac_repr) + = + fun uu___1 -> + fun uu___ -> + (fun l -> + fun r -> + Obj.magic + (FStar_Tactics_Effect.lift_div_tac + (fun uu___ -> + match FStar_Reflection_Derived.collect_app l with + | (nl, al) -> + (match FStar_Reflection_Derived.collect_app r with + | (nr, ar) -> + (FStar_Reflection_Derived.is_fvar nl + "Steel.Effect.Common.return_pre") + || + (FStar_Reflection_Derived.is_fvar nr + "Steel.Effect.Common.return_pre"))))) uu___1 + uu___ +let rec (solve_indirection_eqs : + Prims.nat -> (unit, unit) FStar_Tactics_Effect.tac_repr) = + fun uu___ -> + (fun fuel -> + if fuel = Prims.int_zero + then + Obj.magic + (Obj.repr (FStar_Tactics_Effect.lift_div_tac (fun uu___ -> ()))) + else + Obj.magic + (Obj.repr + (FStar_Tactics_Effect.tac_bind + (Prims.mk_range "Steel.Effect.Common.fsti" + (Prims.of_int (2701)) (Prims.of_int (13)) + (Prims.of_int (2701)) (Prims.of_int (21))) + (Prims.mk_range "Steel.Effect.Common.fsti" + (Prims.of_int (2701)) (Prims.of_int (7)) + (Prims.of_int (2709)) (Prims.of_int (52))) + (Obj.magic (FStar_Tactics_Derived.goals ())) + (fun uu___1 -> + (fun uu___1 -> + match uu___1 with + | [] -> + Obj.magic + (Obj.repr + (FStar_Tactics_Effect.lift_div_tac + (fun uu___2 -> ()))) + | hd::uu___2 -> + Obj.magic + (Obj.repr + (FStar_Tactics_Effect.tac_bind + (Prims.mk_range "Steel.Effect.Common.fsti" + (Prims.of_int (2704)) + (Prims.of_int (12)) + (Prims.of_int (2704)) + (Prims.of_int (43))) + (Prims.mk_range "Steel.Effect.Common.fsti" + (Prims.of_int (2705)) + (Prims.of_int (4)) + (Prims.of_int (2709)) + (Prims.of_int (52))) + (Obj.magic + (FStar_Reflection_Formula.term_as_formula' + (FStar_Tactics_Types.goal_type hd))) + (fun uu___3 -> + (fun f -> + match f with + | FStar_Reflection_Formula.Comp + (FStar_Reflection_Formula.Eq + uu___3, l, r) + -> + Obj.magic + (FStar_Tactics_Effect.tac_bind + (Prims.mk_range + "Steel.Effect.Common.fsti" + (Prims.of_int (2707)) + (Prims.of_int (8)) + (Prims.of_int (2707)) + (Prims.of_int (53))) + (Prims.mk_range + "Steel.Effect.Common.fsti" + (Prims.of_int (2708)) + (Prims.of_int (8)) + (Prims.of_int (2708)) + (Prims.of_int (40))) + (Obj.magic + (FStar_Tactics_Effect.tac_bind + (Prims.mk_range + "Steel.Effect.Common.fsti" + (Prims.of_int (2707)) + (Prims.of_int (11)) + (Prims.of_int (2707)) + (Prims.of_int (27))) + (Prims.mk_range + "Steel.Effect.Common.fsti" + (Prims.of_int (2707)) + (Prims.of_int (8)) + (Prims.of_int (2707)) + (Prims.of_int (53))) + (Obj.magic + (is_return_eq l r)) + (fun uu___4 -> + (fun uu___4 -> + if uu___4 + then + Obj.magic + (FStar_Tactics_Derived.later + ()) + else + Obj.magic + (FStar_Tactics_Derived.trefl + ())) + uu___4))) + (fun uu___4 -> + (fun uu___4 -> + Obj.magic + (solve_indirection_eqs + (fuel - + Prims.int_one))) + uu___4)) + | uu___3 -> + Obj.magic + (FStar_Tactics_Effect.tac_bind + (Prims.mk_range + "Steel.Effect.Common.fsti" + (Prims.of_int (2709)) + (Prims.of_int (11)) + (Prims.of_int (2709)) + (Prims.of_int (18))) + (Prims.mk_range + "Steel.Effect.Common.fsti" + (Prims.of_int (2709)) + (Prims.of_int (20)) + (Prims.of_int (2709)) + (Prims.of_int (52))) + (Obj.magic + (FStar_Tactics_Derived.later + ())) + (fun uu___4 -> + (fun uu___4 -> + Obj.magic + (solve_indirection_eqs + (fuel - + Prims.int_one))) + uu___4))) uu___3)))) + uu___1)))) uu___ +let rec (solve_all_eqs : + Prims.nat -> (unit, unit) FStar_Tactics_Effect.tac_repr) = + fun uu___ -> + (fun fuel -> + if fuel = Prims.int_zero + then + Obj.magic + (Obj.repr (FStar_Tactics_Effect.lift_div_tac (fun uu___ -> ()))) + else + Obj.magic + (Obj.repr + (FStar_Tactics_Effect.tac_bind + (Prims.mk_range "Steel.Effect.Common.fsti" + (Prims.of_int (2715)) (Prims.of_int (13)) + (Prims.of_int (2715)) (Prims.of_int (21))) + (Prims.mk_range "Steel.Effect.Common.fsti" + (Prims.of_int (2715)) (Prims.of_int (7)) + (Prims.of_int (2723)) (Prims.of_int (44))) + (Obj.magic (FStar_Tactics_Derived.goals ())) + (fun uu___1 -> + (fun uu___1 -> + match uu___1 with + | [] -> + Obj.magic + (Obj.repr + (FStar_Tactics_Effect.lift_div_tac + (fun uu___2 -> ()))) + | hd::uu___2 -> + Obj.magic + (Obj.repr + (FStar_Tactics_Effect.tac_bind + (Prims.mk_range "Steel.Effect.Common.fsti" + (Prims.of_int (2718)) + (Prims.of_int (12)) + (Prims.of_int (2718)) + (Prims.of_int (43))) + (Prims.mk_range "Steel.Effect.Common.fsti" + (Prims.of_int (2719)) + (Prims.of_int (4)) + (Prims.of_int (2723)) + (Prims.of_int (44))) + (Obj.magic + (FStar_Reflection_Formula.term_as_formula' + (FStar_Tactics_Types.goal_type hd))) + (fun uu___3 -> + (fun f -> + match f with + | FStar_Reflection_Formula.Comp + (FStar_Reflection_Formula.Eq + uu___3, l, r) + -> + Obj.magic + (FStar_Tactics_Effect.tac_bind + (Prims.mk_range + "Steel.Effect.Common.fsti" + (Prims.of_int (2721)) + (Prims.of_int (8)) + (Prims.of_int (2721)) + (Prims.of_int (15))) + (Prims.mk_range + "Steel.Effect.Common.fsti" + (Prims.of_int (2722)) + (Prims.of_int (8)) + (Prims.of_int (2722)) + (Prims.of_int (32))) + (Obj.magic + (FStar_Tactics_Derived.trefl + ())) + (fun uu___4 -> + (fun uu___4 -> + Obj.magic + (solve_all_eqs + (fuel - + Prims.int_one))) + uu___4)) + | uu___3 -> + Obj.magic + (FStar_Tactics_Effect.tac_bind + (Prims.mk_range + "Steel.Effect.Common.fsti" + (Prims.of_int (2723)) + (Prims.of_int (11)) + (Prims.of_int (2723)) + (Prims.of_int (18))) + (Prims.mk_range + "Steel.Effect.Common.fsti" + (Prims.of_int (2723)) + (Prims.of_int (20)) + (Prims.of_int (2723)) + (Prims.of_int (44))) + (Obj.magic + (FStar_Tactics_Derived.later + ())) + (fun uu___4 -> + (fun uu___4 -> + Obj.magic + (solve_all_eqs + (fuel - + Prims.int_one))) + uu___4))) uu___3)))) + uu___1)))) uu___ +let rec (solve_return_eqs : + Prims.nat -> (unit, unit) FStar_Tactics_Effect.tac_repr) = + fun uu___ -> + (fun fuel -> + if fuel = Prims.int_zero + then + Obj.magic + (Obj.repr (FStar_Tactics_Effect.lift_div_tac (fun uu___ -> ()))) + else + Obj.magic + (Obj.repr + (FStar_Tactics_Effect.tac_bind + (Prims.mk_range "Steel.Effect.Common.fsti" + (Prims.of_int (2730)) (Prims.of_int (13)) + (Prims.of_int (2730)) (Prims.of_int (21))) + (Prims.mk_range "Steel.Effect.Common.fsti" + (Prims.of_int (2730)) (Prims.of_int (7)) + (Prims.of_int (2738)) (Prims.of_int (47))) + (Obj.magic (FStar_Tactics_Derived.goals ())) + (fun uu___1 -> + (fun uu___1 -> + match uu___1 with + | [] -> + Obj.magic + (Obj.repr + (FStar_Tactics_Effect.lift_div_tac + (fun uu___2 -> ()))) + | hd::uu___2 -> + Obj.magic + (Obj.repr + (FStar_Tactics_Effect.tac_bind + (Prims.mk_range "Steel.Effect.Common.fsti" + (Prims.of_int (2733)) + (Prims.of_int (12)) + (Prims.of_int (2733)) + (Prims.of_int (43))) + (Prims.mk_range "Steel.Effect.Common.fsti" + (Prims.of_int (2734)) + (Prims.of_int (4)) + (Prims.of_int (2738)) + (Prims.of_int (47))) + (Obj.magic + (FStar_Reflection_Formula.term_as_formula' + (FStar_Tactics_Types.goal_type hd))) + (fun uu___3 -> + (fun f -> + match f with + | FStar_Reflection_Formula.Comp + (FStar_Reflection_Formula.Eq + uu___3, l, r) + -> + Obj.magic + (FStar_Tactics_Effect.tac_bind + (Prims.mk_range + "Steel.Effect.Common.fsti" + (Prims.of_int (2736)) + (Prims.of_int (8)) + (Prims.of_int (2736)) + (Prims.of_int (15))) + (Prims.mk_range + "Steel.Effect.Common.fsti" + (Prims.of_int (2737)) + (Prims.of_int (8)) + (Prims.of_int (2737)) + (Prims.of_int (35))) + (Obj.magic + (FStar_Tactics_Derived.trefl + ())) + (fun uu___4 -> + (fun uu___4 -> + Obj.magic + (solve_return_eqs + (fuel - + Prims.int_one))) + uu___4)) + | uu___3 -> + Obj.magic + (FStar_Tactics_Effect.tac_bind + (Prims.mk_range + "Steel.Effect.Common.fsti" + (Prims.of_int (2738)) + (Prims.of_int (11)) + (Prims.of_int (2738)) + (Prims.of_int (18))) + (Prims.mk_range + "Steel.Effect.Common.fsti" + (Prims.of_int (2738)) + (Prims.of_int (20)) + (Prims.of_int (2738)) + (Prims.of_int (47))) + (Obj.magic + (FStar_Tactics_Derived.later + ())) + (fun uu___4 -> + (fun uu___4 -> + Obj.magic + (solve_return_eqs + (fuel - + Prims.int_one))) + uu___4))) uu___3)))) + uu___1)))) uu___ +let (goal_to_equiv : + Prims.string -> (unit, unit) FStar_Tactics_Effect.tac_repr) = + fun loc -> + FStar_Tactics_Effect.tac_bind + (Prims.mk_range "Steel.Effect.Common.fsti" (Prims.of_int (2742)) + (Prims.of_int (12)) (Prims.of_int (2742)) (Prims.of_int (23))) + (Prims.mk_range "Steel.Effect.Common.fsti" (Prims.of_int (2743)) + (Prims.of_int (4)) (Prims.of_int (2769)) (Prims.of_int (42))) + (Obj.magic (FStar_Tactics_Derived.cur_goal ())) + (fun uu___ -> + (fun t -> + Obj.magic + (FStar_Tactics_Effect.tac_bind + (Prims.mk_range "Steel.Effect.Common.fsti" + (Prims.of_int (2743)) (Prims.of_int (12)) + (Prims.of_int (2743)) (Prims.of_int (30))) + (Prims.mk_range "Steel.Effect.Common.fsti" + (Prims.of_int (2744)) (Prims.of_int (4)) + (Prims.of_int (2769)) (Prims.of_int (42))) + (Obj.magic (FStar_Reflection_Formula.term_as_formula' t)) + (fun uu___ -> + (fun f -> + match f with + | FStar_Reflection_Formula.App (hd0, t1) -> + Obj.magic + (FStar_Tactics_Effect.tac_bind + (Prims.mk_range "Steel.Effect.Common.fsti" + (Prims.of_int (2746)) (Prims.of_int (6)) + (Prims.of_int (2747)) (Prims.of_int (70))) + (Prims.mk_range "Steel.Effect.Common.fsti" + (Prims.of_int (2748)) (Prims.of_int (6)) + (Prims.of_int (2768)) (Prims.of_int (51))) + (if + Prims.op_Negation + (FStar_Reflection_Derived.is_fvar hd0 + "Prims.squash") + then + Obj.magic + (Obj.repr + (FStar_Tactics_Derived.fail + (Prims.strcat loc + " unexpected non-squash goal in goal_to_equiv"))) + else + Obj.magic + (Obj.repr + (FStar_Tactics_Effect.lift_div_tac + (fun uu___1 -> ())))) + (fun uu___ -> + (fun uu___ -> + Obj.magic + (FStar_Tactics_Effect.tac_bind + (Prims.mk_range + "Steel.Effect.Common.fsti" + (Prims.of_int (2748)) + (Prims.of_int (21)) + (Prims.of_int (2748)) + (Prims.of_int (34))) + (Prims.mk_range + "Steel.Effect.Common.fsti" + (Prims.of_int (2748)) + (Prims.of_int (6)) + (Prims.of_int (2768)) + (Prims.of_int (51))) + (FStar_Tactics_Effect.lift_div_tac + (fun uu___1 -> + FStar_Reflection_Derived.collect_app + t1)) + (fun uu___1 -> + (fun uu___1 -> + match uu___1 with + | (hd, args) -> + if + FStar_Reflection_Derived.is_fvar + hd + "Steel.Effect.Common.can_be_split" + then + Obj.magic + (FStar_Tactics_Derived.apply_lemma + (FStar_Reflection_Builtins.pack_ln + (FStar_Reflection_Data.Tv_FVar + (FStar_Reflection_Builtins.pack_fv + ["Steel"; + "Effect"; + "Common"; + "equiv_can_be_split"])))) + else + if + FStar_Reflection_Derived.is_fvar + hd + "Steel.Effect.Common.can_be_split_forall" + then + Obj.magic + (FStar_Tactics_Effect.tac_bind + (Prims.mk_range + "Steel.Effect.Common.fsti" + (Prims.of_int (2752)) + (Prims.of_int (8)) + (Prims.of_int (2752)) + (Prims.of_int (32))) + (Prims.mk_range + "Steel.Effect.Common.fsti" + (Prims.of_int (2753)) + (Prims.of_int (8)) + (Prims.of_int (2753)) + (Prims.of_int (41))) + (Obj.magic + (FStar_Tactics_Effect.tac_bind + ( + Prims.mk_range + "Steel.Effect.Common.fsti" + (Prims.of_int (2752)) + (Prims.of_int (15)) + (Prims.of_int (2752)) + (Prims.of_int (32))) + ( + Prims.mk_range + "Steel.Effect.Common.fsti" + (Prims.of_int (2752)) + (Prims.of_int (8)) + (Prims.of_int (2752)) + (Prims.of_int (32))) + ( + Obj.magic + (FStar_Tactics_Logic.forall_intro + ())) + ( + fun + uu___3 -> + FStar_Tactics_Effect.lift_div_tac + (fun + uu___4 -> + ())))) + (fun uu___3 -> + (fun uu___3 + -> + Obj.magic + (FStar_Tactics_Derived.apply_lemma + (FStar_Reflection_Builtins.pack_ln + (FStar_Reflection_Data.Tv_FVar + (FStar_Reflection_Builtins.pack_fv + ["Steel"; + "Effect"; + "Common"; + "equiv_can_be_split"]))))) + uu___3)) + else + if + FStar_Reflection_Derived.is_fvar + hd + "Steel.Effect.Common.equiv_forall" + then + Obj.magic + (FStar_Tactics_Effect.tac_bind + (Prims.mk_range + "Steel.Effect.Common.fsti" + (Prims.of_int (2755)) + (Prims.of_int (8)) + (Prims.of_int (2755)) + (Prims.of_int (40))) + (Prims.mk_range + "Steel.Effect.Common.fsti" + (Prims.of_int (2756)) + (Prims.of_int (8)) + (Prims.of_int (2756)) + (Prims.of_int (32))) + (Obj.magic + (FStar_Tactics_Derived.apply_lemma + (FStar_Reflection_Builtins.pack_ln + (FStar_Reflection_Data.Tv_FVar + (FStar_Reflection_Builtins.pack_fv + ["Steel"; + "Effect"; + "Common"; + "equiv_forall_elim"]))))) + (fun uu___4 + -> + (fun + uu___4 -> + Obj.magic + (FStar_Tactics_Effect.tac_bind + (Prims.mk_range + "Steel.Effect.Common.fsti" + (Prims.of_int (2756)) + (Prims.of_int (15)) + (Prims.of_int (2756)) + (Prims.of_int (32))) + (Prims.mk_range + "Steel.Effect.Common.fsti" + (Prims.of_int (2756)) + (Prims.of_int (8)) + (Prims.of_int (2756)) + (Prims.of_int (32))) + (Obj.magic + (FStar_Tactics_Logic.forall_intro + ())) + (fun + uu___5 -> + FStar_Tactics_Effect.lift_div_tac + (fun + uu___6 -> + ())))) + uu___4)) + else + if + FStar_Reflection_Derived.is_fvar + hd + "Steel.Effect.Common.can_be_split_post" + then + Obj.magic + (FStar_Tactics_Effect.tac_bind + (Prims.mk_range + "Steel.Effect.Common.fsti" + (Prims.of_int (2758)) + (Prims.of_int (8)) + (Prims.of_int (2758)) + (Prims.of_int (45))) + (Prims.mk_range + "Steel.Effect.Common.fsti" + (Prims.of_int (2759)) + (Prims.of_int (8)) + (Prims.of_int (2761)) + (Prims.of_int (32))) + (Obj.magic + (FStar_Tactics_Derived.apply_lemma + (FStar_Reflection_Builtins.pack_ln + (FStar_Reflection_Data.Tv_FVar + (FStar_Reflection_Builtins.pack_fv + ["Steel"; + "Effect"; + "Common"; + "can_be_split_post_elim"]))))) + (fun uu___5 + -> + (fun + uu___5 -> + Obj.magic + (FStar_Tactics_Effect.tac_bind + (Prims.mk_range + "Steel.Effect.Common.fsti" + (Prims.of_int (2759)) + (Prims.of_int (8)) + (Prims.of_int (2759)) + (Prims.of_int (25))) + (Prims.mk_range + "Steel.Effect.Common.fsti" + (Prims.of_int (2760)) + (Prims.of_int (8)) + (Prims.of_int (2761)) + (Prims.of_int (32))) + (Obj.magic + (dismiss_slprops + ())) + (fun + uu___6 -> + (fun + uu___6 -> + Obj.magic + (FStar_Tactics_Effect.tac_bind + (Prims.mk_range + "Steel.Effect.Common.fsti" + (Prims.of_int (2760)) + (Prims.of_int (8)) + (Prims.of_int (2760)) + (Prims.of_int (32))) + (Prims.mk_range + "Steel.Effect.Common.fsti" + (Prims.of_int (2761)) + (Prims.of_int (8)) + (Prims.of_int (2761)) + (Prims.of_int (32))) + (Obj.magic + (FStar_Tactics_Effect.tac_bind + (Prims.mk_range + "Steel.Effect.Common.fsti" + (Prims.of_int (2760)) + (Prims.of_int (15)) + (Prims.of_int (2760)) + (Prims.of_int (32))) + (Prims.mk_range + "Steel.Effect.Common.fsti" + (Prims.of_int (2760)) + (Prims.of_int (8)) + (Prims.of_int (2760)) + (Prims.of_int (32))) + (Obj.magic + (FStar_Tactics_Logic.forall_intro + ())) + (fun + uu___7 -> + FStar_Tactics_Effect.lift_div_tac + (fun + uu___8 -> + ())))) + (fun + uu___7 -> + (fun + uu___7 -> + Obj.magic + (FStar_Tactics_Effect.tac_bind + (Prims.mk_range + "Steel.Effect.Common.fsti" + (Prims.of_int (2761)) + (Prims.of_int (15)) + (Prims.of_int (2761)) + (Prims.of_int (32))) + (Prims.mk_range + "Steel.Effect.Common.fsti" + (Prims.of_int (2761)) + (Prims.of_int (8)) + (Prims.of_int (2761)) + (Prims.of_int (32))) + (Obj.magic + (FStar_Tactics_Logic.forall_intro + ())) + (fun + uu___8 -> + FStar_Tactics_Effect.lift_div_tac + (fun + uu___9 -> + ())))) + uu___7))) + uu___6))) + uu___5)) + else + if + FStar_Reflection_Derived.is_fvar + hd + "Steel.Effect.Common.can_be_split_dep" + then + Obj.magic + (FStar_Tactics_Derived.fail + ( + Prims.strcat + "can_be_split_dep not supported in " + loc)) + else + if + FStar_Reflection_Derived.is_fvar + hd + "Steel.Effect.Common.can_be_split_forall_dep" + then + Obj.magic + (FStar_Tactics_Derived.fail + (Prims.strcat + "can_be_split_forall_dep not supported in " + loc)) + else + Obj.magic + (FStar_Tactics_Derived.fail + (Prims.strcat + loc + " goal in unexpected position"))) + uu___1))) uu___)) + | uu___ -> + Obj.magic + (FStar_Tactics_Derived.fail + (Prims.strcat loc " unexpected goal"))) uu___))) + uu___) +let rec term_dict_assoc : + 'a . + FStar_Reflection_Types.term -> + (FStar_Reflection_Types.term * 'a) Prims.list -> + ('a Prims.list, unit) FStar_Tactics_Effect.tac_repr + = + fun uu___1 -> + fun uu___ -> + (fun key -> + fun l -> + match l with + | [] -> + Obj.magic + (Obj.repr + (FStar_Tactics_Effect.lift_div_tac (fun uu___ -> []))) + | (k, v)::q -> + Obj.magic + (Obj.repr + (FStar_Tactics_Effect.tac_bind + (Prims.mk_range "Steel.Effect.Common.fsti" + (Prims.of_int (2779)) (Prims.of_int (13)) + (Prims.of_int (2779)) (Prims.of_int (34))) + (Prims.mk_range "Steel.Effect.Common.fsti" + (Prims.of_int (2780)) (Prims.of_int (4)) + (Prims.of_int (2782)) (Prims.of_int (11))) + (Obj.magic (term_dict_assoc key q)) + (fun uu___ -> + (fun q' -> + Obj.magic + (FStar_Tactics_Effect.tac_bind + (Prims.mk_range "Steel.Effect.Common.fsti" + (Prims.of_int (2780)) (Prims.of_int (7)) + (Prims.of_int (2780)) + (Prims.of_int (26))) + (Prims.mk_range "Steel.Effect.Common.fsti" + (Prims.of_int (2780)) (Prims.of_int (4)) + (Prims.of_int (2782)) + (Prims.of_int (11))) + (Obj.magic + (FStar_Tactics_Builtins.term_eq_old k + key)) + (fun uu___ -> + FStar_Tactics_Effect.lift_div_tac + (fun uu___1 -> + if uu___ then v :: q' else q')))) + uu___)))) uu___1 uu___ +let (solve_or_delay : + (FStar_Reflection_Types.term * + (unit -> (Prims.bool, unit) FStar_Tactics_Effect.tac_repr)) Prims.list -> + (Prims.bool, unit) FStar_Tactics_Effect.tac_repr) + = + fun dict -> + FStar_Tactics_Effect.tac_bind + (Prims.mk_range "Steel.Effect.Common.fsti" (Prims.of_int (2787)) + (Prims.of_int (2)) (Prims.of_int (2787)) (Prims.of_int (9))) + (Prims.mk_range "Steel.Effect.Common.fsti" (Prims.of_int (2788)) + (Prims.of_int (2)) (Prims.of_int (2822)) (Prims.of_int (14))) + (Obj.magic (FStar_Tactics_Builtins.norm [])) + (fun uu___ -> + (fun uu___ -> + Obj.magic + (FStar_Tactics_Effect.tac_bind + (Prims.mk_range "Steel.Effect.Common.fsti" + (Prims.of_int (2788)) (Prims.of_int (10)) + (Prims.of_int (2788)) (Prims.of_int (40))) + (Prims.mk_range "Steel.Effect.Common.fsti" + (Prims.of_int (2789)) (Prims.of_int (2)) + (Prims.of_int (2822)) (Prims.of_int (14))) + (Obj.magic + (FStar_Tactics_Effect.tac_bind + (Prims.mk_range "Steel.Effect.Common.fsti" + (Prims.of_int (2788)) (Prims.of_int (27)) + (Prims.of_int (2788)) (Prims.of_int (40))) + (Prims.mk_range "Steel.Effect.Common.fsti" + (Prims.of_int (2788)) (Prims.of_int (10)) + (Prims.of_int (2788)) (Prims.of_int (40))) + (Obj.magic (FStar_Tactics_Derived.cur_goal ())) + (fun uu___1 -> + (fun uu___1 -> + Obj.magic + (FStar_Reflection_Formula.term_as_formula' + uu___1)) uu___1))) + (fun uu___1 -> + (fun f -> + match f with + | FStar_Reflection_Formula.App (hd0, t) -> + Obj.magic + (Obj.repr + (if + FStar_Reflection_Derived.is_fvar hd0 + "Prims.squash" + then + Obj.repr + (FStar_Tactics_Effect.tac_bind + (Prims.mk_range + "Steel.Effect.Common.fsti" + (Prims.of_int (2793)) + (Prims.of_int (21)) + (Prims.of_int (2793)) + (Prims.of_int (34))) + (Prims.mk_range + "Steel.Effect.Common.fsti" + (Prims.of_int (2793)) + (Prims.of_int (6)) + (Prims.of_int (2813)) + (Prims.of_int (11))) + (FStar_Tactics_Effect.lift_div_tac + (fun uu___1 -> + FStar_Reflection_Derived.collect_app + t)) + (fun uu___1 -> + (fun uu___1 -> + match uu___1 with + | (hd, args) -> + if + FStar_Reflection_Derived.is_fvar + hd + "Steel.Effect.Common.can_be_split" + then + Obj.magic + (solve_can_be_split + args) + else + if + FStar_Reflection_Derived.is_fvar + hd + "Steel.Effect.Common.can_be_split_forall" + then + Obj.magic + (solve_can_be_split_forall + args) + else + if + FStar_Reflection_Derived.is_fvar + hd + "Steel.Effect.Common.equiv_forall" + then + Obj.magic + (solve_equiv_forall + args) + else + if + FStar_Reflection_Derived.is_fvar + hd + "Steel.Effect.Common.can_be_split_post" + then + Obj.magic + (solve_can_be_split_post + args) + else + if + FStar_Reflection_Derived.is_fvar + hd + "Steel.Effect.Common.equiv" + then + Obj.magic + (solve_equiv + args) + else + if + FStar_Reflection_Derived.is_fvar + hd + "Steel.Effect.Common.can_be_split_dep" + then + Obj.magic + (solve_can_be_split_dep + args) + else + if + FStar_Reflection_Derived.is_fvar + hd + "Steel.Effect.Common.can_be_split_forall_dep" + then + Obj.magic + (solve_can_be_split_forall_dep + args) + else + Obj.magic + (FStar_Tactics_Effect.tac_bind + (Prims.mk_range + "Steel.Effect.Common.fsti" + (Prims.of_int (2802)) + (Prims.of_int (25)) + (Prims.of_int (2802)) + (Prims.of_int (48))) + (Prims.mk_range + "Steel.Effect.Common.fsti" + (Prims.of_int (2803)) + (Prims.of_int (8)) + (Prims.of_int (2813)) + (Prims.of_int (11))) + (Obj.magic + (term_dict_assoc + hd dict)) + (fun + uu___9 -> + (fun + candidates + -> + Obj.magic + (FStar_Tactics_Effect.tac_bind + (Prims.mk_range + "Steel.Effect.Common.fsti" + (Prims.of_int (2804)) + (Prims.of_int (10)) + (Prims.of_int (2804)) + (Prims.of_int (19))) + (Prims.mk_range + "Steel.Effect.Common.fsti" + (Prims.of_int (2806)) + (Prims.of_int (14)) + (Prims.of_int (2812)) + (Prims.of_int (20))) + (FStar_Tactics_Effect.lift_div_tac + (fun + uu___9 -> + fun tac + -> + fun + uu___10 + -> + FStar_Tactics_Derived.focus + tac)) + (fun + uu___9 -> + (fun + run_tac + -> + Obj.magic + (FStar_Tactics_Derived.try_with + (fun + uu___9 -> + match () + with + | + () -> + FStar_Tactics_Derived.first + (FStar_List_Tot_Base.map + run_tac + candidates)) + (fun + uu___9 -> + (fun + uu___9 -> + if + (FStar_List_Tot_Base.length + (FStar_Reflection_Builtins.free_uvars + t)) = + Prims.int_zero + then + Obj.magic + (Obj.repr + (FStar_Tactics_Effect.tac_bind + (Prims.mk_range + "Steel.Effect.Common.fsti" + (Prims.of_int (2811)) + (Prims.of_int (16)) + (Prims.of_int (2811)) + (Prims.of_int (22))) + (Prims.mk_range + "Steel.Effect.Common.fsti" + (Prims.of_int (2811)) + (Prims.of_int (24)) + (Prims.of_int (2811)) + (Prims.of_int (28))) + (Obj.magic + (FStar_Tactics_Derived.smt + ())) + (fun + uu___10 + -> + FStar_Tactics_Effect.lift_div_tac + (fun + uu___11 + -> true)))) + else + Obj.magic + (Obj.repr + (FStar_Tactics_Effect.lift_div_tac + (fun + uu___11 + -> false)))) + uu___9))) + uu___9))) + uu___9))) + uu___1)) + else + Obj.repr + (FStar_Tactics_Effect.lift_div_tac + (fun uu___2 -> false)))) + | FStar_Reflection_Formula.Comp + (FStar_Reflection_Formula.Eq uu___1, l, r) -> + Obj.magic + (Obj.repr + (FStar_Tactics_Effect.tac_bind + (Prims.mk_range "Steel.Effect.Common.fsti" + (Prims.of_int (2818)) + (Prims.of_int (15)) + (Prims.of_int (2818)) + (Prims.of_int (71))) + (Prims.mk_range "Steel.Effect.Common.fsti" + (Prims.of_int (2819)) + (Prims.of_int (4)) + (Prims.of_int (2821)) + (Prims.of_int (60))) + (FStar_Tactics_Effect.lift_div_tac + (fun uu___2 -> + FStar_List_Tot_Base.length + (FStar_Reflection_Builtins.free_uvars + l))) + (fun uu___2 -> + (fun lnbr -> + Obj.magic + (FStar_Tactics_Effect.tac_bind + (Prims.mk_range + "Steel.Effect.Common.fsti" + (Prims.of_int (2819)) + (Prims.of_int (15)) + (Prims.of_int (2819)) + (Prims.of_int (71))) + (Prims.mk_range + "Steel.Effect.Common.fsti" + (Prims.of_int (2821)) + (Prims.of_int (4)) + (Prims.of_int (2821)) + (Prims.of_int (60))) + (FStar_Tactics_Effect.lift_div_tac + (fun uu___2 -> + FStar_List_Tot_Base.length + (FStar_Reflection_Builtins.free_uvars + r))) + (fun uu___2 -> + (fun rnbr -> + if + (lnbr = Prims.int_zero) + || + (rnbr = + Prims.int_zero) + then + Obj.magic + (Obj.repr + (FStar_Tactics_Effect.tac_bind + (Prims.mk_range + "Steel.Effect.Common.fsti" + (Prims.of_int (2821)) + (Prims.of_int (34)) + (Prims.of_int (2821)) + (Prims.of_int (42))) + (Prims.mk_range + "Steel.Effect.Common.fsti" + (Prims.of_int (2821)) + (Prims.of_int (44)) + (Prims.of_int (2821)) + (Prims.of_int (48))) + (Obj.magic + (FStar_Tactics_Derived.trefl + ())) + (fun uu___2 -> + FStar_Tactics_Effect.lift_div_tac + (fun + uu___3 -> + true)))) + else + Obj.magic + (Obj.repr + (FStar_Tactics_Effect.lift_div_tac + (fun uu___3 -> + false)))) + uu___2))) uu___2))) + | uu___1 -> + Obj.magic + (Obj.repr + (FStar_Tactics_Effect.lift_div_tac + (fun uu___2 -> false)))) uu___1))) uu___) +let rec (vprop_term_uvars : + FStar_Reflection_Types.term -> + (Prims.int Prims.list, unit) FStar_Tactics_Effect.tac_repr) + = + fun t -> + FStar_Tactics_Effect.tac_bind + (Prims.mk_range "Steel.Effect.Common.fsti" (Prims.of_int (2829)) + (Prims.of_int (8)) (Prims.of_int (2829)) (Prims.of_int (27))) + (Prims.mk_range "Steel.Effect.Common.fsti" (Prims.of_int (2829)) + (Prims.of_int (2)) (Prims.of_int (2839)) (Prims.of_int (11))) + (Obj.magic (FStar_Tactics_Derived.inspect_unascribe t)) + (fun uu___ -> + (fun uu___ -> + match uu___ with + | FStar_Reflection_Data.Tv_Uvar (i', uu___1) -> + Obj.magic + (Obj.repr + (FStar_Tactics_Effect.lift_div_tac (fun uu___2 -> [i']))) + | FStar_Reflection_Data.Tv_App (uu___1, uu___2) -> + Obj.magic + (Obj.repr + (FStar_Tactics_Effect.tac_bind + (Prims.mk_range "Steel.Effect.Common.fsti" + (Prims.of_int (2832)) (Prims.of_int (19)) + (Prims.of_int (2832)) (Prims.of_int (32))) + (Prims.mk_range "Steel.Effect.Common.fsti" + (Prims.of_int (2832)) (Prims.of_int (4)) + (Prims.of_int (2837)) (Prims.of_int (25))) + (FStar_Tactics_Effect.lift_div_tac + (fun uu___3 -> + FStar_Reflection_Derived.collect_app t)) + (fun uu___3 -> + (fun uu___3 -> + match uu___3 with + | (hd, args) -> + if is_star_or_unit hd + then Obj.magic (argv_uvars args) + else Obj.magic (vprop_term_uvars hd)) + uu___3))) + | FStar_Reflection_Data.Tv_Abs (uu___1, t1) -> + Obj.magic (Obj.repr (vprop_term_uvars t1)) + | uu___1 -> + Obj.magic + (Obj.repr + (FStar_Tactics_Effect.lift_div_tac (fun uu___2 -> [])))) + uu___) +and (argv_uvars : + FStar_Reflection_Data.argv Prims.list -> + (Prims.int Prims.list, unit) FStar_Tactics_Effect.tac_repr) + = + fun args -> + FStar_Tactics_Effect.tac_bind + (Prims.mk_range "Steel.Effect.Common.fsti" (Prims.of_int (2843)) + (Prims.of_int (4)) (Prims.of_int (2852)) (Prims.of_int (8))) + (Prims.mk_range "Steel.Effect.Common.fsti" (Prims.of_int (2854)) + (Prims.of_int (2)) (Prims.of_int (2854)) (Prims.of_int (6))) + (Obj.magic + (FStar_Tactics_Util.fold_left + (fun uu___1 -> + fun uu___ -> + (fun n -> + fun uu___ -> + Obj.magic + (FStar_Tactics_Effect.lift_div_tac + (fun uu___1 -> + match uu___ with + | (x, uu___2) -> + (fun uu___3 -> + FStar_Tactics_Effect.tac_bind + (Prims.mk_range + "Steel.Effect.Common.fsti" + (Prims.of_int (2845)) + (Prims.of_int (17)) + (Prims.of_int (2845)) + (Prims.of_int (21))) + (Prims.mk_range + "Steel.Effect.Common.fsti" + (Prims.of_int (2846)) + (Prims.of_int (8)) + (Prims.of_int (2847)) + (Prims.of_int (31))) + (Obj.magic (n ())) + (fun uu___4 -> + (fun l1 -> + Obj.magic + (FStar_Tactics_Effect.tac_bind + (Prims.mk_range + "Steel.Effect.Common.fsti" + (Prims.of_int (2846)) + (Prims.of_int (17)) + (Prims.of_int (2846)) + (Prims.of_int (35))) + (Prims.mk_range + "Steel.Effect.Common.fsti" + (Prims.of_int (2847)) + (Prims.of_int (8)) + (Prims.of_int (2847)) + (Prims.of_int (31))) + (Obj.magic + (vprop_term_uvars x)) + (fun l2 -> + FStar_Tactics_Effect.lift_div_tac + (fun uu___4 -> + FStar_List_Tot_Base.append + l1 l2)))) uu___4))))) + uu___1 uu___) + (fun uu___ -> + (fun uu___ -> + Obj.magic + (FStar_Tactics_Effect.lift_div_tac (fun uu___1 -> []))) + uu___) args)) + (fun uu___ -> (fun t -> Obj.magic (t ())) uu___) +let rec remove_dups_from_sorted : 't . 't Prims.list -> 't Prims.list = + fun l -> + match l with + | [] -> l + | uu___::[] -> l + | a1::a2::q -> + if a1 = a2 + then remove_dups_from_sorted (a2 :: q) + else a1 :: (remove_dups_from_sorted (a2 :: q)) +let (simplify_list : Prims.int Prims.list -> Prims.int Prims.list) = + fun l -> + remove_dups_from_sorted + (FStar_List_Tot_Base.sortWith (FStar_List_Tot_Base.compare_of_bool (<)) + l) +let (goal_term_uvars : + FStar_Reflection_Types.term -> + (Prims.int Prims.list, unit) FStar_Tactics_Effect.tac_repr) + = + fun t -> + FStar_Tactics_Effect.tac_bind + (Prims.mk_range "Steel.Effect.Common.fsti" (Prims.of_int (2864)) + (Prims.of_int (15)) (Prims.of_int (2864)) (Prims.of_int (28))) + (Prims.mk_range "Steel.Effect.Common.fsti" (Prims.of_int (2864)) + (Prims.of_int (2)) (Prims.of_int (2873)) (Prims.of_int (6))) + (FStar_Tactics_Effect.lift_div_tac + (fun uu___ -> FStar_Reflection_Derived.collect_app t)) + (fun uu___ -> + (fun uu___ -> + match uu___ with + | (hd, tl) -> + if FStar_Reflection_Derived.is_fvar hd "Prims.squash" + then + Obj.magic + (Obj.repr + (match tl with + | (tl0, FStar_Reflection_Data.Q_Explicit)::[] -> + FStar_Tactics_Effect.tac_bind + (Prims.mk_range "Steel.Effect.Common.fsti" + (Prims.of_int (2869)) (Prims.of_int (19)) + (Prims.of_int (2869)) (Prims.of_int (34))) + (Prims.mk_range "Steel.Effect.Common.fsti" + (Prims.of_int (2869)) (Prims.of_int (6)) + (Prims.of_int (2870)) (Prims.of_int (36))) + (FStar_Tactics_Effect.lift_div_tac + (fun uu___1 -> + FStar_Reflection_Derived.collect_app tl0)) + (fun uu___1 -> + (fun uu___1 -> + match uu___1 with + | (uu___2, tl1) -> + Obj.magic + (FStar_Tactics_Effect.tac_bind + (Prims.mk_range + "Steel.Effect.Common.fsti" + (Prims.of_int (2870)) + (Prims.of_int (20)) + (Prims.of_int (2870)) + (Prims.of_int (36))) + (Prims.mk_range + "Steel.Effect.Common.fsti" + (Prims.of_int (2870)) + (Prims.of_int (6)) + (Prims.of_int (2870)) + (Prims.of_int (36))) + (Obj.magic (argv_uvars tl1)) + (fun uu___3 -> + FStar_Tactics_Effect.lift_div_tac + (fun uu___4 -> + simplify_list uu___3)))) + uu___1) + | uu___1 -> + FStar_Tactics_Effect.tac_bind + (Prims.mk_range "Steel.Effect.Common.fsti" + (Prims.of_int (2871)) (Prims.of_int (11)) + (Prims.of_int (2871)) (Prims.of_int (35))) + (Prims.mk_range "Steel.Effect.Common.fsti" + (Prims.of_int (2871)) (Prims.of_int (37)) + (Prims.of_int (2871)) (Prims.of_int (39))) + (Obj.magic + (FStar_Tactics_Builtins.dump + "ill-formed squash")) + (fun uu___2 -> + FStar_Tactics_Effect.lift_div_tac + (fun uu___3 -> [])))) + else + Obj.magic + (Obj.repr + (FStar_Tactics_Effect.lift_div_tac (fun uu___2 -> [])))) + uu___) +let rec (merge_sorted : + Prims.int Prims.list -> Prims.int Prims.list -> Prims.int Prims.list) = + fun l1 -> + fun l2 -> + match l1 with + | [] -> l2 + | a1::q1 -> + (match l2 with + | [] -> l1 + | a2::q2 -> + if a1 < a2 + then a1 :: (merge_sorted q1 l2) + else + if a2 < a1 + then a2 :: (merge_sorted l1 q2) + else a1 :: (merge_sorted q1 q2)) +let rec (sorted_lists_intersect : + Prims.int Prims.list -> Prims.int Prims.list -> Prims.bool) = + fun l1 -> + fun l2 -> + match l1 with + | [] -> false + | a1::q1 -> + (match l2 with + | [] -> false + | a2::q2 -> + if a1 = a2 + then true + else + if a1 < a2 + then sorted_lists_intersect q1 l2 + else sorted_lists_intersect l1 q2) +let rec (compute_guarded_uvars1 : + Prims.int Prims.list -> + FStar_Tactics_Types.goal Prims.list -> + (Prims.int Prims.list, unit) FStar_Tactics_Effect.tac_repr) + = + fun uu___1 -> + fun uu___ -> + (fun accu -> + fun g -> + match g with + | [] -> + Obj.magic + (Obj.repr + (FStar_Tactics_Effect.lift_div_tac (fun uu___ -> accu))) + | a::q -> + Obj.magic + (Obj.repr + (FStar_Tactics_Effect.tac_bind + (Prims.mk_range "Steel.Effect.Common.fsti" + (Prims.of_int (2911)) (Prims.of_int (12)) + (Prims.of_int (2911)) (Prims.of_int (23))) + (Prims.mk_range "Steel.Effect.Common.fsti" + (Prims.of_int (2912)) (Prims.of_int (4)) + (Prims.of_int (2917)) (Prims.of_int (34))) + (FStar_Tactics_Effect.lift_div_tac + (fun uu___ -> FStar_Tactics_Types.goal_type a)) + (fun uu___ -> + (fun t -> + Obj.magic + (FStar_Tactics_Effect.tac_bind + (Prims.mk_range "Steel.Effect.Common.fsti" + (Prims.of_int (2913)) (Prims.of_int (6)) + (Prims.of_int (2915)) + (Prims.of_int (48))) + (Prims.mk_range "Steel.Effect.Common.fsti" + (Prims.of_int (2917)) (Prims.of_int (4)) + (Prims.of_int (2917)) + (Prims.of_int (34))) + (Obj.magic + (FStar_Tactics_Effect.tac_bind + (Prims.mk_range + "Steel.Effect.Common.fsti" + (Prims.of_int (2913)) + (Prims.of_int (9)) + (Prims.of_int (2913)) + (Prims.of_int (28))) + (Prims.mk_range + "Steel.Effect.Common.fsti" + (Prims.of_int (2913)) + (Prims.of_int (6)) + (Prims.of_int (2915)) + (Prims.of_int (48))) + (Obj.magic (all_guards_solved t)) + (fun uu___ -> + (fun uu___ -> + if uu___ + then + Obj.magic + (Obj.repr + (FStar_Tactics_Effect.lift_div_tac + (fun uu___1 -> accu))) + else + Obj.magic + (Obj.repr + (FStar_Tactics_Effect.tac_bind + (Prims.mk_range + "Steel.Effect.Common.fsti" + (Prims.of_int (2915)) + (Prims.of_int (29)) + (Prims.of_int (2915)) + (Prims.of_int (48))) + (Prims.mk_range + "Steel.Effect.Common.fsti" + (Prims.of_int (2915)) + (Prims.of_int (11)) + (Prims.of_int (2915)) + (Prims.of_int (48))) + (Obj.magic + (goal_term_uvars t)) + (fun uu___2 -> + FStar_Tactics_Effect.lift_div_tac + (fun uu___3 -> + merge_sorted + accu uu___2))))) + uu___))) + (fun uu___ -> + (fun accu' -> + Obj.magic + (compute_guarded_uvars1 accu' q)) + uu___))) uu___)))) uu___1 uu___ +let rec (compute_guarded_uvars2 : + Prims.int Prims.list -> + FStar_Tactics_Types.goal Prims.list -> + (Prims.int Prims.list, unit) FStar_Tactics_Effect.tac_repr) + = + fun uu___1 -> + fun uu___ -> + (fun accu -> + fun g -> + match g with + | [] -> + Obj.magic + (Obj.repr + (FStar_Tactics_Effect.lift_div_tac (fun uu___ -> accu))) + | a::q -> + Obj.magic + (Obj.repr + (FStar_Tactics_Effect.tac_bind + (Prims.mk_range "Steel.Effect.Common.fsti" + (Prims.of_int (2924)) (Prims.of_int (12)) + (Prims.of_int (2924)) (Prims.of_int (23))) + (Prims.mk_range "Steel.Effect.Common.fsti" + (Prims.of_int (2925)) (Prims.of_int (4)) + (Prims.of_int (2931)) (Prims.of_int (34))) + (FStar_Tactics_Effect.lift_div_tac + (fun uu___ -> FStar_Tactics_Types.goal_type a)) + (fun uu___ -> + (fun t -> + Obj.magic + (FStar_Tactics_Effect.tac_bind + (Prims.mk_range "Steel.Effect.Common.fsti" + (Prims.of_int (2925)) + (Prims.of_int (12)) + (Prims.of_int (2925)) + (Prims.of_int (29))) + (Prims.mk_range "Steel.Effect.Common.fsti" + (Prims.of_int (2926)) (Prims.of_int (4)) + (Prims.of_int (2931)) + (Prims.of_int (34))) + (Obj.magic (goal_term_uvars t)) + (fun uu___ -> + (fun l -> + Obj.magic + (FStar_Tactics_Effect.tac_bind + (Prims.mk_range + "Steel.Effect.Common.fsti" + (Prims.of_int (2927)) + (Prims.of_int (6)) + (Prims.of_int (2929)) + (Prims.of_int (15))) + (Prims.mk_range + "Steel.Effect.Common.fsti" + (Prims.of_int (2931)) + (Prims.of_int (4)) + (Prims.of_int (2931)) + (Prims.of_int (34))) + (FStar_Tactics_Effect.lift_div_tac + (fun uu___ -> + if + sorted_lists_intersect + accu l + then merge_sorted accu l + else accu)) + (fun uu___ -> + (fun accu' -> + Obj.magic + (compute_guarded_uvars2 + accu' q)) uu___))) + uu___))) uu___)))) uu___1 uu___ +let rec (compute_guarded_uvars3 : + Prims.int Prims.list -> + FStar_Tactics_Types.goal Prims.list -> + (Prims.int Prims.list, unit) FStar_Tactics_Effect.tac_repr) + = + fun accu -> + fun g -> + FStar_Tactics_Effect.tac_bind + (Prims.mk_range "Steel.Effect.Common.fsti" (Prims.of_int (2934)) + (Prims.of_int (14)) (Prims.of_int (2934)) (Prims.of_int (43))) + (Prims.mk_range "Steel.Effect.Common.fsti" (Prims.of_int (2935)) + (Prims.of_int (2)) (Prims.of_int (2937)) (Prims.of_int (37))) + (Obj.magic (compute_guarded_uvars2 accu g)) + (fun uu___ -> + (fun accu' -> + if accu = accu' + then + Obj.magic + (Obj.repr + (FStar_Tactics_Effect.lift_div_tac (fun uu___ -> accu))) + else Obj.magic (Obj.repr (compute_guarded_uvars3 accu' g))) + uu___) +let (compute_guarded_uvars : + unit -> (Prims.int Prims.list, unit) FStar_Tactics_Effect.tac_repr) = + fun uu___ -> + FStar_Tactics_Effect.tac_bind + (Prims.mk_range "Steel.Effect.Common.fsti" (Prims.of_int (2940)) + (Prims.of_int (10)) (Prims.of_int (2940)) (Prims.of_int (18))) + (Prims.mk_range "Steel.Effect.Common.fsti" (Prims.of_int (2941)) + (Prims.of_int (2)) (Prims.of_int (2942)) (Prims.of_int (31))) + (Obj.magic (FStar_Tactics_Derived.goals ())) + (fun uu___1 -> + (fun g -> + Obj.magic + (FStar_Tactics_Effect.tac_bind + (Prims.mk_range "Steel.Effect.Common.fsti" + (Prims.of_int (2941)) (Prims.of_int (13)) + (Prims.of_int (2941)) (Prims.of_int (40))) + (Prims.mk_range "Steel.Effect.Common.fsti" + (Prims.of_int (2942)) (Prims.of_int (2)) + (Prims.of_int (2942)) (Prims.of_int (31))) + (Obj.magic (compute_guarded_uvars1 [] g)) + (fun uu___1 -> + (fun accu -> Obj.magic (compute_guarded_uvars3 accu g)) + uu___1))) uu___1) +let rec (pick_next : + Prims.int Prims.list -> + (FStar_Reflection_Types.term * + (unit -> (Prims.bool, unit) FStar_Tactics_Effect.tac_repr)) Prims.list + -> Prims.nat -> (Prims.bool, unit) FStar_Tactics_Effect.tac_repr) + = + fun uu___2 -> + fun uu___1 -> + fun uu___ -> + (fun guarded_uvars -> + fun dict -> + fun fuel -> + if fuel = Prims.int_zero + then + Obj.magic + (Obj.repr + (FStar_Tactics_Effect.lift_div_tac (fun uu___ -> false))) + else + Obj.magic + (Obj.repr + (FStar_Tactics_Effect.tac_bind + (Prims.mk_range "Steel.Effect.Common.fsti" + (Prims.of_int (2947)) (Prims.of_int (13)) + (Prims.of_int (2947)) (Prims.of_int (21))) + (Prims.mk_range "Steel.Effect.Common.fsti" + (Prims.of_int (2947)) (Prims.of_int (7)) + (Prims.of_int (2960)) (Prims.of_int (16))) + (Obj.magic (FStar_Tactics_Derived.goals ())) + (fun uu___1 -> + (fun uu___1 -> + match uu___1 with + | [] -> + Obj.magic + (Obj.repr + (FStar_Tactics_Effect.lift_div_tac + (fun uu___2 -> true))) + | a::uu___2 -> + Obj.magic + (Obj.repr + (FStar_Tactics_Effect.tac_bind + (Prims.mk_range + "Steel.Effect.Common.fsti" + (Prims.of_int (2950)) + (Prims.of_int (12)) + (Prims.of_int (2950)) + (Prims.of_int (23))) + (Prims.mk_range + "Steel.Effect.Common.fsti" + (Prims.of_int (2951)) + (Prims.of_int (4)) + (Prims.of_int (2960)) + (Prims.of_int (16))) + (FStar_Tactics_Effect.lift_div_tac + (fun uu___3 -> + FStar_Tactics_Types.goal_type + a)) + (fun uu___3 -> + (fun t -> + Obj.magic + (FStar_Tactics_Effect.tac_bind + (Prims.mk_range + "Steel.Effect.Common.fsti" + (Prims.of_int (2951)) + (Prims.of_int (12)) + (Prims.of_int (2951)) + (Prims.of_int (29))) + (Prims.mk_range + "Steel.Effect.Common.fsti" + (Prims.of_int (2952)) + (Prims.of_int (4)) + (Prims.of_int (2960)) + (Prims.of_int (16))) + (Obj.magic + (goal_term_uvars t)) + (fun uu___3 -> + (fun l -> + Obj.magic + (FStar_Tactics_Effect.tac_bind + (Prims.mk_range + "Steel.Effect.Common.fsti" + (Prims.of_int (2953)) + (Prims.of_int (6)) + (Prims.of_int (2954)) + (Prims.of_int (45))) + (Prims.mk_range + "Steel.Effect.Common.fsti" + (Prims.of_int (2956)) + (Prims.of_int (4)) + (Prims.of_int (2960)) + (Prims.of_int (16))) + (FStar_Tactics_Effect.lift_div_tac + ( + fun + uu___3 -> + fun + uu___4 -> + FStar_Tactics_Effect.tac_bind + (Prims.mk_range + "Steel.Effect.Common.fsti" + (Prims.of_int (2953)) + (Prims.of_int (6)) + (Prims.of_int (2953)) + (Prims.of_int (14))) + (Prims.mk_range + "Steel.Effect.Common.fsti" + (Prims.of_int (2954)) + (Prims.of_int (6)) + (Prims.of_int (2954)) + (Prims.of_int (45))) + (Obj.magic + (FStar_Tactics_Derived.later + ())) + (fun + uu___5 -> + (fun + uu___5 -> + Obj.magic + (pick_next + guarded_uvars + dict + (fuel - + Prims.int_one))) + uu___5))) + (fun uu___3 + -> + (fun next + -> + if + sorted_lists_intersect + guarded_uvars + l + then + Obj.magic + (next ()) + else + Obj.magic + (FStar_Tactics_Effect.tac_bind + (Prims.mk_range + "Steel.Effect.Common.fsti" + (Prims.of_int (2958)) + (Prims.of_int (12)) + (Prims.of_int (2958)) + (Prims.of_int (31))) + (Prims.mk_range + "Steel.Effect.Common.fsti" + (Prims.of_int (2958)) + (Prims.of_int (9)) + (Prims.of_int (2960)) + (Prims.of_int (16))) + (Obj.magic + (solve_or_delay + dict)) + (fun + uu___4 -> + (fun + uu___4 -> + if uu___4 + then + Obj.magic + (Obj.repr + (FStar_Tactics_Effect.lift_div_tac + (fun + uu___5 -> + true))) + else + Obj.magic + (Obj.repr + (next ()))) + uu___4))) + uu___3))) + uu___3))) uu___3)))) + uu___1)))) uu___2 uu___1 uu___ +let rec (resolve_tac : + (FStar_Reflection_Types.term * + (unit -> (Prims.bool, unit) FStar_Tactics_Effect.tac_repr)) Prims.list -> + (unit, unit) FStar_Tactics_Effect.tac_repr) + = + fun dict -> + FStar_Tactics_Effect.tac_bind + (Prims.mk_range "Steel.Effect.Common.fsti" (Prims.of_int (2965)) + (Prims.of_int (8)) (Prims.of_int (2965)) (Prims.of_int (16))) + (Prims.mk_range "Steel.Effect.Common.fsti" (Prims.of_int (2965)) + (Prims.of_int (2)) (Prims.of_int (2972)) (Prims.of_int (63))) + (Obj.magic (FStar_Tactics_Derived.goals ())) + (fun uu___ -> + (fun uu___ -> + match uu___ with + | [] -> + Obj.magic + (Obj.repr + (FStar_Tactics_Effect.lift_div_tac (fun uu___1 -> ()))) + | g -> + Obj.magic + (Obj.repr + (FStar_Tactics_Effect.tac_bind + (Prims.mk_range "Steel.Effect.Common.fsti" + (Prims.of_int (2968)) (Prims.of_int (4)) + (Prims.of_int (2968)) (Prims.of_int (11))) + (Prims.mk_range "Steel.Effect.Common.fsti" + (Prims.of_int (2969)) (Prims.of_int (4)) + (Prims.of_int (2972)) (Prims.of_int (63))) + (Obj.magic (FStar_Tactics_Builtins.norm [])) + (fun uu___1 -> + (fun uu___1 -> + Obj.magic + (FStar_Tactics_Effect.tac_bind + (Prims.mk_range "Steel.Effect.Common.fsti" + (Prims.of_int (2969)) + (Prims.of_int (24)) + (Prims.of_int (2969)) + (Prims.of_int (48))) + (Prims.mk_range "Steel.Effect.Common.fsti" + (Prims.of_int (2971)) + (Prims.of_int (4)) + (Prims.of_int (2972)) + (Prims.of_int (63))) + (Obj.magic (compute_guarded_uvars ())) + (fun uu___2 -> + (fun guarded_uvars -> + Obj.magic + (FStar_Tactics_Effect.tac_bind + (Prims.mk_range + "Steel.Effect.Common.fsti" + (Prims.of_int (2971)) + (Prims.of_int (7)) + (Prims.of_int (2971)) + (Prims.of_int (55))) + (Prims.mk_range + "Steel.Effect.Common.fsti" + (Prims.of_int (2971)) + (Prims.of_int (4)) + (Prims.of_int (2972)) + (Prims.of_int (63))) + (Obj.magic + (pick_next guarded_uvars + dict + (FStar_List_Tot_Base.length + g))) + (fun uu___2 -> + (fun uu___2 -> + if uu___2 + then + Obj.magic + (resolve_tac dict) + else + Obj.magic + (FStar_Tactics_Derived.fail + "Could not make progress, no solvable goal found")) + uu___2))) uu___2))) uu___1)))) + uu___) +let rec (pick_next_logical : + (FStar_Reflection_Types.term * + (unit -> (Prims.bool, unit) FStar_Tactics_Effect.tac_repr)) Prims.list -> + Prims.nat -> (Prims.bool, unit) FStar_Tactics_Effect.tac_repr) + = + fun uu___1 -> + fun uu___ -> + (fun dict -> + fun fuel -> + if fuel = Prims.int_zero + then + Obj.magic + (Obj.repr + (FStar_Tactics_Effect.lift_div_tac (fun uu___ -> false))) + else + Obj.magic + (Obj.repr + (FStar_Tactics_Effect.tac_bind + (Prims.mk_range "Steel.Effect.Common.fsti" + (Prims.of_int (2977)) (Prims.of_int (13)) + (Prims.of_int (2977)) (Prims.of_int (21))) + (Prims.mk_range "Steel.Effect.Common.fsti" + (Prims.of_int (2977)) (Prims.of_int (7)) + (Prims.of_int (2979)) (Prims.of_int (95))) + (Obj.magic (FStar_Tactics_Derived.goals ())) + (fun uu___1 -> + (fun uu___1 -> + match uu___1 with + | [] -> + Obj.magic + (Obj.repr + (FStar_Tactics_Effect.lift_div_tac + (fun uu___2 -> true))) + | uu___2::uu___3 -> + Obj.magic + (Obj.repr + (FStar_Tactics_Effect.tac_bind + (Prims.mk_range + "Steel.Effect.Common.fsti" + (Prims.of_int (2979)) + (Prims.of_int (15)) + (Prims.of_int (2979)) + (Prims.of_int (34))) + (Prims.mk_range + "Steel.Effect.Common.fsti" + (Prims.of_int (2979)) + (Prims.of_int (12)) + (Prims.of_int (2979)) + (Prims.of_int (95))) + (Obj.magic (solve_or_delay dict)) + (fun uu___4 -> + (fun uu___4 -> + if uu___4 + then + Obj.magic + (Obj.repr + (FStar_Tactics_Effect.lift_div_tac + (fun uu___5 -> true))) + else + Obj.magic + (Obj.repr + (FStar_Tactics_Effect.tac_bind + (Prims.mk_range + "Steel.Effect.Common.fsti" + (Prims.of_int (2979)) + (Prims.of_int (51)) + (Prims.of_int (2979)) + (Prims.of_int (59))) + (Prims.mk_range + "Steel.Effect.Common.fsti" + (Prims.of_int (2979)) + (Prims.of_int (61)) + (Prims.of_int (2979)) + (Prims.of_int (94))) + (Obj.magic + (FStar_Tactics_Derived.later + ())) + (fun uu___6 -> + (fun uu___6 -> + Obj.magic + (pick_next_logical + dict + (fuel - + Prims.int_one))) + uu___6)))) uu___4)))) + uu___1)))) uu___1 uu___ +let rec (resolve_tac_logical : + (FStar_Reflection_Types.term * + (unit -> (Prims.bool, unit) FStar_Tactics_Effect.tac_repr)) Prims.list -> + (unit, unit) FStar_Tactics_Effect.tac_repr) + = + fun dict -> + FStar_Tactics_Effect.tac_bind + (Prims.mk_range "Steel.Effect.Common.fsti" (Prims.of_int (2983)) + (Prims.of_int (8)) (Prims.of_int (2983)) (Prims.of_int (16))) + (Prims.mk_range "Steel.Effect.Common.fsti" (Prims.of_int (2983)) + (Prims.of_int (2)) (Prims.of_int (2993)) (Prims.of_int (24))) + (Obj.magic (FStar_Tactics_Derived.goals ())) + (fun uu___ -> + (fun uu___ -> + match uu___ with + | [] -> + Obj.magic + (Obj.repr + (FStar_Tactics_Effect.lift_div_tac (fun uu___1 -> ()))) + | g -> + Obj.magic + (Obj.repr + (FStar_Tactics_Effect.tac_bind + (Prims.mk_range "Steel.Effect.Common.fsti" + (Prims.of_int (2986)) (Prims.of_int (15)) + (Prims.of_int (2986)) (Prims.of_int (32))) + (Prims.mk_range "Steel.Effect.Common.fsti" + (Prims.of_int (2987)) (Prims.of_int (4)) + (Prims.of_int (2993)) (Prims.of_int (24))) + (FStar_Tactics_Effect.lift_div_tac + (fun uu___1 -> FStar_List_Tot_Base.length g)) + (fun uu___1 -> + (fun fuel -> + Obj.magic + (FStar_Tactics_Effect.tac_bind + (Prims.mk_range "Steel.Effect.Common.fsti" + (Prims.of_int (2987)) + (Prims.of_int (7)) + (Prims.of_int (2987)) + (Prims.of_int (34))) + (Prims.mk_range "Steel.Effect.Common.fsti" + (Prims.of_int (2987)) + (Prims.of_int (4)) + (Prims.of_int (2993)) + (Prims.of_int (24))) + (Obj.magic (pick_next_logical dict fuel)) + (fun uu___1 -> + (fun uu___1 -> + if uu___1 + then + Obj.magic + (resolve_tac_logical dict) + else Obj.magic (solve_all_eqs fuel)) + uu___1))) uu___1)))) uu___) +let (typ_contains_req_ens : + FStar_Reflection_Types.term -> + (Prims.bool, unit) FStar_Tactics_Effect.tac_repr) + = + fun uu___ -> + (fun t -> + Obj.magic + (FStar_Tactics_Effect.lift_div_tac + (fun uu___ -> + match FStar_Reflection_Derived.collect_app t with + | (name, uu___1) -> + FStar_Reflection_Derived.is_any_fvar name + ["Steel.Effect.Common.req_t"; + "Steel.Effect.Common.ens_t"; + "Prims.pure_wp"; + "Prims.pure_pre"; + "Prims.pure_post"]))) uu___ +let rec (filter_goals : + FStar_Tactics_Types.goal Prims.list -> + ((FStar_Tactics_Types.goal Prims.list * FStar_Tactics_Types.goal + Prims.list), + unit) FStar_Tactics_Effect.tac_repr) + = + fun uu___ -> + (fun l -> + match l with + | [] -> + Obj.magic + (Obj.repr + (FStar_Tactics_Effect.lift_div_tac (fun uu___ -> ([], [])))) + | hd::tl -> + Obj.magic + (Obj.repr + (FStar_Tactics_Effect.tac_bind + (Prims.mk_range "Steel.Effect.Common.fsti" + (Prims.of_int (3005)) (Prims.of_int (30)) + (Prims.of_int (3005)) (Prims.of_int (45))) + (Prims.mk_range "Steel.Effect.Common.fsti" + (Prims.of_int (3005)) (Prims.of_int (6)) + (Prims.of_int (3020)) (Prims.of_int (30))) + (Obj.magic (filter_goals tl)) + (fun uu___ -> + (fun uu___ -> + match uu___ with + | (slgoals, loggoals) -> + Obj.magic + (FStar_Tactics_Effect.tac_bind + (Prims.mk_range "Steel.Effect.Common.fsti" + (Prims.of_int (3006)) + (Prims.of_int (12)) + (Prims.of_int (3006)) + (Prims.of_int (43))) + (Prims.mk_range "Steel.Effect.Common.fsti" + (Prims.of_int (3006)) (Prims.of_int (6)) + (Prims.of_int (3020)) + (Prims.of_int (30))) + (Obj.magic + (FStar_Reflection_Formula.term_as_formula' + (FStar_Tactics_Types.goal_type hd))) + (fun uu___1 -> + (fun uu___1 -> + match uu___1 with + | FStar_Reflection_Formula.Comp + (FStar_Reflection_Formula.Eq t, + uu___2, uu___3) + -> + Obj.magic + (Obj.repr + (if + FStar_Pervasives_Native.uu___is_Some + t + then + Obj.repr + (FStar_Tactics_Effect.tac_bind + (Prims.mk_range + "Steel.Effect.Common.fsti" + (Prims.of_int (3009)) + (Prims.of_int (18)) + (Prims.of_int (3009)) + (Prims.of_int (50))) + (Prims.mk_range + "Steel.Effect.Common.fsti" + (Prims.of_int (3010)) + (Prims.of_int (10)) + (Prims.of_int (3015)) + (Prims.of_int (11))) + (Obj.magic + (typ_contains_req_ens + (FStar_Pervasives_Native.__proj__Some__item__v + t))) + (fun b -> + FStar_Tactics_Effect.lift_div_tac + (fun uu___4 -> + if b + then + (slgoals, + (hd :: + loggoals)) + else + ((hd :: + slgoals), + loggoals)))) + else + Obj.repr + (FStar_Tactics_Effect.lift_div_tac + (fun uu___5 -> + ((hd :: slgoals), + loggoals))))) + | FStar_Reflection_Formula.App + (t, uu___2) -> + Obj.magic + (Obj.repr + (FStar_Tactics_Effect.lift_div_tac + (fun uu___3 -> + if + FStar_Reflection_Derived.is_fvar + t "Prims.squash" + then + ((hd :: slgoals), + loggoals) + else + (slgoals, loggoals)))) + | uu___2 -> + Obj.magic + (Obj.repr + (FStar_Tactics_Effect.lift_div_tac + (fun uu___3 -> + (slgoals, loggoals))))) + uu___1))) uu___)))) uu___ +let (is_true : + FStar_Reflection_Types.term -> + unit -> (unit, unit) FStar_Tactics_Effect.tac_repr) + = + fun t -> + fun uu___ -> + FStar_Tactics_Effect.tac_bind + (Prims.mk_range "Steel.Effect.Common.fsti" (Prims.of_int (3023)) + (Prims.of_int (8)) (Prims.of_int (3023)) (Prims.of_int (25))) + (Prims.mk_range "Steel.Effect.Common.fsti" (Prims.of_int (3023)) + (Prims.of_int (2)) (Prims.of_int (3025)) (Prims.of_int (31))) + (Obj.magic (FStar_Reflection_Formula.term_as_formula t)) + (fun uu___1 -> + (fun uu___1 -> + match uu___1 with + | FStar_Reflection_Formula.True_ -> + Obj.magic + (FStar_Tactics_Derived.exact + (FStar_Reflection_Builtins.pack_ln + (FStar_Reflection_Data.Tv_Const + FStar_Reflection_Data.C_Unit))) + | uu___2 -> + Obj.magic + (FStar_Tactics_Effect.raise + FStar_Tactics_Derived.Goal_not_trivial)) uu___1) +let rec (solve_maybe_emps : + Prims.nat -> (unit, unit) FStar_Tactics_Effect.tac_repr) = + fun uu___ -> + (fun fuel -> + if fuel = Prims.int_zero + then + Obj.magic + (Obj.repr (FStar_Tactics_Effect.lift_div_tac (fun uu___ -> ()))) + else + Obj.magic + (Obj.repr + (FStar_Tactics_Effect.tac_bind + (Prims.mk_range "Steel.Effect.Common.fsti" + (Prims.of_int (3033)) (Prims.of_int (13)) + (Prims.of_int (3033)) (Prims.of_int (21))) + (Prims.mk_range "Steel.Effect.Common.fsti" + (Prims.of_int (3033)) (Prims.of_int (7)) + (Prims.of_int (3054)) (Prims.of_int (31))) + (Obj.magic (FStar_Tactics_Derived.goals ())) + (fun uu___1 -> + (fun uu___1 -> + match uu___1 with + | [] -> + Obj.magic + (Obj.repr + (FStar_Tactics_Effect.lift_div_tac + (fun uu___2 -> ()))) + | uu___2::uu___3 -> + Obj.magic + (Obj.repr + (FStar_Tactics_Effect.tac_bind + (Prims.mk_range "Steel.Effect.Common.fsti" + (Prims.of_int (3036)) + (Prims.of_int (12)) + (Prims.of_int (3036)) + (Prims.of_int (42))) + (Prims.mk_range "Steel.Effect.Common.fsti" + (Prims.of_int (3036)) + (Prims.of_int (46)) + (Prims.of_int (3054)) + (Prims.of_int (31))) + (Obj.magic + (FStar_Tactics_Effect.tac_bind + (Prims.mk_range + "Steel.Effect.Common.fsti" + (Prims.of_int (3036)) + (Prims.of_int (29)) + (Prims.of_int (3036)) + (Prims.of_int (42))) + (Prims.mk_range + "Steel.Effect.Common.fsti" + (Prims.of_int (3036)) + (Prims.of_int (12)) + (Prims.of_int (3036)) + (Prims.of_int (42))) + (Obj.magic + (FStar_Tactics_Derived.cur_goal + ())) + (fun uu___4 -> + (fun uu___4 -> + Obj.magic + (FStar_Reflection_Formula.term_as_formula' + uu___4)) uu___4))) + (fun uu___4 -> + (fun f -> + Obj.magic + (FStar_Tactics_Effect.tac_bind + (Prims.mk_range + "Steel.Effect.Common.fsti" + (Prims.of_int (3036)) + (Prims.of_int (46)) + (Prims.of_int (3053)) + (Prims.of_int (5))) + (Prims.mk_range + "Steel.Effect.Common.fsti" + (Prims.of_int (3054)) + (Prims.of_int (4)) + (Prims.of_int (3054)) + (Prims.of_int (31))) + (match f with + | FStar_Reflection_Formula.App + (hd0, t) -> + if + Prims.op_Negation + (FStar_Reflection_Derived.is_fvar + hd0 "Prims.squash") + then + Obj.magic + (FStar_Tactics_Derived.later + ()) + else + Obj.magic + (FStar_Tactics_Effect.tac_bind + (Prims.mk_range + "Steel.Effect.Common.fsti" + (Prims.of_int (3042)) + (Prims.of_int (23)) + (Prims.of_int (3042)) + (Prims.of_int (36))) + (Prims.mk_range + "Steel.Effect.Common.fsti" + (Prims.of_int (3042)) + (Prims.of_int (8)) + (Prims.of_int (3051)) + (Prims.of_int (20))) + (FStar_Tactics_Effect.lift_div_tac + (fun uu___5 -> + FStar_Reflection_Derived.collect_app + t)) + (fun uu___5 -> + (fun uu___5 -> + match uu___5 + with + | (hd, args) + -> + if + FStar_Reflection_Derived.is_fvar + hd + "Steel.Effect.Common.maybe_emp" + then + Obj.magic + (FStar_Tactics_Effect.tac_bind + (Prims.mk_range + "Steel.Effect.Common.fsti" + (Prims.of_int (3044)) + (Prims.of_int (11)) + (Prims.of_int (3044)) + (Prims.of_int (73))) + (Prims.mk_range + "Steel.Effect.Common.fsti" + (Prims.of_int (3045)) + (Prims.of_int (10)) + (Prims.of_int (3046)) + (Prims.of_int (35))) + (Obj.magic + (FStar_Tactics_Builtins.norm + [ + FStar_Pervasives.delta_only + ["Steel.Effect.Common.maybe_emp"]; + FStar_Pervasives.iota; + FStar_Pervasives.zeta; + FStar_Pervasives.primops; + FStar_Pervasives.simplify])) + (fun + uu___6 -> + (fun + uu___6 -> + Obj.magic + (FStar_Tactics_Effect.tac_bind + (Prims.mk_range + "Steel.Effect.Common.fsti" + (Prims.of_int (3045)) + (Prims.of_int (18)) + (Prims.of_int (3045)) + (Prims.of_int (29))) + (Prims.mk_range + "Steel.Effect.Common.fsti" + (Prims.of_int (3046)) + (Prims.of_int (10)) + (Prims.of_int (3046)) + (Prims.of_int (35))) + (Obj.magic + (FStar_Tactics_Derived.cur_goal + ())) + (fun + uu___7 -> + (fun g -> + Obj.magic + (FStar_Tactics_Derived.or_else + (is_true + g) + FStar_Tactics_Derived.trefl)) + uu___7))) + uu___6)) + else + if + FStar_Reflection_Derived.is_fvar + hd + "Steel.Effect.Common.maybe_emp_dep" + then + Obj.magic + (FStar_Tactics_Effect.tac_bind + (Prims.mk_range + "Steel.Effect.Common.fsti" + (Prims.of_int (3048)) + (Prims.of_int (11)) + (Prims.of_int (3048)) + (Prims.of_int (77))) + (Prims.mk_range + "Steel.Effect.Common.fsti" + (Prims.of_int (3049)) + (Prims.of_int (10)) + (Prims.of_int (3050)) + (Prims.of_int (75))) + (Obj.magic + (FStar_Tactics_Builtins.norm + [ + FStar_Pervasives.delta_only + ["Steel.Effect.Common.maybe_emp_dep"]; + FStar_Pervasives.iota; + FStar_Pervasives.zeta; + FStar_Pervasives.primops; + FStar_Pervasives.simplify])) + (fun + uu___7 -> + (fun + uu___7 -> + Obj.magic + (FStar_Tactics_Effect.tac_bind + (Prims.mk_range + "Steel.Effect.Common.fsti" + (Prims.of_int (3049)) + (Prims.of_int (18)) + (Prims.of_int (3049)) + (Prims.of_int (29))) + (Prims.mk_range + "Steel.Effect.Common.fsti" + (Prims.of_int (3050)) + (Prims.of_int (10)) + (Prims.of_int (3050)) + (Prims.of_int (75))) + (Obj.magic + (FStar_Tactics_Derived.cur_goal + ())) + (fun + uu___8 -> + (fun g -> + Obj.magic + (FStar_Tactics_Derived.or_else + (is_true + g) + (fun + uu___8 -> + FStar_Tactics_Effect.tac_bind + (Prims.mk_range + "Steel.Effect.Common.fsti" + (Prims.of_int (3050)) + (Prims.of_int (40)) + (Prims.of_int (3050)) + (Prims.of_int (64))) + (Prims.mk_range + "Steel.Effect.Common.fsti" + (Prims.of_int (3050)) + (Prims.of_int (66)) + (Prims.of_int (3050)) + (Prims.of_int (74))) + (Obj.magic + (FStar_Tactics_Effect.tac_bind + (Prims.mk_range + "Steel.Effect.Common.fsti" + (Prims.of_int (3050)) + (Prims.of_int (47)) + (Prims.of_int (3050)) + (Prims.of_int (64))) + (Prims.mk_range + "Steel.Effect.Common.fsti" + (Prims.of_int (3050)) + (Prims.of_int (40)) + (Prims.of_int (3050)) + (Prims.of_int (64))) + (Obj.magic + (FStar_Tactics_Logic.forall_intro + ())) + (fun + uu___9 -> + FStar_Tactics_Effect.lift_div_tac + (fun + uu___10 + -> ())))) + (fun + uu___9 -> + (fun + uu___9 -> + Obj.magic + (FStar_Tactics_Derived.trefl + ())) + uu___9)))) + uu___8))) + uu___7)) + else + Obj.magic + (FStar_Tactics_Derived.later + ())) + uu___5)) + | uu___4 -> + Obj.magic + (FStar_Tactics_Derived.later + ())) + (fun uu___4 -> + (fun uu___4 -> + Obj.magic + (solve_maybe_emps + (fuel - + Prims.int_one))) + uu___4))) uu___4)))) + uu___1)))) uu___ +let rec (norm_return_pre : + Prims.nat -> (unit, unit) FStar_Tactics_Effect.tac_repr) = + fun uu___ -> + (fun fuel -> + if fuel = Prims.int_zero + then + Obj.magic + (Obj.repr (FStar_Tactics_Effect.lift_div_tac (fun uu___ -> ()))) + else + Obj.magic + (Obj.repr + (FStar_Tactics_Effect.tac_bind + (Prims.mk_range "Steel.Effect.Common.fsti" + (Prims.of_int (3060)) (Prims.of_int (13)) + (Prims.of_int (3060)) (Prims.of_int (21))) + (Prims.mk_range "Steel.Effect.Common.fsti" + (Prims.of_int (3060)) (Prims.of_int (7)) + (Prims.of_int (3062)) (Prims.of_int (81))) + (Obj.magic (FStar_Tactics_Derived.goals ())) + (fun uu___1 -> + (fun uu___1 -> + match uu___1 with + | [] -> + Obj.magic + (Obj.repr + (FStar_Tactics_Effect.lift_div_tac + (fun uu___2 -> ()))) + | uu___2::uu___3 -> + Obj.magic + (Obj.repr + (FStar_Tactics_Effect.tac_bind + (Prims.mk_range "Steel.Effect.Common.fsti" + (Prims.of_int (3062)) + (Prims.of_int (12)) + (Prims.of_int (3062)) + (Prims.of_int (44))) + (Prims.mk_range "Steel.Effect.Common.fsti" + (Prims.of_int (3062)) + (Prims.of_int (46)) + (Prims.of_int (3062)) + (Prims.of_int (81))) + (Obj.magic + (FStar_Tactics_Builtins.norm + [FStar_Pervasives.delta_only + ["Steel.Effect.Common.return_pre"]])) + (fun uu___4 -> + (fun uu___4 -> + Obj.magic + (FStar_Tactics_Effect.tac_bind + (Prims.mk_range + "Steel.Effect.Common.fsti" + (Prims.of_int (3062)) + (Prims.of_int (46)) + (Prims.of_int (3062)) + (Prims.of_int (53))) + (Prims.mk_range + "Steel.Effect.Common.fsti" + (Prims.of_int (3062)) + (Prims.of_int (55)) + (Prims.of_int (3062)) + (Prims.of_int (81))) + (Obj.magic + (FStar_Tactics_Derived.later + ())) + (fun uu___5 -> + (fun uu___5 -> + Obj.magic + (norm_return_pre + (fuel - + Prims.int_one))) + uu___5))) uu___4)))) + uu___1)))) uu___ +let (print_goal : + FStar_Tactics_Types.goal -> + (Prims.string, unit) FStar_Tactics_Effect.tac_repr) + = + fun g -> + FStar_Tactics_Effect.tac_bind + (Prims.mk_range "Steel.Effect.Common.fsti" (Prims.of_int (3065)) + (Prims.of_int (10)) (Prims.of_int (3065)) (Prims.of_int (21))) + (Prims.mk_range "Steel.Effect.Common.fsti" (Prims.of_int (3066)) + (Prims.of_int (2)) (Prims.of_int (3066)) (Prims.of_int (18))) + (FStar_Tactics_Effect.lift_div_tac + (fun uu___ -> FStar_Tactics_Types.goal_type g)) + (fun uu___ -> + (fun t -> Obj.magic (FStar_Tactics_Builtins.term_to_string t)) uu___) +let (print_goals : + FStar_Tactics_Types.goal Prims.list -> + (Prims.string, unit) FStar_Tactics_Effect.tac_repr) + = + fun g -> + FStar_Tactics_Effect.tac_bind + (Prims.mk_range "Steel.Effect.Common.fsti" (Prims.of_int (3069)) + (Prims.of_int (13)) (Prims.of_int (3069)) (Prims.of_int (29))) + (Prims.mk_range "Steel.Effect.Common.fsti" (Prims.of_int (3070)) + (Prims.of_int (2)) (Prims.of_int (3070)) (Prims.of_int (25))) + (Obj.magic (FStar_Tactics_Util.map print_goal g)) + (fun strs -> + FStar_Tactics_Effect.lift_div_tac + (fun uu___ -> FStar_String.concat "\n" strs)) +let (init_resolve_tac' : + (FStar_Reflection_Types.term * + (unit -> (Prims.bool, unit) FStar_Tactics_Effect.tac_repr)) Prims.list -> + (unit, unit) FStar_Tactics_Effect.tac_repr) + = + fun dict -> + FStar_Tactics_Effect.tac_bind + (Prims.mk_range "Steel.Effect.Common.fsti" (Prims.of_int (3080)) + (Prims.of_int (20)) (Prims.of_int (3080)) (Prims.of_int (42))) + (Prims.mk_range "Steel.Effect.Common.fsti" (Prims.of_int (3080)) + (Prims.of_int (2)) (Prims.of_int (3114)) (Prims.of_int (26))) + (Obj.magic + (FStar_Tactics_Effect.tac_bind + (Prims.mk_range "Steel.Effect.Common.fsti" (Prims.of_int (3080)) + (Prims.of_int (33)) (Prims.of_int (3080)) (Prims.of_int (42))) + (Prims.mk_range "Steel.Effect.Common.fsti" (Prims.of_int (3080)) + (Prims.of_int (20)) (Prims.of_int (3080)) (Prims.of_int (42))) + (Obj.magic (FStar_Tactics_Derived.goals ())) + (fun uu___ -> (fun uu___ -> Obj.magic (filter_goals uu___)) uu___))) + (fun uu___ -> + (fun uu___ -> + match uu___ with + | (slgs, loggs) -> + Obj.magic + (FStar_Tactics_Effect.tac_bind + (Prims.mk_range "Steel.Effect.Common.fsti" + (Prims.of_int (3085)) (Prims.of_int (2)) + (Prims.of_int (3085)) (Prims.of_int (16))) + (Prims.mk_range "Steel.Effect.Common.fsti" + (Prims.of_int (3088)) (Prims.of_int (2)) + (Prims.of_int (3114)) (Prims.of_int (26))) + (Obj.magic (FStar_Tactics_Builtins.set_goals slgs)) + (fun uu___1 -> + (fun uu___1 -> + Obj.magic + (FStar_Tactics_Effect.tac_bind + (Prims.mk_range "Steel.Effect.Common.fsti" + (Prims.of_int (3088)) (Prims.of_int (2)) + (Prims.of_int (3088)) (Prims.of_int (47))) + (Prims.mk_range "Steel.Effect.Common.fsti" + (Prims.of_int (3093)) (Prims.of_int (2)) + (Prims.of_int (3114)) (Prims.of_int (26))) + (Obj.magic + (FStar_Tactics_Effect.tac_bind + (Prims.mk_range + "Steel.Effect.Common.fsti" + (Prims.of_int (3088)) + (Prims.of_int (19)) + (Prims.of_int (3088)) + (Prims.of_int (47))) + (Prims.mk_range + "Steel.Effect.Common.fsti" + (Prims.of_int (3088)) + (Prims.of_int (2)) + (Prims.of_int (3088)) + (Prims.of_int (47))) + (Obj.magic + (FStar_Tactics_Effect.tac_bind + (Prims.mk_range + "Steel.Effect.Common.fsti" + (Prims.of_int (3088)) + (Prims.of_int (36)) + (Prims.of_int (3088)) + (Prims.of_int (46))) + (Prims.mk_range + "Steel.Effect.Common.fsti" + (Prims.of_int (3088)) + (Prims.of_int (19)) + (Prims.of_int (3088)) + (Prims.of_int (47))) + (Obj.magic + (FStar_Tactics_Derived.goals + ())) + (fun uu___2 -> + FStar_Tactics_Effect.lift_div_tac + (fun uu___3 -> + FStar_List_Tot_Base.length + uu___2)))) + (fun uu___2 -> + (fun uu___2 -> + Obj.magic + (solve_maybe_emps uu___2)) + uu___2))) + (fun uu___2 -> + (fun uu___2 -> + Obj.magic + (FStar_Tactics_Effect.tac_bind + (Prims.mk_range + "Steel.Effect.Common.fsti" + (Prims.of_int (3093)) + (Prims.of_int (2)) + (Prims.of_int (3093)) + (Prims.of_int (51))) + (Prims.mk_range + "Steel.Effect.Common.fsti" + (Prims.of_int (3099)) + (Prims.of_int (2)) + (Prims.of_int (3114)) + (Prims.of_int (26))) + (Obj.magic + (FStar_Tactics_Effect.tac_bind + (Prims.mk_range + "Steel.Effect.Common.fsti" + (Prims.of_int (3093)) + (Prims.of_int (24)) + (Prims.of_int (3093)) + (Prims.of_int (51))) + (Prims.mk_range + "Steel.Effect.Common.fsti" + (Prims.of_int (3093)) + (Prims.of_int (2)) + (Prims.of_int (3093)) + (Prims.of_int (51))) + (Obj.magic + (FStar_Tactics_Effect.tac_bind + (Prims.mk_range + "Steel.Effect.Common.fsti" + (Prims.of_int (3093)) + (Prims.of_int (41)) + (Prims.of_int (3093)) + (Prims.of_int (50))) + (Prims.mk_range + "Steel.Effect.Common.fsti" + (Prims.of_int (3093)) + (Prims.of_int (24)) + (Prims.of_int (3093)) + (Prims.of_int (51))) + (Obj.magic + (FStar_Tactics_Derived.goals + ())) + (fun uu___3 -> + FStar_Tactics_Effect.lift_div_tac + (fun uu___4 -> + FStar_List_Tot_Base.length + uu___3)))) + (fun uu___3 -> + (fun uu___3 -> + Obj.magic + (solve_indirection_eqs + uu___3)) uu___3))) + (fun uu___3 -> + (fun uu___3 -> + Obj.magic + (FStar_Tactics_Effect.tac_bind + (Prims.mk_range + "Steel.Effect.Common.fsti" + (Prims.of_int (3099)) + (Prims.of_int (2)) + (Prims.of_int (3099)) + (Prims.of_int (46))) + (Prims.mk_range + "Steel.Effect.Common.fsti" + (Prims.of_int (3105)) + (Prims.of_int (2)) + (Prims.of_int (3114)) + (Prims.of_int (26))) + (Obj.magic + (FStar_Tactics_Effect.tac_bind + (Prims.mk_range + "Steel.Effect.Common.fsti" + (Prims.of_int (3099)) + (Prims.of_int (19)) + (Prims.of_int (3099)) + (Prims.of_int (46))) + (Prims.mk_range + "Steel.Effect.Common.fsti" + (Prims.of_int (3099)) + (Prims.of_int (2)) + (Prims.of_int (3099)) + (Prims.of_int (46))) + (Obj.magic + (FStar_Tactics_Effect.tac_bind + (Prims.mk_range + "Steel.Effect.Common.fsti" + (Prims.of_int (3099)) + (Prims.of_int (36)) + (Prims.of_int (3099)) + (Prims.of_int (45))) + (Prims.mk_range + "Steel.Effect.Common.fsti" + (Prims.of_int (3099)) + (Prims.of_int (19)) + (Prims.of_int (3099)) + (Prims.of_int (46))) + (Obj.magic + (FStar_Tactics_Derived.goals + ())) + (fun uu___4 + -> + FStar_Tactics_Effect.lift_div_tac + (fun + uu___5 -> + FStar_List_Tot_Base.length + uu___4)))) + (fun uu___4 -> + (fun uu___4 -> + Obj.magic + ( + solve_return_eqs + uu___4)) + uu___4))) + (fun uu___4 -> + (fun uu___4 -> + Obj.magic + (FStar_Tactics_Effect.tac_bind + (Prims.mk_range + "Steel.Effect.Common.fsti" + (Prims.of_int (3105)) + (Prims.of_int (2)) + (Prims.of_int (3105)) + (Prims.of_int (45))) + (Prims.mk_range + "Steel.Effect.Common.fsti" + (Prims.of_int (3108)) + (Prims.of_int (2)) + (Prims.of_int (3114)) + (Prims.of_int (26))) + (Obj.magic + ( + FStar_Tactics_Effect.tac_bind + (Prims.mk_range + "Steel.Effect.Common.fsti" + (Prims.of_int (3105)) + (Prims.of_int (18)) + (Prims.of_int (3105)) + (Prims.of_int (45))) + (Prims.mk_range + "Steel.Effect.Common.fsti" + (Prims.of_int (3105)) + (Prims.of_int (2)) + (Prims.of_int (3105)) + (Prims.of_int (45))) + (Obj.magic + (FStar_Tactics_Effect.tac_bind + (Prims.mk_range + "Steel.Effect.Common.fsti" + (Prims.of_int (3105)) + (Prims.of_int (35)) + (Prims.of_int (3105)) + (Prims.of_int (44))) + (Prims.mk_range + "Steel.Effect.Common.fsti" + (Prims.of_int (3105)) + (Prims.of_int (18)) + (Prims.of_int (3105)) + (Prims.of_int (45))) + (Obj.magic + (FStar_Tactics_Derived.goals + ())) + (fun + uu___5 -> + FStar_Tactics_Effect.lift_div_tac + (fun + uu___6 -> + FStar_List_Tot_Base.length + uu___5)))) + (fun + uu___5 -> + (fun + uu___5 -> + Obj.magic + (norm_return_pre + uu___5)) + uu___5))) + (fun uu___5 + -> + (fun + uu___5 -> + Obj.magic + (FStar_Tactics_Effect.tac_bind + (Prims.mk_range + "Steel.Effect.Common.fsti" + (Prims.of_int (3108)) + (Prims.of_int (2)) + (Prims.of_int (3108)) + (Prims.of_int (18))) + (Prims.mk_range + "Steel.Effect.Common.fsti" + (Prims.of_int (3112)) + (Prims.of_int (2)) + (Prims.of_int (3114)) + (Prims.of_int (26))) + (Obj.magic + (resolve_tac + dict)) + (fun + uu___6 -> + (fun + uu___6 -> + Obj.magic + (FStar_Tactics_Effect.tac_bind + (Prims.mk_range + "Steel.Effect.Common.fsti" + (Prims.of_int (3112)) + (Prims.of_int (2)) + (Prims.of_int (3112)) + (Prims.of_int (17))) + (Prims.mk_range + "Steel.Effect.Common.fsti" + (Prims.of_int (3114)) + (Prims.of_int (2)) + (Prims.of_int (3114)) + (Prims.of_int (26))) + (Obj.magic + (FStar_Tactics_Builtins.set_goals + loggs)) + (fun + uu___7 -> + (fun + uu___7 -> + Obj.magic + (resolve_tac_logical + dict)) + uu___7))) + uu___6))) + uu___5))) + uu___4))) uu___3))) + uu___2))) uu___1))) uu___) +let (init_resolve_tac : unit -> (unit, unit) FStar_Tactics_Effect.tac_repr) = + fun uu___ -> init_resolve_tac' [] +let _ = + FStar_Tactics_Native.register_tactic "Steel.Effect.Common.init_resolve_tac" + (Prims.of_int (2)) + (fun psc -> + fun ncb -> + fun args -> + FStar_Tactics_InterpFuns.mk_tactic_interpretation_1 + (FStar_Tactics_Native.from_tactic_1 init_resolve_tac) + FStar_Syntax_Embeddings.e_unit FStar_Syntax_Embeddings.e_unit + psc ncb args) + +let (selector_tactic : unit -> (unit, unit) FStar_Tactics_Effect.tac_repr) = + fun uu___ -> + FStar_Tactics_Effect.tac_bind + (Prims.mk_range "Steel.Effect.Common.fsti" (Prims.of_int (3127)) + (Prims.of_int (2)) (Prims.of_int (3127)) (Prims.of_int (21))) + (Prims.mk_range "Steel.Effect.Common.fsti" (Prims.of_int (3128)) + (Prims.of_int (2)) (Prims.of_int (3138)) (Prims.of_int (34))) + (Obj.magic + (FStar_Tactics_Derived.apply + (FStar_Reflection_Builtins.pack_ln + (FStar_Reflection_Data.Tv_FVar + (FStar_Reflection_Builtins.pack_fv + ["Steel"; "Effect"; "Common"; "squash_and"]))))) + (fun uu___1 -> + (fun uu___1 -> + Obj.magic + (FStar_Tactics_Effect.tac_bind + (Prims.mk_range "Steel.Effect.Common.fsti" + (Prims.of_int (3128)) (Prims.of_int (2)) + (Prims.of_int (3128)) (Prims.of_int (41))) + (Prims.mk_range "Steel.Effect.Common.fsti" + (Prims.of_int (3129)) (Prims.of_int (2)) + (Prims.of_int (3138)) (Prims.of_int (34))) + (Obj.magic + (FStar_Tactics_Derived.apply_lemma + (FStar_Reflection_Builtins.pack_ln + (FStar_Reflection_Data.Tv_FVar + (FStar_Reflection_Builtins.pack_fv + ["Steel"; + "Effect"; + "Common"; + "intro_can_be_split_frame"]))))) + (fun uu___2 -> + (fun uu___2 -> + Obj.magic + (FStar_Tactics_Effect.tac_bind + (Prims.mk_range "Steel.Effect.Common.fsti" + (Prims.of_int (3129)) (Prims.of_int (2)) + (Prims.of_int (3129)) (Prims.of_int (9))) + (Prims.mk_range "Steel.Effect.Common.fsti" + (Prims.of_int (3130)) (Prims.of_int (2)) + (Prims.of_int (3138)) (Prims.of_int (34))) + (Obj.magic (FStar_Tactics_Derived.flip ())) + (fun uu___3 -> + (fun uu___3 -> + Obj.magic + (FStar_Tactics_Effect.tac_bind + (Prims.mk_range + "Steel.Effect.Common.fsti" + (Prims.of_int (3130)) + (Prims.of_int (2)) + (Prims.of_int (3137)) + (Prims.of_int (27))) + (Prims.mk_range + "Steel.Effect.Common.fsti" + (Prims.of_int (3138)) + (Prims.of_int (2)) + (Prims.of_int (3138)) + (Prims.of_int (34))) + (Obj.magic + (FStar_Tactics_Builtins.norm + [FStar_Pervasives.delta_only + ["FStar.Algebra.CommMonoid.Equiv.__proj__CM__item__unit"; + "FStar.Algebra.CommMonoid.Equiv.__proj__CM__item__mult"; + "Steel.Effect.Common.rm"; + "FStar.Pervasives.Native.__proj__Mktuple2__item___1"; + "FStar.Pervasives.Native.__proj__Mktuple2__item___2"; + "FStar.Pervasives.Native.fst"; + "FStar.Pervasives.Native.snd"]; + FStar_Pervasives.delta_attr + ["Steel.Effect.Common.__reduce__"]; + FStar_Pervasives.primops; + FStar_Pervasives.iota; + FStar_Pervasives.zeta])) + (fun uu___4 -> + (fun uu___4 -> + Obj.magic + (canon' false + (FStar_Reflection_Builtins.pack_ln + (FStar_Reflection_Data.Tv_FVar + (FStar_Reflection_Builtins.pack_fv + ["Steel"; + "Effect"; + "Common"; + "true_p"]))) + (FStar_Reflection_Builtins.pack_ln + (FStar_Reflection_Data.Tv_FVar + (FStar_Reflection_Builtins.pack_fv + ["Steel"; + "Effect"; + "Common"; + "true_p"]))))) + uu___4))) uu___3))) uu___2))) + uu___1) +let _ = + FStar_Tactics_Native.register_tactic "Steel.Effect.Common.selector_tactic" + (Prims.of_int (2)) + (fun psc -> + fun ncb -> + fun args -> + FStar_Tactics_InterpFuns.mk_tactic_interpretation_1 + (FStar_Tactics_Native.from_tactic_1 selector_tactic) + FStar_Syntax_Embeddings.e_unit FStar_Syntax_Embeddings.e_unit + psc ncb args) +let (ite_soundness_tac : unit -> (unit, unit) FStar_Tactics_Effect.tac_repr) + = + fun uu___ -> + FStar_Tactics_Effect.tac_bind + (Prims.mk_range "Steel.Effect.Common.fsti" (Prims.of_int (3145)) + (Prims.of_int (23)) (Prims.of_int (3145)) (Prims.of_int (46))) + (Prims.mk_range "Steel.Effect.Common.fsti" (Prims.of_int (3145)) + (Prims.of_int (2)) (Prims.of_int (3169)) (Prims.of_int (8))) + (Obj.magic + (FStar_Tactics_Effect.tac_bind + (Prims.mk_range "Steel.Effect.Common.fsti" (Prims.of_int (3145)) + (Prims.of_int (36)) (Prims.of_int (3145)) (Prims.of_int (46))) + (Prims.mk_range "Steel.Effect.Common.fsti" (Prims.of_int (3145)) + (Prims.of_int (23)) (Prims.of_int (3145)) (Prims.of_int (46))) + (Obj.magic (FStar_Tactics_Derived.goals ())) + (fun uu___1 -> + (fun uu___1 -> Obj.magic (filter_goals uu___1)) uu___1))) + (fun uu___1 -> + (fun uu___1 -> + match uu___1 with + | (slgs, loggoals) -> + Obj.magic + (FStar_Tactics_Effect.tac_bind + (Prims.mk_range "Steel.Effect.Common.fsti" + (Prims.of_int (3146)) (Prims.of_int (2)) + (Prims.of_int (3146)) (Prims.of_int (16))) + (Prims.mk_range "Steel.Effect.Common.fsti" + (Prims.of_int (3147)) (Prims.of_int (2)) + (Prims.of_int (3169)) (Prims.of_int (8))) + (Obj.magic (FStar_Tactics_Builtins.set_goals slgs)) + (fun uu___2 -> + (fun uu___2 -> + Obj.magic + (FStar_Tactics_Effect.tac_bind + (Prims.mk_range "Steel.Effect.Common.fsti" + (Prims.of_int (3147)) (Prims.of_int (2)) + (Prims.of_int (3147)) (Prims.of_int (46))) + (Prims.mk_range "Steel.Effect.Common.fsti" + (Prims.of_int (3150)) (Prims.of_int (2)) + (Prims.of_int (3169)) (Prims.of_int (8))) + (Obj.magic + (solve_indirection_eqs + (FStar_List_Tot_Base.length slgs))) + (fun uu___3 -> + (fun uu___3 -> + Obj.magic + (FStar_Tactics_Effect.tac_bind + (Prims.mk_range + "Steel.Effect.Common.fsti" + (Prims.of_int (3150)) + (Prims.of_int (21)) + (Prims.of_int (3150)) + (Prims.of_int (33))) + (Prims.mk_range + "Steel.Effect.Common.fsti" + (Prims.of_int (3151)) + (Prims.of_int (2)) + (Prims.of_int (3169)) + (Prims.of_int (8))) + (Obj.magic + (FStar_Tactics_Derived._cur_goal + ())) + (fun uu___4 -> + (fun subcomp_goal -> + Obj.magic + (FStar_Tactics_Effect.tac_bind + (Prims.mk_range + "Steel.Effect.Common.fsti" + (Prims.of_int (3151)) + (Prims.of_int (8)) + (Prims.of_int (3151)) + (Prims.of_int (16))) + (Prims.mk_range + "Steel.Effect.Common.fsti" + (Prims.of_int (3151)) + (Prims.of_int (2)) + (Prims.of_int (3169)) + (Prims.of_int (8))) + (Obj.magic + (FStar_Tactics_Derived.goals + ())) + (fun uu___4 -> + (fun uu___4 -> + match uu___4 with + | [] -> + Obj.magic + (FStar_Tactics_Derived.fail + "should not happen") + | uu___5::tl -> + Obj.magic + (FStar_Tactics_Effect.tac_bind + (Prims.mk_range + "Steel.Effect.Common.fsti" + (Prims.of_int (3153)) + (Prims.of_int (13)) + (Prims.of_int (3153)) + (Prims.of_int (25))) + (Prims.mk_range + "Steel.Effect.Common.fsti" + (Prims.of_int (3155)) + (Prims.of_int (2)) + (Prims.of_int (3169)) + (Prims.of_int (8))) + (Obj.magic + (FStar_Tactics_Builtins.set_goals + tl)) + (fun + uu___6 -> + (fun + uu___6 -> + Obj.magic + (FStar_Tactics_Effect.tac_bind + (Prims.mk_range + "Steel.Effect.Common.fsti" + (Prims.of_int (3155)) + (Prims.of_int (2)) + (Prims.of_int (3155)) + (Prims.of_int (64))) + (Prims.mk_range + "Steel.Effect.Common.fsti" + (Prims.of_int (3156)) + (Prims.of_int (2)) + (Prims.of_int (3169)) + (Prims.of_int (8))) + (Obj.magic + (FStar_Tactics_Derived.or_else + (fun + uu___7 -> + FStar_Tactics_Derived.apply_lemma + (FStar_Reflection_Builtins.pack_ln + (FStar_Reflection_Data.Tv_FVar + (FStar_Reflection_Builtins.pack_fv + ["Steel"; + "Effect"; + "Common"; + "equiv_forall_refl"])))) + FStar_Tactics_Derived.assumption)) + (fun + uu___7 -> + (fun + uu___7 -> + Obj.magic + (FStar_Tactics_Effect.tac_bind + (Prims.mk_range + "Steel.Effect.Common.fsti" + (Prims.of_int (3156)) + (Prims.of_int (2)) + (Prims.of_int (3159)) + (Prims.of_int (16))) + (Prims.mk_range + "Steel.Effect.Common.fsti" + (Prims.of_int (3162)) + (Prims.of_int (2)) + (Prims.of_int (3169)) + (Prims.of_int (8))) + (Obj.magic + (FStar_Tactics_Derived.or_else + (fun + uu___8 -> + FStar_Tactics_Derived.or_else + (fun + uu___9 -> + FStar_Tactics_Derived.apply_lemma + (FStar_Reflection_Builtins.pack_ln + (FStar_Reflection_Data.Tv_FVar + (FStar_Reflection_Builtins.pack_fv + ["Steel"; + "Effect"; + "Common"; + "can_be_split_dep_refl"])))) + (fun + uu___9 -> + FStar_Tactics_Derived.apply_lemma + (FStar_Reflection_Builtins.pack_ln + (FStar_Reflection_Data.Tv_FVar + (FStar_Reflection_Builtins.pack_fv + ["Steel"; + "Effect"; + "Common"; + "can_be_split_refl"]))))) + FStar_Tactics_Derived.assumption)) + (fun + uu___8 -> + (fun + uu___8 -> + Obj.magic + (FStar_Tactics_Effect.tac_bind + (Prims.mk_range + "Steel.Effect.Common.fsti" + (Prims.of_int (3162)) + (Prims.of_int (2)) + (Prims.of_int (3162)) + (Prims.of_int (8))) + (Prims.mk_range + "Steel.Effect.Common.fsti" + (Prims.of_int (3164)) + (Prims.of_int (2)) + (Prims.of_int (3169)) + (Prims.of_int (8))) + (Obj.magic + (FStar_Tactics_Derived.smt + ())) + (fun + uu___9 -> + (fun + uu___9 -> + Obj.magic + (FStar_Tactics_Effect.tac_bind + (Prims.mk_range + "Steel.Effect.Common.fsti" + (Prims.of_int (3164)) + (Prims.of_int (2)) + (Prims.of_int (3164)) + (Prims.of_int (20))) + (Prims.mk_range + "Steel.Effect.Common.fsti" + (Prims.of_int (3165)) + (Prims.of_int (2)) + (Prims.of_int (3169)) + (Prims.of_int (8))) + (Obj.magic + (FStar_Tactics_Builtins.set_goals + loggoals)) + (fun + uu___10 + -> + (fun + uu___10 + -> + Obj.magic + (FStar_Tactics_Effect.tac_bind + (Prims.mk_range + "Steel.Effect.Common.fsti" + (Prims.of_int (3165)) + (Prims.of_int (2)) + (Prims.of_int (3165)) + (Prims.of_int (24))) + (Prims.mk_range + "Steel.Effect.Common.fsti" + (Prims.of_int (3167)) + (Prims.of_int (2)) + (Prims.of_int (3169)) + (Prims.of_int (8))) + (Obj.magic + (resolve_tac_logical + [])) + (fun + uu___11 + -> + (fun + uu___11 + -> + Obj.magic + (FStar_Tactics_Effect.tac_bind + (Prims.mk_range + "Steel.Effect.Common.fsti" + (Prims.of_int (3167)) + (Prims.of_int (2)) + (Prims.of_int (3167)) + (Prims.of_int (26))) + (Prims.mk_range + "Steel.Effect.Common.fsti" + (Prims.of_int (3168)) + (Prims.of_int (2)) + (Prims.of_int (3169)) + (Prims.of_int (8))) + (Obj.magic + (FStar_Tactics_Builtins.set_goals + [subcomp_goal])) + (fun + uu___12 + -> + (fun + uu___12 + -> + Obj.magic + (FStar_Tactics_Effect.tac_bind + (Prims.mk_range + "Steel.Effect.Common.fsti" + (Prims.of_int (3168)) + (Prims.of_int (2)) + (Prims.of_int (3168)) + (Prims.of_int (9))) + (Prims.mk_range + "Steel.Effect.Common.fsti" + (Prims.of_int (3169)) + (Prims.of_int (2)) + (Prims.of_int (3169)) + (Prims.of_int (8))) + (Obj.magic + (FStar_Tactics_Builtins.norm + [])) + (fun + uu___13 + -> + (fun + uu___13 + -> + Obj.magic + (FStar_Tactics_Derived.smt + ())) + uu___13))) + uu___12))) + uu___11))) + uu___10))) + uu___9))) + uu___8))) + uu___7))) + uu___6))) + uu___4))) uu___4))) + uu___3))) uu___2))) uu___1) +let (vc_norm : unit -> (unit, unit) FStar_Tactics_Effect.tac_repr) = + fun uu___ -> + FStar_Tactics_Builtins.with_compat_pre_core Prims.int_zero + (fun uu___1 -> + FStar_Tactics_Effect.tac_bind + (Prims.mk_range "Steel.Effect.Common.fsti" (Prims.of_int (3175)) + (Prims.of_int (61)) (Prims.of_int (3175)) (Prims.of_int (78))) + (Prims.mk_range "Steel.Effect.Common.fsti" (Prims.of_int (3175)) + (Prims.of_int (80)) (Prims.of_int (3175)) (Prims.of_int (87))) + (Obj.magic + (FStar_Tactics_Builtins.norm + [FStar_Pervasives.delta_attr + ["Steel.Effect.Common.__steel_reduce__"; + "Steel.Effect.Common.__inner_steel_reduce__"]; + FStar_Pervasives.delta_only + ["Steel.Effect.Common.__proj__Mkvprop'__item__t"; + "Steel.Effect.Common.__proj__Mkvprop'__item__hp"; + "Steel.Effect.Common.__proj__Mkvprop'__item__sel"; + "FStar.Algebra.CommMonoid.Equiv.__proj__CM__item__mult"; + "FStar.Algebra.CommMonoid.Equiv.__proj__CM__item__unit"]; + FStar_Pervasives.delta_qualifier ["unfold"]; + FStar_Pervasives.iota; + FStar_Pervasives.zeta; + FStar_Pervasives.primops; + FStar_Pervasives.simplify])) + (fun uu___2 -> + (fun uu___2 -> Obj.magic (FStar_Tactics_Derived.trefl ())) + uu___2)) +type observability = + | Observable + | Unobservable +let (uu___is_Observable : observability -> Prims.bool) = + fun projectee -> match projectee with | Observable -> true | uu___ -> false +let (uu___is_Unobservable : observability -> Prims.bool) = + fun projectee -> + match projectee with | Unobservable -> true | uu___ -> false +let (obs_at_most_one : observability -> observability -> Prims.bool) = + fun o1 -> fun o2 -> (o1 = Unobservable) || (o2 = Unobservable) +let (join_obs : observability -> observability -> observability) = + fun o1 -> + fun o2 -> + if (o1 = Observable) || (o2 = Observable) + then Observable + else Unobservable +type 'p inv = unit \ No newline at end of file diff --git a/ocaml/fstar-lib/generated/Steel_ST_GenElim_Base.ml b/ocaml/fstar-lib/generated/Steel_ST_GenElim_Base.ml new file mode 100644 index 00000000000..ad134920e48 --- /dev/null +++ b/ocaml/fstar-lib/generated/Steel_ST_GenElim_Base.ml @@ -0,0 +1,3249 @@ +open Prims +let (is_fvar : FStar_Reflection_Types.term -> Prims.string -> Prims.bool) = + FStar_Reflection_Derived.is_fvar +let (is_any_fvar : + FStar_Reflection_Types.term -> Prims.string Prims.list -> Prims.bool) = + FStar_Reflection_Derived.is_any_fvar +let (is_squash : + FStar_Reflection_Types.term -> + (Prims.bool, unit) FStar_Tactics_Effect.tac_repr) + = + fun uu___ -> + (fun t -> + Obj.magic + (FStar_Tactics_Effect.lift_div_tac + (fun uu___ -> is_any_fvar t ["Prims.squash"; "Prims.auto_squash"]))) + uu___ +let (is_star_or_vstar : + FStar_Reflection_Types.term -> + (Prims.bool, unit) FStar_Tactics_Effect.tac_repr) + = + fun uu___ -> + (fun t -> + Obj.magic + (FStar_Tactics_Effect.lift_div_tac + (fun uu___ -> + is_any_fvar t + ["Steel.Effect.Common.star"; "Steel.Effect.Common.VStar"]))) + uu___ +let rec (term_has_head : + FStar_Reflection_Types.term -> + FStar_Reflection_Types.term -> + (Prims.bool, unit) FStar_Tactics_Effect.tac_repr) + = + fun t -> + fun head -> + FStar_Tactics_Effect.tac_bind + (Prims.mk_range "Steel.ST.GenElim.Base.fsti" (Prims.of_int (309)) + (Prims.of_int (17)) (Prims.of_int (309)) (Prims.of_int (32))) + (Prims.mk_range "Steel.ST.GenElim.Base.fsti" (Prims.of_int (309)) + (Prims.of_int (2)) (Prims.of_int (320)) (Prims.of_int (12))) + (FStar_Tactics_Effect.lift_div_tac + (fun uu___ -> FStar_Reflection_Derived.collect_app t)) + (fun uu___ -> + (fun uu___ -> + match uu___ with + | (hd, tl) -> + Obj.magic + (FStar_Tactics_Effect.tac_bind + (Prims.mk_range "Steel.ST.GenElim.Base.fsti" + (Prims.of_int (310)) (Prims.of_int (5)) + (Prims.of_int (310)) (Prims.of_int (28))) + (Prims.mk_range "Steel.ST.GenElim.Base.fsti" + (Prims.of_int (310)) (Prims.of_int (2)) + (Prims.of_int (320)) (Prims.of_int (12))) + (Obj.magic + (FStar_Tactics_Builtins.term_eq_old hd head)) + (fun uu___1 -> + (fun uu___1 -> + if uu___1 + then + Obj.magic + (Obj.repr + (FStar_Tactics_Effect.lift_div_tac + (fun uu___2 -> true))) + else + Obj.magic + (Obj.repr + (FStar_Tactics_Effect.tac_bind + (Prims.mk_range + "Steel.ST.GenElim.Base.fsti" + (Prims.of_int (312)) + (Prims.of_int (10)) + (Prims.of_int (312)) + (Prims.of_int (29))) + (Prims.mk_range + "Steel.ST.GenElim.Base.fsti" + (Prims.of_int (312)) + (Prims.of_int (7)) + (Prims.of_int (320)) + (Prims.of_int (12))) + (Obj.magic (is_star_or_vstar hd)) + (fun uu___3 -> + (fun uu___3 -> + if uu___3 + then + Obj.magic + (Obj.repr + (match tl with + | (tg, + FStar_Reflection_Data.Q_Explicit):: + (td, + FStar_Reflection_Data.Q_Explicit)::[] + -> + Obj.repr + (FStar_Tactics_Effect.tac_bind + (Prims.mk_range + "Steel.ST.GenElim.Base.fsti" + (Prims.of_int (316)) + (Prims.of_int (9)) + (Prims.of_int (316)) + (Prims.of_int (30))) + (Prims.mk_range + "Steel.ST.GenElim.Base.fsti" + (Prims.of_int (316)) + (Prims.of_int (6)) + (Prims.of_int (318)) + (Prims.of_int (32))) + (Obj.magic + (term_has_head + tg head)) + (fun uu___4 -> + (fun uu___4 + -> + if uu___4 + then + Obj.magic + (Obj.repr + (FStar_Tactics_Effect.lift_div_tac + (fun + uu___5 -> + true))) + else + Obj.magic + (Obj.repr + (term_has_head + td head))) + uu___4)) + | uu___4 -> + Obj.repr + (FStar_Tactics_Effect.lift_div_tac + (fun uu___5 -> + false)))) + else + Obj.magic + (Obj.repr + (FStar_Tactics_Effect.lift_div_tac + (fun uu___5 -> false)))) + uu___3)))) uu___1))) uu___) +let rec (solve_gen_unit_elim : + FStar_Reflection_Types.term -> + (FStar_Reflection_Types.term, unit) FStar_Tactics_Effect.tac_repr) + = + fun tl' -> + FStar_Tactics_Effect.tac_bind + (Prims.mk_range "Steel.ST.GenElim.Base.fsti" (Prims.of_int (326)) + (Prims.of_int (9)) (Prims.of_int (326)) (Prims.of_int (40))) + (Prims.mk_range "Steel.ST.GenElim.Base.fsti" (Prims.of_int (326)) + (Prims.of_int (6)) (Prims.of_int (340)) (Prims.of_int (47))) + (Obj.magic + (FStar_Tactics_Effect.tac_bind + (Prims.mk_range "Steel.ST.GenElim.Base.fsti" (Prims.of_int (326)) + (Prims.of_int (13)) (Prims.of_int (326)) (Prims.of_int (40))) + (Prims.mk_range "Steel.ST.GenElim.Base.fsti" (Prims.of_int (326)) + (Prims.of_int (9)) (Prims.of_int (326)) (Prims.of_int (40))) + (Obj.magic + (term_has_head tl' + (FStar_Reflection_Builtins.pack_ln + (FStar_Reflection_Data.Tv_FVar + (FStar_Reflection_Builtins.pack_fv + ["Steel"; "ST"; "Util"; "pure"]))))) + (fun uu___ -> + FStar_Tactics_Effect.lift_div_tac + (fun uu___1 -> Prims.op_Negation uu___)))) + (fun uu___ -> + (fun uu___ -> + if uu___ + then + Obj.magic + (Obj.repr + (FStar_Tactics_Effect.lift_div_tac + (fun uu___1 -> + FStar_Reflection_Derived.mk_app + (FStar_Reflection_Builtins.pack_ln + (FStar_Reflection_Data.Tv_FVar + (FStar_Reflection_Builtins.pack_fv + ["Steel"; + "ST"; + "GenElim"; + "Base"; + "GUEId"]))) + [(tl', FStar_Reflection_Data.Q_Explicit)]))) + else + Obj.magic + (Obj.repr + (FStar_Tactics_Effect.tac_bind + (Prims.mk_range "Steel.ST.GenElim.Base.fsti" + (Prims.of_int (329)) (Prims.of_int (23)) + (Prims.of_int (329)) (Prims.of_int (40))) + (Prims.mk_range "Steel.ST.GenElim.Base.fsti" + (Prims.of_int (329)) (Prims.of_int (8)) + (Prims.of_int (340)) (Prims.of_int (47))) + (FStar_Tactics_Effect.lift_div_tac + (fun uu___2 -> + FStar_Reflection_Derived.collect_app tl')) + (fun uu___2 -> + (fun uu___2 -> + match uu___2 with + | (hd, tl) -> + if is_fvar hd "Steel.ST.Util.pure" + then + Obj.magic + (Obj.repr + (FStar_Tactics_Effect.lift_div_tac + (fun uu___3 -> + FStar_Reflection_Derived.mk_app + (FStar_Reflection_Builtins.pack_ln + (FStar_Reflection_Data.Tv_FVar + (FStar_Reflection_Builtins.pack_fv + ["Steel"; + "ST"; + "GenElim"; + "Base"; + "GUEPure"]))) tl))) + else + Obj.magic + (Obj.repr + (FStar_Tactics_Effect.tac_bind + (Prims.mk_range + "Steel.ST.GenElim.Base.fsti" + (Prims.of_int (332)) + (Prims.of_int (16)) + (Prims.of_int (332)) + (Prims.of_int (35))) + (Prims.mk_range + "Steel.ST.GenElim.Base.fsti" + (Prims.of_int (332)) + (Prims.of_int (13)) + (Prims.of_int (340)) + (Prims.of_int (47))) + (Obj.magic (is_star_or_vstar hd)) + (fun uu___4 -> + (fun uu___4 -> + if uu___4 + then + Obj.magic + (Obj.repr + (match tl with + | (t1, + FStar_Reflection_Data.Q_Explicit):: + (t2, + FStar_Reflection_Data.Q_Explicit)::[] + -> + FStar_Tactics_Effect.tac_bind + (Prims.mk_range + "Steel.ST.GenElim.Base.fsti" + (Prims.of_int (335)) + (Prims.of_int (20)) + (Prims.of_int (335)) + (Prims.of_int (42))) + (Prims.mk_range + "Steel.ST.GenElim.Base.fsti" + (Prims.of_int (336)) + (Prims.of_int (10)) + (Prims.of_int (337)) + (Prims.of_int (68))) + (Obj.magic + (solve_gen_unit_elim + t1)) + (fun uu___5 -> + (fun t1' -> + Obj.magic + (FStar_Tactics_Effect.tac_bind + (Prims.mk_range + "Steel.ST.GenElim.Base.fsti" + (Prims.of_int (336)) + (Prims.of_int (20)) + (Prims.of_int (336)) + (Prims.of_int (42))) + (Prims.mk_range + "Steel.ST.GenElim.Base.fsti" + (Prims.of_int (337)) + (Prims.of_int (10)) + (Prims.of_int (337)) + (Prims.of_int (68))) + (Obj.magic + (solve_gen_unit_elim + t2)) + (fun t2' + -> + FStar_Tactics_Effect.lift_div_tac + (fun + uu___5 -> + FStar_Reflection_Derived.mk_app + (FStar_Reflection_Builtins.pack_ln + (FStar_Reflection_Data.Tv_FVar + (FStar_Reflection_Builtins.pack_fv + ["Steel"; + "ST"; + "GenElim"; + "Base"; + "GUEStar"]))) + [ + (t1', + FStar_Reflection_Data.Q_Explicit); + (t2', + FStar_Reflection_Data.Q_Explicit)])))) + uu___5) + | uu___5 -> + FStar_Tactics_Derived.fail + "ill-formed star")) + else + Obj.magic + (Obj.repr + (FStar_Tactics_Effect.lift_div_tac + (fun uu___6 -> + FStar_Reflection_Derived.mk_app + (FStar_Reflection_Builtins.pack_ln + (FStar_Reflection_Data.Tv_FVar + (FStar_Reflection_Builtins.pack_fv + ["Steel"; + "ST"; + "GenElim"; + "Base"; + "GUEId"]))) + [(tl', + FStar_Reflection_Data.Q_Explicit)])))) + uu___4)))) uu___2)))) uu___) +let (abstr_has_exists : + FStar_Reflection_Types.term -> + (Prims.bool, unit) FStar_Tactics_Effect.tac_repr) + = + fun t -> + FStar_Tactics_Effect.tac_bind + (Prims.mk_range "Steel.ST.GenElim.Base.fsti" (Prims.of_int (345)) + (Prims.of_int (8)) (Prims.of_int (345)) (Prims.of_int (19))) + (Prims.mk_range "Steel.ST.GenElim.Base.fsti" (Prims.of_int (345)) + (Prims.of_int (2)) (Prims.of_int (347)) (Prims.of_int (14))) + (Obj.magic (FStar_Tactics_Builtins.inspect t)) + (fun uu___ -> + (fun uu___ -> + match uu___ with + | FStar_Reflection_Data.Tv_Abs (uu___1, body) -> + Obj.magic + (Obj.repr + (term_has_head body + (FStar_Reflection_Builtins.pack_ln + (FStar_Reflection_Data.Tv_FVar + (FStar_Reflection_Builtins.pack_fv + ["Steel"; "ST"; "Util"; "exists_"]))))) + | uu___1 -> + Obj.magic + (Obj.repr + (FStar_Tactics_Effect.lift_div_tac (fun uu___2 -> false)))) + uu___) +let rec (solve_gen_elim : + FStar_Reflection_Types.term -> + (FStar_Reflection_Types.term, unit) FStar_Tactics_Effect.tac_repr) + = + fun tl' -> + FStar_Tactics_Effect.tac_bind + (Prims.mk_range "Steel.ST.GenElim.Base.fsti" (Prims.of_int (353)) + (Prims.of_int (9)) (Prims.of_int (353)) (Prims.of_int (43))) + (Prims.mk_range "Steel.ST.GenElim.Base.fsti" (Prims.of_int (353)) + (Prims.of_int (6)) (Prims.of_int (399)) (Prims.of_int (68))) + (Obj.magic + (FStar_Tactics_Effect.tac_bind + (Prims.mk_range "Steel.ST.GenElim.Base.fsti" (Prims.of_int (353)) + (Prims.of_int (13)) (Prims.of_int (353)) (Prims.of_int (43))) + (Prims.mk_range "Steel.ST.GenElim.Base.fsti" (Prims.of_int (353)) + (Prims.of_int (9)) (Prims.of_int (353)) (Prims.of_int (43))) + (Obj.magic + (term_has_head tl' + (FStar_Reflection_Builtins.pack_ln + (FStar_Reflection_Data.Tv_FVar + (FStar_Reflection_Builtins.pack_fv + ["Steel"; "ST"; "Util"; "exists_"]))))) + (fun uu___ -> + FStar_Tactics_Effect.lift_div_tac + (fun uu___1 -> Prims.op_Negation uu___)))) + (fun uu___ -> + (fun uu___ -> + if uu___ + then + Obj.magic + (FStar_Tactics_Effect.tac_bind + (Prims.mk_range "Steel.ST.GenElim.Base.fsti" + (Prims.of_int (355)) (Prims.of_int (17)) + (Prims.of_int (355)) (Prims.of_int (40))) + (Prims.mk_range "Steel.ST.GenElim.Base.fsti" + (Prims.of_int (356)) (Prims.of_int (8)) + (Prims.of_int (356)) (Prims.of_int (45))) + (Obj.magic (solve_gen_unit_elim tl')) + (fun t' -> + FStar_Tactics_Effect.lift_div_tac + (fun uu___1 -> + FStar_Reflection_Derived.mk_app + (FStar_Reflection_Builtins.pack_ln + (FStar_Reflection_Data.Tv_FVar + (FStar_Reflection_Builtins.pack_fv + ["Steel"; + "ST"; + "GenElim"; + "Base"; + "GEUnit"]))) + [(t', FStar_Reflection_Data.Q_Explicit)]))) + else + Obj.magic + (FStar_Tactics_Effect.tac_bind + (Prims.mk_range "Steel.ST.GenElim.Base.fsti" + (Prims.of_int (358)) (Prims.of_int (26)) + (Prims.of_int (358)) (Prims.of_int (43))) + (Prims.mk_range "Steel.ST.GenElim.Base.fsti" + (Prims.of_int (358)) (Prims.of_int (8)) + (Prims.of_int (399)) (Prims.of_int (68))) + (FStar_Tactics_Effect.lift_div_tac + (fun uu___2 -> FStar_Reflection_Derived.collect_app tl')) + (fun uu___2 -> + (fun uu___2 -> + match uu___2 with + | (hd, lbody) -> + if is_fvar hd "Steel.ST.Util.exists_" + then + Obj.magic + (FStar_Tactics_Effect.tac_bind + (Prims.mk_range + "Steel.ST.GenElim.Base.fsti" + (Prims.of_int (362)) + (Prims.of_int (12)) + (Prims.of_int (365)) + (Prims.of_int (46))) + (Prims.mk_range + "Steel.ST.GenElim.Base.fsti" + (Prims.of_int (361)) + (Prims.of_int (10)) + (Prims.of_int (378)) + (Prims.of_int (13))) + (match lbody with + | (ty, FStar_Reflection_Data.Q_Implicit):: + (body, + FStar_Reflection_Data.Q_Explicit)::[] + -> + Obj.magic + (Obj.repr + (FStar_Tactics_Effect.lift_div_tac + (fun uu___3 -> + ([(ty, + FStar_Reflection_Data.Q_Implicit)], + body)))) + | (body, + FStar_Reflection_Data.Q_Explicit)::[] + -> + Obj.magic + (Obj.repr + (FStar_Tactics_Effect.lift_div_tac + (fun uu___3 -> ([], body)))) + | uu___3 -> + Obj.magic + (Obj.repr + (FStar_Tactics_Derived.fail + "ill-formed exists_"))) + (fun uu___3 -> + (fun uu___3 -> + match uu___3 with + | (ty, body) -> + Obj.magic + (FStar_Tactics_Effect.tac_bind + (Prims.mk_range + "Steel.ST.GenElim.Base.fsti" + (Prims.of_int (367)) + (Prims.of_int (22)) + (Prims.of_int (367)) + (Prims.of_int (36))) + (Prims.mk_range + "Steel.ST.GenElim.Base.fsti" + (Prims.of_int (367)) + (Prims.of_int (16)) + (Prims.of_int (377)) + (Prims.of_int (45))) + (Obj.magic + (FStar_Tactics_Builtins.inspect + body)) + (fun uu___4 -> + (fun uu___4 -> + match uu___4 with + | FStar_Reflection_Data.Tv_Abs + (b, abody) -> + Obj.magic + (Obj.repr + (FStar_Tactics_Effect.tac_bind + (Prims.mk_range + "Steel.ST.GenElim.Base.fsti" + (Prims.of_int (369)) + (Prims.of_int (17)) + (Prims.of_int (369)) + (Prims.of_int (53))) + (Prims.mk_range + "Steel.ST.GenElim.Base.fsti" + (Prims.of_int (369)) + (Prims.of_int (14)) + (Prims.of_int (375)) + (Prims.of_int (94))) + (Obj.magic + (FStar_Tactics_Effect.tac_bind + (Prims.mk_range + "Steel.ST.GenElim.Base.fsti" + (Prims.of_int (369)) + (Prims.of_int (21)) + (Prims.of_int (369)) + (Prims.of_int (53))) + (Prims.mk_range + "Steel.ST.GenElim.Base.fsti" + (Prims.of_int (369)) + (Prims.of_int (17)) + (Prims.of_int (369)) + (Prims.of_int (53))) + (Obj.magic + (term_has_head + abody + (FStar_Reflection_Builtins.pack_ln + (FStar_Reflection_Data.Tv_FVar + (FStar_Reflection_Builtins.pack_fv + ["Steel"; + "ST"; + "Util"; + "exists_"]))))) + (fun + uu___5 -> + FStar_Tactics_Effect.lift_div_tac + (fun + uu___6 -> + Prims.op_Negation + uu___5)))) + (fun + uu___5 -> + (fun + uu___5 -> + if uu___5 + then + Obj.magic + (FStar_Tactics_Effect.tac_bind + (Prims.mk_range + "Steel.ST.GenElim.Base.fsti" + (Prims.of_int (371)) + (Prims.of_int (28)) + (Prims.of_int (371)) + (Prims.of_int (53))) + (Prims.mk_range + "Steel.ST.GenElim.Base.fsti" + (Prims.of_int (372)) + (Prims.of_int (16)) + (Prims.of_int (372)) + (Prims.of_int (98))) + (Obj.magic + (solve_gen_unit_elim + abody)) + (fun + uu___6 -> + (fun + body' -> + Obj.magic + (FStar_Tactics_Effect.tac_bind + (Prims.mk_range + "Steel.ST.GenElim.Base.fsti" + (Prims.of_int (372)) + (Prims.of_int (41)) + (Prims.of_int (372)) + (Prims.of_int (98))) + (Prims.mk_range + "Steel.ST.GenElim.Base.fsti" + (Prims.of_int (372)) + (Prims.of_int (16)) + (Prims.of_int (372)) + (Prims.of_int (98))) + (Obj.magic + (FStar_Tactics_Effect.tac_bind + (Prims.mk_range + "Steel.ST.GenElim.Base.fsti" + (Prims.of_int (372)) + (Prims.of_int (63)) + (Prims.of_int (372)) + (Prims.of_int (97))) + (Prims.mk_range + "Steel.ST.GenElim.Base.fsti" + (Prims.of_int (372)) + (Prims.of_int (41)) + (Prims.of_int (372)) + (Prims.of_int (98))) + (Obj.magic + (FStar_Tactics_Effect.tac_bind + (Prims.mk_range + "Steel.ST.GenElim.Base.fsti" + (Prims.of_int (372)) + (Prims.of_int (64)) + (Prims.of_int (372)) + (Prims.of_int (96))) + (Prims.mk_range + "Steel.ST.GenElim.Base.fsti" + (Prims.of_int (372)) + (Prims.of_int (63)) + (Prims.of_int (372)) + (Prims.of_int (97))) + (Obj.magic + (FStar_Tactics_Effect.tac_bind + (Prims.mk_range + "Steel.ST.GenElim.Base.fsti" + (Prims.of_int (372)) + (Prims.of_int (64)) + (Prims.of_int (372)) + (Prims.of_int (82))) + (Prims.mk_range + "Steel.ST.GenElim.Base.fsti" + (Prims.of_int (372)) + (Prims.of_int (64)) + (Prims.of_int (372)) + (Prims.of_int (96))) + (Obj.magic + (FStar_Tactics_Derived.mk_abs + [b] body')) + (fun + uu___6 -> + FStar_Tactics_Effect.lift_div_tac + (fun + uu___7 -> + (uu___6, + FStar_Reflection_Data.Q_Explicit))))) + (fun + uu___6 -> + FStar_Tactics_Effect.lift_div_tac + (fun + uu___7 -> + [uu___6])))) + (fun + uu___6 -> + FStar_Tactics_Effect.lift_div_tac + (fun + uu___7 -> + FStar_List_Tot_Base.append + ty uu___6)))) + (fun + uu___6 -> + FStar_Tactics_Effect.lift_div_tac + (fun + uu___7 -> + FStar_Reflection_Derived.mk_app + (FStar_Reflection_Builtins.pack_ln + (FStar_Reflection_Data.Tv_FVar + (FStar_Reflection_Builtins.pack_fv + ["Steel"; + "ST"; + "GenElim"; + "Base"; + "GEExistsUnit"]))) + uu___6)))) + uu___6)) + else + Obj.magic + (FStar_Tactics_Effect.tac_bind + (Prims.mk_range + "Steel.ST.GenElim.Base.fsti" + (Prims.of_int (374)) + (Prims.of_int (28)) + (Prims.of_int (374)) + (Prims.of_int (48))) + (Prims.mk_range + "Steel.ST.GenElim.Base.fsti" + (Prims.of_int (375)) + (Prims.of_int (16)) + (Prims.of_int (375)) + (Prims.of_int (94))) + (Obj.magic + (solve_gen_elim + abody)) + (fun + uu___7 -> + (fun + body' -> + Obj.magic + (FStar_Tactics_Effect.tac_bind + (Prims.mk_range + "Steel.ST.GenElim.Base.fsti" + (Prims.of_int (375)) + (Prims.of_int (37)) + (Prims.of_int (375)) + (Prims.of_int (94))) + (Prims.mk_range + "Steel.ST.GenElim.Base.fsti" + (Prims.of_int (375)) + (Prims.of_int (16)) + (Prims.of_int (375)) + (Prims.of_int (94))) + (Obj.magic + (FStar_Tactics_Effect.tac_bind + (Prims.mk_range + "Steel.ST.GenElim.Base.fsti" + (Prims.of_int (375)) + (Prims.of_int (59)) + (Prims.of_int (375)) + (Prims.of_int (93))) + (Prims.mk_range + "Steel.ST.GenElim.Base.fsti" + (Prims.of_int (375)) + (Prims.of_int (37)) + (Prims.of_int (375)) + (Prims.of_int (94))) + (Obj.magic + (FStar_Tactics_Effect.tac_bind + (Prims.mk_range + "Steel.ST.GenElim.Base.fsti" + (Prims.of_int (375)) + (Prims.of_int (60)) + (Prims.of_int (375)) + (Prims.of_int (92))) + (Prims.mk_range + "Steel.ST.GenElim.Base.fsti" + (Prims.of_int (375)) + (Prims.of_int (59)) + (Prims.of_int (375)) + (Prims.of_int (93))) + (Obj.magic + (FStar_Tactics_Effect.tac_bind + (Prims.mk_range + "Steel.ST.GenElim.Base.fsti" + (Prims.of_int (375)) + (Prims.of_int (60)) + (Prims.of_int (375)) + (Prims.of_int (78))) + (Prims.mk_range + "Steel.ST.GenElim.Base.fsti" + (Prims.of_int (375)) + (Prims.of_int (60)) + (Prims.of_int (375)) + (Prims.of_int (92))) + (Obj.magic + (FStar_Tactics_Derived.mk_abs + [b] body')) + (fun + uu___7 -> + FStar_Tactics_Effect.lift_div_tac + (fun + uu___8 -> + (uu___7, + FStar_Reflection_Data.Q_Explicit))))) + (fun + uu___7 -> + FStar_Tactics_Effect.lift_div_tac + (fun + uu___8 -> + [uu___7])))) + (fun + uu___7 -> + FStar_Tactics_Effect.lift_div_tac + (fun + uu___8 -> + FStar_List_Tot_Base.append + ty uu___7)))) + (fun + uu___7 -> + FStar_Tactics_Effect.lift_div_tac + (fun + uu___8 -> + FStar_Reflection_Derived.mk_app + (FStar_Reflection_Builtins.pack_ln + (FStar_Reflection_Data.Tv_FVar + (FStar_Reflection_Builtins.pack_fv + ["Steel"; + "ST"; + "GenElim"; + "Base"; + "GEExists"]))) + uu___7)))) + uu___7))) + uu___5))) + | uu___5 -> + Obj.magic + (Obj.repr + (FStar_Tactics_Effect.lift_div_tac + (fun + uu___6 -> + FStar_Reflection_Derived.mk_app + (FStar_Reflection_Builtins.pack_ln + (FStar_Reflection_Data.Tv_FVar + (FStar_Reflection_Builtins.pack_fv + ["Steel"; + "ST"; + "GenElim"; + "Base"; + "GEExistsNoAbs"]))) + lbody)))) + uu___4))) uu___3)) + else + Obj.magic + (FStar_Tactics_Effect.tac_bind + (Prims.mk_range + "Steel.ST.GenElim.Base.fsti" + (Prims.of_int (379)) + (Prims.of_int (16)) + (Prims.of_int (379)) + (Prims.of_int (35))) + (Prims.mk_range + "Steel.ST.GenElim.Base.fsti" + (Prims.of_int (379)) + (Prims.of_int (13)) + (Prims.of_int (399)) + (Prims.of_int (68))) + (Obj.magic (is_star_or_vstar hd)) + (fun uu___4 -> + (fun uu___4 -> + if uu___4 + then + Obj.magic + (Obj.repr + (match lbody with + | (tl, + FStar_Reflection_Data.Q_Explicit):: + (tr, + FStar_Reflection_Data.Q_Explicit)::[] + -> + FStar_Tactics_Effect.tac_bind + (Prims.mk_range + "Steel.ST.GenElim.Base.fsti" + (Prims.of_int (383)) + (Prims.of_int (15)) + (Prims.of_int (383)) + (Prims.of_int (42))) + (Prims.mk_range + "Steel.ST.GenElim.Base.fsti" + (Prims.of_int (383)) + (Prims.of_int (12)) + (Prims.of_int (396)) + (Prims.of_int (72))) + (Obj.magic + (term_has_head tl + (FStar_Reflection_Builtins.pack_ln + (FStar_Reflection_Data.Tv_FVar + ( + FStar_Reflection_Builtins.pack_fv + ["Steel"; + "ST"; + "Util"; + "exists_"]))))) + (fun uu___5 -> + (fun uu___5 -> + if uu___5 + then + Obj.magic + (FStar_Tactics_Effect.tac_bind + (Prims.mk_range + "Steel.ST.GenElim.Base.fsti" + (Prims.of_int (385)) + (Prims.of_int (24)) + (Prims.of_int (385)) + (Prims.of_int (41))) + (Prims.mk_range + "Steel.ST.GenElim.Base.fsti" + (Prims.of_int (386)) + (Prims.of_int (14)) + (Prims.of_int (392)) + (Prims.of_int (74))) + (Obj.magic + (solve_gen_elim + tl)) + (fun + uu___6 -> + (fun tl'1 + -> + Obj.magic + (FStar_Tactics_Effect.tac_bind + (Prims.mk_range + "Steel.ST.GenElim.Base.fsti" + (Prims.of_int (386)) + (Prims.of_int (17)) + (Prims.of_int (386)) + (Prims.of_int (44))) + (Prims.mk_range + "Steel.ST.GenElim.Base.fsti" + (Prims.of_int (386)) + (Prims.of_int (14)) + (Prims.of_int (392)) + (Prims.of_int (74))) + (Obj.magic + (term_has_head + tr + (FStar_Reflection_Builtins.pack_ln + (FStar_Reflection_Data.Tv_FVar + (FStar_Reflection_Builtins.pack_fv + ["Steel"; + "ST"; + "Util"; + "exists_"]))))) + (fun + uu___6 -> + (fun + uu___6 -> + if uu___6 + then + Obj.magic + (FStar_Tactics_Effect.tac_bind + (Prims.mk_range + "Steel.ST.GenElim.Base.fsti" + (Prims.of_int (388)) + (Prims.of_int (26)) + (Prims.of_int (388)) + (Prims.of_int (43))) + (Prims.mk_range + "Steel.ST.GenElim.Base.fsti" + (Prims.of_int (389)) + (Prims.of_int (16)) + (Prims.of_int (389)) + (Prims.of_int (73))) + (Obj.magic + (solve_gen_elim + tr)) + (fun tr' + -> + FStar_Tactics_Effect.lift_div_tac + (fun + uu___7 -> + FStar_Reflection_Derived.mk_app + (FStar_Reflection_Builtins.pack_ln + (FStar_Reflection_Data.Tv_FVar + (FStar_Reflection_Builtins.pack_fv + ["Steel"; + "ST"; + "GenElim"; + "Base"; + "GEStar"]))) + [ + (tl'1, + FStar_Reflection_Data.Q_Explicit); + (tr', + FStar_Reflection_Data.Q_Explicit)]))) + else + Obj.magic + (FStar_Tactics_Effect.tac_bind + (Prims.mk_range + "Steel.ST.GenElim.Base.fsti" + (Prims.of_int (391)) + (Prims.of_int (26)) + (Prims.of_int (391)) + (Prims.of_int (48))) + (Prims.mk_range + "Steel.ST.GenElim.Base.fsti" + (Prims.of_int (392)) + (Prims.of_int (16)) + (Prims.of_int (392)) + (Prims.of_int (74))) + (Obj.magic + (solve_gen_unit_elim + tr)) + (fun tr' + -> + FStar_Tactics_Effect.lift_div_tac + (fun + uu___8 -> + FStar_Reflection_Derived.mk_app + (FStar_Reflection_Builtins.pack_ln + (FStar_Reflection_Data.Tv_FVar + (FStar_Reflection_Builtins.pack_fv + ["Steel"; + "ST"; + "GenElim"; + "Base"; + "GEStarL"]))) + [ + (tl'1, + FStar_Reflection_Data.Q_Explicit); + (tr', + FStar_Reflection_Data.Q_Explicit)])))) + uu___6))) + uu___6)) + else + Obj.magic + (FStar_Tactics_Effect.tac_bind + (Prims.mk_range + "Steel.ST.GenElim.Base.fsti" + (Prims.of_int (394)) + (Prims.of_int (24)) + (Prims.of_int (394)) + (Prims.of_int (46))) + (Prims.mk_range + "Steel.ST.GenElim.Base.fsti" + (Prims.of_int (395)) + (Prims.of_int (14)) + (Prims.of_int (396)) + (Prims.of_int (72))) + (Obj.magic + (solve_gen_unit_elim + tl)) + (fun + uu___7 -> + (fun tl'1 + -> + Obj.magic + (FStar_Tactics_Effect.tac_bind + (Prims.mk_range + "Steel.ST.GenElim.Base.fsti" + (Prims.of_int (395)) + (Prims.of_int (24)) + (Prims.of_int (395)) + (Prims.of_int (41))) + (Prims.mk_range + "Steel.ST.GenElim.Base.fsti" + (Prims.of_int (396)) + (Prims.of_int (14)) + (Prims.of_int (396)) + (Prims.of_int (72))) + (Obj.magic + (solve_gen_elim + tr)) + (fun tr' + -> + FStar_Tactics_Effect.lift_div_tac + (fun + uu___7 -> + FStar_Reflection_Derived.mk_app + (FStar_Reflection_Builtins.pack_ln + (FStar_Reflection_Data.Tv_FVar + (FStar_Reflection_Builtins.pack_fv + ["Steel"; + "ST"; + "GenElim"; + "Base"; + "GEStarR"]))) + [ + (tl'1, + FStar_Reflection_Data.Q_Explicit); + (tr', + FStar_Reflection_Data.Q_Explicit)])))) + uu___7))) + uu___5) + | uu___5 -> + FStar_Tactics_Derived.fail + "ill-formed star")) + else + Obj.magic + (Obj.repr + (FStar_Tactics_Effect.lift_div_tac + (fun uu___6 -> + FStar_Reflection_Derived.mk_app + (FStar_Reflection_Builtins.pack_ln + (FStar_Reflection_Data.Tv_FVar + (FStar_Reflection_Builtins.pack_fv + ["Steel"; + "ST"; + "GenElim"; + "Base"; + "GEUnit"]))) + [((FStar_Reflection_Derived.mk_app + (FStar_Reflection_Builtins.pack_ln + (FStar_Reflection_Data.Tv_FVar + ( + FStar_Reflection_Builtins.pack_fv + ["Steel"; + "ST"; + "GenElim"; + "Base"; + "GUEId"]))) + lbody), + FStar_Reflection_Data.Q_Explicit)])))) + uu___4))) uu___2))) uu___) +let rec (solve_gen_elim_nondep' : + Prims.nat -> + (FStar_Reflection_Types.term * FStar_Reflection_Types.binder) Prims.list + -> + FStar_Reflection_Types.term -> + ((FStar_Reflection_Types.term * FStar_Reflection_Types.term * + FStar_Reflection_Types.term * FStar_Reflection_Types.term * + FStar_Reflection_Types.term) FStar_Pervasives_Native.option, + unit) FStar_Tactics_Effect.tac_repr) + = + fun uu___2 -> + fun uu___1 -> + fun uu___ -> + (fun fuel -> + fun rev_types_and_binders -> + fun t -> + if fuel = Prims.int_zero + then + Obj.magic + (Obj.repr + (FStar_Tactics_Effect.lift_div_tac + (fun uu___ -> FStar_Pervasives_Native.None))) + else + Obj.magic + (Obj.repr + (FStar_Tactics_Effect.tac_bind + (Prims.mk_range "Steel.ST.GenElim.Base.fsti" + (Prims.of_int (488)) (Prims.of_int (19)) + (Prims.of_int (488)) (Prims.of_int (34))) + (Prims.mk_range "Steel.ST.GenElim.Base.fsti" + (Prims.of_int (488)) (Prims.of_int (4)) + (Prims.of_int (532)) (Prims.of_int (13))) + (FStar_Tactics_Effect.lift_div_tac + (fun uu___1 -> + FStar_Reflection_Derived.collect_app t)) + (fun uu___1 -> + (fun uu___1 -> + match uu___1 with + | (hd, tl) -> + if is_fvar hd "Steel.ST.GenElim.Base.TRet" + then + (match tl with + | (v, FStar_Reflection_Data.Q_Explicit):: + (p, + FStar_Reflection_Data.Q_Explicit)::[] + -> + Obj.magic + (Obj.repr + (FStar_Tactics_Effect.tac_bind + (Prims.mk_range + "Steel.ST.GenElim.Base.fsti" + (Prims.of_int (493)) + (Prims.of_int (8)) + (Prims.of_int (495)) + (Prims.of_int (85))) + (Prims.mk_range + "Steel.ST.GenElim.Base.fsti" + (Prims.of_int (497)) + (Prims.of_int (6)) + (Prims.of_int (522)) + (Prims.of_int (9))) + (FStar_Tactics_Effect.lift_div_tac + (fun uu___2 -> + fun accu -> + fun tb -> + fun uu___3 -> + FStar_Tactics_Effect.tac_bind + (Prims.mk_range + "Steel.ST.GenElim.Base.fsti" + (Prims.of_int (493)) + (Prims.of_int (22)) + (Prims.of_int (493)) + (Prims.of_int (24))) + (Prims.mk_range + "Steel.ST.GenElim.Base.fsti" + (Prims.of_int (493)) + (Prims.of_int (8)) + (Prims.of_int (495)) + (Prims.of_int (85))) + (FStar_Tactics_Effect.lift_div_tac + (fun + uu___4 -> + tb)) + (fun uu___4 + -> + (fun + uu___4 -> + match uu___4 + with + | + (ty, + uu___5) + -> + Obj.magic + (FStar_Tactics_Effect.tac_bind + (Prims.mk_range + "Steel.ST.GenElim.Base.fsti" + (Prims.of_int (494)) + (Prims.of_int (17)) + (Prims.of_int (494)) + (Prims.of_int (24))) + (Prims.mk_range + "Steel.ST.GenElim.Base.fsti" + (Prims.of_int (495)) + (Prims.of_int (8)) + (Prims.of_int (495)) + (Prims.of_int (85))) + (Obj.magic + (accu ())) + (fun tl1 + -> + FStar_Tactics_Effect.lift_div_tac + (fun + uu___6 -> + FStar_Reflection_Derived.mk_app + (FStar_Reflection_Builtins.pack_ln + (FStar_Reflection_Data.Tv_FVar + (FStar_Reflection_Builtins.pack_fv + ["Prims"; + "Cons"]))) + [ + ((FStar_Reflection_Builtins.pack_ln + (FStar_Reflection_Data.Tv_Type + (FStar_Reflection_Builtins.pack_universe + FStar_Reflection_Data.Uv_Zero))), + FStar_Reflection_Data.Q_Implicit); + (ty, + FStar_Reflection_Data.Q_Explicit); + (tl1, + FStar_Reflection_Data.Q_Explicit)])))) + uu___4))) + (fun uu___2 -> + (fun cons_type -> + Obj.magic + (FStar_Tactics_Effect.tac_bind + (Prims.mk_range + "Steel.ST.GenElim.Base.fsti" + (Prims.of_int (497)) + (Prims.of_int (39)) + (Prims.of_int (497)) + (Prims.of_int (79))) + (Prims.mk_range + "Steel.ST.GenElim.Base.fsti" + (Prims.of_int (498)) + (Prims.of_int (6)) + (Prims.of_int (522)) + (Prims.of_int (9))) + (FStar_Tactics_Effect.lift_div_tac + (fun uu___3 + -> + fun uu___2 + -> + (fun + uu___2 -> + fun + uu___3 -> + Obj.magic + (FStar_Tactics_Effect.lift_div_tac + (fun + uu___4 -> + FStar_Reflection_Derived.mk_app + (FStar_Reflection_Builtins.pack_ln + (FStar_Reflection_Data.Tv_FVar + (FStar_Reflection_Builtins.pack_fv + ["Prims"; + "Nil"]))) + [ + ((FStar_Reflection_Builtins.pack_ln + (FStar_Reflection_Data.Tv_Type + (FStar_Reflection_Builtins.pack_universe + FStar_Reflection_Data.Uv_Zero))), + FStar_Reflection_Data.Q_Implicit)]))) + uu___3 + uu___2)) + (fun uu___2 -> + (fun nil_type + -> + Obj.magic + (FStar_Tactics_Effect.tac_bind + (Prims.mk_range + "Steel.ST.GenElim.Base.fsti" + (Prims.of_int (498)) + (Prims.of_int (22)) + (Prims.of_int (498)) + (Prims.of_int (84))) + (Prims.mk_range + "Steel.ST.GenElim.Base.fsti" + (Prims.of_int (499)) + (Prims.of_int (6)) + (Prims.of_int (522)) + (Prims.of_int (9))) + (Obj.magic + (FStar_List_Tot_Base.fold_left + cons_type + nil_type + rev_types_and_binders + ())) + (fun + uu___2 -> + (fun + type_list + -> + Obj.magic + (FStar_Tactics_Effect.tac_bind + (Prims.mk_range + "Steel.ST.GenElim.Base.fsti" + (Prims.of_int (501)) + (Prims.of_int (8)) + (Prims.of_int (505)) + (Prims.of_int (23))) + (Prims.mk_range + "Steel.ST.GenElim.Base.fsti" + (Prims.of_int (507)) + (Prims.of_int (6)) + (Prims.of_int (522)) + (Prims.of_int (9))) + (Obj.magic + (FStar_Tactics_Derived.try_with + (fun + uu___2 -> + match () + with + | + () -> + FStar_Tactics_Effect.tac_bind + (Prims.mk_range + "Steel.ST.GenElim.Base.fsti" + (Prims.of_int (502)) + (Prims.of_int (20)) + (Prims.of_int (502)) + (Prims.of_int (30))) + (Prims.mk_range + "Steel.ST.GenElim.Base.fsti" + (Prims.of_int (503)) + (Prims.of_int (10)) + (Prims.of_int (504)) + (Prims.of_int (42))) + (Obj.magic + (FStar_Tactics_Derived.cur_env + ())) + (fun + uu___3 -> + (fun env + -> + Obj.magic + (FStar_Tactics_Effect.tac_bind + (Prims.mk_range + "Steel.ST.GenElim.Base.fsti" + (Prims.of_int (503)) + (Prims.of_int (19)) + (Prims.of_int (503)) + (Prims.of_int (35))) + (Prims.mk_range + "Steel.ST.GenElim.Base.fsti" + (Prims.of_int (504)) + (Prims.of_int (10)) + (Prims.of_int (504)) + (Prims.of_int (42))) + (Obj.magic + (FStar_Tactics_Builtins.tc + env + type_list)) + (fun + uu___3 -> + (fun ty + -> + Obj.magic + (FStar_Tactics_Builtins.term_eq_old + ty + (FStar_Reflection_Builtins.pack_ln + (FStar_Reflection_Data.Tv_App + ((FStar_Reflection_Builtins.pack_ln + (FStar_Reflection_Data.Tv_FVar + (FStar_Reflection_Builtins.pack_fv + ["Prims"; + "list"]))), + ((FStar_Reflection_Builtins.pack_ln + (FStar_Reflection_Data.Tv_Type + (FStar_Reflection_Builtins.pack_universe + FStar_Reflection_Data.Uv_Zero))), + FStar_Reflection_Data.Q_Explicit)))))) + uu___3))) + uu___3)) + (fun + uu___2 -> + (fun + uu___2 -> + Obj.magic + (FStar_Tactics_Effect.lift_div_tac + (fun + uu___3 -> + false))) + uu___2))) + (fun + uu___2 -> + (fun + type_list_typechecks + -> + if + Prims.op_Negation + type_list_typechecks + then + Obj.magic + (Obj.repr + (FStar_Tactics_Effect.lift_div_tac + (fun + uu___2 -> + FStar_Pervasives_Native.None))) + else + Obj.magic + (Obj.repr + (FStar_Tactics_Effect.tac_bind + (Prims.mk_range + "Steel.ST.GenElim.Base.fsti" + (Prims.of_int (510)) + (Prims.of_int (22)) + (Prims.of_int (510)) + (Prims.of_int (75))) + (Prims.mk_range + "Steel.ST.GenElim.Base.fsti" + (Prims.of_int (511)) + (Prims.of_int (8)) + (Prims.of_int (522)) + (Prims.of_int (9))) + (FStar_Tactics_Effect.lift_div_tac + (fun + uu___3 -> + FStar_List_Tot_Base.map + FStar_Pervasives_Native.snd + (FStar_List_Tot_Base.rev + rev_types_and_binders))) + (fun + uu___3 -> + (fun + binders + -> + Obj.magic + (FStar_Tactics_Effect.tac_bind + (Prims.mk_range + "Steel.ST.GenElim.Base.fsti" + (Prims.of_int (511)) + (Prims.of_int (24)) + (Prims.of_int (511)) + (Prims.of_int (82))) + (Prims.mk_range + "Steel.ST.GenElim.Base.fsti" + (Prims.of_int (512)) + (Prims.of_int (8)) + (Prims.of_int (522)) + (Prims.of_int (9))) + (FStar_Tactics_Effect.lift_div_tac + (fun + uu___3 -> + FStar_Tactics_Derived.norm_term + [ + FStar_Pervasives.delta_attr + ["Steel.ST.GenElim.Base.gen_elim_reduce"]; + FStar_Pervasives.zeta; + FStar_Pervasives.iota])) + (fun + uu___3 -> + (fun + norm_term + -> + Obj.magic + (FStar_Tactics_Effect.tac_bind + (Prims.mk_range + "Steel.ST.GenElim.Base.fsti" + (Prims.of_int (512)) + (Prims.of_int (17)) + (Prims.of_int (512)) + (Prims.of_int (35))) + (Prims.mk_range + "Steel.ST.GenElim.Base.fsti" + (Prims.of_int (513)) + (Prims.of_int (8)) + (Prims.of_int (522)) + (Prims.of_int (9))) + (Obj.magic + (FStar_Tactics_Derived.mk_abs + binders v)) + (fun + uu___3 -> + (fun v' + -> + Obj.magic + (FStar_Tactics_Effect.tac_bind + (Prims.mk_range + "Steel.ST.GenElim.Base.fsti" + (Prims.of_int (513)) + (Prims.of_int (18)) + (Prims.of_int (513)) + (Prims.of_int (113))) + (Prims.mk_range + "Steel.ST.GenElim.Base.fsti" + (Prims.of_int (514)) + (Prims.of_int (8)) + (Prims.of_int (522)) + (Prims.of_int (9))) + (Obj.magic + (norm_term + (FStar_Reflection_Derived.mk_app + (FStar_Reflection_Builtins.pack_ln + (FStar_Reflection_Data.Tv_FVar + (FStar_Reflection_Builtins.pack_fv + ["Steel"; + "ST"; + "GenElim"; + "Base"; + "curried_function_type"]))) + [ + (type_list, + FStar_Reflection_Data.Q_Explicit); + ((FStar_Reflection_Builtins.pack_ln + (FStar_Reflection_Data.Tv_FVar + (FStar_Reflection_Builtins.pack_fv + ["Steel"; + "Effect"; + "Common"; + "vprop"]))), + FStar_Reflection_Data.Q_Explicit)]))) + (fun + uu___3 -> + (fun tv' + -> + Obj.magic + (FStar_Tactics_Effect.tac_bind + (Prims.mk_range + "Steel.ST.GenElim.Base.fsti" + (Prims.of_int (514)) + (Prims.of_int (17)) + (Prims.of_int (514)) + (Prims.of_int (35))) + (Prims.mk_range + "Steel.ST.GenElim.Base.fsti" + (Prims.of_int (515)) + (Prims.of_int (8)) + (Prims.of_int (522)) + (Prims.of_int (9))) + (Obj.magic + (FStar_Tactics_Derived.mk_abs + binders p)) + (fun + uu___3 -> + (fun p' + -> + Obj.magic + (FStar_Tactics_Effect.tac_bind + (Prims.mk_range + "Steel.ST.GenElim.Base.fsti" + (Prims.of_int (515)) + (Prims.of_int (18)) + (Prims.of_int (515)) + (Prims.of_int (112))) + (Prims.mk_range + "Steel.ST.GenElim.Base.fsti" + (Prims.of_int (516)) + (Prims.of_int (8)) + (Prims.of_int (522)) + (Prims.of_int (9))) + (Obj.magic + (norm_term + (FStar_Reflection_Derived.mk_app + (FStar_Reflection_Builtins.pack_ln + (FStar_Reflection_Data.Tv_FVar + (FStar_Reflection_Builtins.pack_fv + ["Steel"; + "ST"; + "GenElim"; + "Base"; + "curried_function_type"]))) + [ + (type_list, + FStar_Reflection_Data.Q_Explicit); + ((FStar_Reflection_Builtins.pack_ln + (FStar_Reflection_Data.Tv_FVar + (FStar_Reflection_Builtins.pack_fv + ["Prims"; + "prop"]))), + FStar_Reflection_Data.Q_Explicit)]))) + (fun tp' + -> + FStar_Tactics_Effect.lift_div_tac + (fun + uu___3 -> + FStar_Pervasives_Native.Some + (type_list, + tv', v', + tp', p'))))) + uu___3))) + uu___3))) + uu___3))) + uu___3))) + uu___3)))) + uu___2))) + uu___2))) + uu___2))) + uu___2))) + | uu___2 -> + Obj.magic + (Obj.repr + (FStar_Tactics_Effect.lift_div_tac + (fun uu___3 -> + FStar_Pervasives_Native.None)))) + else + if + is_fvar hd + "Steel.ST.GenElim.Base.TExists" + then + Obj.magic + (Obj.repr + (match tl with + | (ty, uu___3)::(f, + FStar_Reflection_Data.Q_Explicit)::[] + -> + Obj.repr + (FStar_Tactics_Effect.tac_bind + (Prims.mk_range + "Steel.ST.GenElim.Base.fsti" + (Prims.of_int (527)) + (Prims.of_int (18)) + (Prims.of_int (527)) + (Prims.of_int (29))) + (Prims.mk_range + "Steel.ST.GenElim.Base.fsti" + (Prims.of_int (527)) + (Prims.of_int (12)) + (Prims.of_int (529)) + (Prims.of_int (17))) + (Obj.magic + (FStar_Tactics_Builtins.inspect + f)) + (fun uu___4 -> + (fun uu___4 -> + match uu___4 with + | FStar_Reflection_Data.Tv_Abs + (bv, body) -> + Obj.magic + (Obj.repr + (solve_gen_elim_nondep' + (fuel - + Prims.int_one) + ((ty, bv) + :: + rev_types_and_binders) + body)) + | uu___5 -> + Obj.magic + (Obj.repr + (FStar_Tactics_Effect.lift_div_tac + (fun + uu___6 -> + FStar_Pervasives_Native.None)))) + uu___4)) + | uu___3 -> + Obj.repr + (FStar_Tactics_Effect.lift_div_tac + (fun uu___4 -> + FStar_Pervasives_Native.None)))) + else + Obj.magic + (Obj.repr + (FStar_Tactics_Effect.lift_div_tac + (fun uu___4 -> + FStar_Pervasives_Native.None)))) + uu___1)))) uu___2 uu___1 uu___ +let (solve_gen_elim_nondep0 : + Prims.bool -> + FStar_Reflection_Types.term -> + ((FStar_Reflection_Types.term * FStar_Reflection_Types.term * + FStar_Reflection_Types.term * FStar_Reflection_Types.term * + FStar_Reflection_Types.term) FStar_Pervasives_Native.option, + unit) FStar_Tactics_Effect.tac_repr) + = + fun uu___1 -> + fun uu___ -> + (fun enable_nondep_opt -> + fun t -> + if enable_nondep_opt + then + Obj.magic + (Obj.repr + (FStar_Tactics_Derived.try_with + (fun uu___ -> + match () with + | () -> + FStar_Tactics_Effect.tac_bind + (Prims.mk_range "Steel.ST.GenElim.Base.fsti" + (Prims.of_int (539)) (Prims.of_int (17)) + (Prims.of_int (539)) (Prims.of_int (64))) + (Prims.mk_range "Steel.ST.GenElim.Base.fsti" + (Prims.of_int (540)) (Prims.of_int (6)) + (Prims.of_int (541)) (Prims.of_int (37))) + (FStar_Tactics_Effect.lift_div_tac + (fun uu___1 -> + FStar_Reflection_Derived.mk_app + (FStar_Reflection_Builtins.pack_ln + (FStar_Reflection_Data.Tv_FVar + (FStar_Reflection_Builtins.pack_fv + ["Steel"; + "ST"; + "GenElim"; + "Base"; + "compute_gen_elim_tele"]))) + [(t, FStar_Reflection_Data.Q_Explicit)])) + (fun uu___1 -> + (fun tele -> + Obj.magic + (FStar_Tactics_Effect.tac_bind + (Prims.mk_range + "Steel.ST.GenElim.Base.fsti" + (Prims.of_int (540)) + (Prims.of_int (15)) + (Prims.of_int (540)) + (Prims.of_int (76))) + (Prims.mk_range + "Steel.ST.GenElim.Base.fsti" + (Prims.of_int (541)) + (Prims.of_int (6)) + (Prims.of_int (541)) + (Prims.of_int (37))) + (Obj.magic + (FStar_Tactics_Derived.norm_term + [FStar_Pervasives.delta_attr + ["Steel.ST.GenElim.Base.gen_elim_reduce"]; + FStar_Pervasives.zeta; + FStar_Pervasives.iota] tele)) + (fun uu___1 -> + (fun t' -> + Obj.magic + (solve_gen_elim_nondep' + (Prims.of_int (15)) [] t')) + uu___1))) uu___1)) + (fun uu___ -> + (fun uu___ -> + Obj.magic + (FStar_Tactics_Effect.lift_div_tac + (fun uu___1 -> FStar_Pervasives_Native.None))) + uu___))) + else + Obj.magic + (Obj.repr + (FStar_Tactics_Effect.lift_div_tac + (fun uu___1 -> FStar_Pervasives_Native.None)))) uu___1 + uu___ +let (solve_gen_elim_nondep : + Prims.bool -> + FStar_Reflection_Types.term -> + (FStar_Reflection_Types.term, unit) FStar_Tactics_Effect.tac_repr) + = + fun enable_nondep_opt -> + fun t -> + FStar_Tactics_Effect.tac_bind + (Prims.mk_range "Steel.ST.GenElim.Base.fsti" (Prims.of_int (546)) + (Prims.of_int (8)) (Prims.of_int (546)) (Prims.of_int (50))) + (Prims.mk_range "Steel.ST.GenElim.Base.fsti" (Prims.of_int (546)) + (Prims.of_int (2)) (Prims.of_int (560)) (Prims.of_int (9))) + (Obj.magic (solve_gen_elim_nondep0 enable_nondep_opt t)) + (fun uu___ -> + FStar_Tactics_Effect.lift_div_tac + (fun uu___1 -> + match uu___ with + | FStar_Pervasives_Native.None -> + FStar_Reflection_Builtins.pack_ln + (FStar_Reflection_Data.Tv_FVar + (FStar_Reflection_Builtins.pack_fv + ["Steel"; "ST"; "GenElim"; "Base"; "GEDep"])) + | FStar_Pervasives_Native.Some (type_list, tv', v', tp', p') + -> + FStar_Reflection_Derived.mk_app + (FStar_Reflection_Builtins.pack_ln + (FStar_Reflection_Data.Tv_FVar + (FStar_Reflection_Builtins.pack_fv + ["Steel"; + "ST"; + "GenElim"; + "Base"; + "mk_gen_elim_nondep_by_tac"]))) + [(type_list, FStar_Reflection_Data.Q_Explicit); + (tv', FStar_Reflection_Data.Q_Explicit); + (v', FStar_Reflection_Data.Q_Explicit); + (tp', FStar_Reflection_Data.Q_Explicit); + (p', FStar_Reflection_Data.Q_Explicit)])) +let (solve_gen_elim_prop : + unit -> (unit, unit) FStar_Tactics_Effect.tac_repr) = + fun uu___ -> + FStar_Tactics_Effect.tac_bind + (Prims.mk_range "Steel.ST.GenElim.Base.fsti" (Prims.of_int (566)) + (Prims.of_int (17)) (Prims.of_int (566)) (Prims.of_int (46))) + (Prims.mk_range "Steel.ST.GenElim.Base.fsti" (Prims.of_int (566)) + (Prims.of_int (2)) (Prims.of_int (604)) (Prims.of_int (35))) + (Obj.magic + (FStar_Tactics_Effect.tac_bind + (Prims.mk_range "Steel.ST.GenElim.Base.fsti" (Prims.of_int (566)) + (Prims.of_int (31)) (Prims.of_int (566)) (Prims.of_int (46))) + (Prims.mk_range "Steel.ST.GenElim.Base.fsti" (Prims.of_int (566)) + (Prims.of_int (17)) (Prims.of_int (566)) (Prims.of_int (46))) + (Obj.magic (FStar_Tactics_Derived.cur_goal ())) + (fun uu___1 -> + FStar_Tactics_Effect.lift_div_tac + (fun uu___2 -> FStar_Reflection_Derived.collect_app uu___1)))) + (fun uu___1 -> + (fun uu___1 -> + match uu___1 with + | (hd, tl) -> + Obj.magic + (FStar_Tactics_Effect.tac_bind + (Prims.mk_range "Steel.ST.GenElim.Base.fsti" + (Prims.of_int (567)) (Prims.of_int (2)) + (Prims.of_int (568)) (Prims.of_int (33))) + (Prims.mk_range "Steel.ST.GenElim.Base.fsti" + (Prims.of_int (569)) (Prims.of_int (2)) + (Prims.of_int (604)) (Prims.of_int (35))) + (Obj.magic + (FStar_Tactics_Effect.tac_bind + (Prims.mk_range "Steel.ST.GenElim.Base.fsti" + (Prims.of_int (567)) (Prims.of_int (5)) + (Prims.of_int (567)) (Prims.of_int (23))) + (Prims.mk_range "Steel.ST.GenElim.Base.fsti" + (Prims.of_int (567)) (Prims.of_int (2)) + (Prims.of_int (568)) (Prims.of_int (33))) + (Obj.magic + (FStar_Tactics_Effect.tac_bind + (Prims.mk_range "Steel.ST.GenElim.Base.fsti" + (Prims.of_int (567)) (Prims.of_int (9)) + (Prims.of_int (567)) (Prims.of_int (23))) + (Prims.mk_range "Steel.ST.GenElim.Base.fsti" + (Prims.of_int (567)) (Prims.of_int (5)) + (Prims.of_int (567)) (Prims.of_int (23))) + (Obj.magic (is_squash hd)) + (fun uu___2 -> + FStar_Tactics_Effect.lift_div_tac + (fun uu___3 -> Prims.op_Negation uu___2)))) + (fun uu___2 -> + (fun uu___2 -> + if uu___2 + then + Obj.magic + (Obj.repr + (FStar_Tactics_Derived.fail + "not a squash goal")) + else + Obj.magic + (Obj.repr + (FStar_Tactics_Effect.lift_div_tac + (fun uu___4 -> ())))) uu___2))) + (fun uu___2 -> + (fun uu___2 -> + match tl with + | (body1, FStar_Reflection_Data.Q_Explicit)::[] -> + Obj.magic + (FStar_Tactics_Effect.tac_bind + (Prims.mk_range + "Steel.ST.GenElim.Base.fsti" + (Prims.of_int (571)) + (Prims.of_int (21)) + (Prims.of_int (571)) + (Prims.of_int (40))) + (Prims.mk_range + "Steel.ST.GenElim.Base.fsti" + (Prims.of_int (571)) + (Prims.of_int (4)) + (Prims.of_int (603)) + (Prims.of_int (7))) + (FStar_Tactics_Effect.lift_div_tac + (fun uu___3 -> + FStar_Reflection_Derived.collect_app + body1)) + (fun uu___3 -> + (fun uu___3 -> + match uu___3 with + | (hd1, tl1) -> + Obj.magic + (FStar_Tactics_Effect.tac_bind + (Prims.mk_range + "Steel.ST.GenElim.Base.fsti" + (Prims.of_int (572)) + (Prims.of_int (4)) + (Prims.of_int (573)) + (Prims.of_int (42))) + (Prims.mk_range + "Steel.ST.GenElim.Base.fsti" + (Prims.of_int (574)) + (Prims.of_int (10)) + (Prims.of_int (602)) + (Prims.of_int (44))) + (if + Prims.op_Negation + (is_fvar hd1 + "Steel.ST.GenElim.Base.gen_elim_prop") + then + Obj.magic + (Obj.repr + (FStar_Tactics_Derived.fail + "not a gen_elim_prop goal")) + else + Obj.magic + (Obj.repr + (FStar_Tactics_Effect.lift_div_tac + (fun uu___5 -> + ())))) + (fun uu___4 -> + (fun uu___4 -> + match FStar_List_Tot_Base.filter + (fun uu___5 + -> + match uu___5 + with + | + (uu___6, + x) -> + FStar_Reflection_Data.uu___is_Q_Explicit + x) tl1 + with + | (enable_nondep_opt_tm, + uu___5):: + (p, uu___6):: + (a, uu___7):: + (q, uu___8):: + (post, uu___9)::[] + -> + Obj.magic + (FStar_Tactics_Effect.tac_bind + (Prims.mk_range + "Steel.ST.GenElim.Base.fsti" + (Prims.of_int (576)) + (Prims.of_int (30)) + (Prims.of_int (576)) + (Prims.of_int (74))) + (Prims.mk_range + "Steel.ST.GenElim.Base.fsti" + (Prims.of_int (577)) + (Prims.of_int (6)) + (Prims.of_int (601)) + (Prims.of_int (44))) + (Obj.magic + (FStar_Tactics_Builtins.term_eq_old + enable_nondep_opt_tm + (FStar_Reflection_Builtins.pack_ln + (FStar_Reflection_Data.Tv_Const + FStar_Reflection_Data.C_True)))) + (fun + uu___10 + -> + (fun + enable_nondep_opt + -> + Obj.magic + (FStar_Tactics_Effect.tac_bind + (Prims.mk_range + "Steel.ST.GenElim.Base.fsti" + (Prims.of_int (577)) + (Prims.of_int (15)) + (Prims.of_int (577)) + (Prims.of_int (31))) + (Prims.mk_range + "Steel.ST.GenElim.Base.fsti" + (Prims.of_int (578)) + (Prims.of_int (6)) + (Prims.of_int (601)) + (Prims.of_int (44))) + (Obj.magic + (solve_gen_elim + p)) + (fun + uu___10 + -> + (fun i' + -> + Obj.magic + (FStar_Tactics_Effect.tac_bind + (Prims.mk_range + "Steel.ST.GenElim.Base.fsti" + (Prims.of_int (578)) + (Prims.of_int (20)) + (Prims.of_int (578)) + (Prims.of_int (73))) + (Prims.mk_range + "Steel.ST.GenElim.Base.fsti" + (Prims.of_int (579)) + (Prims.of_int (6)) + (Prims.of_int (601)) + (Prims.of_int (44))) + (FStar_Tactics_Effect.lift_div_tac + (fun + uu___10 + -> + fun + uu___11 + -> + FStar_Tactics_Builtins.norm + [ + FStar_Pervasives.delta_attr + ["Steel.ST.GenElim.Base.gen_elim_reduce"]; + FStar_Pervasives.zeta; + FStar_Pervasives.iota])) + (fun + uu___10 + -> + (fun norm + -> + Obj.magic + (FStar_Tactics_Effect.tac_bind + (Prims.mk_range + "Steel.ST.GenElim.Base.fsti" + (Prims.of_int (579)) + (Prims.of_int (12)) + (Prims.of_int (595)) + (Prims.of_int (46))) + (Prims.mk_range + "Steel.ST.GenElim.Base.fsti" + (Prims.of_int (597)) + (Prims.of_int (6)) + (Prims.of_int (601)) + (Prims.of_int (44))) + (Obj.magic + (FStar_Tactics_Effect.tac_bind + (Prims.mk_range + "Steel.ST.GenElim.Base.fsti" + (Prims.of_int (579)) + (Prims.of_int (18)) + (Prims.of_int (579)) + (Prims.of_int (61))) + (Prims.mk_range + "Steel.ST.GenElim.Base.fsti" + (Prims.of_int (579)) + (Prims.of_int (12)) + (Prims.of_int (595)) + (Prims.of_int (46))) + (Obj.magic + (solve_gen_elim_nondep0 + enable_nondep_opt + i')) + (fun + uu___10 + -> + (fun + uu___10 + -> + match uu___10 + with + | + FStar_Pervasives_Native.None + -> + Obj.magic + (FStar_Tactics_Derived.apply_lemma + (FStar_Reflection_Derived.mk_app + (FStar_Reflection_Builtins.pack_ln + (FStar_Reflection_Data.Tv_FVar + (FStar_Reflection_Builtins.pack_fv + ["Steel"; + "ST"; + "GenElim"; + "Base"; + "gen_elim_prop_intro'"]))) + [ + (i', + FStar_Reflection_Data.Q_Explicit); + ((FStar_Reflection_Builtins.pack_ln + (FStar_Reflection_Data.Tv_FVar + (FStar_Reflection_Builtins.pack_fv + ["Steel"; + "ST"; + "GenElim"; + "Base"; + "GEDep"]))), + FStar_Reflection_Data.Q_Explicit)])) + | + FStar_Pervasives_Native.Some + (type_list, + tvprop, + q0, + tprop, + post0) -> + Obj.magic + (FStar_Tactics_Effect.tac_bind + (Prims.mk_range + "Steel.ST.GenElim.Base.fsti" + (Prims.of_int (586)) + (Prims.of_int (8)) + (Prims.of_int (593)) + (Prims.of_int (10))) + (Prims.mk_range + "Steel.ST.GenElim.Base.fsti" + (Prims.of_int (594)) + (Prims.of_int (8)) + (Prims.of_int (595)) + (Prims.of_int (46))) + (Obj.magic + (FStar_Tactics_Derived.apply_lemma + (FStar_Reflection_Derived.mk_app + (FStar_Reflection_Builtins.pack_ln + (FStar_Reflection_Data.Tv_FVar + (FStar_Reflection_Builtins.pack_fv + ["Steel"; + "ST"; + "GenElim"; + "Base"; + "gen_elim_prop_intro"]))) + [ + (i', + FStar_Reflection_Data.Q_Explicit); + (type_list, + FStar_Reflection_Data.Q_Explicit); + (tvprop, + FStar_Reflection_Data.Q_Explicit); + (q0, + FStar_Reflection_Data.Q_Explicit); + (tprop, + FStar_Reflection_Data.Q_Explicit); + (post0, + FStar_Reflection_Data.Q_Explicit)]))) + (fun + uu___11 + -> + (fun + uu___11 + -> + Obj.magic + (FStar_Tactics_Effect.tac_bind + (Prims.mk_range + "Steel.ST.GenElim.Base.fsti" + (Prims.of_int (594)) + (Prims.of_int (8)) + (Prims.of_int (594)) + (Prims.of_int (46))) + (Prims.mk_range + "Steel.ST.GenElim.Base.fsti" + (Prims.of_int (595)) + (Prims.of_int (8)) + (Prims.of_int (595)) + (Prims.of_int (46))) + (Obj.magic + (FStar_Tactics_Derived.focus + (fun + uu___12 + -> + FStar_Tactics_Effect.tac_bind + (Prims.mk_range + "Steel.ST.GenElim.Base.fsti" + (Prims.of_int (594)) + (Prims.of_int (26)) + (Prims.of_int (594)) + (Prims.of_int (33))) + (Prims.mk_range + "Steel.ST.GenElim.Base.fsti" + (Prims.of_int (594)) + (Prims.of_int (35)) + (Prims.of_int (594)) + (Prims.of_int (45))) + (Obj.magic + (norm ())) + (fun + uu___13 + -> + (fun + uu___13 + -> + Obj.magic + (FStar_Tactics_Derived.trefl + ())) + uu___13)))) + (fun + uu___12 + -> + (fun + uu___12 + -> + Obj.magic + (FStar_Tactics_Derived.focus + (fun + uu___13 + -> + FStar_Tactics_Effect.tac_bind + (Prims.mk_range + "Steel.ST.GenElim.Base.fsti" + (Prims.of_int (595)) + (Prims.of_int (26)) + (Prims.of_int (595)) + (Prims.of_int (33))) + (Prims.mk_range + "Steel.ST.GenElim.Base.fsti" + (Prims.of_int (595)) + (Prims.of_int (35)) + (Prims.of_int (595)) + (Prims.of_int (45))) + (Obj.magic + (norm ())) + (fun + uu___14 + -> + (fun + uu___14 + -> + Obj.magic + (FStar_Tactics_Derived.trefl + ())) + uu___14)))) + uu___12))) + uu___11))) + uu___10))) + (fun + uu___10 + -> + (fun + uu___10 + -> + Obj.magic + (FStar_Tactics_Effect.tac_bind + (Prims.mk_range + "Steel.ST.GenElim.Base.fsti" + (Prims.of_int (597)) + (Prims.of_int (6)) + (Prims.of_int (597)) + (Prims.of_int (44))) + (Prims.mk_range + "Steel.ST.GenElim.Base.fsti" + (Prims.of_int (598)) + (Prims.of_int (6)) + (Prims.of_int (601)) + (Prims.of_int (44))) + (Obj.magic + (FStar_Tactics_Derived.focus + (fun + uu___11 + -> + FStar_Tactics_Effect.tac_bind + (Prims.mk_range + "Steel.ST.GenElim.Base.fsti" + (Prims.of_int (597)) + (Prims.of_int (24)) + (Prims.of_int (597)) + (Prims.of_int (31))) + (Prims.mk_range + "Steel.ST.GenElim.Base.fsti" + (Prims.of_int (597)) + (Prims.of_int (33)) + (Prims.of_int (597)) + (Prims.of_int (43))) + (Obj.magic + (norm ())) + (fun + uu___12 + -> + (fun + uu___12 + -> + Obj.magic + (FStar_Tactics_Derived.trefl + ())) + uu___12)))) + (fun + uu___11 + -> + (fun + uu___11 + -> + Obj.magic + (FStar_Tactics_Effect.tac_bind + (Prims.mk_range + "Steel.ST.GenElim.Base.fsti" + (Prims.of_int (598)) + (Prims.of_int (6)) + (Prims.of_int (598)) + (Prims.of_int (56))) + (Prims.mk_range + "Steel.ST.GenElim.Base.fsti" + (Prims.of_int (599)) + (Prims.of_int (6)) + (Prims.of_int (601)) + (Prims.of_int (44))) + (Obj.magic + (FStar_Tactics_Derived.focus + (fun + uu___12 + -> + FStar_Tactics_Effect.tac_bind + (Prims.mk_range + "Steel.ST.GenElim.Base.fsti" + (Prims.of_int (598)) + (Prims.of_int (24)) + (Prims.of_int (598)) + (Prims.of_int (31))) + (Prims.mk_range + "Steel.ST.GenElim.Base.fsti" + (Prims.of_int (598)) + (Prims.of_int (33)) + (Prims.of_int (598)) + (Prims.of_int (55))) + (Obj.magic + (norm ())) + (fun + uu___13 + -> + (fun + uu___13 + -> + Obj.magic + (FStar_Tactics_Effect.tac_bind + (Prims.mk_range + "Steel.ST.GenElim.Base.fsti" + (Prims.of_int (598)) + (Prims.of_int (33)) + (Prims.of_int (598)) + (Prims.of_int (45))) + (Prims.mk_range + "Steel.ST.GenElim.Base.fsti" + (Prims.of_int (598)) + (Prims.of_int (47)) + (Prims.of_int (598)) + (Prims.of_int (55))) + (Obj.magic + (FStar_Tactics_Derived.trivial + ())) + (fun + uu___14 + -> + (fun + uu___14 + -> + Obj.magic + (FStar_Tactics_Derived.qed + ())) + uu___14))) + uu___13)))) + (fun + uu___12 + -> + (fun + uu___12 + -> + Obj.magic + (FStar_Tactics_Effect.tac_bind + (Prims.mk_range + "Steel.ST.GenElim.Base.fsti" + (Prims.of_int (599)) + (Prims.of_int (6)) + (Prims.of_int (599)) + (Prims.of_int (44))) + (Prims.mk_range + "Steel.ST.GenElim.Base.fsti" + (Prims.of_int (600)) + (Prims.of_int (6)) + (Prims.of_int (601)) + (Prims.of_int (44))) + (Obj.magic + (FStar_Tactics_Derived.focus + (fun + uu___13 + -> + FStar_Tactics_Effect.tac_bind + (Prims.mk_range + "Steel.ST.GenElim.Base.fsti" + (Prims.of_int (599)) + (Prims.of_int (24)) + (Prims.of_int (599)) + (Prims.of_int (31))) + (Prims.mk_range + "Steel.ST.GenElim.Base.fsti" + (Prims.of_int (599)) + (Prims.of_int (33)) + (Prims.of_int (599)) + (Prims.of_int (43))) + (Obj.magic + (norm ())) + (fun + uu___14 + -> + (fun + uu___14 + -> + Obj.magic + (FStar_Tactics_Derived.trefl + ())) + uu___14)))) + (fun + uu___13 + -> + (fun + uu___13 + -> + Obj.magic + (FStar_Tactics_Effect.tac_bind + (Prims.mk_range + "Steel.ST.GenElim.Base.fsti" + (Prims.of_int (600)) + (Prims.of_int (6)) + (Prims.of_int (600)) + (Prims.of_int (44))) + (Prims.mk_range + "Steel.ST.GenElim.Base.fsti" + (Prims.of_int (601)) + (Prims.of_int (6)) + (Prims.of_int (601)) + (Prims.of_int (44))) + (Obj.magic + (FStar_Tactics_Derived.focus + (fun + uu___14 + -> + FStar_Tactics_Effect.tac_bind + (Prims.mk_range + "Steel.ST.GenElim.Base.fsti" + (Prims.of_int (600)) + (Prims.of_int (24)) + (Prims.of_int (600)) + (Prims.of_int (31))) + (Prims.mk_range + "Steel.ST.GenElim.Base.fsti" + (Prims.of_int (600)) + (Prims.of_int (33)) + (Prims.of_int (600)) + (Prims.of_int (43))) + (Obj.magic + (norm ())) + (fun + uu___15 + -> + (fun + uu___15 + -> + Obj.magic + (FStar_Tactics_Derived.trefl + ())) + uu___15)))) + (fun + uu___14 + -> + (fun + uu___14 + -> + Obj.magic + (FStar_Tactics_Derived.focus + (fun + uu___15 + -> + FStar_Tactics_Effect.tac_bind + (Prims.mk_range + "Steel.ST.GenElim.Base.fsti" + (Prims.of_int (601)) + (Prims.of_int (24)) + (Prims.of_int (601)) + (Prims.of_int (31))) + (Prims.mk_range + "Steel.ST.GenElim.Base.fsti" + (Prims.of_int (601)) + (Prims.of_int (33)) + (Prims.of_int (601)) + (Prims.of_int (43))) + (Obj.magic + (norm ())) + (fun + uu___16 + -> + (fun + uu___16 + -> + Obj.magic + (FStar_Tactics_Derived.trefl + ())) + uu___16)))) + uu___14))) + uu___13))) + uu___12))) + uu___11))) + uu___10))) + uu___10))) + uu___10))) + uu___10)) + | uu___5 -> + Obj.magic + (FStar_Tactics_Derived.fail + "ill formed gen_elim_prop")) + uu___4))) uu___3)) + | uu___3 -> + Obj.magic + (FStar_Tactics_Derived.fail + "ill-formed squash")) uu___2))) uu___1) +let (solve_gen_elim_prop_placeholder : + unit -> (Prims.bool, unit) FStar_Tactics_Effect.tac_repr) = + fun uu___ -> + FStar_Tactics_Effect.tac_bind + (Prims.mk_range "Steel.ST.GenElim.Base.fsti" (Prims.of_int (610)) + (Prims.of_int (17)) (Prims.of_int (610)) (Prims.of_int (46))) + (Prims.mk_range "Steel.ST.GenElim.Base.fsti" (Prims.of_int (610)) + (Prims.of_int (2)) (Prims.of_int (644)) (Prims.of_int (35))) + (Obj.magic + (FStar_Tactics_Effect.tac_bind + (Prims.mk_range "Steel.ST.GenElim.Base.fsti" (Prims.of_int (610)) + (Prims.of_int (31)) (Prims.of_int (610)) (Prims.of_int (46))) + (Prims.mk_range "Steel.ST.GenElim.Base.fsti" (Prims.of_int (610)) + (Prims.of_int (17)) (Prims.of_int (610)) (Prims.of_int (46))) + (Obj.magic (FStar_Tactics_Derived.cur_goal ())) + (fun uu___1 -> + FStar_Tactics_Effect.lift_div_tac + (fun uu___2 -> FStar_Reflection_Derived.collect_app uu___1)))) + (fun uu___1 -> + (fun uu___1 -> + match uu___1 with + | (hd, tl) -> + Obj.magic + (FStar_Tactics_Effect.tac_bind + (Prims.mk_range "Steel.ST.GenElim.Base.fsti" + (Prims.of_int (611)) (Prims.of_int (2)) + (Prims.of_int (612)) (Prims.of_int (33))) + (Prims.mk_range "Steel.ST.GenElim.Base.fsti" + (Prims.of_int (613)) (Prims.of_int (2)) + (Prims.of_int (644)) (Prims.of_int (35))) + (Obj.magic + (FStar_Tactics_Effect.tac_bind + (Prims.mk_range "Steel.ST.GenElim.Base.fsti" + (Prims.of_int (611)) (Prims.of_int (5)) + (Prims.of_int (611)) (Prims.of_int (23))) + (Prims.mk_range "Steel.ST.GenElim.Base.fsti" + (Prims.of_int (611)) (Prims.of_int (2)) + (Prims.of_int (612)) (Prims.of_int (33))) + (Obj.magic + (FStar_Tactics_Effect.tac_bind + (Prims.mk_range "Steel.ST.GenElim.Base.fsti" + (Prims.of_int (611)) (Prims.of_int (9)) + (Prims.of_int (611)) (Prims.of_int (23))) + (Prims.mk_range "Steel.ST.GenElim.Base.fsti" + (Prims.of_int (611)) (Prims.of_int (5)) + (Prims.of_int (611)) (Prims.of_int (23))) + (Obj.magic (is_squash hd)) + (fun uu___2 -> + FStar_Tactics_Effect.lift_div_tac + (fun uu___3 -> Prims.op_Negation uu___2)))) + (fun uu___2 -> + (fun uu___2 -> + if uu___2 + then + Obj.magic + (Obj.repr + (FStar_Tactics_Derived.fail + "not a squash goal")) + else + Obj.magic + (Obj.repr + (FStar_Tactics_Effect.lift_div_tac + (fun uu___4 -> ())))) uu___2))) + (fun uu___2 -> + (fun uu___2 -> + match tl with + | (body1, FStar_Reflection_Data.Q_Explicit)::[] -> + Obj.magic + (FStar_Tactics_Effect.tac_bind + (Prims.mk_range + "Steel.ST.GenElim.Base.fsti" + (Prims.of_int (615)) + (Prims.of_int (21)) + (Prims.of_int (615)) + (Prims.of_int (40))) + (Prims.mk_range + "Steel.ST.GenElim.Base.fsti" + (Prims.of_int (615)) + (Prims.of_int (4)) + (Prims.of_int (643)) + (Prims.of_int (7))) + (FStar_Tactics_Effect.lift_div_tac + (fun uu___3 -> + FStar_Reflection_Derived.collect_app + body1)) + (fun uu___3 -> + (fun uu___3 -> + match uu___3 with + | (hd1, tl1) -> + Obj.magic + (FStar_Tactics_Effect.tac_bind + (Prims.mk_range + "Steel.ST.GenElim.Base.fsti" + (Prims.of_int (616)) + (Prims.of_int (4)) + (Prims.of_int (617)) + (Prims.of_int (54))) + (Prims.mk_range + "Steel.ST.GenElim.Base.fsti" + (Prims.of_int (618)) + (Prims.of_int (10)) + (Prims.of_int (642)) + (Prims.of_int (56))) + (if + Prims.op_Negation + (is_fvar hd1 + "Steel.ST.GenElim.Base.gen_elim_prop_placeholder") + then + Obj.magic + (Obj.repr + (FStar_Tactics_Derived.fail + "not a gen_elim_prop_placeholder goal")) + else + Obj.magic + (Obj.repr + (FStar_Tactics_Effect.lift_div_tac + (fun uu___5 -> + ())))) + (fun uu___4 -> + (fun uu___4 -> + match FStar_List_Tot_Base.filter + (fun uu___5 + -> + match uu___5 + with + | + (uu___6, + x) -> + FStar_Reflection_Data.uu___is_Q_Explicit + x) tl1 + with + | (enable_nondep_opt_tm, + uu___5):: + (p, uu___6):: + (a, uu___7):: + (q, uu___8):: + (post, uu___9)::[] + -> + Obj.magic + (FStar_Tactics_Effect.tac_bind + (Prims.mk_range + "Steel.ST.GenElim.Base.fsti" + (Prims.of_int (620)) + (Prims.of_int (6)) + (Prims.of_int (621)) + (Prims.of_int (47))) + (Prims.mk_range + "Steel.ST.GenElim.Base.fsti" + (Prims.of_int (622)) + (Prims.of_int (6)) + (Prims.of_int (641)) + (Prims.of_int (10))) + (Obj.magic + (FStar_Tactics_Effect.tac_bind + (Prims.mk_range + "Steel.ST.GenElim.Base.fsti" + (Prims.of_int (620)) + (Prims.of_int (9)) + (Prims.of_int (620)) + (Prims.of_int (32))) + (Prims.mk_range + "Steel.ST.GenElim.Base.fsti" + (Prims.of_int (620)) + (Prims.of_int (6)) + (Prims.of_int (621)) + (Prims.of_int (47))) + (Obj.magic + (FStar_Tactics_Effect.tac_bind + (Prims.mk_range + "Steel.ST.GenElim.Base.fsti" + (Prims.of_int (620)) + (Prims.of_int (9)) + (Prims.of_int (620)) + (Prims.of_int (27))) + (Prims.mk_range + "Steel.ST.GenElim.Base.fsti" + (Prims.of_int (620)) + (Prims.of_int (9)) + (Prims.of_int (620)) + (Prims.of_int (32))) + (Obj.magic + (Steel_Effect_Common.slterm_nbr_uvars + p)) + (fun + uu___10 + -> + FStar_Tactics_Effect.lift_div_tac + (fun + uu___11 + -> + uu___10 + <> + Prims.int_zero)))) + (fun + uu___10 + -> + (fun + uu___10 + -> + if + uu___10 + then + Obj.magic + (Obj.repr + (FStar_Tactics_Derived.fail + "pre-resource not solved yet")) + else + Obj.magic + (Obj.repr + (FStar_Tactics_Effect.lift_div_tac + (fun + uu___12 + -> ())))) + uu___10))) + (fun + uu___10 + -> + (fun + uu___10 + -> + Obj.magic + (FStar_Tactics_Effect.tac_bind + (Prims.mk_range + "Steel.ST.GenElim.Base.fsti" + (Prims.of_int (622)) + (Prims.of_int (22)) + (Prims.of_int (622)) + (Prims.of_int (46))) + (Prims.mk_range + "Steel.ST.GenElim.Base.fsti" + (Prims.of_int (623)) + (Prims.of_int (6)) + (Prims.of_int (641)) + (Prims.of_int (10))) + (Obj.magic + (FStar_Tactics_Effect.tac_bind + (Prims.mk_range + "Steel.ST.GenElim.Base.fsti" + (Prims.of_int (622)) + (Prims.of_int (33)) + (Prims.of_int (622)) + (Prims.of_int (46))) + (Prims.mk_range + "Steel.ST.GenElim.Base.fsti" + (Prims.of_int (622)) + (Prims.of_int (22)) + (Prims.of_int (622)) + (Prims.of_int (46))) + (Obj.magic + (FStar_Tactics_Builtins.inspect + a)) + (fun + uu___11 + -> + FStar_Tactics_Effect.lift_div_tac + (fun + uu___12 + -> + FStar_Reflection_Data.uu___is_Tv_Uvar + uu___11)))) + (fun + uu___11 + -> + (fun + a_is_uvar + -> + Obj.magic + (FStar_Tactics_Effect.tac_bind + (Prims.mk_range + "Steel.ST.GenElim.Base.fsti" + (Prims.of_int (623)) + (Prims.of_int (22)) + (Prims.of_int (623)) + (Prims.of_int (46))) + (Prims.mk_range + "Steel.ST.GenElim.Base.fsti" + (Prims.of_int (624)) + (Prims.of_int (6)) + (Prims.of_int (641)) + (Prims.of_int (10))) + (Obj.magic + (FStar_Tactics_Effect.tac_bind + (Prims.mk_range + "Steel.ST.GenElim.Base.fsti" + (Prims.of_int (623)) + (Prims.of_int (33)) + (Prims.of_int (623)) + (Prims.of_int (46))) + (Prims.mk_range + "Steel.ST.GenElim.Base.fsti" + (Prims.of_int (623)) + (Prims.of_int (22)) + (Prims.of_int (623)) + (Prims.of_int (46))) + (Obj.magic + (FStar_Tactics_Builtins.inspect + q)) + (fun + uu___11 + -> + FStar_Tactics_Effect.lift_div_tac + (fun + uu___12 + -> + FStar_Reflection_Data.uu___is_Tv_Uvar + uu___11)))) + (fun + uu___11 + -> + (fun + q_is_uvar + -> + Obj.magic + (FStar_Tactics_Effect.tac_bind + (Prims.mk_range + "Steel.ST.GenElim.Base.fsti" + (Prims.of_int (624)) + (Prims.of_int (25)) + (Prims.of_int (624)) + (Prims.of_int (52))) + (Prims.mk_range + "Steel.ST.GenElim.Base.fsti" + (Prims.of_int (625)) + (Prims.of_int (6)) + (Prims.of_int (641)) + (Prims.of_int (10))) + (Obj.magic + (FStar_Tactics_Effect.tac_bind + (Prims.mk_range + "Steel.ST.GenElim.Base.fsti" + (Prims.of_int (624)) + (Prims.of_int (36)) + (Prims.of_int (624)) + (Prims.of_int (52))) + (Prims.mk_range + "Steel.ST.GenElim.Base.fsti" + (Prims.of_int (624)) + (Prims.of_int (25)) + (Prims.of_int (624)) + (Prims.of_int (52))) + (Obj.magic + (FStar_Tactics_Builtins.inspect + post)) + (fun + uu___11 + -> + FStar_Tactics_Effect.lift_div_tac + (fun + uu___12 + -> + FStar_Reflection_Data.uu___is_Tv_Uvar + uu___11)))) + (fun + uu___11 + -> + (fun + post_is_uvar + -> + Obj.magic + (FStar_Tactics_Effect.tac_bind + (Prims.mk_range + "Steel.ST.GenElim.Base.fsti" + (Prims.of_int (625)) + (Prims.of_int (6)) + (Prims.of_int (626)) + (Prims.of_int (63))) + (Prims.mk_range + "Steel.ST.GenElim.Base.fsti" + (Prims.of_int (627)) + (Prims.of_int (6)) + (Prims.of_int (641)) + (Prims.of_int (10))) + (if + Prims.op_Negation + ((a_is_uvar + && + q_is_uvar) + && + post_is_uvar) + then + Obj.magic + (Obj.repr + (FStar_Tactics_Derived.fail + "gen_elim_prop_placeholder is already solved")) + else + Obj.magic + (Obj.repr + (FStar_Tactics_Effect.lift_div_tac + (fun + uu___12 + -> ())))) + (fun + uu___11 + -> + (fun + uu___11 + -> + Obj.magic + (FStar_Tactics_Effect.tac_bind + (Prims.mk_range + "Steel.ST.GenElim.Base.fsti" + (Prims.of_int (627)) + (Prims.of_int (30)) + (Prims.of_int (627)) + (Prims.of_int (74))) + (Prims.mk_range + "Steel.ST.GenElim.Base.fsti" + (Prims.of_int (628)) + (Prims.of_int (6)) + (Prims.of_int (641)) + (Prims.of_int (10))) + (Obj.magic + (FStar_Tactics_Builtins.term_eq_old + enable_nondep_opt_tm + (FStar_Reflection_Builtins.pack_ln + (FStar_Reflection_Data.Tv_Const + FStar_Reflection_Data.C_True)))) + (fun + uu___12 + -> + (fun + enable_nondep_opt + -> + Obj.magic + (FStar_Tactics_Effect.tac_bind + (Prims.mk_range + "Steel.ST.GenElim.Base.fsti" + (Prims.of_int (628)) + (Prims.of_int (15)) + (Prims.of_int (628)) + (Prims.of_int (31))) + (Prims.mk_range + "Steel.ST.GenElim.Base.fsti" + (Prims.of_int (629)) + (Prims.of_int (6)) + (Prims.of_int (641)) + (Prims.of_int (10))) + (Obj.magic + (solve_gen_elim + p)) + (fun + uu___12 + -> + (fun i' + -> + Obj.magic + (FStar_Tactics_Effect.tac_bind + (Prims.mk_range + "Steel.ST.GenElim.Base.fsti" + (Prims.of_int (629)) + (Prims.of_int (15)) + (Prims.of_int (629)) + (Prims.of_int (57))) + (Prims.mk_range + "Steel.ST.GenElim.Base.fsti" + (Prims.of_int (630)) + (Prims.of_int (6)) + (Prims.of_int (641)) + (Prims.of_int (10))) + (Obj.magic + (solve_gen_elim_nondep + enable_nondep_opt + i')) + (fun + uu___12 + -> + (fun j' + -> + Obj.magic + (FStar_Tactics_Effect.tac_bind + (Prims.mk_range + "Steel.ST.GenElim.Base.fsti" + (Prims.of_int (630)) + (Prims.of_int (22)) + (Prims.of_int (630)) + (Prims.of_int (80))) + (Prims.mk_range + "Steel.ST.GenElim.Base.fsti" + (Prims.of_int (631)) + (Prims.of_int (6)) + (Prims.of_int (641)) + (Prims.of_int (10))) + (FStar_Tactics_Effect.lift_div_tac + (fun + uu___12 + -> + FStar_Tactics_Derived.norm_term + [ + FStar_Pervasives.delta_attr + ["Steel.ST.GenElim.Base.gen_elim_reduce"]; + FStar_Pervasives.zeta; + FStar_Pervasives.iota])) + (fun + uu___12 + -> + (fun + norm_term + -> + Obj.magic + (FStar_Tactics_Effect.tac_bind + (Prims.mk_range + "Steel.ST.GenElim.Base.fsti" + (Prims.of_int (631)) + (Prims.of_int (15)) + (Prims.of_int (631)) + (Prims.of_int (101))) + (Prims.mk_range + "Steel.ST.GenElim.Base.fsti" + (Prims.of_int (632)) + (Prims.of_int (6)) + (Prims.of_int (641)) + (Prims.of_int (10))) + (Obj.magic + (norm_term + (FStar_Reflection_Derived.mk_app + (FStar_Reflection_Builtins.pack_ln + (FStar_Reflection_Data.Tv_FVar + (FStar_Reflection_Builtins.pack_fv + ["Steel"; + "ST"; + "GenElim"; + "Base"; + "compute_gen_elim_nondep_a"]))) + [ + (i', + FStar_Reflection_Data.Q_Explicit); + (j', + FStar_Reflection_Data.Q_Explicit)]))) + (fun + uu___12 + -> + (fun a' + -> + Obj.magic + (FStar_Tactics_Effect.tac_bind + (Prims.mk_range + "Steel.ST.GenElim.Base.fsti" + (Prims.of_int (632)) + (Prims.of_int (15)) + (Prims.of_int (632)) + (Prims.of_int (101))) + (Prims.mk_range + "Steel.ST.GenElim.Base.fsti" + (Prims.of_int (633)) + (Prims.of_int (6)) + (Prims.of_int (641)) + (Prims.of_int (10))) + (Obj.magic + (norm_term + (FStar_Reflection_Derived.mk_app + (FStar_Reflection_Builtins.pack_ln + (FStar_Reflection_Data.Tv_FVar + (FStar_Reflection_Builtins.pack_fv + ["Steel"; + "ST"; + "GenElim"; + "Base"; + "compute_gen_elim_nondep_q"]))) + [ + (i', + FStar_Reflection_Data.Q_Explicit); + (j', + FStar_Reflection_Data.Q_Explicit)]))) + (fun + uu___12 + -> + (fun q' + -> + Obj.magic + (FStar_Tactics_Effect.tac_bind + (Prims.mk_range + "Steel.ST.GenElim.Base.fsti" + (Prims.of_int (633)) + (Prims.of_int (18)) + (Prims.of_int (633)) + (Prims.of_int (107))) + (Prims.mk_range + "Steel.ST.GenElim.Base.fsti" + (Prims.of_int (634)) + (Prims.of_int (6)) + (Prims.of_int (641)) + (Prims.of_int (10))) + (Obj.magic + (norm_term + (FStar_Reflection_Derived.mk_app + (FStar_Reflection_Builtins.pack_ln + (FStar_Reflection_Data.Tv_FVar + (FStar_Reflection_Builtins.pack_fv + ["Steel"; + "ST"; + "GenElim"; + "Base"; + "compute_gen_elim_nondep_post"]))) + [ + (i', + FStar_Reflection_Data.Q_Explicit); + (j', + FStar_Reflection_Data.Q_Explicit)]))) + (fun + uu___12 + -> + (fun + post' -> + Obj.magic + (FStar_Tactics_Effect.tac_bind + (Prims.mk_range + "Steel.ST.GenElim.Base.fsti" + (Prims.of_int (634)) + (Prims.of_int (6)) + (Prims.of_int (634)) + (Prims.of_int (18))) + (Prims.mk_range + "Steel.ST.GenElim.Base.fsti" + (Prims.of_int (635)) + (Prims.of_int (6)) + (Prims.of_int (641)) + (Prims.of_int (10))) + (Obj.magic + (FStar_Tactics_Builtins.unshelve + a)) + (fun + uu___12 + -> + (fun + uu___12 + -> + Obj.magic + (FStar_Tactics_Effect.tac_bind + (Prims.mk_range + "Steel.ST.GenElim.Base.fsti" + (Prims.of_int (635)) + (Prims.of_int (6)) + (Prims.of_int (635)) + (Prims.of_int (16))) + (Prims.mk_range + "Steel.ST.GenElim.Base.fsti" + (Prims.of_int (636)) + (Prims.of_int (6)) + (Prims.of_int (641)) + (Prims.of_int (10))) + (Obj.magic + (FStar_Tactics_Derived.exact + a')) + (fun + uu___13 + -> + (fun + uu___13 + -> + Obj.magic + (FStar_Tactics_Effect.tac_bind + (Prims.mk_range + "Steel.ST.GenElim.Base.fsti" + (Prims.of_int (636)) + (Prims.of_int (6)) + (Prims.of_int (636)) + (Prims.of_int (18))) + (Prims.mk_range + "Steel.ST.GenElim.Base.fsti" + (Prims.of_int (637)) + (Prims.of_int (6)) + (Prims.of_int (641)) + (Prims.of_int (10))) + (Obj.magic + (FStar_Tactics_Builtins.unshelve + q)) + (fun + uu___14 + -> + (fun + uu___14 + -> + Obj.magic + (FStar_Tactics_Effect.tac_bind + (Prims.mk_range + "Steel.ST.GenElim.Base.fsti" + (Prims.of_int (637)) + (Prims.of_int (6)) + (Prims.of_int (637)) + (Prims.of_int (16))) + (Prims.mk_range + "Steel.ST.GenElim.Base.fsti" + (Prims.of_int (638)) + (Prims.of_int (6)) + (Prims.of_int (641)) + (Prims.of_int (10))) + (Obj.magic + (FStar_Tactics_Derived.exact + q')) + (fun + uu___15 + -> + (fun + uu___15 + -> + Obj.magic + (FStar_Tactics_Effect.tac_bind + (Prims.mk_range + "Steel.ST.GenElim.Base.fsti" + (Prims.of_int (638)) + (Prims.of_int (6)) + (Prims.of_int (638)) + (Prims.of_int (21))) + (Prims.mk_range + "Steel.ST.GenElim.Base.fsti" + (Prims.of_int (639)) + (Prims.of_int (6)) + (Prims.of_int (641)) + (Prims.of_int (10))) + (Obj.magic + (FStar_Tactics_Builtins.unshelve + post)) + (fun + uu___16 + -> + (fun + uu___16 + -> + Obj.magic + (FStar_Tactics_Effect.tac_bind + (Prims.mk_range + "Steel.ST.GenElim.Base.fsti" + (Prims.of_int (639)) + (Prims.of_int (6)) + (Prims.of_int (639)) + (Prims.of_int (19))) + (Prims.mk_range + "Steel.ST.GenElim.Base.fsti" + (Prims.of_int (640)) + (Prims.of_int (6)) + (Prims.of_int (641)) + (Prims.of_int (10))) + (Obj.magic + (FStar_Tactics_Derived.exact + post')) + (fun + uu___17 + -> + (fun + uu___17 + -> + Obj.magic + (FStar_Tactics_Effect.tac_bind + (Prims.mk_range + "Steel.ST.GenElim.Base.fsti" + (Prims.of_int (640)) + (Prims.of_int (6)) + (Prims.of_int (640)) + (Prims.of_int (54))) + (Prims.mk_range + "Steel.ST.GenElim.Base.fsti" + (Prims.of_int (641)) + (Prims.of_int (6)) + (Prims.of_int (641)) + (Prims.of_int (10))) + (Obj.magic + (FStar_Tactics_Derived.apply_lemma + (FStar_Reflection_Builtins.pack_ln + (FStar_Reflection_Data.Tv_FVar + (FStar_Reflection_Builtins.pack_fv + ["Steel"; + "ST"; + "GenElim"; + "Base"; + "gen_elim_prop_placeholder_intro"]))))) + (fun + uu___18 + -> + FStar_Tactics_Effect.lift_div_tac + (fun + uu___19 + -> true)))) + uu___17))) + uu___16))) + uu___15))) + uu___14))) + uu___13))) + uu___12))) + uu___12))) + uu___12))) + uu___12))) + uu___12))) + uu___12))) + uu___12))) + uu___12))) + uu___11))) + uu___11))) + uu___11))) + uu___11))) + uu___10)) + | uu___5 -> + Obj.magic + (FStar_Tactics_Derived.fail + "ill-formed gen_elim_prop_placeholder")) + uu___4))) uu___3)) + | uu___3 -> + Obj.magic + (FStar_Tactics_Derived.fail + "ill-formed squash")) uu___2))) uu___1) +let (init_resolve_tac : unit -> (unit, unit) FStar_Tactics_Effect.tac_repr) = + fun uu___ -> + Steel_Effect_Common.init_resolve_tac' + [((FStar_Reflection_Builtins.pack_ln + (FStar_Reflection_Data.Tv_FVar + (FStar_Reflection_Builtins.pack_fv + ["Steel"; + "ST"; + "GenElim"; + "Base"; + "gen_elim_prop_placeholder"]))), + solve_gen_elim_prop_placeholder)] +let _ = + FStar_Tactics_Native.register_tactic + "Steel.ST.GenElim.Base.init_resolve_tac" (Prims.of_int (2)) + (fun psc -> + fun ncb -> + fun args -> + FStar_Tactics_InterpFuns.mk_tactic_interpretation_1 + (FStar_Tactics_Native.from_tactic_1 init_resolve_tac) + FStar_Syntax_Embeddings.e_unit FStar_Syntax_Embeddings.e_unit + psc ncb args) \ No newline at end of file diff --git a/ocaml/fstar-lib/make_fstar_version.sh b/ocaml/fstar-lib/make_fstar_version.sh new file mode 100755 index 00000000000..54f92ed6e0b --- /dev/null +++ b/ocaml/fstar-lib/make_fstar_version.sh @@ -0,0 +1,26 @@ +#!/usr/bin/env bash + +VERSION=$(head -n 1 version.txt) +if [ "$OS" = "Windows_NT" ] +then + if [ "$PROCESSOR_ARCHITECTURE" = "AMD64" ] + then + PLATFORM="Windows_x64" + else + PLATFORM="Windows_x86" + fi +else + PLATFORM="$(uname)_$(uname -m)" +fi +COMPILER="OCaml $(ocamlc -version)" +# If a system does not have git, or we are not in a git repo, fallback with "unset" +COMMIT=$(git describe --match="" --always --abbrev=40 --dirty 2>/dev/null || echo unset) +COMMITDATE=$(git log --pretty=format:%ci -n 1 2>/dev/null || echo unset) + +echo "let dummy () = ();;" +echo "FStar_Options._version := \"$VERSION\";" +echo "FStar_Options._platform := \"$PLATFORM\";;" +echo "FStar_Options._compiler := \"$COMPILER\";;" +# We deliberately use commitdate instead of date, so that rebuilds are no-ops +echo "FStar_Options._date := \"$COMMITDATE\";;" +echo "FStar_Options._commit:= \"$COMMIT\";;" diff --git a/ulib/ml/prims.ml b/ocaml/fstar-lib/prims.ml similarity index 100% rename from ulib/ml/prims.ml rename to ocaml/fstar-lib/prims.ml diff --git a/src/tests/ml/FStar_Tests_Main.ml b/ocaml/fstar-tests/FStar_Tests_Main.ml similarity index 100% rename from src/tests/ml/FStar_Tests_Main.ml rename to ocaml/fstar-tests/FStar_Tests_Main.ml diff --git a/ocaml/fstar-tests/dune b/ocaml/fstar-tests/dune new file mode 100644 index 00000000000..4d4329c9c22 --- /dev/null +++ b/ocaml/fstar-tests/dune @@ -0,0 +1,9 @@ +(include_subdirs unqualified) +(executable + (name FStar_Tests_Main) + (public_name fstar_tests.exe) + (libraries + fstar_lib + ) + (modes (native exe)) +) diff --git a/src/ocaml-output/FStar_Tests_Norm.ml b/ocaml/fstar-tests/generated/FStar_Tests_Norm.ml similarity index 100% rename from src/ocaml-output/FStar_Tests_Norm.ml rename to ocaml/fstar-tests/generated/FStar_Tests_Norm.ml diff --git a/src/ocaml-output/FStar_Tests_Pars.ml b/ocaml/fstar-tests/generated/FStar_Tests_Pars.ml similarity index 100% rename from src/ocaml-output/FStar_Tests_Pars.ml rename to ocaml/fstar-tests/generated/FStar_Tests_Pars.ml diff --git a/src/ocaml-output/FStar_Tests_Test.ml b/ocaml/fstar-tests/generated/FStar_Tests_Test.ml similarity index 100% rename from src/ocaml-output/FStar_Tests_Test.ml rename to ocaml/fstar-tests/generated/FStar_Tests_Test.ml diff --git a/src/ocaml-output/FStar_Tests_Unif.ml b/ocaml/fstar-tests/generated/FStar_Tests_Unif.ml similarity index 100% rename from src/ocaml-output/FStar_Tests_Unif.ml rename to ocaml/fstar-tests/generated/FStar_Tests_Unif.ml diff --git a/src/ocaml-output/FStar_Tests_Util.ml b/ocaml/fstar-tests/generated/FStar_Tests_Util.ml similarity index 100% rename from src/ocaml-output/FStar_Tests_Util.ml rename to ocaml/fstar-tests/generated/FStar_Tests_Util.ml diff --git a/ocaml/fstar/dune b/ocaml/fstar/dune new file mode 100644 index 00000000000..731089c1f2f --- /dev/null +++ b/ocaml/fstar/dune @@ -0,0 +1,10 @@ +(include_subdirs unqualified) +(executable + (name main) + (public_name fstar.exe) + (libraries + fstar_lib + ) + (link_flags "-linkall") + (modes (native exe)) +) diff --git a/src/fstar/ml/main.ml b/ocaml/fstar/main.ml similarity index 100% rename from src/fstar/ml/main.ml rename to ocaml/fstar/main.ml diff --git a/src/.gitignore b/src/.gitignore index 817e93ddce6..e7cfc6e5cdd 100644 --- a/src/.gitignore +++ b/src/.gitignore @@ -4,7 +4,6 @@ fsharp-output /backend/ u_boot_fsts u_ocaml-output -.fstarlib dep.graph diff --git a/src/Makefile b/src/Makefile index 52515387885..5a80798e360 100644 --- a/src/Makefile +++ b/src/Makefile @@ -8,9 +8,6 @@ MAKEFLAGS += --no-builtin-rules .PHONY: clean boot ocaml -$(BIN)/fstar.exe: - +$(MAKE) -C ocaml-output all - clean: clean-ocaml # -------------------------------------------------------------------- @@ -19,6 +16,7 @@ clean: clean-ocaml clean_boot: rm -rf .cache.boot + rm -f ._depend rm -f .depend # -------------------------------------------------------------------------------- @@ -29,88 +27,45 @@ clean_boot: ocaml: $(Q)+$(MAKE) -f Makefile.boot all-ml -fstar-ocaml: ocaml - +$(MAKE) $(BIN)/fstar.exe - -# Fastest way to refresh the snapshot (if it works) -ocaml-fstar-ocaml: $(BIN)/fstar.exe - +$(MAKE) ocaml - +$(MAKE) $(BIN)/fstar.exe - clean-ocaml: clean_boot +$(MAKE) -C ocaml-output clean -# Very aggressive cleaning: remove all extracted files -clean_extracted: - rm -f ocaml-output/FStar_*.ml - -rebuild: - +$(MAKE) ocaml - +$(MAKE) -C ../ulib clean_ocaml - +$(MAKE) -C ocaml-output - +$(MAKE) -C ../ulib rebuild # -------------------------------------------------------------------- # Testing # -------------------------------------------------------------------- -utest: - +$(MAKE) utest-prelude - +$(MAKE) uregressions - -# The first tests have to be performed sequentially (but each one may use some parallelism) -utest-prelude: $(BIN)/fstar.exe - +$(MAKE) clean_extracted #ensures that there is no leftover from previous extraction - +$(MAKE) fstar-ocaml #extract the compiler again and build the result - +$(MAKE) ocaml-unit-tests #run the unit tests - +$(MAKE) .fstarlib - +$(MAKE) ulib-in-fsharp #build ulibfs ocaml-unit-tests: - $(BIN)/tests.exe + $(BIN)/fstar_tests.exe -ulib-in-fsharp: $(BIN)/fstar.exe +ulib-in-fsharp: $(MAKE) -C ../ulib ulib-in-fsharp # Getting parallelism from this target +.PHONY: uregressions uregressions: ulib-extra tutorial utests uexamples # Getting parallelism from this target as well # This is a hook for nightly builds (on Linux) # But, at the moment, it tests the same files as get tested on every push # We may add more nightly tests here in the future +.PHONY: uregressions-ulong uregressions-ulong: uregressions -# This is not optimal, since if some dependencies -# of fstarlib change we will not rebuild. However -# simply calling the install-fstar-tactics rule -# will unconditionally reinstall everything, -# which is also not good. -.fstarlib: $(FSTARLIB_DIR)/fstarlib.cmxs - touch $@ - -$(FSTARLIB_DIR)/fstarlib.cmxs: - +$(MAKE) -C ../ulib/ml - +$(MAKE) -C ../ulib install-fstar-tactics - +$(MAKE) -C ../ulib - ulib-extra: +$(MAKE) -C ../ulib extra -tutorial: .fstarlib +tutorial: +$(MAKE) -C ../doc/tutorial regressions +$(MAKE) -C ../doc/book/code -utests: .fstarlib +utests: +$(MAKE) -C ../tests all -uexamples: .fstarlib +uexamples: +$(MAKE) -C ../examples all +$(MAKE) -C ../examples native_tactics.all +$(MAKE) -C ../examples semiring.all -ulong: - +$(MAKE) utest-prelude - +$(MAKE) uregressions-ulong - ctags: ctags --exclude=boot_fsts --exclude=boot_fstis --exclude=ocaml-output -R . diff --git a/src/Makefile.boot b/src/Makefile.boot index 7a32bd214bf..ed0ab280af4 100644 --- a/src/Makefile.boot +++ b/src/Makefile.boot @@ -16,7 +16,13 @@ FSTAR_BOOT ?= $(FSTAR) # FSTAR_C: This is the way in which we invoke F* for boostrapping # -- we use automatic dependence analysis based on files in ulib, src/{basic, ...} and boot # -- MLish and lax tune type-inference for use with unverified ML programs -FSTAR_C=$(RUNLIM) $(FSTAR_BOOT) $(SIL) $(FSTAR_BOOT_OPTIONS) --cache_checked_modules --odir ocaml-output +DUNE_SNAPSHOT ?= $(FSTAR_HOME)/ocaml +OUTPUT_DIRECTORY = $(DUNE_SNAPSHOT)/fstar-lib/generated +FSTAR_C=$(RUNLIM) $(FSTAR_BOOT) $(SIL) $(FSTAR_BOOT_OPTIONS) --cache_checked_modules + +# Tests.* goes to fstar-tests, the rest to fstar-lib +OUTPUT_DIRECTORY_FOR = $(if $(findstring FStar_Tests_,$(1)),$(DUNE_SNAPSHOT)/fstar-tests/generated,$(DUNE_SNAPSHOT)/fstar-lib/generated) +FSTAR_C=$(RUNLIM) $(FSTAR_BOOT) $(SIL) $(FSTAR_BOOT_OPTIONS) --cache_checked_modules # Each "project" for the compiler is in its own namespace. We want to # extract them all to OCaml. Would be more convenient if all of them @@ -54,15 +60,16 @@ EXTRACT = $(addprefix --extract_module , $(EXTRACT_MODULES)) \ # ensures that if this rule is successful then %.checked.lax is more # recent than its dependences. %.checked.lax: - @echo "[LAXCHECK $(basename $(basename $(notdir $@)))]" + $(call msg, "LAXCHECK", $(basename $(basename $(notdir $@)))) $(Q)$(FSTAR_C) $< --already_cached '*,'-$(basename $(notdir $<)) $(Q)@touch -c $@ # And then, in a separate invocation, from each .checked.lax we # extract an .ml file -ocaml-output/%.ml: - @echo "[EXTRACT $(notdir $@)]" +%.ml: + $(call msg, "EXTRACT", $(notdir $@)) $(Q)$(BENCHMARK_PRE) $(FSTAR_C) $(notdir $(subst .checked.lax,,$<)) \ + --odir "$(call OUTPUT_DIRECTORY_FOR,"$@")" \ --codegen OCaml \ --extract_module $(basename $(notdir $(subst .checked.lax,,$<))) @@ -79,12 +86,15 @@ ocaml-output/%.ml: # the dependency analysis failed. .depend: - @echo "[DEPEND]" + $(call msg, "DEPEND") $(Q)$(FSTAR_C) --dep full \ fstar/FStar.Main.fst \ boot/FStar.Tests.Test.fst \ + --odir $(OUTPUT_DIRECTORY) \ $(EXTRACT) > ._depend - $(Q)mv ._depend .depend + @# We've generated deps for everything into fstar-lib/generated. + @# Here we fix up the .depend file to move tests out of the library. + $(Q)$(SED) 's,fstar-lib/generated/FStar_Test,fstar-tests/generated/FStar_Test,g' <._depend >.depend $(Q)mkdir -p $(CACHE_DIR) depend: .depend diff --git a/src/basic/FStar.Options.fst b/src/basic/FStar.Options.fst index 74551671382..fd1090e0eba 100644 --- a/src/basic/FStar.Options.fst +++ b/src/basic/FStar.Options.fst @@ -195,7 +195,6 @@ let defaults = ("MLish" , Bool false); ("no_default_includes" , Bool false); ("no_extract" , List []); - ("no_load_fstartaclib" , Bool false); ("no_location_info" , Bool false); ("no_smt" , Bool false); ("no_plugins" , Bool false); @@ -381,7 +380,6 @@ let get_max_ifuel () = lookup_opt "max_ifuel" let get_MLish () = lookup_opt "MLish" as_bool let get_no_default_includes () = lookup_opt "no_default_includes" as_bool let get_no_extract () = lookup_opt "no_extract" (as_list as_string) -let get_no_load_fstartaclib () = lookup_opt "no_load_fstartaclib" as_bool let get_no_location_info () = lookup_opt "no_location_info" as_bool let get_no_plugins () = lookup_opt "no_plugins" as_bool let get_no_smt () = lookup_opt "no_smt" as_bool @@ -947,11 +945,6 @@ let rec specs_with_types warn_unsafe : list (char * string * opt_type * string) Accumulated (PathStr "module name"), "Deprecated: use --extract instead; Do not extract code from this module"); - ( noshort, - "no_load_fstartaclib", - Const (Bool true), - "Do not attempt to load fstartaclib by default"); - ( noshort, "no_location_info", Const (Bool true), @@ -1777,7 +1770,6 @@ let no_default_includes () = get_no_default_includes () let no_extract s = get_no_extract() |> List.existsb (module_name_eq s) let normalize_pure_terms_for_extraction () = get_normalize_pure_terms_for_extraction () -let no_load_fstartaclib () = get_no_load_fstartaclib () let no_location_info () = get_no_location_info () let no_plugins () = get_no_plugins () let no_smt () = get_no_smt () diff --git a/src/basic/FStar.Options.fsti b/src/basic/FStar.Options.fsti index c51e518166d..e2543c9dbca 100644 --- a/src/basic/FStar.Options.fsti +++ b/src/basic/FStar.Options.fsti @@ -159,7 +159,6 @@ val ml_ish : unit -> bool val set_ml_ish : unit -> unit val no_default_includes : unit -> bool val no_extract : string -> bool -val no_load_fstartaclib : unit -> bool val no_location_info : unit -> bool val no_plugins : unit -> bool val no_smt : unit -> bool diff --git a/src/default.nix b/src/default.nix new file mode 100644 index 00000000000..5bda511e7cd --- /dev/null +++ b/src/default.nix @@ -0,0 +1,28 @@ +{ fstar, lib, ocamlPackages, stdenv, version }: + +stdenv.mkDerivation { + pname = "fstar-ocaml-snapshot"; + inherit version; + + src = lib.cleanSourceWith { + src = ./..; + filter = path: _: + let relPath = lib.removePrefix (toString ./.. + "/") (toString path); + in lib.any (lib.flip lib.hasPrefix relPath) [ "src" "ulib" ] + || (lib.hasPrefix "ocaml" relPath && !(lib.hasInfix "/generated/" relPath) + && !(lib.hasInfix "/dynamic/" relPath)) + || lib.hasSuffix ".common.mk" relPath; + }; + + preConfigure = '' + mkdir bin + cp ${fstar}/bin/fstar.exe bin + cd src/ocaml-output + ''; + + nativeBuildInputs = with ocamlPackages; [ ocaml menhir ]; + + enableParallelBuilding = true; + + installPhase = "mv ../../ocaml $out"; +} diff --git a/src/extraction/FStar.Extraction.ML.Util.fst b/src/extraction/FStar.Extraction.ML.Util.fst index dd8c7be4167..2f2295363a6 100644 --- a/src/extraction/FStar.Extraction.ML.Util.fst +++ b/src/extraction/FStar.Extraction.ML.Util.fst @@ -83,9 +83,20 @@ let mlexpr_of_range (r:Range.range) : mlexpr' = let cstr (s : string) : mlexpr = MLC_String s |> MLE_Const |> with_ty ml_string_ty in + let drop_path (s : string) : string = + match String.split ['/'] s with + | [] -> s + | l -> List.last l + in // This is not being fully faithful since it disregards // the use_range, but I assume that's not too bad. - MLE_App (mk_range_mle, [Range.file_of_range r |> cstr; + // + // We drop the path of the file to be independent of the machine + // where this was extracted. Otherwise we run into some headaches + // with CI, stability, and moving ml files between hosts. The idea + // is that the pathless filename is enough to locate the actual file, + // since it must have been loaded as a dependency by F*. + MLE_App (mk_range_mle, [Range.file_of_range r |> drop_path |> cstr; Range.start_of_range r |> Range.line_of_pos |> cint; Range.start_of_range r |> Range.col_of_pos |> cint; Range.end_of_range r |> Range.line_of_pos |> cint; diff --git a/src/extraction/ml/.merlin b/src/extraction/ml/.merlin deleted file mode 100644 index 808a46c1275..00000000000 --- a/src/extraction/ml/.merlin +++ /dev/null @@ -1,8 +0,0 @@ -PKG batteries -PKG compiler-libs -PKG zarith -PKG ppxlib - -B ../../ocaml-output/_build/src/ocaml-output -B ../../ocaml-output/_build/src/basic/ml -B ../../ocaml-output/_build/ulib/ml diff --git a/src/fstar/FStar.CheckedFiles.fst b/src/fstar/FStar.CheckedFiles.fst index 9545fc6e1b4..6ab4139b2ad 100644 --- a/src/fstar/FStar.CheckedFiles.fst +++ b/src/fstar/FStar.CheckedFiles.fst @@ -381,7 +381,7 @@ let load_module_from_cache = let fail msg cache_file = //Don't feel too bad if fn is the file on the command line //Also suppress the warning if already given to avoid a deluge - let suppress_warning = Options.should_verify_file fn || !already_failed in + let suppress_warning = Options.should_check_file fn || !already_failed in if not suppress_warning then begin already_failed := true; FStar.Errors.log_issue diff --git a/src/fstar/FStar.Main.fst b/src/fstar/FStar.Main.fst index 4b3bbbed957..79bc492b625 100644 --- a/src/fstar/FStar.Main.fst +++ b/src/fstar/FStar.Main.fst @@ -91,8 +91,6 @@ let load_native_tactics () = let cmxs_files = (modules_to_load@cmxs_to_load) |> List.map cmxs_file in if Options.debug_any () then Util.print1 "Will try to load cmxs files: %s\n" (String.concat ", " cmxs_files); - if not (Options.no_load_fstartaclib ()) then - Tactics.Load.try_load_lib (); Tactics.Load.load_tactics cmxs_files; iter_opt (Options.use_native_tactics ()) Tactics.Load.load_tactics_dir; () diff --git a/src/ocaml-output/Makefile b/src/ocaml-output/Makefile index d2f8eb78539..076a468c4ee 100644 --- a/src/ocaml-output/Makefile +++ b/src/ocaml-output/Makefile @@ -12,36 +12,12 @@ MENHIR=menhir #--explain --infer -la 1 --table OCAMLLEX=ocamllex FSTAR_OCAMLBUILD_EXTRAS ?= -cflag -g -# From the root -OCAMLBUILD_INCLUDES := \ - src/ocaml-output \ - src/basic/ml \ - src/parser/ml \ - src/fstar/ml \ - src/extraction/ml \ - src/prettyprint/ml \ - src/tactics/ml \ - src/tests/ml \ - ulib/ml - -OCAMLBUILD_INCLUDE_FLAGS := $(addprefix -I , $(OCAMLBUILD_INCLUDES)) - -OCAMLBUILD=cd ../../ && \ - ocamlbuild $(FSTAR_OCAMLBUILD_EXTRAS) \ - $(OCAMLBUILD_INCLUDE_FLAGS) \ - -j 4 -build-dir src/ocaml-output/_build \ - -use-ocamlfind - -COMPILER_ML_LIB=FStar_Util.cmx FStar_Compiler_Bytes.cmx \ - FStar_Getopt.cmx FStar_Range.cmx FStar_Platform.cmx \ - FStar_Unionfind.cmx -PARSER_ML_LIB=FStar_Parser_Util.cmx -PRETTYPRINT_ML_LIB=FStar_Pprint.cmx -GENERATED_FILES=parse.mly FStar_Parser_Parse.ml FStar_Version.ml intfiles - -# The directory where we install files when doing "make install". -# Overridden via the command-line by the OPAM invocation. -PREFIX=$(shell pwd)/fstar +FSTAR_HOME = ../.. +DUNE_SNAPSHOT ?= $(realpath $(FSTAR_HOME)/ocaml) +export DUNE_SNAPSHOT + +FStar_Parser_Parse_ml=$(DUNE_SNAPSHOT)/fstar-lib/generated/FStar_Parser_Parse.ml + # The string "Madoko" if madoko is installed, something else otherwise. MADOKO = $(shell madoko --version 2>/dev/null | cut -c -6) DOS2UNIX=$(shell which dos2unix >/dev/null 2>&1 && echo dos2unix || echo true) @@ -54,14 +30,12 @@ ifdef INSTALL_EXEC else INSTALL_EXEC := install endif +export INSTALL_EXEC # Final sanity check for the OCaml version OCAML_BRANCH=$(shell ocaml get_branch.ml) -# Complete build: generate fstar.exe and derive a fresh F#-compatible parser -# from our reference parser (i.e. ../parser/parse.mly) using Menhir (if -# possible). -all: ../../bin/fstar.exe ../../bin/fstar.ocaml ../../bin/tests.exe install-compiler-lib +all: dune-snapshot # We derive parse.mly in two ways: # - if we have menhir, we generate it from from the Menhir parser @@ -72,38 +46,34 @@ parse.mly: ../parser/parse.mly ifeq ($(HAS_VALID_MENHIR), 1) @# TODO : call menhir directly when positions are fixed instead of @# letting OCamlbuild go through ocamlyacc - @echo "[MENHIR PREPROCESS]" + $(call msg, "MENHIR PREPROCESS") $(Q)$(MENHIR) --only-preprocess-for-ocamlyacc $< > $@ else $(error Correct version of menhir not found (needs a version newer than $(MENHIR_MIN_VERSION))) endif -# https://stackoverflow.com/questions/38294095/ocaml-how-to-solve-findlib-warnings-of-multiple-cmis -FSTAR_MAIN_NATIVE=_build/src/fstar/ml/main.native -$(FSTAR_MAIN_NATIVE): export OCAMLFIND_IGNORE_DUPS_IN = $(shell ocamlfind query compiler-libs) -$(FSTAR_MAIN_NATIVE): $(GENERATED_FILES) - @echo "[OCAMLBUILD]" - $(Q)$(OCAMLBUILD) $(notdir $(FSTAR_MAIN_NATIVE)) FStar_Syntax_Syntax.inferred.mli - -../../bin/fstar.exe: $(FSTAR_MAIN_NATIVE) - $(Q)rm -f $@ - $(Q)cp $^ $@ - -../../bin/fstar.ocaml: $(FSTAR_MAIN_NATIVE) - $(Q)rm -f $@ - $(Q)cp $^ $@ - -install-compiler-lib: $(FSTAR_MAIN_NATIVE) - @echo "[INSTALL fstar-compiler-lib]" - $(Q)mkdir -p ../../bin/fstar-compiler-lib/ - @# VD: forcing the recompilation of modules in ulib/tactics_ml whenever the compiler is rebuilt - @# in order to avoid inconsistent assumption errors between fstartaclib and compiler-lib - $(Q)$(FIND) ../../ulib/tactics_ml \( -name '*.cmi' -or -name '*.cmx' \) -exec rm {} \; - $(Q)$(FIND) . \( -name '*.cmi' -or -name '*.cmx' \) -exec cp {} ../../bin/fstar-compiler-lib/ \; - $(Q)sed "s/__FSTAR_VERSION__/$$(cat ../../version.txt)/" <../../ulib/ml/fstar-compiler-lib-META >../../bin/fstar-compiler-lib/META - $(Q)touch $@ - -FStar_Parser_Parse.ml: parse.mly +.PHONY: generated-files +generated-files: $(FStar_Parser_Parse_ml) $(FStar_Version_ml) + +.PHONY: dune-stdlib-snapshot dune-taclib-snapshot dune-snapshot dune-fstar-snapshot dune-verify-ulib source-files + +# FIXME: dune-fstar-snapshot should also depend on dune-verify-ulib, +# once we no longer lax-typecheck +dune-fstar-snapshot: + +$(MAKE) -C .. ocaml + +dune-verify-ulib: + +$(MAKE) -C ../../ulib + +dune-stdlib-snapshot: dune-verify-ulib + $(MAKE) -C ../../ulib -f Makefile.extract-stdlib dune-snapshot + +dune-taclib-snapshot: dune-verify-ulib + $(MAKE) -C ../../ulib -f Makefile.extract-taclib dune-snapshot + +dune-snapshot: generated-files dune-fstar-snapshot dune-stdlib-snapshot dune-taclib-snapshot + +$(FStar_Parser_Parse_ml): parse.mly @# We are opening the same module twice but we need these modules @# open for the definition of tokens $(Q)echo "open Prims" > $@ @@ -123,7 +93,7 @@ FStar_Parser_Parse.ml: parse.mly @# TODO: create a proper OCamlbuild rule for this production so that @# OCamlbuild knows how to generate parse.mly first (possibly using @# menhir) and removes the production as needed. - @echo "[OCAMLYACC]" + $(call msg, "OCAMLYACC") $(Q)ocamlyacc parse.mly 2> yac-log $(Q)cat yac-log @if [ "0$$(grep "shift/reduce" yac-log | sed 's/^\([0-9]\+\).*/\1/')" -gt 6 ]; then \ @@ -135,40 +105,6 @@ FStar_Parser_Parse.ml: parse.mly $(Q)cat parse.ml >> $@ $(Q)rm parse.ml parse.mli -../../bin/tests.exe: export OCAMLFIND_IGNORE_DUPS_IN = $(shell ocamlfind query compiler-libs) -../../bin/tests.exe: ../../bin/fstar.exe - $(Q)$(OCAMLBUILD) FStar_Tests_Main.native - $(Q)cp -f _build/src/tests/ml/FStar_Tests_Main.native $@ - -# always bump version for a release; always bump it when recompiling so that one -# can easily help debugging -VERSION=$(shell head -n 1 ../../version.txt) -ifeq ($(OS),Windows_NT) - ifeq ($(PROCESSOR_ARCHITECTURE),AMD64) - PLATFORM=Windows_x64 - else - PLATFORM=Windows_x86 - endif -else - PLATFORM=$(shell echo `uname`_`uname -m`) -endif -COMPILER = OCaml $(shell ocamlc -version) -DATE = $(shell date '+%Y-%m-%dT%H:%M:%S%z') -COMMIT = $(shell ../tools/get_commit) -COMMITDATE = $(shell git log --pretty=format:%ci -n 1 2>/dev/null || echo unset) # If a system does not have git, or we are not in a git repo, fallback with "unset" - -.PHONY: FStar_Version.ml -FStar_Version.ml: - @echo '[MAKE FStar_Version.ml]' - $(Q)echo 'let dummy () = ();;' >> $@ - $(Q)echo 'FStar_Options._version := "$(VERSION)";;' >> $@ - $(Q)echo 'FStar_Options._platform := "$(PLATFORM)";;' >> $@ - $(Q)echo 'FStar_Options._compiler := "$(COMPILER)";;' >> $@ - @# We deliberately use commitdate instead of date, so that rebuilds are no-ops - $(Q)echo 'FStar_Options._date := "$(COMMITDATE)";;' >> $@ - $(Q)echo 'FStar_Options._commit:= "$(COMMIT)";;' >> $@ - - # ------------------------------------------------------------------------------ # Preparing a release... these targets are not optimized and the Makefile is # actually used for scripting a bunch of stuff. @@ -180,83 +116,94 @@ FStar_Version.ml: # installs we cannot assume the user has git installed.) install_dir = cd ../../$(1) && find . -type f -exec $(INSTALL_EXEC) -m 644 -D {} $(PREFIX)/$(2)/{} \; -# install the standard library binary files -install_fstarlib = $(INSTALL_EXEC) -m 755 -D ../../$(1)/$(2) $(PREFIX)/lib/fstar/$(2) - # Install FStar into $(PREFIX) using the standard Unix directory -# structure. NOTE: this rule needs ocamlfind to install the fstarlib, -# fstar-tactics-lib and fstar-compiler-lib packages. It works with the -# opam package, but it has not been tested in any other settings. -install: all - @# Install the binary - $(INSTALL_EXEC) -m 755 -D $(FSTAR_MAIN_NATIVE) $(PREFIX)/bin/fstar.exe - @# Then the standard library - $(call install_dir,ulib,lib/fstar) - @# Then the binary library - cd ../../bin/fstarlib && ocamlfind install fstarlib * - cd ../../bin/fstar-compiler-lib && ocamlfind install fstar-compiler-lib * - cd ../../bin/fstar-tactics-lib && ocamlfind install fstar-tactics-lib * - @# Then the rest of the static files. - @# (those are not used in the opam package, not sure if their Makefiles work) +# structure. + +ifeq ($(OS),Windows_NT) + # On Cygwin, the `--prefix` option to dune only + # supports Windows paths. + FSTAR_PREFIX=$(shell cygpath -m $(PREFIX)) +else + FSTAR_PREFIX=$(PREFIX) +endif + +install: + @# Rebuild everything + +$(MAKE) -C $(FSTAR_HOME) + @# Install the binary and the binary library + cd $(DUNE_SNAPSHOT) && dune install --prefix=$(FSTAR_PREFIX) + @# Then the standard library sources and checked files + +$(MAKE) -C $(FSTAR_HOME)/ulib install + @# Then the rest + +$(MAKE) install-sides + +# The `install-sides` rule is intended to be run only by the nix flake. +# Indeed, nix needs to patch binaries created by OCaml (here fstar.exe), +# thus nix cannot use `dune install` + +.PHONY: install-sides +install-sides: + @# Then the examples (those now work from any F* installation flavor, sources, binary package or opam) + @# ucontrib is needed by examples/crypto $(call install_dir,examples,share/fstar/examples) - $(call install_dir,tests,share/fstar/tests) $(call install_dir,ucontrib,share/fstar/contrib) @# Then the tutorial ifeq ($(MADOKO),Madoko) @# Build the tutorial first +$(MAKE) -C ../../doc/tutorial endif - $(call install_dir,doc/tutorial,share/fstar/tutorial) + $(INSTALL_EXEC) -m 644 -D ../../doc/Makefile.include $(PREFIX)/share/fstar/doc/Makefile.include + $(call install_dir,doc/tutorial,share/fstar/doc/tutorial) NAME=fstar_$(VERSION)_$(PLATFORM) -# the `fexport` function takes a path relative to the top of the F* repo -# and exports the contents of that directory to the $(PREFIX) dir -fexport = cd ../.. && git archive "--format=tar" "--prefix=$(1)/" HEAD:$(1)/ |\ - tar -x -C $(PREFIX) - -# Similar, but exports every file instead of only those in version control. -fexport-all = cp -a ../../$(1) $(PREFIX)/$(1) - ifeq ($(OS),Windows_NT) Z3_NAME=z3.exe else Z3_NAME=z3 endif -Z3_DIR=$(shell dirname $$(which $(Z3_NAME))) +Z3_DIR=$(dir $(shell which $(Z3_NAME))) # Z3_LICENSE MUST be explicitly overridden if z3 is installed from an opam package. # See for instance $(FSTAR_HOME)/.docker/package.Dockerfile -Z3_LICENSE?=$(shell dirname $(Z3_DIR))/LICENSE.txt +ifndef Z3_LICENSE + Z3_LICENSE?=$(shell if test -f $(Z3_DIR)/LICENSE.txt ; then echo $(Z3_DIR)/LICENSE.txt ; elif test -f $(Z3_DIR)/../LICENSE.txt ; then echo $(Z3_DIR)/../LICENSE.txt ; fi) +endif # Create a zip / tar.gz package of FStar that contains a Z3 binary and # proper license files. + +ifeq ($(OS),Windows_NT) + # On Cygwin, the `--prefix` option to dune only + # supports Windows paths. + package_prefix=$(shell cygpath -m $(CURDIR))/fstar +else + package_prefix=$(CURDIR)/fstar +endif + +package_dir = cd ../../$(1) && find . -type f -exec $(INSTALL_EXEC) -m 644 -D {} $(package_prefix)/$(2)/{} \; + package: + if test -z "$(Z3_LICENSE)" ; then echo Please set Z3_LICENSE to the location of the license file for Z3 ; false ; fi @# Clean previous packages. - ! [ -d "$(PREFIX)" ] + ! [ -d "$(package_prefix)" ] rm -f $(NAME).zip $(NAME).tar.gz - mkdir -p $(PREFIX) - @# Install the F* binary - $(call fexport-all,bin) - @# Then the standard library. - $(call fexport-all,ulib) - mkdir -p $(PREFIX)/src/ocaml-output/ - cp ../../src/ocaml-output/FStar_Pervasives.ml $(PREFIX)/src/ocaml-output/ - cp ../../version.txt $(PREFIX)/ - cp ../../_tags $(PREFIX)/ - cp ../../.common.mk $(PREFIX)/ - @# Then the rest of the static files. - $(call fexport,ucontrib) + @# Install F* into the package + +PREFIX=$(package_prefix) $(MAKE) install + @# Make the F* ulib F# DLL (NOT the nuget package) + +PREFIX=$(package_prefix) $(MAKE) -C $(FSTAR_HOME)/ulib ulib-in-fsharp-dll + @# Then the version file. + cp ../../version.txt $(package_prefix)/ @# Documentation and licenses - cp ../../README.md ../../INSTALL.md ../../LICENSE ../../LICENSE-fsharp.txt $(PREFIX) - cp $(Z3_LICENSE) $(PREFIX)/LICENSE-z3.txt + cp ../../README.md ../../INSTALL.md ../../LICENSE ../../LICENSE-fsharp.txt $(package_prefix) + cp $(Z3_LICENSE) $(package_prefix)/LICENSE-z3.txt @# Z3 ifeq ($(OS),Windows_NT) - cp $(shell which libgmp-10.dll) $(PREFIX)/bin - cp $(Z3_DIR)/*.exe $(Z3_DIR)/*.dll $(Z3_DIR)/*.lib $(PREFIX)/bin - chmod a+x $(PREFIX)/bin/z3.exe $(PREFIX)/bin/*.dll + cp $(shell which libgmp-10.dll) $(package_prefix)/bin + cp $(Z3_DIR)/*.exe $(Z3_DIR)/*.dll $(Z3_DIR)/*.lib $(package_prefix)/bin + chmod a+x $(package_prefix)/bin/z3.exe $(package_prefix)/bin/*.dll zip -r -9 $(NAME).zip fstar else - cp $(Z3_DIR)/z3 $(PREFIX)/bin + cp $(Z3_DIR)/z3 $(package_prefix)/bin tar czf $(NAME).tar.gz fstar endif @@ -276,20 +223,15 @@ endif .PHONY: clean # Clean up all files generated by targets in _this_ Makefile +# We only remove the dynamic/ part of the OCaml snapshot. The rest +# should be removed only through the `clean-dune-snapshot` rule in the +# root Makefile. This is because `make all` no longer performs any +# bootstrapping, so `make clean` shouldn't clean up the whole +# snapshot. clean: - @echo "[CLEAN src/ocaml-output]" - $(Q)rm -rf _build - $(Q)rm -f $(GENERATED_FILES) + $(call msg, "CLEAN", "src/ocaml-output") + $(Q)rm -f $(FStar_Version_ml) parse.mly $(Q)rm -f *.tar.gz *.zip - $(Q)rm -f ../../bin/fstar-compiler-lib/*.cm[aiox] - $(Q)rm -f ../../bin/fstar-compiler-lib/*.cmx[as] - -# Purge (clean + delete *all* automatically generated files) -# if you do this you'll need to run `make ocaml` in `src` to get them back -purge: clean - rm -f *.ml || true - --include .depend - -intfiles: - +$(MAKE) -C ../../ulib/ml/ intfiles + $(Q)rm -f version_platform.txt + $(Q)rm -f yac-log + $(Q)rm -rf fstar diff --git a/src/parser/FStar.Parser.Dep.fst b/src/parser/FStar.Parser.Dep.fst index 25f7d6c19db..605c04f6831 100644 --- a/src/parser/FStar.Parser.Dep.fst +++ b/src/parser/FStar.Parser.Dep.fst @@ -1722,7 +1722,7 @@ let print_full (deps:deps) : unit = in //And, if this is not an interface, we also print out the dependences among the .ml files - // excluding files in ulib, since these are packaged in fstarlib.cmxa + // excluding files in ulib, since these are packaged in fstar_lib.cmxa let all_fst_files_dep, widened = if Options.cmi() then profile diff --git a/src/parser/FStar.Parser.ToDocument.fst b/src/parser/FStar.Parser.ToDocument.fst index 3358bb02c2e..937413d07b7 100644 --- a/src/parser/FStar.Parser.ToDocument.fst +++ b/src/parser/FStar.Parser.ToDocument.fst @@ -35,8 +35,9 @@ module BU = FStar.Compiler.Util (* !!! SIDE EFFECT WARNING !!! *) -(* There is 1 uses of global side-effect in the printer for : *) +(* There are 2 uses of global side-effect in the printer for : *) (* - Printing the comments [comment_stack] *) +(* - Printing tuples [unfold_tuples] *) let maybe_unthunk t = match t.tm with @@ -2199,8 +2200,11 @@ and p_atomicUniverse u = match u.tm with | _ -> failwith (Util.format1 "Invalid term in universe context %s" (term_to_string u)) let term_to_document e = + let old_unfold_tuples = !unfold_tuples in unfold_tuples := false; - p_term false false e + let res = p_term false false e in + unfold_tuples := old_unfold_tuples; + res let signature_to_document e = p_justSig e diff --git a/src/reflection/FStar.Reflection.Data.fsti b/src/reflection/FStar.Reflection.Data.fsti index a50784c2bc0..6662e67dd61 100644 --- a/src/reflection/FStar.Reflection.Data.fsti +++ b/src/reflection/FStar.Reflection.Data.fsti @@ -155,6 +155,6 @@ type exp = | Var of var | Mult of exp * exp -(* Needed so this appears in the ocaml output for fstar-tactics-lib *) +(* Needed so this appears in the ocaml output for the fstar tactics library *) type decls = list sigelt diff --git a/src/tactics/FStar.Tactics.Load.fst b/src/tactics/FStar.Tactics.Load.fst index fe1eec4b235..edce1f21cff 100644 --- a/src/tactics/FStar.Tactics.Load.fst +++ b/src/tactics/FStar.Tactics.Load.fst @@ -18,12 +18,6 @@ module FStar.Tactics.Load open FStar.Compiler.Effect open FStar.Compiler -let try_load_lib () : unit = - if FStar.Options.debug_any () then - FStar.Compiler.Util.print_error "Not attempting to load fstartaclib (Since this is the F# build)\n"; - () - -let load_lib () : unit = failwith "load_lib: Not implemented in F#" let load_tactic (tac: string) : unit = failwith "load_tactic: Not implemented in F#" let load_tactics (tacs: list string) = List.iter load_tactic tacs let load_tactics_dir (dir: string) : unit = failwith "load_tactics_dir: Not implemented in F#" diff --git a/src/tactics/FStar.Tactics.Load.fsti b/src/tactics/FStar.Tactics.Load.fsti index 41ca52edc7c..01ff624f6b1 100644 --- a/src/tactics/FStar.Tactics.Load.fsti +++ b/src/tactics/FStar.Tactics.Load.fsti @@ -18,8 +18,6 @@ module FStar.Tactics.Load open FStar.Compiler.Effect -val try_load_lib : unit -> unit -val load_lib : unit -> unit val load_tactics : list string -> unit val load_tactics_dir : string -> unit val compile_modules : string -> list string -> unit diff --git a/src/tools/get_commit b/src/tools/get_commit deleted file mode 100755 index 2b7f965407d..00000000000 --- a/src/tools/get_commit +++ /dev/null @@ -1,11 +0,0 @@ -#!/bin/sh - -sha="$(git log --pretty=format:%H -n 1)" -git diff --exit-code HEAD > /dev/null -clean=$? - -if [ 0 -eq $clean ]; then - echo $sha -else - echo "$sha (dirty)" -fi diff --git a/tests/bug-reports/Bug460.fst b/tests/bug-reports/Bug460.fst index f9ad697c407..8cfffd9cd14 100644 --- a/tests/bug-reports/Bug460.fst +++ b/tests/bug-reports/Bug460.fst @@ -39,7 +39,7 @@ let main = print_test () (* $ bin/fstar.exe examples/bug-reports/bug460.fst --codegen OCaml -$ ocamlfind ocamlopt -package batteries,stdint,fileutils,sqlite3,zarith -linkpkg -g -thread -w a+A-27 -I ulib/ml/ ulib/ml/fstarlib.cmxa Bug460.ml -o Bug460 +$ ocamlfind ocamlopt -package batteries,stdint,fileutils,sqlite3,zarith,fstar.lib -linkpkg -g -thread -w a+A-27 Bug460.ml -o Bug460 $ ./Bug460 Test (x = y) = true Test (x = z) = false diff --git a/tests/bug-reports/Makefile b/tests/bug-reports/Makefile index 80ef61a5357..b8c6f37bf85 100644 --- a/tests/bug-reports/Makefile +++ b/tests/bug-reports/Makefile @@ -136,7 +136,7 @@ CAPPED=$(subst Bug,Bug,$*) %.verify: %.fst - @echo '[CHECK $<]' + $(call msg, "CHECK", $<) $(Q)$(FSTAR) $(SIL) $^ @touch $@ @@ -161,7 +161,7 @@ iverify: $(subst .fsti,.iverify,$(SHOULD_VERIFY_INTERFACE_CLOSED)) verify-maybe-close: $(subst .fst,.verify,$(SHOULD_VERIFY_MAYBE_CLOSE)) %.not-verify: %.fst - @echo '[CHECKFAIL $<]' + $(call msg, "CHECKFAIL", $<) $(Q)(! $(FSTAR) $(SIL) $^ >/dev/null 2>&1) || (echo "Negative test failed ($@)!" ; false) @touch $@ diff --git a/tests/error-messages/Makefile b/tests/error-messages/Makefile index daf491e1974..39024f61624 100644 --- a/tests/error-messages/Makefile +++ b/tests/error-messages/Makefile @@ -35,7 +35,7 @@ include $(FSTAR_HOME)/examples/Makefile.common $(Q)cp $< $(patsubst %.output,%.expected,$<) clean: - @echo "[CLEAN]" + $(call msg, "CLEAN", $<) $(Q)rm -f .depend $(Q)rm -f *.check $(Q)rm -f *.output diff --git a/tests/friends/1/Makefile b/tests/friends/1/Makefile index 5ef627dc698..78cbd31e38c 100644 --- a/tests/friends/1/Makefile +++ b/tests/friends/1/Makefile @@ -8,11 +8,11 @@ include $(FSTAR_HOME)/examples/Makefile.include verify-all: $(ALL_CHECKED_FILES) .depend: - @echo "[DEPEND $(patsubst $(shell realpath $(FSTAR_HOME))/%,%/,$(shell pwd))]" + $(call msg, "DEPEND", $(patsubst $(shell realpath $(FSTAR_HOME))/%,%/,$(shell pwd))) $(Q)$(FSTAR) --dep full $(wildcard *.fst *.fsti) > .depend %.checked: - @echo "[CHECK $<]" + $(call msg, "CHECK", $<) $(Q)$(FSTAR) $(SIL) --cache_checked_modules $< $(Q)touch -c $@ diff --git a/tests/friends/2/Makefile b/tests/friends/2/Makefile index 5ef627dc698..78cbd31e38c 100644 --- a/tests/friends/2/Makefile +++ b/tests/friends/2/Makefile @@ -8,11 +8,11 @@ include $(FSTAR_HOME)/examples/Makefile.include verify-all: $(ALL_CHECKED_FILES) .depend: - @echo "[DEPEND $(patsubst $(shell realpath $(FSTAR_HOME))/%,%/,$(shell pwd))]" + $(call msg, "DEPEND", $(patsubst $(shell realpath $(FSTAR_HOME))/%,%/,$(shell pwd))) $(Q)$(FSTAR) --dep full $(wildcard *.fst *.fsti) > .depend %.checked: - @echo "[CHECK $<]" + $(call msg, "CHECK", $<) $(Q)$(FSTAR) $(SIL) --cache_checked_modules $< $(Q)touch -c $@ diff --git a/tests/friends/3/Makefile b/tests/friends/3/Makefile index 5ef627dc698..78cbd31e38c 100644 --- a/tests/friends/3/Makefile +++ b/tests/friends/3/Makefile @@ -8,11 +8,11 @@ include $(FSTAR_HOME)/examples/Makefile.include verify-all: $(ALL_CHECKED_FILES) .depend: - @echo "[DEPEND $(patsubst $(shell realpath $(FSTAR_HOME))/%,%/,$(shell pwd))]" + $(call msg, "DEPEND", $(patsubst $(shell realpath $(FSTAR_HOME))/%,%/,$(shell pwd))) $(Q)$(FSTAR) --dep full $(wildcard *.fst *.fsti) > .depend %.checked: - @echo "[CHECK $<]" + $(call msg, "CHECK", $<) $(Q)$(FSTAR) $(SIL) --cache_checked_modules $< $(Q)touch -c $@ diff --git a/tests/ide/Makefile.common b/tests/ide/Makefile.common index f5d525009a1..4e588280163 100644 --- a/tests/ide/Makefile.common +++ b/tests/ide/Makefile.common @@ -51,11 +51,11 @@ JSON_CLEANUP:=python ../cleanup.py # ‘fstar-write-transcript’, or possibly by ‘make build’) and save it as # ‘.out.expected’. %.out.accept: %.out - @echo '[ACCEPT $<]' + $(call msg, "ACCEPT", $<) $(Q)$(JSON_CLEANUP) "$<.expected" < "$<" # Verify that a given output matches the corresponding input %.out.check: %.out %.out.expected - @echo '[DIFF $<]' + $(call msg, "DIFF", $<) $(Q)diff -u --strip-trailing-cr "$<.expected" "$<" $(Q)touch $@ diff --git a/tests/ide/emacs/Makefile b/tests/ide/emacs/Makefile index 1760606f0cf..ff302028a46 100644 --- a/tests/ide/emacs/Makefile +++ b/tests/ide/emacs/Makefile @@ -7,6 +7,6 @@ FSTAR:=${FSTAR_HOME}/bin/fstar.exe $(SMT) --ide --warn_error -282 # (otherwise the order of fields in JSON dictionaries might vary across runs) # We turn off the .checked file cache so we don't get any races in CI %.out: %.in $(FSTAR_HOME)/bin/fstar.exe - @echo '[OUT_IDE $<]' + $(call msg, "OUT_IDE", $<) $(Q)$(eval FST := $(firstword $(subst ., ,$<))) $(Q)$(FSTAR) --cache_off "$(realpath ${FST}.fst)" < "$<" | $(JSON_CLEANUP) "$@" diff --git a/tests/ide/lsp/Makefile b/tests/ide/lsp/Makefile index 163a322e71a..019b4c53a50 100644 --- a/tests/ide/lsp/Makefile +++ b/tests/ide/lsp/Makefile @@ -7,6 +7,6 @@ FSTAR:=${FSTAR_HOME}/bin/fstar.exe $(SMT) --lsp --warn_error -282 # (otherwise the order of fields in JSON dictionaries might vary across runs) # We turn off the .checked file cache so we don't get any races in CI %.out: %.in $(FSTAR_HOME)/bin/fstar.exe - @echo '[OUT_LSP $<]' + $(call msg, "OUT_LSP", $<) $(Q)$(FSTAR) < "$<" 2>&1 | $(JSON_CLEANUP) "$@" diff --git a/tests/incl/Makefile b/tests/incl/Makefile index f8dce263cb1..673841a000c 100644 --- a/tests/incl/Makefile +++ b/tests/incl/Makefile @@ -18,11 +18,11 @@ all: uall uall: $(POSTARGETS) $(NEGTARGETS) $(POSTARGETS): %.pver: % - @echo "[CHECK $(basename $(notdir $@))]" + $(call msg, "CHECK", $(basename $(notdir $@))) $(Q)$(FSTAR) $(SIL) --include $^ --odir $^ Test.fst $(NEGTARGETS): %.nver: % - @echo "[CHECKFAIL $(basename $(notdir $@))]" + $(call msg, "CHECKFAIL", $(basename $(notdir $@))) $(Q)! $(FSTAR) $(SIL) --include $^ --odir $^ Test.fst > $^/error.log 2>&1 @echo $^ failed as expected diff --git a/tests/machine_integers/Makefile b/tests/machine_integers/Makefile index 233da7b4a43..10160d444f2 100644 --- a/tests/machine_integers/Makefile +++ b/tests/machine_integers/Makefile @@ -13,14 +13,14 @@ all: $(patsubst %.fst,%.run,$(MODULES)) accept: $(patsubst %.fst,%.run-accept,$(MODULES)) %.exe: %.fst | out - @echo '[BUILD $(notdir $@)]' + $(call msg, "BUILD", $(notdir $@)) $(eval B := $(patsubst %.exe,%,$@)) $(Q)$(FSTAR) $(SIL) $(FSTAR_DEFAULT_ARGS) --odir out --codegen OCaml --extract '${B}' '${B}.fst' $(Q)/bin/echo -e '\n\nlet _ = main ()\n' >> out/${B}.ml $(Q)$(OCAMLOPT) out/${B}.ml -o $@ %.out: %.exe - @echo '[OUTPUT $(notdir $<)]' + $(call msg, "OUTPUT", $(notdir $@)) $(Q)./$< > $@ %.run: %.out diff --git a/tests/prettyprinting/Makefile b/tests/prettyprinting/Makefile index 9fa5a6303b1..beddbae8d28 100644 --- a/tests/prettyprinting/Makefile +++ b/tests/prettyprinting/Makefile @@ -20,11 +20,11 @@ printed: $(Q)mkdir -p $@ printed/%.fst: %.fst | printed - @echo "[PPRINT $(basename $(notdir $@))]" + $(call msg, "PPRINT", $(basename $(notdir $@))) $(Q)$(FSTAR) $(SIL) --print $< > $@ inplace/%.fst: %.fst | inplace - @echo "[PPRINT $(basename $(notdir $@))]" + $(call msg, "PPRINT", $(basename $(notdir $@))) $(Q)cp $< $@ $(Q)$(FSTAR) $(SIL) --print_in_place $@ @@ -45,7 +45,7 @@ inplace/%.fst: %.fst | inplace accept: $(patsubst %, %.accept, $(BASES)) clean: - @echo "[CLEAN]" + $(call msg, "CLEAN") $(Q)rm -rf printed inplace $(Q)rm -f .*.test.print $(Q)rm -f .*.test.inplace diff --git a/tests/struct/Makefile b/tests/struct/Makefile index 2a34314762d..e9e95114a02 100644 --- a/tests/struct/Makefile +++ b/tests/struct/Makefile @@ -25,14 +25,14 @@ all: uall uall: $(POSTARGETS) $(NEGTARGETS) $(POSTARGETS): %.pver: % - @echo "[CHECK $(basename $(notdir $@))]" + $(call msg, "CHECK", $(basename $(notdir $@))) $(Q)$(FSTAR) $(SIL) --include $(FSTAR_HOME)/ulib --include $^ --odir $^ Test.fst $(NEGTARGETS): %.nver: % - @echo "[CHECKFAIL $(basename $(notdir $@))]" + $(call msg, "CHECKFAIL", $(basename $(notdir $@))) $(Q)! $(FSTAR) $(SIL) --include $(FSTAR_HOME)/ulib --include $^ --odir $^ Test.fst > $^/error.log 2>&1 @echo $^ failed as expected clean: - @echo "[CLEAN]" + $(call msg, "CLEAN") $(Q)for f in $(NEGTESTS) ; do rm -f $$f/error.log ; done diff --git a/tests/tactics/Makefile b/tests/tactics/Makefile index 5bb0ac1c722..b0d903477bd 100644 --- a/tests/tactics/Makefile +++ b/tests/tactics/Makefile @@ -9,7 +9,7 @@ include $(FSTAR_HOME)/examples/Makefile.common verify-all: $(CACHE_DIR) $(addsuffix .checked, $(addprefix $(CACHE_DIR)/, $(FSTAR_FILES))) clean: - @echo "[CLEAN]" + $(call msg, "CLEAN") $(Q)rm -f .depend $(Q)rm -rf _cache $(Q)rm -rf _output diff --git a/ulib/.gitignore b/ulib/.gitignore index a8ce6a7994e..74c9cc744a8 100644 --- a/ulib/.gitignore +++ b/ulib/.gitignore @@ -1,14 +1,7 @@ *.fst-ver *.fsti-ver *.mgen -ml/extracted -ml/fstarlib.mllib -tactics_ml/extracted -tactics_ml/fstarlib_leftovers -tactics_ml/fstartaclib.mllib -.depend.extract -.depend.extract.fsharp -.depend.extract.rsp +.depend* fs/extracted [Bb]in/ [Oo]bj/ diff --git a/ulib/FStar.Tactics.Typeclasses.fst b/ulib/FStar.Tactics.Typeclasses.fst index ffac34ab991..5a8ddf0bb63 100644 --- a/ulib/FStar.Tactics.Typeclasses.fst +++ b/ulib/FStar.Tactics.Typeclasses.fst @@ -15,8 +15,6 @@ *) module FStar.Tactics.Typeclasses -(* TODO: This must be in the FStar.Tactics.* namespace or we fail to build - * fstarlib. That seems silly, but I forget the details of the library split. *) open FStar.List.Tot open FStar.Tactics module T = FStar.Tactics diff --git a/ulib/Makefile b/ulib/Makefile index 0ba3f5a3c9c..d58a52db8a2 100644 --- a/ulib/Makefile +++ b/ulib/Makefile @@ -1,4 +1,4 @@ -.PHONY: all benchmark extra install-fstarlib install-fstar-tactics rebuild clean_checked clean_ocaml clean fstardoc +.PHONY: all benchmark extra clean_checked clean fstardoc ulib-in-fsharp FSTAR_HOME=.. @@ -18,165 +18,28 @@ extra: .cache .cache: mkdir -p .cache + + +include $(FSTAR_HOME)/ulib/ml/Makefile.realized include $(FSTAR_HOME)/ulib/ml/Makefile.include include $(FSTAR_HOME)/.common.mk -# GM: These dependencies suck, but are needed. -fstarlib.mgen: *.fst *.fsti experimental/*.fst experimental/*.fsti legacy/*.fst legacy/*.fsti - @echo '[PREPARE fstarlib]' - $(Q)mkdir -p ml/extracted - $(Q)rm -f .depend.extract - +$(Q)OUTPUT_DIRECTORY=ml/extracted \ - EXTRACT_MODULES="--extract '-Prims +FStar +LowStar -FStar.Tactics -FStar.Reflection -FStar.InteractiveHelpers $(NOEXTRACT_MODULES)'" \ - $(MAKE) -f Makefile.extract all-ml - @# the next cp is done because FStar_Pervasives.ml is needed to bootstrap the compiler - @# we could follow this style for other files too, e.g., FStar_Option.ml - $(Q)cp ../src/ocaml-output/FStar_Pervasives.ml ml/extracted - $(Q)touch fstarlib.mgen - -# NOTE: fstarlib_leftovers.ml takes directories that MUST NOT end with / -FSTARLIB_LEFTOVERS=$(shell ocaml fstarlib_leftovers.ml +ml +ml/extracted -../bin/fstar-compiler-lib) -fstartaclib.mgen: fstarlib.mgen - @echo '[PREPARE fstartaclib]' - $(Q)mkdir -p tactics_ml/extracted - $(Q)rm -f .depend.extract - +$(Q)OUTPUT_DIRECTORY=tactics_ml/extracted \ - CODEGEN=Plugin \ - EXTRACT_MODULES="--extract '+FStar.Tactics +FStar.Reflection $(NOEXTRACT_MODULES) +Steel.Effect.Common +Steel.ST.GenElim.Base +FStar.InteractiveHelpers'" \ - $(MAKE) -f Makefile.extract all-ml - $(Q)mkdir -p tactics_ml/fstarlib_leftovers - $(Q)cp $(FSTARLIB_LEFTOVERS) tactics_ml/fstarlib_leftovers - $(Q)touch fstartaclib.mgen - -ulib-in-fsharp: - +$(MAKE) -f Makefile.extract.fsharp all-fs - +$(MAKE) -C fs/VS - -###################################################### -# OCaml extraction of fstarlib and fstar-tactics-lib # -###################################################### - -FSTAR_BIN := $(realpath $(FSTAR_HOME)/bin) -ifeq ($(OS),Windows_NT) - OCAMLPATH_SEP=; - FSTAR_BIN := $(shell cygpath -m $(FSTAR_BIN)) -else - OCAMLPATH_SEP=: -endif - -OCAMLPATH:=$(FSTAR_BIN)$(OCAMLPATH_SEP)$(OCAMLPATH) - -FSTAR_OCAMLBUILD_EXTRAS ?= -cflag -g -OCAMLBUILD=cd ../ && OCAMLPATH="$(OCAMLPATH)" OCAMLFIND_IGNORE_DUPS_IN="`ocamlc -where`/compiler-libs" ocamlbuild $(FSTAR_OCAMLBUILD_EXTRAS) -use-ocamlfind - -# relative to ulib -DIRS_WITH_FSTARLIB_ML_FILES = ml experimental/ml ml/extracted -DIRS_WITH_TACLIB_ML_FILES = tactics_ml tactics_ml/extracted tactics_ml/fstarlib_leftovers - -FSTARLIB_OCAMLBUILD=$(OCAMLBUILD) -build-dir ulib/ml/_build \ - $(addprefix -I ulib/,$(DIRS_WITH_FSTARLIB_ML_FILES)) - -TACLIB_OCAMLBUILD=$(OCAMLBUILD) -build-dir ulib/tactics_ml/_build \ - $(addprefix -I ulib/,$(DIRS_WITH_TACLIB_ML_FILES)) - -ml/fstarlib.mllib: fstarlib.mgen $(wildcard $(addsuffix /*.ml,$(DIRS_WITH_FSTARLIB_ML_FILES))) - ./gen_mllib.sh $(DIRS_WITH_FSTARLIB_ML_FILES) > $@ - -# Please don't create an empty fstartactics.ml: ocamlbuild < 0.11 gives higher -# priority to its cmx -> cmxs rule than to the cmxa -> cmx one, so an empty -# fstartactics.ml will yield an empty fstarlib.cmxs (unless you add a .mldylib). -# (see `https://github.com/ocaml/ocamlbuild/releases/tag/0.11.0') -# --- -# Having to isolate fstarlib_leftovers is unpleasant. Ideally, we'd much rather -# dynlink fstarlib into the compiler before dynlinking fstartaclib. But doing -# this naively is causes random segfaults, bus errors, and OOM errors coming -# from the GC. We (CPC, VD) surmise the issue stems from loading the same -# modules twice, once from the compiler and once from fstarlib (the compiler -# relies on some realized files from ulib/ml). Our workaround is to include in -# fstartaclib all fstarlib modules not already in the compiler. -TACLIB_ML=$(wildcard $(addsuffix /*.ml,$(DIRS_WITH_TACLIB_ML_FILES))) -tactics_ml/fstartaclib.mllib: fstartaclib.mgen $(TACLIB_ML) - ./gen_mllib.sh $(DIRS_WITH_TACLIB_ML_FILES) > $@ - -FSTARLIB_OBJECTS=fstarlib.a fstarlib.cma fstarlib.cmxs fstarlib.cmxa -TACLIB_OBJECTS=fstartaclib.cma fstartaclib.cmxs fstartaclib.cmxa - -.PHONY: _intfiles _fstarlib _fstartaclib - -_intfiles: - @echo '[MAKE intfiles]' - +$(Q)$(MAKE) -C ml/ intfiles - -_fstarlib: ml/fstarlib.mllib _intfiles - @echo '[OCAMLBUILD fstarlib]' - $(Q)$(FSTARLIB_OCAMLBUILD) $(FSTARLIB_OBJECTS) - -_fstartaclib: tactics_ml/fstartaclib.mllib _intfiles - @echo '[OCAMLBUILD fstartaclib]' - $(Q)$(TACLIB_OCAMLBUILD) $(TACLIB_OBJECTS) - -$(FSTARLIB_OBJECTS): _fstarlib -$(TACLIB_OBJECTS): _fstartaclib - -# No trailing slash please -FSTARLIB_DIR=../bin/fstarlib -TACLIB_DIR=../bin/fstar-tactics-lib - -FSTARLIB_OUTPUTS=$(addprefix ml/_build/ulib/, \ - $(addsuffix /*.cmi,$(DIRS_WITH_FSTARLIB_ML_FILES)) \ - $(addsuffix /*.cmx,$(DIRS_WITH_FSTARLIB_ML_FILES)) \ - $(addprefix ml/,$(FSTARLIB_OBJECTS))) - -TACLIB_OUTPUTS=$(addprefix tactics_ml/_build/ulib/, \ - $(addsuffix /*.cmi,$(DIRS_WITH_TACLIB_ML_FILES)) \ - $(addsuffix /*.cmx,$(DIRS_WITH_TACLIB_ML_FILES)) \ - $(addprefix tactics_ml/,$(TACLIB_OBJECTS))) - -install-fstarlib: $(FSTARLIB_DIR)/META -install-fstar-tactics: $(TACLIB_DIR)/META - -# This rule is doing an atomic copy into FSTARLIB_DIR, -# so we never see a partial file in bin/ -$(FSTARLIB_DIR)/META: $(FSTARLIB_OBJECTS) - @echo '[INSTALL fstarlib]' - $(Q)rm -rf $(FSTARLIB_DIR)_new - $(Q)mkdir -p $(FSTARLIB_DIR)_new - $(Q)cp $(FSTARLIB_OUTPUTS) $(FSTARLIB_DIR)_new - $(Q)sed "s/__FSTAR_VERSION__/$$(cat ../version.txt)/" $(FSTARLIB_DIR)_new/META - $(Q)rm -rf $(FSTARLIB_DIR) - $(Q)mv $(FSTARLIB_DIR)_new $(FSTARLIB_DIR) - -# See comment for $(FSTARLIB_DIR)/META -$(TACLIB_DIR)/META: $(TACLIB_OBJECTS) - @echo '[INSTALL fstartaclib]' - $(Q)rm -rf $(TACLIB_DIR)_new - $(Q)mkdir -p $(TACLIB_DIR)_new - $(Q)cp $(TACLIB_OUTPUTS) $(TACLIB_DIR)_new - $(Q)sed "s/__FSTAR_VERSION__/$$(cat ../version.txt)/" $(TACLIB_DIR)_new/META - $(Q)rm -rf $(TACLIB_DIR) - $(Q)mv $(TACLIB_DIR)_new $(TACLIB_DIR) +# Builds ulibfs.dll and the nuget package +ulib-in-fsharp: ulib-in-fsharp-dll + +$(MAKE) -f Makefile.extract.fsharp nuget + +ulib-in-fsharp-dll: all + +$(MAKE) -f Makefile.extract.fsharp dll + +.PHONY: ulib-in-fsharp-dll clean_checked: $(Q)rm -f *.checked .cache/*.checked .depend -clean: clean_checked clean_ocaml - @echo "[CLEAN ulib/]" - $(Q)rm -f .depend.extract.rsp - $(Q)rm -f .depend.extract - $(Q)rm -f *.mgen +clean: clean_checked + $(call msg, "CLEAN", "ulib/") + $(Q)rm -f .depend.* $(Q)rm -f *.checked.lax .cache/*.checked.lax - $(Q)rm -fr ml/extracted tactics_ml/extracted tactics_ml/fstarlib_leftovers - -clean_ocaml: - @echo "[CLEAN OCAML LIBS]" - $(Q)rm -f ml/*.mllib tactics_ml/*.mllib tactics_ml/*.mldylib *~ - $(Q)rm -rf $(FSTARLIB_DIR) - $(Q)rm -rf $(TACLIB_DIR) - $(Q)rm -rf ml/_build tactics_ml/_build # ← ocamlbuild -clean does not work on Cygwin - -rebuild: clean_ocaml - +$(Q)$(MAKE) install-fstarlib - +$(Q)$(MAKE) install-fstar-tactics DOC_FILES=prims.fst FStar.Pervasives.Native.fst FStar.Pervasives.fst \ FStar.Squash.fsti FStar.Classical.fsti FStar.BigOps.fsti \ @@ -197,3 +60,9 @@ $(DOC_DIR): $(DOC_DIR)/%.md: % ../bin/fstar --print_in_place $^ python3 ../.scripts/fstardoc/fstardoc.py $^ > $@ + +INSTALL_EXEC ?= install +export INSTALL_EXEC + +install: all + +./install-ulib.sh diff --git a/ulib/Makefile.extract b/ulib/Makefile.extract deleted file mode 100644 index a4a5ae0b482..00000000000 --- a/ulib/Makefile.extract +++ /dev/null @@ -1,47 +0,0 @@ -.PHONY: indent extra - -FSTAR_HOME=.. -include $(FSTAR_HOME)/.common.mk -include gmake/z3.mk -include gmake/fstar.mk - -#AR: 01/03 -NOEXTRACT_FILES=$(wildcard experimental/Steel.*.fst experimental/Steel.*.fsti) - -#The steel files are included below for native compilation of the framing tactic - -FSTAR_FILES:=$(filter-out $(NOEXTRACT_FILES), \ - $(wildcard FStar.*.fst FStar.*.fsti) \ - $(wildcard LowStar.*.fst LowStar.*.fsti) \ - $(wildcard legacy/*fst legacy/*fsti) \ - $(wildcard experimental/*fst experimental/*fsti)) \ - Steel.Effect.Common.fst \ - Steel.ST.GenElim.Base.fst \ - $(wildcard FStar.InteractiveHelpers.*.fst) - -CODEGEN ?= OCaml -MY_FSTAR=$(RUNLIM) $(FSTAR) $(SIL) $(OTHERFLAGS) --lax --cache_checked_modules --odir $(OUTPUT_DIRECTORY) --cache_dir .cache.lax - -%.checked.lax: - @echo "[LAXCHECK $(basename $(notdir $@))]" - $(Q)$(MY_FSTAR) $< --already_cached '*,'-$(basename $(notdir $<)) - $(Q)touch -c $@ - -# And then, in a separate invocation, from each .checked.lax we -# extract an .ml file -$(OUTPUT_DIRECTORY)/%.ml: - @echo "[EXTRACT $(basename $(notdir $@))]" - $(Q)$(MY_FSTAR) $(subst .checked.lax,,$(notdir $<)) --codegen $(CODEGEN) --extract_module $(basename $(notdir $(subst .checked.lax,,$<))) - -.depend.extract: - $(Q)mkdir -p .cache.lax - @true $(shell rm -f .depend.extract.rsp) $(foreach f,$(FSTAR_FILES),$(shell echo $(f) >> .depend.extract.rsp)) - $(Q)$(MY_FSTAR) --dep full $(EXTRACT_MODULES) $(addprefix --include , $(INCLUDE_PATHS)) @.depend.extract.rsp > .depend.extract - @echo "[DEPEND]" - -depend.extract: .depend.extract - -include .depend.extract - -all-ml: $(ALL_ML_FILES) -lax-all: $(addsuffix .checked.lax, $(FSTAR_FILES)) diff --git a/ulib/Makefile.extract-stdlib b/ulib/Makefile.extract-stdlib new file mode 100644 index 00000000000..1e218369623 --- /dev/null +++ b/ulib/Makefile.extract-stdlib @@ -0,0 +1,48 @@ +.PHONY: indent extra + +FSTAR_HOME=.. +DUNE_SNAPSHOT ?= $(realpath $(FSTAR_HOME)/ocaml) + +include ml/Makefile.realized +NOEXTRACT_MODULES += +FStar.Pervasives -FStar.Pervasives.Native -FStar.Reflection -FStar.Tactics -Steel + +#The steel files are included below for native compilation of the framing tactic + +OUTPUT_DIRECTORY=$(DUNE_SNAPSHOT)/fstar-lib/generated + +include $(FSTAR_HOME)/.common.mk +include gmake/z3.mk +include gmake/fstar.mk + +FSTAR_FILES:=$(filter-out $(NOEXTRACT_FILES),$(wildcard *.fst *.fsti)) + +CODEGEN = OCaml +MY_FSTAR=$(RUNLIM) $(FSTAR) $(SIL) $(OTHERFLAGS) --cache_checked_modules --odir $(OUTPUT_DIRECTORY) --cache_dir .cache --warn_error @241 +EXTRACT_MODULES=--extract '* $(NOEXTRACT_MODULES)' + +# And then, in a separate invocation, from each .checked we +# extract an .ml file +$(OUTPUT_DIRECTORY)/%.ml: + $(call msg, "EXTRACT", $(basename $(notdir $@))) + $(Q)$(MY_FSTAR) $(subst .checked,,$(notdir $<)) --codegen $(CODEGEN) --extract_module $(basename $(notdir $(subst .checked,,$<))) + +.depend.extract-stdlib: + $(call msg, "DEPEND") + $(Q)mkdir -p .cache + $(Q)true $(shell rm -f .depend.extract-stdlib.rsp) $(foreach f,$(FSTAR_FILES),$(shell echo $(f) >> .depend.extract-stdlib.rsp)) + $(Q)$(MY_FSTAR) --dep full $(EXTRACT_MODULES) $(addprefix --include , $(INCLUDE_PATHS)) @.depend.extract-stdlib.rsp > .depend.extract-stdlib + +depend.extract-stdlib: .depend.extract-stdlib + +include .depend.extract-stdlib + +.PHONY: all-ml dune-snapshot intfiles + +# Prims is the only .fst (not fsti) with an Ocaml implementation +# so we do not need to extract it. +all-ml: $(filter-out %/prims.ml, $(ALL_ML_FILES)) + +intfiles: + +$(MAKE) -C ml intfiles + +dune-snapshot: all-ml intfiles diff --git a/ulib/Makefile.extract-taclib b/ulib/Makefile.extract-taclib new file mode 100644 index 00000000000..ffab83cc50d --- /dev/null +++ b/ulib/Makefile.extract-taclib @@ -0,0 +1,55 @@ +.PHONY: indent extra + +FSTAR_HOME=.. +DUNE_SNAPSHOT ?= $(realpath $(FSTAR_HOME)/ocaml) + +include ml/Makefile.realized + +#AR: 01/03 +NOEXTRACT_FILES=$(wildcard experimental/Steel.*.fst experimental/Steel.*.fsti) + +#The steel files are included below for native compilation of the framing tactic + +OUTPUT_DIRECTORY=$(DUNE_SNAPSHOT)/fstar-lib/generated + +include $(FSTAR_HOME)/.common.mk +include gmake/z3.mk +include gmake/fstar.mk + +FSTAR_FILES:=$(filter-out $(NOEXTRACT_FILES),$(wildcard *.fst *.fsti)) $(wildcard FStar.InteractiveHelpers.*.fst) + +ifneq ($(STAGE_EXPERIMENTAL),0) + FSTAR_FILES += \ + $(filter-out $(NOEXTRACT_FILES),$(wildcard experimental/*.fst experimental/*.fsti)) \ + Steel.Effect.Common.fst +ifneq ($(STAGE_EXPERIMENTAL),1) + FSTAR_FILES += \ + Steel.ST.GenElim.Base.fst +endif +endif + +CODEGEN = Plugin +MY_FSTAR=$(RUNLIM) $(FSTAR) $(SIL) $(OTHERFLAGS) --cache_checked_modules --odir $(OUTPUT_DIRECTORY) --cache_dir .cache --warn_error @241 +EXTRACT_MODULES=--extract '-FStar +FStar.Range +FStar.Reflection +FStar.Tactics $(NOEXTRACT_MODULES) -FStar.List.Tot.Properties -FStar.Int.Cast.Full +Steel.Effect.Common +Steel.ST.GenElim.Base +FStar.InteractiveHelpers' + +# And then, in a separate invocation, from each .checked we +# extract an .ml file +$(OUTPUT_DIRECTORY)/%.ml: + $(call msg, "EXTRACT", $(basename $(notdir $@))) + $(Q)$(MY_FSTAR) $(subst .checked,,$(notdir $<)) --codegen $(CODEGEN) --extract_module $(basename $(notdir $(subst .checked,,$<))) + +.depend.extract-taclib: + $(call msg, "DEPEND") + $(Q)mkdir -p .cache + $(Q)true $(shell rm -f .depend.extract-taclib.rsp) $(foreach f,$(FSTAR_FILES),$(shell echo $(f) >> .depend.extract-taclib.rsp)) + $(Q)$(MY_FSTAR) --dep full $(EXTRACT_MODULES) $(addprefix --include , $(INCLUDE_PATHS)) @.depend.extract-taclib.rsp > .depend.extract-taclib + +depend.extract-taclib: .depend.extract-taclib + +include .depend.extract-taclib + +.PHONY: all-ml dune-snapshot + +all-ml: $(ALL_ML_FILES) + +dune-snapshot: all-ml diff --git a/ulib/Makefile.extract.fsharp b/ulib/Makefile.extract.fsharp index 98469defc18..ef2ea72ac0d 100755 --- a/ulib/Makefile.extract.fsharp +++ b/ulib/Makefile.extract.fsharp @@ -1,6 +1,21 @@ .PHONY: indent extra -include ../src/Makefile.config +all: nuget + +ifndef FSTAR_HOME + FSTAR_EXE := $(shell which fstar.exe) + ifeq ($(FSTAR_EXE),) + # assuming F* source directory + FSTAR_HOME=.. + FSTAR_EXE := $(FSTAR_HOME)/bin/fstar.exe + else + FSTAR_HOME=$(dir $(FSTAR_EXE))/.. + endif + export FSTAR_HOME +endif +FSTAR_ULIB=$(shell if test -d $(FSTAR_HOME)/ulib ; then echo $(FSTAR_HOME)/ulib ; else echo $(FSTAR_HOME)/lib/fstar ; fi) +include $(FSTAR_ULIB)/gmake/z3.mk +include $(FSTAR_ULIB)/gmake/fstar.mk FSTAR_FILES:=$(wildcard *.fst *.fsti) \ $(wildcard experimental/*fst experimental/*fsti) @@ -9,21 +24,17 @@ OUTPUT_DIRECTORY=fs/extracted CODEGEN ?= FSharp -MY_FSTAR=$(FSTAR) $(OTHERFLAGS) --lax --cache_checked_modules --odir $(OUTPUT_DIRECTORY) --cache_dir .cache.lax - -%.checked.lax: - $(MY_FSTAR) $< --already_cached '*,'-$(basename $(notdir $<)) - touch -c $@ +MY_FSTAR=$(FSTAR) $(OTHERFLAGS) --already_cached '*' --warn_error @241 --cache_checked_modules --odir $(OUTPUT_DIRECTORY) --cache_dir .cache -# And then, in a separate invocation, from each .checked.lax we +# And then, in a separate invocation, from each .checked file we # extract an .fs file $(OUTPUT_DIRECTORY)/%.fs: - $(MY_FSTAR) $(subst .checked.lax,,$(notdir $<)) --codegen $(CODEGEN) --extract_module $(basename $(notdir $(subst .checked.lax,,$<))) + $(MY_FSTAR) $(subst .checked,,$(notdir $<)) --codegen $(CODEGEN) --extract_module $(basename $(notdir $(subst .checked,,$<))) .depend.extract.fsharp: - $(Q)mkdir -p .cache.lax - $(Q)$(MY_FSTAR) --extract 'FSharp:*;OCaml:None;krml:None' --dep full $(EXTRACT_MODULES) $(addprefix --include , $(INCLUDE_PATHS)) $(FSTAR_FILES) > .depend.extract.fsharp - @echo "[DEPEND]" + $(call msg, "DEPEND") + true $(shell rm -f .depend.extract.fsharp.rsp) $(foreach f,$(FSTAR_FILES),$(shell echo $(f) >> .depend.extract.fsharp.rsp)) + $(Q)$(MY_FSTAR) --extract 'FSharp:*;OCaml:None;krml:None' --dep full $(EXTRACT_MODULES) $(addprefix --include , $(INCLUDE_PATHS)) @.depend.extract.fsharp.rsp > .depend.extract.fsharp depend.extract.fsharp: .depend.extract.fsharp @@ -62,4 +73,10 @@ FS_FILES= \ all-fs: $(addprefix $(OUTPUT_DIRECTORY)/, $(FS_FILES)) -lax-all: $(addsuffix .checked.lax, $(FSTAR_FILES)) +.PHONY: all-fs nuget dll + +dll: all-fs + +$(MAKE) -C fs/VS build + +nuget: dll + +$(MAKE) -C fs/VS all diff --git a/ulib/Makefile.verify b/ulib/Makefile.verify index 254ced7f53a..1256204afe5 100644 --- a/ulib/Makefile.verify +++ b/ulib/Makefile.verify @@ -11,10 +11,23 @@ FLAKY=legacy/FStar.Relational.State.fst FSTAR_FILES := $(filter-out $(FLAKY), \ $(wildcard FStar.*.fst FStar.*.fsti) \ $(wildcard LowStar.*.fst LowStar.*.fsti) \ - $(wildcard Steel.*.fst Steel.*.fsti) \ $(wildcard legacy/*fst legacy/*fsti) \ - $(wildcard experimental/*fst experimental/*fsti)) - + ) + +ifneq ($(STAGE_EXPERIMENTAL),0) +FSTAR_FILES += $(filter-out $(FLAKY), \ + $(wildcard experimental/FStar.InteractiveHelpers.*fst experimental/FStar.InteractiveHelpers.*fsti) \ + experimental/Steel.Effect.Common.fst \ +) +ifneq ($(STAGE_EXPERIMENTAL),1) +FSTAR_FILES += experimental/Steel.ST.GenElim.Base.fst +ifneq ($(STAGE_EXPERIMENTAL),2) +FSTAR_FILES += $(filter-out $(FLAKY), \ + $(wildcard experimental/*fst experimental/*fsti) \ +) +endif +endif +endif WITH_CACHE_DIR=--cache_dir .cache --hint_dir .cache @@ -51,9 +64,10 @@ verify-core: $(filter-out $(addprefix %, $(addsuffix .checked, $(notdir $(EXTRA) verify-extra: $(filter $(addprefix %, $(addsuffix .checked, $(notdir $(EXTRA)))), $(ALL_CHECKED_FILES)) %.checked: - @echo "[CHECK $(basename $(notdir $@))]" + $(call msg, "CHECK", $(basename $(notdir $@))) @# MY_FSTAR is imported from ulib/gmake.Makefile.tmpl, so it does not @# contain the $(SIL) flag nor the $(RUNLIM) for monitoring resources. + @# You can debug with --debug $(basename $(notdir $<)) $(Q)$(RUNLIM) $(MY_FSTAR) $(SIL) $(COMPAT_INDEXED_EFFECTS) $< # Benchmarking rules diff --git a/ulib/default.nix b/ulib/default.nix new file mode 100644 index 00000000000..80f08de554f --- /dev/null +++ b/ulib/default.nix @@ -0,0 +1,20 @@ +{ fstar-dune, lib, stdenv, version, z3 }: + +stdenv.mkDerivation { + pname = "fstar-ulib"; + inherit version; + + src = lib.sourceByRegex ./.. [ "ulib.*" ".common.mk" ]; + + postPatch = '' + mkdir -p bin + cp ${fstar-dune}/bin/fstar.exe bin + export PATH="$(pwd)/bin:${z3}/bin:$PATH" + patchShebangs ulib/install-ulib.sh + cd ulib + ''; + + enableParallelBuilding = true; + + preInstall = "export PREFIX=$out"; +} diff --git a/ulib/fs/VS/Makefile b/ulib/fs/VS/Makefile index 7b13268b12d..c55ab611cc3 100644 --- a/ulib/fs/VS/Makefile +++ b/ulib/fs/VS/Makefile @@ -7,12 +7,33 @@ CONFIGURATION?=Release DOTNET_PARAMS = /verbosity:minimal /p:Configuration=$(CONFIGURATION) +ifndef FSTAR_HOME + FSTAR_EXE = $(shell which fstar.exe) + ifdef FSTAR_EXE + # assuming some ..../bin directory + FSTAR_HOME=$(dir $(FSTAR_EXE))/.. + else + # assuming F* source repository + FSTAR_HOME=../../.. + endif +endif + +PREFIX?=$(FSTAR_HOME) + + # -------------------------------------------------------------------- -.PHONY: all install-packages +.PHONY: all install-packages build + +all: build + $(DOTNET) pack ../ulibfs.fsproj -o $(PREFIX)/nuget -all: install-packages - $(DOTNET) build UlibFS.sln - $(DOTNET) pack ../ulibfs.fsproj -o ../../../nuget/ +# .NET convention: .dll files go to bin/ instead of lib/fstar +# TODO: in that case, we should rename ulibfs.dll into fstar_ulibfs.dll +# to avoid clashes with other .dll files in bin/ . This is one reason +# why we do not include this rule in `make install`, but only in +# `make package` +build: install-packages + $(DOTNET) build UlibFS.sln -o $(PREFIX)/bin install-packages: $(DOTNET) restore $(DOTNET_PARAMS) UlibFS.sln diff --git a/ulib/fs/ulibfs.fsproj b/ulib/fs/ulibfs.fsproj index 7b10261de6c..8e0635e04aa 100644 --- a/ulib/fs/ulibfs.fsproj +++ b/ulib/fs/ulibfs.fsproj @@ -2,7 +2,7 @@ netstandard2.0 --nowarn:0086 --mlcompatibility --nologo - ..\..\bin\ + Library false True false diff --git a/ulib/fstarlib_leftovers.ml b/ulib/fstarlib_leftovers.ml deleted file mode 100644 index 1aa6cd89713..00000000000 --- a/ulib/fstarlib_leftovers.ml +++ /dev/null @@ -1,53 +0,0 @@ -(* -List fstarlib files not included in the compiler. - -We need this to compile a clean version of fstar-tactics-lib, containing no -duplicate copies of modules included in the compiler. - -Usage: ocaml fstarlib_leftovers.ml {+|-}dir1 {+|-}dir2 ... - -NOTE: each dir MUST NOT end with / or \ -*) - -let starts_with input prefix = - let len_prefix = String.length prefix in - String.length input >= len_prefix && - String.sub input 0 len_prefix = prefix - -let libs marker exts = - let len_marker = String.length marker in - Array.fold_left - (fun accu folder -> - if starts_with folder marker - then - let folder = String.sub folder len_marker (String.length folder - len_marker) in - if Sys.file_exists folder && Sys.is_directory folder - then - Array.fold_left - (fun accu fname -> - let name = Filename.remove_extension fname in - let ext = Filename.extension fname in - if List.mem ext exts - then - (name, Filename.concat folder fname) :: accu - else - accu - ) - accu - (Sys.readdir folder) - else - accu - else - accu - ) - [] - Sys.argv - -let _ = - let excluded = List.map fst (libs "-" [".cmi"]) in - List.iter - (fun (name, path) -> - if not (List.mem name excluded) - then print_endline path - ) - (libs "+" [".ml"]) diff --git a/ulib/gmake/Makefile.tmpl b/ulib/gmake/Makefile.tmpl index 8bc42bbe06d..77d9384ba85 100644 --- a/ulib/gmake/Makefile.tmpl +++ b/ulib/gmake/Makefile.tmpl @@ -51,8 +51,9 @@ _tags: $(OUTPUT_DIRECTORY)/%.ml: $(MY_FSTAR) $(subst .checked,,$(notdir $<)) --codegen OCaml --extract_module $(subst .fst.checked,,$(notdir $<)) -$(OCAML_EXE): _tags $(ML_FILES) $(TOP_LEVEL_FILE) $(FSTAR_HOME)/bin/fstarlib/fstarlib.cmxa - OCAMLPATH="$(FSTAR_HOME)/bin" ocamlbuild -I $(OUTPUT_DIRECTORY) -use-ocamlfind -pkg fstarlib $(subst .ml,.native,$(TOP_LEVEL_FILE)) +# FIXME: ocamlbuild is deprecated, use dune instead +$(OCAML_EXE): _tags $(ML_FILES) $(TOP_LEVEL_FILE) + OCAMLPATH="$(FSTAR_HOME)/lib" ocamlbuild -I $(OUTPUT_DIRECTORY) -use-ocamlfind -pkg fstar.lib $(subst .ml,.native,$(TOP_LEVEL_FILE)) mv _build/$(subst .ml,.native,$(TOP_LEVEL_FILE)) $@ test.ocaml: $(OCAML_EXE) @@ -69,9 +70,6 @@ test.karamel: $(KRML_EXE) test: test.karamel test.ocaml -$(FSTAR_HOME)/bin/fstarlib/fstarlib.cmxa: - +$(MAKE) -C $(FSTAR_HOME)/ulib/ml - basic_clean: rm -rf _build $(OUTPUT_DIRECTORY) *~ *.checked $(OCAML_EXE) $(KRML_EXE) .depend .depend.rsp diff --git a/ulib/install-ulib.sh b/ulib/install-ulib.sh new file mode 100755 index 00000000000..1b8de8f1d16 --- /dev/null +++ b/ulib/install-ulib.sh @@ -0,0 +1,9 @@ +#!/bin/bash +set -e +set -x + +for f in *.fst *.fsti experimental/*.fst experimental/*.fsti .cache/*.checked ml/Makefile.realized ml/Makefile.include gmake/* legacy/*.fst legacy/*.fsti Makefile.extract.fsharp fs/* fs/VS/* ; do + if [[ -f $f ]] ; then + "$INSTALL_EXEC" -m 644 -D -p $f $PREFIX/lib/fstar/$f + fi +done diff --git a/ulib/ml/Makefile b/ulib/ml/Makefile index 2be8054c83f..0655bd110bb 100644 --- a/ulib/ml/Makefile +++ b/ulib/ml/Makefile @@ -1,9 +1,8 @@ .PHONY: intfiles all: intfiles - +$(MAKE) -C .. rebuild -intfiles: \ +INTFILES_RAW=\ FStar_Int8.ml \ FStar_Int16.ml \ FStar_Int32.ml \ @@ -12,13 +11,18 @@ intfiles: \ FStar_UInt32.ml \ FStar_UInt64.ml -%.ml: %.ml.prefix FStar_Ints.ml.body - @>$@ +FSTAR_HOME ?= $(realpath ../..) +DUNE_SNAPSHOT ?= $(FSTAR_HOME)/ocaml + +TARGET_DIR=$(DUNE_SNAPSHOT)/fstar-lib/generated/ +INTFILES=$(addprefix $(TARGET_DIR),$(INTFILES_RAW)) + +intfiles: $(INTFILES) + +$(TARGET_DIR)%.ml: %.ml.prefix FStar_Ints.ml.body + >$@ @echo '(* !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! *)' >> $@ @echo '(* THIS IS AN AUTOGENERATED FILE! See ulib/ml/Makefile *)' >> $@ @echo '(* !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! *)' >> $@ @echo '' >> $@ @cat $< FStar_Ints.ml.body >> $@ - -clean: - +$(MAKE) -C .. clean_ocaml diff --git a/ulib/ml/Makefile.include b/ulib/ml/Makefile.include index 46651a1e976..c2b2db6e1f6 100644 --- a/ulib/ml/Makefile.include +++ b/ulib/ml/Makefile.include @@ -1,47 +1,26 @@ -# You should include this Makefile in your Makefile to make sure you remain -# future-proof w.r.t. realized modules! - -FSTAR_REALIZED_MODULES=All BaseTypes Buffer Bytes Char CommonST Constructive Dyn Float Ghost Heap Monotonic.Heap \ - HyperStack.All HyperStack.ST HyperStack.IO Int16 Int32 Int64 Int8 IO \ - List List.Tot.Base Mul Option Pervasives.Native ST Exn String \ - UInt16 UInt32 UInt64 UInt8 \ - Pointer.Derived1 Pointer.Derived2 \ - Pointer.Derived3 \ - BufferNG \ - TaggedUnion \ - Bytes Util \ - Pervasives Order Range \ - Vector.Base Vector.Properties Vector TSet - # prims is realized by default hence not included in this list - -NOEXTRACT_STEEL_MODULES = -Steel -FStar.MSTTotal -FStar.MST -FStar.NMSTTotal -FStar.NMST - -NOEXTRACT_MODULES=$(addprefix -FStar., $(FSTAR_REALIZED_MODULES) Printf) \ - -LowStar.Printf +FStar.List.Tot.Properties +FStar.Int.Cast.Full $(NOEXTRACT_STEEL_MODULES) - FSTAR_DEFAULT_ARGS= ifdef FSTAR_HOME ULIB_ML=$(FSTAR_HOME)/ulib/ml - FSTARLIB_DIR=$(FSTAR_HOME)/bin/fstarlib + FSTARLIB_DIR=$(FSTAR_HOME)/lib/fstar/lib else FSTAR_PREFIX=$(dir $(shell which fstar.exe))/.. ULIB_ML=$(FSTAR_PREFIX)/lib/fstar/ml - FSTARLIB_DIR=$(FSTAR_PREFIX)/lib/fstar-compiler-lib + FSTARLIB_DIR=$(FSTAR_PREFIX)/lib/fstar/lib endif -FSTARLIB=$(FSTARLIB_DIR)/fstarlib.cmxa +FSTARLIB=$(FSTARLIB_DIR)/fstar_lib.cmxa -# Left as an example if we were to add multiple versions of fstarlib +# Left as an example if we were to add multiple versions of fstar ulib # ifeq ($(MEM),HST) # OCAML_DEFAULT_FLAGS=-predicates hyperstack # endif ifdef FSTAR_HOME - WITH_OCAMLPATH=OCAMLPATH=$(FSTAR_HOME)/bin + WITH_OCAMLPATH=OCAMLPATH=$(FSTAR_HOME)/lib else WITH_OCAMLPATH= endif OCAMLOPT_BARE=$(WITH_OCAMLPATH) ocamlfind opt -OCAMLOPT_=$(OCAMLOPT_BARE) -package fstarlib -linkpkg -g +OCAMLOPT_=$(OCAMLOPT_BARE) -package fstar.lib -linkpkg -g OCAMLOPT=$(OCAMLOPT_) $(OCAML_DEFAULT_FLAGS) -OCAMLC_=$(WITH_OCAMLPATH) ocamlfind c -package fstarlib -linkpkg -g +OCAMLC_=$(WITH_OCAMLPATH) ocamlfind c -package fstar.lib -linkpkg -g OCAMLC=$(OCAMLC_) $(OCAML_DEFAULT_FLAGS) diff --git a/ulib/ml/Makefile.realized b/ulib/ml/Makefile.realized new file mode 100644 index 00000000000..1e603289c34 --- /dev/null +++ b/ulib/ml/Makefile.realized @@ -0,0 +1,20 @@ +# You should include this Makefile in your Makefile to make sure you remain +# future-proof w.r.t. realized modules! + +FSTAR_REALIZED_MODULES=All BaseTypes Buffer Bytes Char CommonST Constructive Dyn Float Ghost Heap Monotonic.Heap \ + HyperStack.All HyperStack.ST HyperStack.IO Int16 Int32 Int64 Int8 IO \ + List List.Tot.Base Mul Option Pervasives.Native ST Exn String \ + UInt16 UInt32 UInt64 UInt8 \ + Pointer.Derived1 Pointer.Derived2 \ + Pointer.Derived3 \ + BufferNG \ + TaggedUnion \ + Bytes Util \ + Pervasives Order Range \ + Vector.Base Vector.Properties Vector TSet + # prims is realized by default hence not included in this list + +NOEXTRACT_STEEL_MODULES = -Steel -FStar.MSTTotal -FStar.MST -FStar.NMSTTotal -FStar.NMST + +NOEXTRACT_MODULES:=$(addprefix -FStar., $(FSTAR_REALIZED_MODULES) Printf) \ + -LowStar.Printf +FStar.List.Tot.Properties +FStar.Int.Cast.Full $(NOEXTRACT_STEEL_MODULES) diff --git a/ulib/ml/fstar-compiler-lib-META b/ulib/ml/fstar-compiler-lib-META deleted file mode 100644 index 6b52a155622..00000000000 --- a/ulib/ml/fstar-compiler-lib-META +++ /dev/null @@ -1,4 +0,0 @@ -name="fstar-compiler-lib" -version="__FSTAR_VERSION__" -description="FStar compiler" -requires="batteries,compiler-libs,compiler-libs.common,dynlink,pprint,stdint,yojson,zarith,ppxlib" diff --git a/ulib/ml/fstar-tactics-lib-META b/ulib/ml/fstar-tactics-lib-META deleted file mode 100644 index ad21daebb1f..00000000000 --- a/ulib/ml/fstar-tactics-lib-META +++ /dev/null @@ -1,4 +0,0 @@ -name="fstar-tactics-lib" -version="__FSTAR_VERSION__" -description="FStar native tactic support" -requires="fstar-compiler-lib" diff --git a/ulib/ml/fstarlib-META b/ulib/ml/fstarlib-META deleted file mode 100644 index 7d7d9d13510..00000000000 --- a/ulib/ml/fstarlib-META +++ /dev/null @@ -1,7 +0,0 @@ -name="fstarlib" -version="__FSTAR_VERSION__" -description="FStar standard library" -requires="batteries,stdint,zarith,ppx_deriving.std,ppx_deriving_yojson,ppx_deriving_yojson.runtime" -archive(toploop)="fstarlib.cma" -archive(byte)="fstarlib.cma" -archive(native)="fstarlib.cmxa"