;;; shen-elisp.el --- An implementation of the Shen programming language  -*- lexical-binding: t -*-

;; Copyright (C) 2015-2016  Aditya Siram

;; Author: Aditya Siram <aditya.siram@gmail.com>
;; Homepage: https://github.com/deech/shen-elisp
;; License: BSD 3-Clause License
;;   http://opensource.org/licenses/BSD-3-Clause
;; Keywords: shen elisp
;; Package-Version: 20260726.1322
;; Package-Revision: 0a58aca68c40
;; Package-Requires: ((emacs "24.4"))

;;; Commentary:

;; This is an implemenatation of the Shen programming language in
;; Elisp. The end goal is to provide:
;;
;; 1. An easy way to play with Shen with no other installation
;;    hassle (assuming you use Emacs).
;; 2. A first-class development experience when writing Shen.
;;    The idea is that an editor that understands the code can
;;    be much more helpful than one that does not. To this end
;;    the roadmap involves a full gamut of source code
;;    introspection and debugging tools.

;;; Code:

(require 'shen-primitives)
(setq max-lisp-eval-depth 60000)
(setq max-specpdl-size 13000)

(defun shen/shen\.shen nil
  (shen/do
   (shen/shen\.credits)
   (shen/shen\.loop)))
(defun shen/shen\.loop nil
  (cl-flet
      ((tail-trampoline nil
                        (shen/do
                         (shen/shen\.initialise_environment)
                         (shen/do
                          (shen/shen\.prompt)
                          (shen/do
                           (shen/trap-error
                            (shen/shen\.read-evaluate-print)
                            (shen/lambda E
                                         (shen/shen\.toplevel-display-exception E)))
                           (vector
                            (list)))))))
    (let
        ((result
          (funcall #'tail-trampoline)))
      (while
          (vectorp result)
        (setq result
              (apply #'tail-trampoline
                     (aref result 0))))
      result)))
(defun shen/shen\.toplevel-display-exception
    (V3935)
  (shen/pr
   (shen/error-to-string V3935)
   (shen/stoutput)))
(defun shen/shen\.credits nil
  (shen/do
   (shen/shen\.prhush "\nShen, copyright (C) 2010-2015 Mark Tarver\n"
                      (shen/stoutput))
   (shen/do
    (shen/shen\.prhush
     (shen/cn "www.shenlanguage.org, "
              (shen/shen\.app
               (shen/value '*version*)
               "\n" 'shen\.a))
     (shen/stoutput))
    (shen/do
     (shen/shen\.prhush
      (shen/cn "running under "
               (shen/shen\.app
                (shen/value '*language*)
                (shen/cn ", implementation: "
                         (shen/shen\.app
                          (shen/value '*implementation*)
                          "" 'shen\.a))
                'shen\.a))
      (shen/stoutput))
     (shen/shen\.prhush
      (shen/cn "\nport "
               (shen/shen\.app
                (shen/value '*port*)
                (shen/cn " ported by "
                         (shen/shen\.app
                          (shen/value '*porters*)
                          "\n" 'shen\.a))
                'shen\.a))
      (shen/stoutput))))))
(defun shen/shen\.initialise_environment nil
  (shen/shen\.multiple-set
   (list 'shen\.*call* 0 'shen\.*infs* 0 'shen\.*process-counter* 0 'shen\.*catch* 0)))
(defun shen/shen\.multiple-set
    (V3937)
  (cl-flet
      ((tail-trampoline
        (V3937)
        (shen/cond
         ((shen/internal/predicate->shen
           (null V3937))
          nil)
         ((shen/and
           (shen/cons\? V3937)
           (shen/cons\?
            (nthcdr 1 V3937)))
          (shen/do
           (shen/set
            (shen/hd V3937)
            (shen/hd
             (nthcdr 1 V3937)))
           (vector
            (list
             (nthcdr 2 V3937)))))
         (shen/true
          (shen/shen\.f_error 'shen\.multiple-set)))))
    (let
        ((result
          (funcall #'tail-trampoline V3937)))
      (while
          (vectorp result)
        (setq result
              (apply #'tail-trampoline
                     (aref result 0))))
      result)))
(defun shen/destroy
    (V3939)
  (shen/declare V3939 'symbol))
(shen/set 'shen\.*history* nil)
(defun shen/shen\.read-evaluate-print nil
  (shen/let Lineread
            (shen/shen\.toplineread)
            (shen/let History
                      (shen/value 'shen\.*history*)
                      (shen/let NewLineread
                                (shen/shen\.retrieve-from-history-if-needed Lineread History)
                                (shen/let NewHistory
                                          (shen/shen\.update_history NewLineread History)
                                          (shen/let Parsed
                                                    (shen/fst NewLineread)
                                                    (shen/shen\.toplevel Parsed)))))))
(defun shen/shen\.retrieve-from-history-if-needed
    (V3951 V3952)
  (cl-flet
      ((tail-trampoline
        (V3951 V3952)
        (shen/cond
         ((shen/and
           (shen/tuple\? V3951)
           (shen/and
            (shen/cons\?
             (shen/snd V3951))
            (shen/element\?
             (shen/hd
              (shen/snd V3951))
             (list
              (shen/shen\.space)
              (shen/shen\.newline)))))
          (vector
           (list
            (shen/@p
             (shen/fst V3951)
             (nthcdr 1
                     (shen/snd V3951)))
            V3952)))
         ((shen/and
           (shen/tuple\? V3951)
           (shen/and
            (shen/cons\?
             (shen/snd V3951))
            (shen/and
             (shen/cons\?
              (nthcdr 1
                      (shen/snd V3951)))
             (shen/and
              (shen/internal/predicate->shen
               (null
                (nthcdr 2
                        (shen/snd V3951))))
              (shen/and
               (shen/cons\? V3952)
               (shen/and
                (shen/=
                 (shen/hd
                  (shen/snd V3951))
                 (shen/shen\.exclamation))
                (shen/=
                 (shen/hd
                  (nthcdr 1
                          (shen/snd V3951)))
                 (shen/shen\.exclamation))))))))
          (shen/let PastPrint
                    (shen/shen\.prbytes
                     (shen/snd
                      (shen/hd V3952)))
                    (shen/hd V3952)))
         ((shen/and
           (shen/tuple\? V3951)
           (shen/and
            (shen/cons\?
             (shen/snd V3951))
            (shen/=
             (shen/hd
              (shen/snd V3951))
             (shen/shen\.exclamation))))
          (shen/let Key\?
                    (shen/shen\.make-key
                     (nthcdr 1
                             (shen/snd V3951))
                     V3952)
                    (shen/let Find
                              (shen/head
                               (shen/shen\.find-past-inputs Key\? V3952))
                              (shen/let PastPrint
                                        (shen/shen\.prbytes
                                         (shen/snd Find))
                                        Find))))
         ((shen/and
           (shen/tuple\? V3951)
           (shen/and
            (shen/cons\?
             (shen/snd V3951))
            (shen/and
             (shen/internal/predicate->shen
              (null
               (nthcdr 1
                       (shen/snd V3951))))
             (shen/=
              (shen/hd
               (shen/snd V3951))
              (shen/shen\.percent)))))
          (shen/do
           (shen/shen\.print-past-inputs
            (shen/lambda X 'true)
            (shen/reverse V3952)
            0)
           (shen/abort)))
         ((shen/and
           (shen/tuple\? V3951)
           (shen/and
            (shen/cons\?
             (shen/snd V3951))
            (shen/=
             (shen/hd
              (shen/snd V3951))
             (shen/shen\.percent))))
          (shen/let Key\?
                    (shen/shen\.make-key
                     (nthcdr 1
                             (shen/snd V3951))
                     V3952)
                    (shen/let Pastprint
                              (shen/shen\.print-past-inputs Key\?
                                                            (shen/reverse V3952)
                                                            0)
                              (shen/abort))))
         (shen/true V3951))))
    (let
        ((result
          (funcall #'tail-trampoline V3951 V3952)))
      (while
          (vectorp result)
        (setq result
              (apply #'tail-trampoline
                     (aref result 0))))
      result)))
(defun shen/shen\.percent nil 37)
(defun shen/shen\.exclamation nil 33)
(defun shen/shen\.prbytes
    (V3954)
  (shen/do
   (shen/shen\.for-each
    (shen/lambda Byte
                 (shen/pr
                  (shen/n->string Byte)
                  (shen/stoutput)))
    V3954)
   (shen/nl 1)))
(defun shen/shen\.update_history
    (V3957 V3958)
  (shen/set 'shen\.*history*
            (append
             (list V3957)
             V3958)))
(defun shen/shen\.toplineread nil
  (shen/shen\.toplineread_loop
   (shen/shen\.read-char-code
    (shen/stinput))
   nil))
(defun shen/shen\.toplineread_loop
    (V3962 V3963)
  (cl-flet
      ((tail-trampoline
        (V3962 V3963)
        (shen/cond
         ((shen/= V3962
                  (shen/shen\.hat))
          (shen/simple-error "line read aborted"))
         ((shen/element\? V3962
                          (list
                           (shen/shen\.newline)
                           (shen/shen\.carriage-return)))
          (shen/let Line
                    (shen/compile
                     (shen/lambda X
                                  (shen/shen\.<st_input> X))
                     V3963
                     (shen/lambda E 'shen\.nextline))
                    (shen/let It
                              (shen/shen\.record-it V3963)
                              (shen/if
                               (shen/or
                                (shen/= Line 'shen\.nextline)
                                (shen/empty\? Line))
                               (vector
                                (list
                                 (shen/shen\.read-char-code
                                  (shen/stinput))
                                 (shen/append V3963
                                              (list V3962))))
                               (shen/@p Line V3963)))))
         (shen/true
          (vector
           (list
            (shen/shen\.read-char-code
             (shen/stinput))
            (shen/if
             (shen/= V3962 -1)
             V3963
             (shen/append V3963
                          (list V3962)))))))))
    (let
        ((result
          (funcall #'tail-trampoline V3962 V3963)))
      (while
          (vectorp result)
        (setq result
              (apply #'tail-trampoline
                     (aref result 0))))
      result)))
(defun shen/shen\.hat nil 94)
(defun shen/shen\.newline nil 10)
(defun shen/shen\.carriage-return nil 13)
(defun shen/tc
    (V3969)
  (shen/cond
   ((shen/= '+ V3969)
    (shen/set 'shen\.*tc* 'true))
   ((shen/= '- V3969)
    (shen/set 'shen\.*tc* 'false))
   (shen/true
    (shen/simple-error "tc expects a + or -"))))
(defun shen/shen\.prompt nil
  (shen/if
   (shen/value 'shen\.*tc*)
   (shen/shen\.prhush
    (shen/cn "\n\n("
             (shen/shen\.app
              (shen/length
               (shen/value 'shen\.*history*))
              "+) " 'shen\.a))
    (shen/stoutput))
   (shen/shen\.prhush
    (shen/cn "\n\n("
             (shen/shen\.app
              (shen/length
               (shen/value 'shen\.*history*))
              "-) " 'shen\.a))
    (shen/stoutput))))
(defun shen/shen\.toplevel
    (V3971)
  (shen/shen\.toplevel_evaluate V3971
                                (shen/value 'shen\.*tc*)))
(defun shen/shen\.find-past-inputs
    (V3974 V3975)
  (shen/let F
            (shen/shen\.find V3974 V3975)
            (shen/if
             (shen/empty\? F)
             (shen/simple-error "input not found\n")
             F)))
(defun shen/shen\.make-key
    (V3978 V3979)
  (shen/let Atom
            (shen/hd
             (shen/compile
              (shen/lambda X
                           (shen/shen\.<st_input> X))
              V3978
              (shen/lambda E
                           (shen/if
                            (shen/cons\? E)
                            (shen/simple-error
                             (shen/cn "parse error here: "
                                      (shen/shen\.app E "\n" 'shen\.s)))
                            (shen/simple-error "parse error\n")))))
            (shen/if
             (shen/integer\? Atom)
             (shen/lambda X
                          (shen/= X
                                  (shen/nth
                                   (1+ Atom)
                                   (shen/reverse V3979))))
             (shen/lambda X
                          (shen/shen\.prefix\? V3978
                                               (shen/shen\.trim-gubbins
                                                (shen/snd X)))))))
(defun shen/shen\.trim-gubbins
    (V3981)
  (cl-flet
      ((tail-trampoline
        (V3981)
        (shen/cond
         ((shen/and
           (shen/cons\? V3981)
           (shen/=
            (shen/hd V3981)
            (shen/shen\.space)))
          (vector
           (list
            (nthcdr 1 V3981))))
         ((shen/and
           (shen/cons\? V3981)
           (shen/=
            (shen/hd V3981)
            (shen/shen\.newline)))
          (vector
           (list
            (nthcdr 1 V3981))))
         ((shen/and
           (shen/cons\? V3981)
           (shen/=
            (shen/hd V3981)
            (shen/shen\.carriage-return)))
          (vector
           (list
            (nthcdr 1 V3981))))
         ((shen/and
           (shen/cons\? V3981)
           (shen/=
            (shen/hd V3981)
            (shen/shen\.tab)))
          (vector
           (list
            (nthcdr 1 V3981))))
         ((shen/and
           (shen/cons\? V3981)
           (shen/=
            (shen/hd V3981)
            (shen/shen\.left-round)))
          (vector
           (list
            (nthcdr 1 V3981))))
         (shen/true V3981))))
    (let
        ((result
          (funcall #'tail-trampoline V3981)))
      (while
          (vectorp result)
        (setq result
              (apply #'tail-trampoline
                     (aref result 0))))
      result)))
(defun shen/shen\.space nil 32)
(defun shen/shen\.tab nil 9)
(defun shen/shen\.left-round nil 40)
(defun shen/shen\.find
    (V3990 V3991)
  (cl-flet
      ((tail-trampoline
        (V3990 V3991)
        (shen/cond
         ((shen/internal/predicate->shen
           (null V3991))
          nil)
         ((shen/and
           (shen/cons\? V3991)
           (shen/internal/apply-higher-order-function V3990
                                                      (list
                                                       (shen/hd V3991))))
          (append
           (list
            (shen/hd V3991))
           (shen/shen\.find V3990
                            (nthcdr 1 V3991))))
         ((shen/cons\? V3991)
          (vector
           (list V3990
                 (nthcdr 1 V3991))))
         (shen/true
          (shen/shen\.f_error 'shen\.find)))))
    (let
        ((result
          (funcall #'tail-trampoline V3990 V3991)))
      (while
          (vectorp result)
        (setq result
              (apply #'tail-trampoline
                     (aref result 0))))
      result)))
(defun shen/shen\.prefix\?
    (V4005 V4006)
  (cl-flet
      ((tail-trampoline
        (V4005 V4006)
        (shen/cond
         ((shen/internal/predicate->shen
           (null V4005))
          'true)
         ((shen/and
           (shen/cons\? V4005)
           (shen/and
            (shen/cons\? V4006)
            (shen/=
             (shen/hd V4006)
             (shen/hd V4005))))
          (vector
           (list
            (nthcdr 1 V4005)
            (nthcdr 1 V4006))))
         (shen/true 'false))))
    (let
        ((result
          (funcall #'tail-trampoline V4005 V4006)))
      (while
          (vectorp result)
        (setq result
              (apply #'tail-trampoline
                     (aref result 0))))
      result)))
(defun shen/shen\.print-past-inputs
    (V4018 V4019 V4020)
  (cl-flet
      ((tail-trampoline
        (V4018 V4019 V4020)
        (shen/cond
         ((shen/internal/predicate->shen
           (null V4019))
          '_)
         ((shen/and
           (shen/cons\? V4019)
           (shen/not
            (shen/internal/apply-higher-order-function V4018
                                                       (list
                                                        (shen/hd V4019)))))
          (vector
           (list V4018
                 (nthcdr 1 V4019)
                 (1+ V4020))))
         ((shen/and
           (shen/cons\? V4019)
           (shen/tuple\?
            (shen/hd V4019)))
          (shen/do
           (shen/shen\.prhush
            (shen/shen\.app V4020 ". " 'shen\.a)
            (shen/stoutput))
           (shen/do
            (shen/shen\.prbytes
             (shen/snd
              (shen/hd V4019)))
            (vector
             (list V4018
                   (nthcdr 1 V4019)
                   (1+ V4020))))))
         (shen/true
          (shen/shen\.f_error 'shen\.print-past-inputs)))))
    (let
        ((result
          (funcall #'tail-trampoline V4018 V4019 V4020)))
      (while
          (vectorp result)
        (setq result
              (apply #'tail-trampoline
                     (aref result 0))))
      result)))
(defun shen/shen\.toplevel_evaluate
    (V4023 V4024)
  (cl-flet
      ((tail-trampoline
        (V4023 V4024)
        (shen/cond
         ((shen/and
           (shen/cons\? V4023)
           (shen/and
            (shen/cons\?
             (nthcdr 1 V4023))
            (shen/and
             (shen/= ':
                     (shen/hd
                      (nthcdr 1 V4023)))
             (shen/and
              (shen/cons\?
               (nthcdr 2 V4023))
              (shen/and
               (shen/internal/predicate->shen
                (null
                 (nthcdr 3 V4023)))
               (shen/= 'true V4024))))))
          (shen/shen\.typecheck-and-evaluate
           (shen/hd V4023)
           (shen/hd
            (nthcdr 2 V4023))))
         ((shen/and
           (shen/cons\? V4023)
           (shen/cons\?
            (nthcdr 1 V4023)))
          (shen/do
           (shen/shen\.toplevel_evaluate
            (list
             (shen/hd V4023))
            V4024)
           (shen/do
            (shen/nl 1)
            (vector
             (list
              (nthcdr 1 V4023)
              V4024)))))
         ((shen/and
           (shen/cons\? V4023)
           (shen/and
            (shen/internal/predicate->shen
             (null
              (nthcdr 1 V4023)))
            (shen/= 'true V4024)))
          (shen/shen\.typecheck-and-evaluate
           (shen/hd V4023)
           (shen/gensym 'A)))
         ((shen/and
           (shen/cons\? V4023)
           (shen/and
            (shen/internal/predicate->shen
             (null
              (nthcdr 1 V4023)))
            (shen/= 'false V4024)))
          (shen/let Eval
                    (shen/shen\.eval-without-macros
                     (shen/hd V4023))
                    (shen/print Eval)))
         (shen/true
          (shen/shen\.f_error 'shen\.toplevel_evaluate)))))
    (let
        ((result
          (funcall #'tail-trampoline V4023 V4024)))
      (while
          (vectorp result)
        (setq result
              (apply #'tail-trampoline
                     (aref result 0))))
      result)))
(defun shen/shen\.typecheck-and-evaluate
    (V4027 V4028)
  (shen/let Typecheck
            (shen/shen\.typecheck V4027 V4028)
            (shen/if
             (shen/= Typecheck 'false)
             (shen/simple-error "type error\n")
             (shen/let Eval
                       (shen/shen\.eval-without-macros V4027)
                       (shen/let Type
                                 (shen/shen\.pretty-type Typecheck)
                                 (shen/shen\.prhush
                                  (shen/shen\.app Eval
                                                  (shen/cn " : "
                                                           (shen/shen\.app Type "" 'shen\.r))
                                                  'shen\.s)
                                  (shen/stoutput)))))))
(defun shen/shen\.pretty-type
    (V4030)
  (shen/shen\.mult_subst
   (shen/value 'shen\.*alphabet*)
   (shen/shen\.extract-pvars V4030)
   V4030))
(defun shen/shen\.extract-pvars
    (V4036)
  (shen/cond
   ((shen/shen\.pvar\? V4036)
    (list V4036))
   ((shen/cons\? V4036)
    (shen/union
     (shen/shen\.extract-pvars
      (shen/hd V4036))
     (shen/shen\.extract-pvars
      (nthcdr 1 V4036))))
   (shen/true nil)))
(defun shen/shen\.mult_subst
    (V4044 V4045 V4046)
  (cl-flet
      ((tail-trampoline
        (V4044 V4045 V4046)
        (shen/cond
         ((shen/internal/predicate->shen
           (null V4044))
          V4046)
         ((shen/internal/predicate->shen
           (null V4045))
          V4046)
         ((shen/and
           (shen/cons\? V4044)
           (shen/cons\? V4045))
          (vector
           (list
            (nthcdr 1 V4044)
            (nthcdr 1 V4045)
            (shen/subst
             (shen/hd V4044)
             (shen/hd V4045)
             V4046))))
         (shen/true
          (shen/shen\.f_error 'shen\.mult_subst)))))
    (let
        ((result
          (funcall #'tail-trampoline V4044 V4045 V4046)))
      (while
          (vectorp result)
        (setq result
              (apply #'tail-trampoline
                     (aref result 0))))
      result)))
(defun shen/shen\.shen->kl
    (V1384 V1385)
  (shen/compile
   (shen/lambda X
                (shen/shen\.<define> X))
   (append
    (list V1384)
    V1385)
   (shen/lambda X
                (shen/shen\.shen-syntax-error V1384 X))))
(defun shen/shen\.shen-syntax-error
    (V1392 V1393)
  (shen/cond
   ((shen/cons\? V1393)
    (shen/simple-error
     (shen/cn "syntax error in "
              (shen/shen\.app V1392
                              (shen/cn " here:\n\n "
                                       (shen/shen\.app
                                        (shen/shen\.next-50 50
                                                            (shen/hd V1393))
                                        "\n" 'shen\.a))
                              'shen\.a))))
   (shen/true
    (shen/simple-error
     (shen/cn "syntax error in "
              (shen/shen\.app V1392 "\n" 'shen\.a))))))
(defun shen/shen\.<define>
    (V1395)
  (shen/let YaccParse
            (shen/let Parse_shen\.<name>
                      (shen/shen\.<name> V1395)
                      (shen/if
                       (shen/not
                        (shen/=
                         (shen/fail)
                         Parse_shen\.<name>))
                       (shen/let Parse_shen\.<signature>
                                 (shen/shen\.<signature> Parse_shen\.<name>)
                                 (shen/if
                                  (shen/not
                                   (shen/=
                                    (shen/fail)
                                    Parse_shen\.<signature>))
                                  (shen/let Parse_shen\.<rules>
                                            (shen/shen\.<rules> Parse_shen\.<signature>)
                                            (shen/if
                                             (shen/not
                                              (shen/=
                                               (shen/fail)
                                               Parse_shen\.<rules>))
                                             (shen/shen\.pair
                                              (shen/hd Parse_shen\.<rules>)
                                              (shen/shen\.compile_to_machine_code
                                               (shen/shen\.hdtl Parse_shen\.<name>)
                                               (shen/shen\.hdtl Parse_shen\.<rules>)))
                                             (shen/fail)))
                                  (shen/fail)))
                       (shen/fail)))
            (shen/if
             (shen/= YaccParse
                     (shen/fail))
             (shen/let Parse_shen\.<name>
                       (shen/shen\.<name> V1395)
                       (shen/if
                        (shen/not
                         (shen/=
                          (shen/fail)
                          Parse_shen\.<name>))
                        (shen/let Parse_shen\.<rules>
                                  (shen/shen\.<rules> Parse_shen\.<name>)
                                  (shen/if
                                   (shen/not
                                    (shen/=
                                     (shen/fail)
                                     Parse_shen\.<rules>))
                                   (shen/shen\.pair
                                    (shen/hd Parse_shen\.<rules>)
                                    (shen/shen\.compile_to_machine_code
                                     (shen/shen\.hdtl Parse_shen\.<name>)
                                     (shen/shen\.hdtl Parse_shen\.<rules>)))
                                   (shen/fail)))
                        (shen/fail)))
             YaccParse)))
(defun shen/shen\.<name>
    (V1397)
  (shen/if
   (shen/cons\?
    (shen/hd V1397))
   (shen/let Parse_X
             (shen/hd
              (shen/hd V1397))
             (shen/shen\.pair
              (shen/hd
               (shen/shen\.pair
                (nthcdr 1
                        (shen/hd V1397))
                (shen/shen\.hdtl V1397)))
              (shen/if
               (shen/and
                (shen/symbol\? Parse_X)
                (shen/not
                 (shen/shen\.sysfunc\? Parse_X)))
               Parse_X
               (shen/simple-error
                (shen/shen\.app Parse_X " is not a legitimate function name.\n" 'shen\.a)))))
   (shen/fail)))
(defun shen/shen\.sysfunc\?
    (V1399)
  (shen/element\? V1399
                  (shen/get
                   (shen/intern "shen")
                   'shen\.external-symbols
                   (shen/value '*property-vector*))))
(defun shen/shen\.<signature>
    (V1401)
  (shen/if
   (shen/and
    (shen/cons\?
     (shen/hd V1401))
    (shen/= '{
            (shen/hd
             (shen/hd V1401))))
   (shen/let Parse_shen\.<signature-help>
             (shen/shen\.<signature-help>
              (shen/shen\.pair
               (nthcdr 1
                       (shen/hd V1401))
               (shen/shen\.hdtl V1401)))
             (shen/if
              (shen/not
               (shen/=
                (shen/fail)
                Parse_shen\.<signature-help>))
              (shen/if
               (shen/and
                (shen/cons\?
                 (shen/hd Parse_shen\.<signature-help>))
                (shen/= '}
                        (shen/hd
                         (shen/hd Parse_shen\.<signature-help>))))
               (shen/shen\.pair
                (shen/hd
                 (shen/shen\.pair
                  (nthcdr 1
                          (shen/hd Parse_shen\.<signature-help>))
                  (shen/shen\.hdtl Parse_shen\.<signature-help>)))
                (shen/shen\.demodulate
                 (shen/shen\.curry-type
                  (shen/shen\.hdtl Parse_shen\.<signature-help>))))
               (shen/fail))
              (shen/fail)))
   (shen/fail)))
(defun shen/shen\.curry-type
    (V1403)
  (cl-flet
      ((tail-trampoline
        (V1403)
        (shen/cond
         ((shen/and
           (shen/cons\? V1403)
           (shen/and
            (shen/cons\?
             (nthcdr 1 V1403))
            (shen/and
             (shen/= '-->
                     (shen/hd
                      (nthcdr 1 V1403)))
             (shen/and
              (shen/cons\?
               (nthcdr 2 V1403))
              (shen/and
               (shen/cons\?
                (nthcdr 3 V1403))
               (shen/= '-->
                       (shen/hd
                        (nthcdr 3 V1403))))))))
          (vector
           (list
            (list
             (shen/hd V1403)
             '-->
             (nthcdr 2 V1403)))))
         ((shen/and
           (shen/cons\? V1403)
           (shen/and
            (shen/cons\?
             (nthcdr 1 V1403))
            (shen/and
             (shen/= '*
                     (shen/hd
                      (nthcdr 1 V1403)))
             (shen/and
              (shen/cons\?
               (nthcdr 2 V1403))
              (shen/and
               (shen/cons\?
                (nthcdr 3 V1403))
               (shen/= '*
                       (shen/hd
                        (nthcdr 3 V1403))))))))
          (vector
           (list
            (list
             (shen/hd V1403)
             '*
             (nthcdr 2 V1403)))))
         ((shen/cons\? V1403)
          (shen/map
           (shen/lambda Z
                        (shen/shen\.curry-type Z))
           V1403))
         (shen/true V1403))))
    (let
        ((result
          (funcall #'tail-trampoline V1403)))
      (while
          (vectorp result)
        (setq result
              (apply #'tail-trampoline
                     (aref result 0))))
      result)))
(defun shen/shen\.<signature-help>
    (V1405)
  (shen/let YaccParse
            (shen/if
             (shen/cons\?
              (shen/hd V1405))
             (shen/let Parse_X
                       (shen/hd
                        (shen/hd V1405))
                       (shen/let Parse_shen\.<signature-help>
                                 (shen/shen\.<signature-help>
                                  (shen/shen\.pair
                                   (nthcdr 1
                                           (shen/hd V1405))
                                   (shen/shen\.hdtl V1405)))
                                 (shen/if
                                  (shen/not
                                   (shen/=
                                    (shen/fail)
                                    Parse_shen\.<signature-help>))
                                  (shen/if
                                   (shen/not
                                    (shen/element\? Parse_X
                                                    (list '{ '})))
                                   (shen/shen\.pair
                                    (shen/hd Parse_shen\.<signature-help>)
                                    (append
                                     (list Parse_X)
                                     (shen/shen\.hdtl Parse_shen\.<signature-help>)))
                                   (shen/fail))
                                  (shen/fail))))
             (shen/fail))
            (shen/if
             (shen/= YaccParse
                     (shen/fail))
             (shen/let Parse_<e>
                       (shen/<e> V1405)
                       (shen/if
                        (shen/not
                         (shen/=
                          (shen/fail)
                          Parse_<e>))
                        (shen/shen\.pair
                         (shen/hd Parse_<e>)
                         nil)
                        (shen/fail)))
             YaccParse)))
(defun shen/shen\.<rules>
    (V1407)
  (shen/let YaccParse
            (shen/let Parse_shen\.<rule>
                      (shen/shen\.<rule> V1407)
                      (shen/if
                       (shen/not
                        (shen/=
                         (shen/fail)
                         Parse_shen\.<rule>))
                       (shen/let Parse_shen\.<rules>
                                 (shen/shen\.<rules> Parse_shen\.<rule>)
                                 (shen/if
                                  (shen/not
                                   (shen/=
                                    (shen/fail)
                                    Parse_shen\.<rules>))
                                  (shen/shen\.pair
                                   (shen/hd Parse_shen\.<rules>)
                                   (append
                                    (list
                                     (shen/shen\.linearise
                                      (shen/shen\.hdtl Parse_shen\.<rule>)))
                                    (shen/shen\.hdtl Parse_shen\.<rules>)))
                                  (shen/fail)))
                       (shen/fail)))
            (shen/if
             (shen/= YaccParse
                     (shen/fail))
             (shen/let Parse_shen\.<rule>
                       (shen/shen\.<rule> V1407)
                       (shen/if
                        (shen/not
                         (shen/=
                          (shen/fail)
                          Parse_shen\.<rule>))
                        (shen/shen\.pair
                         (shen/hd Parse_shen\.<rule>)
                         (list
                          (shen/shen\.linearise
                           (shen/shen\.hdtl Parse_shen\.<rule>))))
                        (shen/fail)))
             YaccParse)))
(defun shen/shen\.<rule>
    (V1409)
  (shen/let YaccParse
            (shen/let Parse_shen\.<patterns>
                      (shen/shen\.<patterns> V1409)
                      (shen/if
                       (shen/not
                        (shen/=
                         (shen/fail)
                         Parse_shen\.<patterns>))
                       (shen/if
                        (shen/and
                         (shen/cons\?
                          (shen/hd Parse_shen\.<patterns>))
                         (shen/= '->
                                 (shen/hd
                                  (shen/hd Parse_shen\.<patterns>))))
                        (shen/let Parse_shen\.<action>
                                  (shen/shen\.<action>
                                   (shen/shen\.pair
                                    (nthcdr 1
                                            (shen/hd Parse_shen\.<patterns>))
                                    (shen/shen\.hdtl Parse_shen\.<patterns>)))
                                  (shen/if
                                   (shen/not
                                    (shen/=
                                     (shen/fail)
                                     Parse_shen\.<action>))
                                   (shen/if
                                    (shen/and
                                     (shen/cons\?
                                      (shen/hd Parse_shen\.<action>))
                                     (shen/= 'where
                                             (shen/hd
                                              (shen/hd Parse_shen\.<action>))))
                                    (shen/let Parse_shen\.<guard>
                                              (shen/shen\.<guard>
                                               (shen/shen\.pair
                                                (nthcdr 1
                                                        (shen/hd Parse_shen\.<action>))
                                                (shen/shen\.hdtl Parse_shen\.<action>)))
                                              (shen/if
                                               (shen/not
                                                (shen/=
                                                 (shen/fail)
                                                 Parse_shen\.<guard>))
                                               (shen/shen\.pair
                                                (shen/hd Parse_shen\.<guard>)
                                                (list
                                                 (shen/shen\.hdtl Parse_shen\.<patterns>)
                                                 (list 'where
                                                       (shen/shen\.hdtl Parse_shen\.<guard>)
                                                       (shen/shen\.hdtl Parse_shen\.<action>))))
                                               (shen/fail)))
                                    (shen/fail))
                                   (shen/fail)))
                        (shen/fail))
                       (shen/fail)))
            (shen/if
             (shen/= YaccParse
                     (shen/fail))
             (shen/let YaccParse
                       (shen/let Parse_shen\.<patterns>
                                 (shen/shen\.<patterns> V1409)
                                 (shen/if
                                  (shen/not
                                   (shen/=
                                    (shen/fail)
                                    Parse_shen\.<patterns>))
                                  (shen/if
                                   (shen/and
                                    (shen/cons\?
                                     (shen/hd Parse_shen\.<patterns>))
                                    (shen/= '->
                                            (shen/hd
                                             (shen/hd Parse_shen\.<patterns>))))
                                   (shen/let Parse_shen\.<action>
                                             (shen/shen\.<action>
                                              (shen/shen\.pair
                                               (nthcdr 1
                                                       (shen/hd Parse_shen\.<patterns>))
                                               (shen/shen\.hdtl Parse_shen\.<patterns>)))
                                             (shen/if
                                              (shen/not
                                               (shen/=
                                                (shen/fail)
                                                Parse_shen\.<action>))
                                              (shen/shen\.pair
                                               (shen/hd Parse_shen\.<action>)
                                               (list
                                                (shen/shen\.hdtl Parse_shen\.<patterns>)
                                                (shen/shen\.hdtl Parse_shen\.<action>)))
                                              (shen/fail)))
                                   (shen/fail))
                                  (shen/fail)))
                       (shen/if
                        (shen/= YaccParse
                                (shen/fail))
                        (shen/let YaccParse
                                  (shen/let Parse_shen\.<patterns>
                                            (shen/shen\.<patterns> V1409)
                                            (shen/if
                                             (shen/not
                                              (shen/=
                                               (shen/fail)
                                               Parse_shen\.<patterns>))
                                             (shen/if
                                              (shen/and
                                               (shen/cons\?
                                                (shen/hd Parse_shen\.<patterns>))
                                               (shen/= '<-
                                                       (shen/hd
                                                        (shen/hd Parse_shen\.<patterns>))))
                                              (shen/let Parse_shen\.<action>
                                                        (shen/shen\.<action>
                                                         (shen/shen\.pair
                                                          (nthcdr 1
                                                                  (shen/hd Parse_shen\.<patterns>))
                                                          (shen/shen\.hdtl Parse_shen\.<patterns>)))
                                                        (shen/if
                                                         (shen/not
                                                          (shen/=
                                                           (shen/fail)
                                                           Parse_shen\.<action>))
                                                         (shen/if
                                                          (shen/and
                                                           (shen/cons\?
                                                            (shen/hd Parse_shen\.<action>))
                                                           (shen/= 'where
                                                                   (shen/hd
                                                                    (shen/hd Parse_shen\.<action>))))
                                                          (shen/let Parse_shen\.<guard>
                                                                    (shen/shen\.<guard>
                                                                     (shen/shen\.pair
                                                                      (nthcdr 1
                                                                              (shen/hd Parse_shen\.<action>))
                                                                      (shen/shen\.hdtl Parse_shen\.<action>)))
                                                                    (shen/if
                                                                     (shen/not
                                                                      (shen/=
                                                                       (shen/fail)
                                                                       Parse_shen\.<guard>))
                                                                     (shen/shen\.pair
                                                                      (shen/hd Parse_shen\.<guard>)
                                                                      (list
                                                                       (shen/shen\.hdtl Parse_shen\.<patterns>)
                                                                       (list 'where
                                                                             (shen/shen\.hdtl Parse_shen\.<guard>)
                                                                             (list 'shen\.choicepoint!
                                                                                   (shen/shen\.hdtl Parse_shen\.<action>)))))
                                                                     (shen/fail)))
                                                          (shen/fail))
                                                         (shen/fail)))
                                              (shen/fail))
                                             (shen/fail)))
                                  (shen/if
                                   (shen/= YaccParse
                                           (shen/fail))
                                   (shen/let Parse_shen\.<patterns>
                                             (shen/shen\.<patterns> V1409)
                                             (shen/if
                                              (shen/not
                                               (shen/=
                                                (shen/fail)
                                                Parse_shen\.<patterns>))
                                              (shen/if
                                               (shen/and
                                                (shen/cons\?
                                                 (shen/hd Parse_shen\.<patterns>))
                                                (shen/= '<-
                                                        (shen/hd
                                                         (shen/hd Parse_shen\.<patterns>))))
                                               (shen/let Parse_shen\.<action>
                                                         (shen/shen\.<action>
                                                          (shen/shen\.pair
                                                           (nthcdr 1
                                                                   (shen/hd Parse_shen\.<patterns>))
                                                           (shen/shen\.hdtl Parse_shen\.<patterns>)))
                                                         (shen/if
                                                          (shen/not
                                                           (shen/=
                                                            (shen/fail)
                                                            Parse_shen\.<action>))
                                                          (shen/shen\.pair
                                                           (shen/hd Parse_shen\.<action>)
                                                           (list
                                                            (shen/shen\.hdtl Parse_shen\.<patterns>)
                                                            (list 'shen\.choicepoint!
                                                                  (shen/shen\.hdtl Parse_shen\.<action>))))
                                                          (shen/fail)))
                                               (shen/fail))
                                              (shen/fail)))
                                   YaccParse))
                        YaccParse))
             YaccParse)))
(defun shen/shen\.fail_if
    (V1412 V1413)
  (shen/if
   (shen/internal/apply-higher-order-function V1412
                                              (list V1413))
   (shen/fail)
   V1413))
(defun shen/shen\.succeeds\?
    (V1419)
  (shen/cond
   ((shen/= V1419
            (shen/fail))
    'false)
   (shen/true 'true)))
(defun shen/shen\.<patterns>
    (V1421)
  (shen/let YaccParse
            (shen/let Parse_shen\.<pattern>
                      (shen/shen\.<pattern> V1421)
                      (shen/if
                       (shen/not
                        (shen/=
                         (shen/fail)
                         Parse_shen\.<pattern>))
                       (shen/let Parse_shen\.<patterns>
                                 (shen/shen\.<patterns> Parse_shen\.<pattern>)
                                 (shen/if
                                  (shen/not
                                   (shen/=
                                    (shen/fail)
                                    Parse_shen\.<patterns>))
                                  (shen/shen\.pair
                                   (shen/hd Parse_shen\.<patterns>)
                                   (append
                                    (list
                                     (shen/shen\.hdtl Parse_shen\.<pattern>))
                                    (shen/shen\.hdtl Parse_shen\.<patterns>)))
                                  (shen/fail)))
                       (shen/fail)))
            (shen/if
             (shen/= YaccParse
                     (shen/fail))
             (shen/let Parse_<e>
                       (shen/<e> V1421)
                       (shen/if
                        (shen/not
                         (shen/=
                          (shen/fail)
                          Parse_<e>))
                        (shen/shen\.pair
                         (shen/hd Parse_<e>)
                         nil)
                        (shen/fail)))
             YaccParse)))
(defun shen/shen\.<pattern>
    (V1428)
  (shen/let YaccParse
            (shen/if
             (shen/and
              (shen/cons\?
               (shen/hd V1428))
              (shen/cons\?
               (shen/hd
                (shen/hd V1428))))
             (shen/if
              (shen/and
               (shen/cons\?
                (shen/hd
                 (shen/shen\.pair
                  (shen/hd
                   (shen/hd V1428))
                  (shen/hd
                   (nthcdr 1 V1428)))))
               (shen/= '@p
                       (shen/hd
                        (shen/hd
                         (shen/shen\.pair
                          (shen/hd
                           (shen/hd V1428))
                          (shen/hd
                           (nthcdr 1 V1428)))))))
              (shen/let Parse_shen\.<pattern1>
                        (shen/shen\.<pattern1>
                         (shen/shen\.pair
                          (nthcdr 1
                                  (shen/hd
                                   (shen/shen\.pair
                                    (shen/hd
                                     (shen/hd V1428))
                                    (shen/hd
                                     (nthcdr 1 V1428)))))
                          (shen/shen\.hdtl
                           (shen/shen\.pair
                            (shen/hd
                             (shen/hd V1428))
                            (shen/hd
                             (nthcdr 1 V1428))))))
                        (shen/if
                         (shen/not
                          (shen/=
                           (shen/fail)
                           Parse_shen\.<pattern1>))
                         (shen/let Parse_shen\.<pattern2>
                                   (shen/shen\.<pattern2> Parse_shen\.<pattern1>)
                                   (shen/if
                                    (shen/not
                                     (shen/=
                                      (shen/fail)
                                      Parse_shen\.<pattern2>))
                                    (shen/shen\.pair
                                     (shen/hd
                                      (shen/shen\.pair
                                       (nthcdr 1
                                               (shen/hd V1428))
                                       (shen/hd
                                        (nthcdr 1 V1428))))
                                     (list '@p
                                           (shen/shen\.hdtl Parse_shen\.<pattern1>)
                                           (shen/shen\.hdtl Parse_shen\.<pattern2>)))
                                    (shen/fail)))
                         (shen/fail)))
              (shen/fail))
             (shen/fail))
            (shen/if
             (shen/= YaccParse
                     (shen/fail))
             (shen/let YaccParse
                       (shen/if
                        (shen/and
                         (shen/cons\?
                          (shen/hd V1428))
                         (shen/cons\?
                          (shen/hd
                           (shen/hd V1428))))
                        (shen/if
                         (shen/and
                          (shen/cons\?
                           (shen/hd
                            (shen/shen\.pair
                             (shen/hd
                              (shen/hd V1428))
                             (shen/hd
                              (nthcdr 1 V1428)))))
                          (shen/= 'cons
                                  (shen/hd
                                   (shen/hd
                                    (shen/shen\.pair
                                     (shen/hd
                                      (shen/hd V1428))
                                     (shen/hd
                                      (nthcdr 1 V1428)))))))
                         (shen/let Parse_shen\.<pattern1>
                                   (shen/shen\.<pattern1>
                                    (shen/shen\.pair
                                     (nthcdr 1
                                             (shen/hd
                                              (shen/shen\.pair
                                               (shen/hd
                                                (shen/hd V1428))
                                               (shen/hd
                                                (nthcdr 1 V1428)))))
                                     (shen/shen\.hdtl
                                      (shen/shen\.pair
                                       (shen/hd
                                        (shen/hd V1428))
                                       (shen/hd
                                        (nthcdr 1 V1428))))))
                                   (shen/if
                                    (shen/not
                                     (shen/=
                                      (shen/fail)
                                      Parse_shen\.<pattern1>))
                                    (shen/let Parse_shen\.<pattern2>
                                              (shen/shen\.<pattern2> Parse_shen\.<pattern1>)
                                              (shen/if
                                               (shen/not
                                                (shen/=
                                                 (shen/fail)
                                                 Parse_shen\.<pattern2>))
                                               (shen/shen\.pair
                                                (shen/hd
                                                 (shen/shen\.pair
                                                  (nthcdr 1
                                                          (shen/hd V1428))
                                                  (shen/hd
                                                   (nthcdr 1 V1428))))
                                                (list 'cons
                                                      (shen/shen\.hdtl Parse_shen\.<pattern1>)
                                                      (shen/shen\.hdtl Parse_shen\.<pattern2>)))
                                               (shen/fail)))
                                    (shen/fail)))
                         (shen/fail))
                        (shen/fail))
                       (shen/if
                        (shen/= YaccParse
                                (shen/fail))
                        (shen/let YaccParse
                                  (shen/if
                                   (shen/and
                                    (shen/cons\?
                                     (shen/hd V1428))
                                    (shen/cons\?
                                     (shen/hd
                                      (shen/hd V1428))))
                                   (shen/if
                                    (shen/and
                                     (shen/cons\?
                                      (shen/hd
                                       (shen/shen\.pair
                                        (shen/hd
                                         (shen/hd V1428))
                                        (shen/hd
                                         (nthcdr 1 V1428)))))
                                     (shen/= '@v
                                             (shen/hd
                                              (shen/hd
                                               (shen/shen\.pair
                                                (shen/hd
                                                 (shen/hd V1428))
                                                (shen/hd
                                                 (nthcdr 1 V1428)))))))
                                    (shen/let Parse_shen\.<pattern1>
                                              (shen/shen\.<pattern1>
                                               (shen/shen\.pair
                                                (nthcdr 1
                                                        (shen/hd
                                                         (shen/shen\.pair
                                                          (shen/hd
                                                           (shen/hd V1428))
                                                          (shen/hd
                                                           (nthcdr 1 V1428)))))
                                                (shen/shen\.hdtl
                                                 (shen/shen\.pair
                                                  (shen/hd
                                                   (shen/hd V1428))
                                                  (shen/hd
                                                   (nthcdr 1 V1428))))))
                                              (shen/if
                                               (shen/not
                                                (shen/=
                                                 (shen/fail)
                                                 Parse_shen\.<pattern1>))
                                               (shen/let Parse_shen\.<pattern2>
                                                         (shen/shen\.<pattern2> Parse_shen\.<pattern1>)
                                                         (shen/if
                                                          (shen/not
                                                           (shen/=
                                                            (shen/fail)
                                                            Parse_shen\.<pattern2>))
                                                          (shen/shen\.pair
                                                           (shen/hd
                                                            (shen/shen\.pair
                                                             (nthcdr 1
                                                                     (shen/hd V1428))
                                                             (shen/hd
                                                              (nthcdr 1 V1428))))
                                                           (list '@v
                                                                 (shen/shen\.hdtl Parse_shen\.<pattern1>)
                                                                 (shen/shen\.hdtl Parse_shen\.<pattern2>)))
                                                          (shen/fail)))
                                               (shen/fail)))
                                    (shen/fail))
                                   (shen/fail))
                                  (shen/if
                                   (shen/= YaccParse
                                           (shen/fail))
                                   (shen/let YaccParse
                                             (shen/if
                                              (shen/and
                                               (shen/cons\?
                                                (shen/hd V1428))
                                               (shen/cons\?
                                                (shen/hd
                                                 (shen/hd V1428))))
                                              (shen/if
                                               (shen/and
                                                (shen/cons\?
                                                 (shen/hd
                                                  (shen/shen\.pair
                                                   (shen/hd
                                                    (shen/hd V1428))
                                                   (shen/hd
                                                    (nthcdr 1 V1428)))))
                                                (shen/= '@s
                                                        (shen/hd
                                                         (shen/hd
                                                          (shen/shen\.pair
                                                           (shen/hd
                                                            (shen/hd V1428))
                                                           (shen/hd
                                                            (nthcdr 1 V1428)))))))
                                               (shen/let Parse_shen\.<pattern1>
                                                         (shen/shen\.<pattern1>
                                                          (shen/shen\.pair
                                                           (nthcdr 1
                                                                   (shen/hd
                                                                    (shen/shen\.pair
                                                                     (shen/hd
                                                                      (shen/hd V1428))
                                                                     (shen/hd
                                                                      (nthcdr 1 V1428)))))
                                                           (shen/shen\.hdtl
                                                            (shen/shen\.pair
                                                             (shen/hd
                                                              (shen/hd V1428))
                                                             (shen/hd
                                                              (nthcdr 1 V1428))))))
                                                         (shen/if
                                                          (shen/not
                                                           (shen/=
                                                            (shen/fail)
                                                            Parse_shen\.<pattern1>))
                                                          (shen/let Parse_shen\.<pattern2>
                                                                    (shen/shen\.<pattern2> Parse_shen\.<pattern1>)
                                                                    (shen/if
                                                                     (shen/not
                                                                      (shen/=
                                                                       (shen/fail)
                                                                       Parse_shen\.<pattern2>))
                                                                     (shen/shen\.pair
                                                                      (shen/hd
                                                                       (shen/shen\.pair
                                                                        (nthcdr 1
                                                                                (shen/hd V1428))
                                                                        (shen/hd
                                                                         (nthcdr 1 V1428))))
                                                                      (list '@s
                                                                            (shen/shen\.hdtl Parse_shen\.<pattern1>)
                                                                            (shen/shen\.hdtl Parse_shen\.<pattern2>)))
                                                                     (shen/fail)))
                                                          (shen/fail)))
                                               (shen/fail))
                                              (shen/fail))
                                             (shen/if
                                              (shen/= YaccParse
                                                      (shen/fail))
                                              (shen/let YaccParse
                                                        (shen/if
                                                         (shen/and
                                                          (shen/cons\?
                                                           (shen/hd V1428))
                                                          (shen/cons\?
                                                           (shen/hd
                                                            (shen/hd V1428))))
                                                         (shen/if
                                                          (shen/and
                                                           (shen/cons\?
                                                            (shen/hd
                                                             (shen/shen\.pair
                                                              (shen/hd
                                                               (shen/hd V1428))
                                                              (shen/hd
                                                               (nthcdr 1 V1428)))))
                                                           (shen/= 'vector
                                                                   (shen/hd
                                                                    (shen/hd
                                                                     (shen/shen\.pair
                                                                      (shen/hd
                                                                       (shen/hd V1428))
                                                                      (shen/hd
                                                                       (nthcdr 1 V1428)))))))
                                                          (shen/if
                                                           (shen/and
                                                            (shen/cons\?
                                                             (shen/hd
                                                              (shen/shen\.pair
                                                               (nthcdr 1
                                                                       (shen/hd
                                                                        (shen/shen\.pair
                                                                         (shen/hd
                                                                          (shen/hd V1428))
                                                                         (shen/hd
                                                                          (nthcdr 1 V1428)))))
                                                               (shen/shen\.hdtl
                                                                (shen/shen\.pair
                                                                 (shen/hd
                                                                  (shen/hd V1428))
                                                                 (shen/hd
                                                                  (nthcdr 1 V1428)))))))
                                                            (shen/= 0
                                                                    (shen/hd
                                                                     (shen/hd
                                                                      (shen/shen\.pair
                                                                       (nthcdr 1
                                                                               (shen/hd
                                                                                (shen/shen\.pair
                                                                                 (shen/hd
                                                                                  (shen/hd V1428))
                                                                                 (shen/hd
                                                                                  (nthcdr 1 V1428)))))
                                                                       (shen/shen\.hdtl
                                                                        (shen/shen\.pair
                                                                         (shen/hd
                                                                          (shen/hd V1428))
                                                                         (shen/hd
                                                                          (nthcdr 1 V1428)))))))))
                                                           (shen/shen\.pair
                                                            (shen/hd
                                                             (shen/shen\.pair
                                                              (nthcdr 1
                                                                      (shen/hd V1428))
                                                              (shen/hd
                                                               (nthcdr 1 V1428))))
                                                            (list 'vector 0))
                                                           (shen/fail))
                                                          (shen/fail))
                                                         (shen/fail))
                                                        (shen/if
                                                         (shen/= YaccParse
                                                                 (shen/fail))
                                                         (shen/let YaccParse
                                                                   (shen/if
                                                                    (shen/cons\?
                                                                     (shen/hd V1428))
                                                                    (shen/let Parse_X
                                                                              (shen/hd
                                                                               (shen/hd V1428))
                                                                              (shen/if
                                                                               (shen/cons\? Parse_X)
                                                                               (shen/shen\.pair
                                                                                (shen/hd
                                                                                 (shen/shen\.pair
                                                                                  (nthcdr 1
                                                                                          (shen/hd V1428))
                                                                                  (shen/shen\.hdtl V1428)))
                                                                                (shen/shen\.constructor-error Parse_X))
                                                                               (shen/fail)))
                                                                    (shen/fail))
                                                                   (shen/if
                                                                    (shen/= YaccParse
                                                                            (shen/fail))
                                                                    (shen/let Parse_shen\.<simple_pattern>
                                                                              (shen/shen\.<simple_pattern> V1428)
                                                                              (shen/if
                                                                               (shen/not
                                                                                (shen/=
                                                                                 (shen/fail)
                                                                                 Parse_shen\.<simple_pattern>))
                                                                               (shen/shen\.pair
                                                                                (shen/hd Parse_shen\.<simple_pattern>)
                                                                                (shen/shen\.hdtl Parse_shen\.<simple_pattern>))
                                                                               (shen/fail)))
                                                                    YaccParse))
                                                         YaccParse))
                                              YaccParse))
                                   YaccParse))
                        YaccParse))
             YaccParse)))
(defun shen/shen\.constructor-error
    (V1430)
  (shen/simple-error
   (shen/shen\.app V1430 " is not a legitimate constructor\n" 'shen\.a)))
(defun shen/shen\.<simple_pattern>
    (V1432)
  (shen/let YaccParse
            (shen/if
             (shen/cons\?
              (shen/hd V1432))
             (shen/let Parse_X
                       (shen/hd
                        (shen/hd V1432))
                       (shen/if
                        (shen/= Parse_X '_)
                        (shen/shen\.pair
                         (shen/hd
                          (shen/shen\.pair
                           (nthcdr 1
                                   (shen/hd V1432))
                           (shen/shen\.hdtl V1432)))
                         (shen/gensym 'Parse_Y))
                        (shen/fail)))
             (shen/fail))
            (shen/if
             (shen/= YaccParse
                     (shen/fail))
             (shen/if
              (shen/cons\?
               (shen/hd V1432))
              (shen/let Parse_X
                        (shen/hd
                         (shen/hd V1432))
                        (shen/if
                         (shen/not
                          (shen/element\? Parse_X
                                          (list '-> '<-)))
                         (shen/shen\.pair
                          (shen/hd
                           (shen/shen\.pair
                            (nthcdr 1
                                    (shen/hd V1432))
                            (shen/shen\.hdtl V1432)))
                          Parse_X)
                         (shen/fail)))
              (shen/fail))
             YaccParse)))
(defun shen/shen\.<pattern1>
    (V1434)
  (shen/let Parse_shen\.<pattern>
            (shen/shen\.<pattern> V1434)
            (shen/if
             (shen/not
              (shen/=
               (shen/fail)
               Parse_shen\.<pattern>))
             (shen/shen\.pair
              (shen/hd Parse_shen\.<pattern>)
              (shen/shen\.hdtl Parse_shen\.<pattern>))
             (shen/fail))))
(defun shen/shen\.<pattern2>
    (V1436)
  (shen/let Parse_shen\.<pattern>
            (shen/shen\.<pattern> V1436)
            (shen/if
             (shen/not
              (shen/=
               (shen/fail)
               Parse_shen\.<pattern>))
             (shen/shen\.pair
              (shen/hd Parse_shen\.<pattern>)
              (shen/shen\.hdtl Parse_shen\.<pattern>))
             (shen/fail))))
(defun shen/shen\.<action>
    (V1438)
  (shen/if
   (shen/cons\?
    (shen/hd V1438))
   (shen/let Parse_X
             (shen/hd
              (shen/hd V1438))
             (shen/shen\.pair
              (shen/hd
               (shen/shen\.pair
                (nthcdr 1
                        (shen/hd V1438))
                (shen/shen\.hdtl V1438)))
              Parse_X))
   (shen/fail)))
(defun shen/shen\.<guard>
    (V1440)
  (shen/if
   (shen/cons\?
    (shen/hd V1440))
   (shen/let Parse_X
             (shen/hd
              (shen/hd V1440))
             (shen/shen\.pair
              (shen/hd
               (shen/shen\.pair
                (nthcdr 1
                        (shen/hd V1440))
                (shen/shen\.hdtl V1440)))
              Parse_X))
   (shen/fail)))
(defun shen/shen\.compile_to_machine_code
    (V1443 V1444)
  (shen/let Lambda+
            (shen/shen\.compile_to_lambda+ V1443 V1444)
            (shen/let KL
                      (shen/shen\.compile_to_kl V1443 Lambda+)
                      (shen/let Record
                                (shen/shen\.record-source V1443 KL)
                                KL))))
(defun shen/shen\.record-source
    (V1449 V1450)
  (shen/cond
   ((shen/value 'shen\.*installing-kl*)
    'shen\.skip)
   (shen/true
    (shen/put V1449 'shen\.source V1450
              (shen/value '*property-vector*)))))
(defun shen/shen\.compile_to_lambda+
    (V1453 V1454)
  (shen/let Arity
            (shen/shen\.aritycheck V1453 V1454)
            (shen/let UpDateSymbolTable
                      (shen/shen\.update-symbol-table V1453 Arity)
                      (shen/let Free
                                (shen/shen\.for-each
                                 (shen/lambda Rule
                                              (shen/shen\.free_variable_check V1453 Rule))
                                 V1454)
                                (shen/let Variables
                                          (shen/shen\.parameters Arity)
                                          (shen/let Strip
                                                    (shen/map
                                                     (shen/lambda X
                                                                  (shen/shen\.strip-protect X))
                                                     V1454)
                                                    (shen/let Abstractions
                                                              (shen/map
                                                               (shen/lambda X
                                                                            (shen/shen\.abstract_rule X))
                                                               Strip)
                                                              (shen/let Applications
                                                                        (shen/map
                                                                         (shen/lambda X
                                                                                      (shen/shen\.application_build Variables X))
                                                                         Abstractions)
                                                                        (list Variables Applications)))))))))
(defun shen/shen\.update-symbol-table
    (V1457 V1458)
  (shen/cond
   ((shen/= 0 V1458)
    'shen\.skip)
   (shen/true
    (shen/put V1457 'shen\.lambda-form
              (shen/eval-kl
               (shen/shen\.lambda-form V1457 V1458))
              (shen/value '*property-vector*)))))
(defun shen/shen\.free_variable_check
    (V1461 V1462)
  (shen/cond
   ((shen/and
     (shen/cons\? V1462)
     (shen/and
      (shen/cons\?
       (nthcdr 1 V1462))
      (shen/internal/predicate->shen
       (null
        (nthcdr 2 V1462)))))
    (shen/let Bound
              (shen/shen\.extract_vars
               (shen/hd V1462))
              (shen/let Free
                        (shen/shen\.extract_free_vars Bound
                                                      (shen/hd
                                                       (nthcdr 1 V1462)))
                        (shen/shen\.free_variable_warnings V1461 Free))))
   (shen/true
    (shen/shen\.f_error 'shen\.free_variable_check))))
(defun shen/shen\.extract_vars
    (V1464)
  (shen/cond
   ((shen/variable\? V1464)
    (list V1464))
   ((shen/cons\? V1464)
    (shen/union
     (shen/shen\.extract_vars
      (shen/hd V1464))
     (shen/shen\.extract_vars
      (nthcdr 1 V1464))))
   (shen/true nil)))
(defun shen/shen\.extract_free_vars
    (V1476 V1477)
  (cl-flet
      ((tail-trampoline
        (V1476 V1477)
        (shen/cond
         ((shen/and
           (shen/cons\? V1477)
           (shen/and
            (shen/cons\?
             (nthcdr 1 V1477))
            (shen/and
             (shen/internal/predicate->shen
              (null
               (nthcdr 2 V1477)))
             (shen/=
              (shen/hd V1477)
              'protect))))
          nil)
         ((shen/and
           (shen/variable\? V1477)
           (shen/not
            (shen/element\? V1477 V1476)))
          (list V1477))
         ((shen/and
           (shen/cons\? V1477)
           (shen/and
            (shen/= 'lambda
                    (shen/hd V1477))
            (shen/and
             (shen/cons\?
              (nthcdr 1 V1477))
             (shen/and
              (shen/cons\?
               (nthcdr 2 V1477))
              (shen/internal/predicate->shen
               (null
                (nthcdr 3 V1477)))))))
          (vector
           (list
            (append
             (list
              (shen/hd
               (nthcdr 1 V1477)))
             V1476)
            (shen/hd
             (nthcdr 2 V1477)))))
         ((shen/and
           (shen/cons\? V1477)
           (shen/and
            (shen/= 'let
                    (shen/hd V1477))
            (shen/and
             (shen/cons\?
              (nthcdr 1 V1477))
             (shen/and
              (shen/cons\?
               (nthcdr 2 V1477))
              (shen/and
               (shen/cons\?
                (nthcdr 3 V1477))
               (shen/internal/predicate->shen
                (null
                 (nthcdr 4 V1477))))))))
          (shen/union
           (shen/shen\.extract_free_vars V1476
                                         (shen/hd
                                          (nthcdr 2 V1477)))
           (shen/shen\.extract_free_vars
            (append
             (list
              (shen/hd
               (nthcdr 1 V1477)))
             V1476)
            (shen/hd
             (nthcdr 3 V1477)))))
         ((shen/cons\? V1477)
          (shen/union
           (shen/shen\.extract_free_vars V1476
                                         (shen/hd V1477))
           (shen/shen\.extract_free_vars V1476
                                         (nthcdr 1 V1477))))
         (shen/true nil))))
    (let
        ((result
          (funcall #'tail-trampoline V1476 V1477)))
      (while
          (vectorp result)
        (setq result
              (apply #'tail-trampoline
                     (aref result 0))))
      result)))
(defun shen/shen\.free_variable_warnings
    (V1482 V1483)
  (shen/cond
   ((shen/internal/predicate->shen
     (null V1483))
    '_)
   (shen/true
    (shen/simple-error
     (shen/cn "error: the following variables are free in "
              (shen/shen\.app V1482
                              (shen/cn ": "
                                       (shen/shen\.app
                                        (shen/shen\.list_variables V1483)
                                        "" 'shen\.a))
                              'shen\.a))))))
(defun shen/shen\.list_variables
    (V1485)
  (shen/cond
   ((shen/and
     (shen/cons\? V1485)
     (shen/internal/predicate->shen
      (null
       (nthcdr 1 V1485))))
    (shen/cn
     (shen/str
      (shen/hd V1485))
     "."))
   ((shen/cons\? V1485)
    (shen/cn
     (shen/str
      (shen/hd V1485))
     (shen/cn ", "
              (shen/shen\.list_variables
               (nthcdr 1 V1485)))))
   (shen/true
    (shen/shen\.f_error 'shen\.list_variables))))
(defun shen/shen\.strip-protect
    (V1487)
  (cl-flet
      ((tail-trampoline
        (V1487)
        (shen/cond
         ((shen/and
           (shen/cons\? V1487)
           (shen/and
            (shen/cons\?
             (nthcdr 1 V1487))
            (shen/and
             (shen/internal/predicate->shen
              (null
               (nthcdr 2 V1487)))
             (shen/=
              (shen/hd V1487)
              'protect))))
          (vector
           (list
            (shen/hd
             (nthcdr 1 V1487)))))
         ((shen/cons\? V1487)
          (shen/map
           (shen/lambda Z
                        (shen/shen\.strip-protect Z))
           V1487))
         (shen/true V1487))))
    (let
        ((result
          (funcall #'tail-trampoline V1487)))
      (while
          (vectorp result)
        (setq result
              (apply #'tail-trampoline
                     (aref result 0))))
      result)))
(defun shen/shen\.linearise
    (V1489)
  (shen/cond
   ((shen/and
     (shen/cons\? V1489)
     (shen/and
      (shen/cons\?
       (nthcdr 1 V1489))
      (shen/internal/predicate->shen
       (null
        (nthcdr 2 V1489)))))
    (shen/shen\.linearise_help
     (shen/shen\.flatten
      (shen/hd V1489))
     (shen/hd V1489)
     (shen/hd
      (nthcdr 1 V1489))))
   (shen/true
    (shen/shen\.f_error 'shen\.linearise))))
(defun shen/shen\.flatten
    (V1491)
  (shen/cond
   ((shen/internal/predicate->shen
     (null V1491))
    nil)
   ((shen/cons\? V1491)
    (shen/append
     (shen/shen\.flatten
      (shen/hd V1491))
     (shen/shen\.flatten
      (nthcdr 1 V1491))))
   (shen/true
    (list V1491))))
(defun shen/shen\.linearise_help
    (V1495 V1496 V1497)
  (cl-flet
      ((tail-trampoline
        (V1495 V1496 V1497)
        (shen/cond
         ((shen/internal/predicate->shen
           (null V1495))
          (list V1496 V1497))
         ((shen/cons\? V1495)
          (shen/if
           (shen/and
            (shen/variable\?
             (shen/hd V1495))
            (shen/element\?
             (shen/hd V1495)
             (nthcdr 1 V1495)))
           (shen/let Var
                     (shen/gensym
                      (shen/hd V1495))
                     (shen/let NewAction
                               (list 'where
                                     (list '=
                                           (shen/hd V1495)
                                           Var)
                                     V1497)
                               (shen/let NewPatts
                                         (shen/shen\.linearise_X
                                          (shen/hd V1495)
                                          Var V1496)
                                         (vector
                                          (list
                                           (nthcdr 1 V1495)
                                           NewPatts NewAction)))))
           (vector
            (list
             (nthcdr 1 V1495)
             V1496 V1497))))
         (shen/true
          (shen/shen\.f_error 'shen\.linearise_help)))))
    (let
        ((result
          (funcall #'tail-trampoline V1495 V1496 V1497)))
      (while
          (vectorp result)
        (setq result
              (apply #'tail-trampoline
                     (aref result 0))))
      result)))
(defun shen/shen\.linearise_X
    (V1510 V1511 V1512)
  (shen/cond
   ((shen/= V1512 V1510)
    V1511)
   ((shen/cons\? V1512)
    (shen/let L
              (shen/shen\.linearise_X V1510 V1511
                                      (shen/hd V1512))
              (shen/if
               (shen/= L
                       (shen/hd V1512))
               (append
                (list
                 (shen/hd V1512))
                (shen/shen\.linearise_X V1510 V1511
                                        (nthcdr 1 V1512)))
               (append
                (list L)
                (nthcdr 1 V1512)))))
   (shen/true V1512)))
(defun shen/shen\.aritycheck
    (V1515 V1516)
  (cl-flet
      ((tail-trampoline
        (V1515 V1516)
        (shen/cond
         ((shen/and
           (shen/cons\? V1516)
           (shen/and
            (shen/cons\?
             (shen/hd V1516))
            (shen/and
             (shen/cons\?
              (nthcdr 1
                      (shen/hd V1516)))
             (shen/and
              (shen/internal/predicate->shen
               (null
                (nthcdr 2
                        (shen/hd V1516))))
              (shen/internal/predicate->shen
               (null
                (nthcdr 1 V1516)))))))
          (shen/do
           (shen/shen\.aritycheck-action
            (shen/hd
             (nthcdr 1
                     (shen/hd V1516))))
           (shen/shen\.aritycheck-name V1515
                                       (shen/arity V1515)
                                       (shen/length
                                        (shen/hd
                                         (shen/hd V1516))))))
         ((shen/and
           (shen/cons\? V1516)
           (shen/and
            (shen/cons\?
             (shen/hd V1516))
            (shen/and
             (shen/cons\?
              (nthcdr 1
                      (shen/hd V1516)))
             (shen/and
              (shen/internal/predicate->shen
               (null
                (nthcdr 2
                        (shen/hd V1516))))
              (shen/and
               (shen/cons\?
                (nthcdr 1 V1516))
               (shen/and
                (shen/cons\?
                 (shen/hd
                  (nthcdr 1 V1516)))
                (shen/and
                 (shen/cons\?
                  (nthcdr 1
                          (shen/hd
                           (nthcdr 1 V1516))))
                 (shen/internal/predicate->shen
                  (null
                   (nthcdr 2
                           (shen/hd
                            (nthcdr 1 V1516))))))))))))
          (shen/if
           (shen/=
            (shen/length
             (shen/hd
              (shen/hd V1516)))
            (shen/length
             (shen/hd
              (shen/hd
               (nthcdr 1 V1516)))))
           (shen/do
            (shen/shen\.aritycheck-action
             (shen/hd
              (nthcdr 1
                      (shen/hd V1516))))
            (vector
             (list V1515
                   (nthcdr 1 V1516))))
           (shen/simple-error
            (shen/cn "arity error in "
                     (shen/shen\.app V1515 "\n" 'shen\.a)))))
         (shen/true
          (shen/shen\.f_error 'shen\.aritycheck)))))
    (let
        ((result
          (funcall #'tail-trampoline V1515 V1516)))
      (while
          (vectorp result)
        (setq result
              (apply #'tail-trampoline
                     (aref result 0))))
      result)))
(defun shen/shen\.aritycheck-name
    (V1529 V1530 V1531)
  (shen/cond
   ((shen/= -1 V1530)
    V1531)
   ((shen/= V1531 V1530)
    V1531)
   (shen/true
    (shen/do
     (shen/shen\.prhush
      (shen/cn "\nwarning: changing the arity of "
               (shen/shen\.app V1529 " can cause errors.\n" 'shen\.a))
      (shen/stoutput))
     V1531))))
(defun shen/shen\.aritycheck-action
    (V1537)
  (shen/cond
   ((shen/cons\? V1537)
    (shen/do
     (shen/shen\.aah
      (shen/hd V1537)
      (nthcdr 1 V1537))
     (shen/shen\.for-each
      (shen/lambda Y
                   (shen/shen\.aritycheck-action Y))
      V1537)))
   (shen/true 'shen\.skip)))
(defun shen/shen\.aah
    (V1540 V1541)
  (shen/let Arity
            (shen/arity V1540)
            (shen/let Len
                      (shen/length V1541)
                      (shen/if
                       (shen/and
                        (shen/> Arity -1)
                        (shen/> Len Arity))
                       (shen/shen\.prhush
                        (shen/cn "warning: "
                                 (shen/shen\.app V1540
                                                 (shen/cn " might not like "
                                                          (shen/shen\.app Len
                                                                          (shen/cn " argument"
                                                                                   (shen/shen\.app
                                                                                    (shen/if
                                                                                     (shen/> Len 1)
                                                                                     "s" "")
                                                                                    ".\n" 'shen\.a))
                                                                          'shen\.a))
                                                 'shen\.a))
                        (shen/stoutput))
                       'shen\.skip))))
(defun shen/shen\.abstract_rule
    (V1543)
  (shen/cond
   ((shen/and
     (shen/cons\? V1543)
     (shen/and
      (shen/cons\?
       (nthcdr 1 V1543))
      (shen/internal/predicate->shen
       (null
        (nthcdr 2 V1543)))))
    (shen/shen\.abstraction_build
     (shen/hd V1543)
     (shen/hd
      (nthcdr 1 V1543))))
   (shen/true
    (shen/shen\.f_error 'shen\.abstract_rule))))
(defun shen/shen\.abstraction_build
    (V1546 V1547)
  (shen/cond
   ((shen/internal/predicate->shen
     (null V1546))
    V1547)
   ((shen/cons\? V1546)
    (list '/\.
          (shen/hd V1546)
          (shen/shen\.abstraction_build
           (nthcdr 1 V1546)
           V1547)))
   (shen/true
    (shen/shen\.f_error 'shen\.abstraction_build))))
(defun shen/shen\.parameters
    (V1549)
  (shen/cond
   ((shen/= 0 V1549)
    nil)
   (shen/true
    (append
     (list
      (shen/gensym 'V))
     (shen/shen\.parameters
      (shen/- V1549 1))))))
(defun shen/shen\.application_build
    (V1552 V1553)
  (cl-flet
      ((tail-trampoline
        (V1552 V1553)
        (shen/cond
         ((shen/internal/predicate->shen
           (null V1552))
          V1553)
         ((shen/cons\? V1552)
          (vector
           (list
            (nthcdr 1 V1552)
            (list V1553
                  (shen/hd V1552)))))
         (shen/true
          (shen/shen\.f_error 'shen\.application_build)))))
    (let
        ((result
          (funcall #'tail-trampoline V1552 V1553)))
      (while
          (vectorp result)
        (setq result
              (apply #'tail-trampoline
                     (aref result 0))))
      result)))
(defun shen/shen\.compile_to_kl
    (V1556 V1557)
  (shen/cond
   ((shen/and
     (shen/cons\? V1557)
     (shen/and
      (shen/cons\?
       (nthcdr 1 V1557))
      (shen/internal/predicate->shen
       (null
        (nthcdr 2 V1557)))))
    (shen/let Arity
              (shen/shen\.store-arity V1556
                                      (shen/length
                                       (shen/hd V1557)))
              (shen/let Reduce
                        (shen/map
                         (shen/lambda X
                                      (shen/shen\.reduce X))
                         (shen/hd
                          (nthcdr 1 V1557)))
                        (shen/let CondExpression
                                  (shen/shen\.cond-expression V1556
                                                              (shen/hd V1557)
                                                              Reduce)
                                  (shen/let TypeTable
                                            (shen/if
                                             (shen/value 'shen\.*optimise*)
                                             (shen/shen\.typextable
                                              (shen/shen\.get-type V1556)
                                              (shen/hd V1557))
                                             'shen\.skip)
                                            (shen/let TypedCondExpression
                                                      (shen/if
                                                       (shen/value 'shen\.*optimise*)
                                                       (shen/shen\.assign-types
                                                        (shen/hd V1557)
                                                        TypeTable CondExpression)
                                                       CondExpression)
                                                      (list 'defun V1556
                                                            (shen/hd V1557)
                                                            TypedCondExpression)))))))
   (shen/true
    (shen/shen\.f_error 'shen\.compile_to_kl))))
(defun shen/shen\.get-type
    (V1563)
  (shen/cond
   ((shen/cons\? V1563)
    'shen\.skip)
   (shen/true
    (shen/let FType
              (shen/assoc V1563
                          (shen/value 'shen\.*signedfuncs*))
              (shen/if
               (shen/empty\? FType)
               'shen\.skip
               (nthcdr 1 FType))))))
(defun shen/shen\.typextable
    (V1574 V1575)
  (cl-flet
      ((tail-trampoline
        (V1574 V1575)
        (shen/cond
         ((shen/and
           (shen/cons\? V1574)
           (shen/and
            (shen/cons\?
             (nthcdr 1 V1574))
            (shen/and
             (shen/= '-->
                     (shen/hd
                      (nthcdr 1 V1574)))
             (shen/and
              (shen/cons\?
               (nthcdr 2 V1574))
              (shen/and
               (shen/internal/predicate->shen
                (null
                 (nthcdr 3 V1574)))
               (shen/cons\? V1575))))))
          (shen/if
           (shen/variable\?
            (shen/hd V1574))
           (vector
            (list
             (shen/hd
              (nthcdr 2 V1574))
             (nthcdr 1 V1575)))
           (append
            (list
             (append
              (list
               (shen/hd V1575))
              (shen/hd V1574)))
            (shen/shen\.typextable
             (shen/hd
              (nthcdr 2 V1574))
             (nthcdr 1 V1575)))))
         (shen/true nil))))
    (let
        ((result
          (funcall #'tail-trampoline V1574 V1575)))
      (while
          (vectorp result)
        (setq result
              (apply #'tail-trampoline
                     (aref result 0))))
      result)))
(defun shen/shen\.assign-types
    (V1579 V1580 V1581)
  (shen/cond
   ((shen/and
     (shen/cons\? V1581)
     (shen/and
      (shen/= 'let
              (shen/hd V1581))
      (shen/and
       (shen/cons\?
        (nthcdr 1 V1581))
       (shen/and
        (shen/cons\?
         (nthcdr 2 V1581))
        (shen/and
         (shen/cons\?
          (nthcdr 3 V1581))
         (shen/internal/predicate->shen
          (null
           (nthcdr 4 V1581))))))))
    (list 'let
          (shen/hd
           (nthcdr 1 V1581))
          (shen/shen\.assign-types V1579 V1580
                                   (shen/hd
                                    (nthcdr 2 V1581)))
          (shen/shen\.assign-types
           (append
            (list
             (shen/hd
              (nthcdr 1 V1581)))
            V1579)
           V1580
           (shen/hd
            (nthcdr 3 V1581)))))
   ((shen/and
     (shen/cons\? V1581)
     (shen/and
      (shen/= 'lambda
              (shen/hd V1581))
      (shen/and
       (shen/cons\?
        (nthcdr 1 V1581))
       (shen/and
        (shen/cons\?
         (nthcdr 2 V1581))
        (shen/internal/predicate->shen
         (null
          (nthcdr 3 V1581)))))))
    (list 'lambda
          (shen/hd
           (nthcdr 1 V1581))
          (shen/shen\.assign-types
           (append
            (list
             (shen/hd
              (nthcdr 1 V1581)))
            V1579)
           V1580
           (shen/hd
            (nthcdr 2 V1581)))))
   ((shen/and
     (shen/cons\? V1581)
     (shen/= 'cond
             (shen/hd V1581)))
    (append
     (list 'cond)
     (shen/map
      (shen/lambda Y
                   (list
                    (shen/shen\.assign-types V1579 V1580
                                             (shen/hd Y))
                    (shen/shen\.assign-types V1579 V1580
                                             (shen/hd
                                              (nthcdr 1 Y)))))
      (nthcdr 1 V1581))))
   ((shen/cons\? V1581)
    (shen/let NewTable
              (shen/shen\.typextable
               (shen/shen\.get-type
                (shen/hd V1581))
               (nthcdr 1 V1581))
              (append
               (list
                (shen/hd V1581))
               (shen/map
                (shen/lambda Y
                             (shen/shen\.assign-types V1579
                                                      (shen/append V1580 NewTable)
                                                      Y))
                (nthcdr 1 V1581)))))
   (shen/true
    (shen/let AtomType
              (shen/assoc V1581 V1580)
              (shen/if
               (shen/cons\? AtomType)
               (list 'type V1581
                     (nthcdr 1 AtomType))
               (shen/if
                (shen/element\? V1581 V1579)
                V1581
                (shen/shen\.atom-type V1581)))))))
(defun shen/shen\.atom-type
    (V1583)
  (shen/if
   (shen/string\? V1583)
   (list 'type V1583 'string)
   (shen/if
    (shen/number\? V1583)
    (list 'type V1583 'number)
    (shen/if
     (shen/boolean\? V1583)
     (list 'type V1583 'boolean)
     (shen/if
      (shen/symbol\? V1583)
      (list 'type V1583 'symbol)
      V1583)))))
(defun shen/shen\.store-arity
    (V1588 V1589)
  (shen/cond
   ((shen/value 'shen\.*installing-kl*)
    'shen\.skip)
   (shen/true
    (shen/put V1588 'arity V1589
              (shen/value '*property-vector*)))))
(defun shen/shen\.reduce
    (V1591)
  (shen/do
   (shen/set 'shen\.*teststack* nil)
   (shen/let Result
             (shen/shen\.reduce_help V1591)
             (list
              (append
               (list ': 'shen\.tests)
               (shen/reverse
                (shen/value 'shen\.*teststack*)))
              Result))))
(defun shen/shen\.reduce_help
    (V1593)
  (cl-flet
      ((tail-trampoline
        (V1593)
        (shen/cond
         ((shen/and
           (shen/cons\? V1593)
           (shen/and
            (shen/cons\?
             (shen/hd V1593))
            (shen/and
             (shen/= '/\.
                     (shen/hd
                      (shen/hd V1593)))
             (shen/and
              (shen/cons\?
               (nthcdr 1
                       (shen/hd V1593)))
              (shen/and
               (shen/cons\?
                (shen/hd
                 (nthcdr 1
                         (shen/hd V1593))))
               (shen/and
                (shen/= 'cons
                        (shen/hd
                         (shen/hd
                          (nthcdr 1
                                  (shen/hd V1593)))))
                (shen/and
                 (shen/cons\?
                  (nthcdr 1
                          (shen/hd
                           (nthcdr 1
                                   (shen/hd V1593)))))
                 (shen/and
                  (shen/cons\?
                   (nthcdr 2
                           (shen/hd
                            (nthcdr 1
                                    (shen/hd V1593)))))
                  (shen/and
                   (shen/internal/predicate->shen
                    (null
                     (nthcdr 3
                             (shen/hd
                              (nthcdr 1
                                      (shen/hd V1593))))))
                   (shen/and
                    (shen/cons\?
                     (nthcdr 2
                             (shen/hd V1593)))
                    (shen/and
                     (shen/internal/predicate->shen
                      (null
                       (nthcdr 3
                               (shen/hd V1593))))
                     (shen/and
                      (shen/cons\?
                       (nthcdr 1 V1593))
                      (shen/internal/predicate->shen
                       (null
                        (nthcdr 2 V1593)))))))))))))))
          (shen/do
           (shen/shen\.add_test
            (append
             (list 'cons\?)
             (nthcdr 1 V1593)))
           (shen/let Abstraction
                     (list '/\.
                           (shen/hd
                            (nthcdr 1
                                    (shen/hd
                                     (nthcdr 1
                                             (shen/hd V1593)))))
                           (list '/\.
                                 (shen/hd
                                  (nthcdr 2
                                          (shen/hd
                                           (nthcdr 1
                                                   (shen/hd V1593)))))
                                 (shen/shen\.ebr
                                  (shen/hd
                                   (nthcdr 1 V1593))
                                  (shen/hd
                                   (nthcdr 1
                                           (shen/hd V1593)))
                                  (shen/hd
                                   (nthcdr 2
                                           (shen/hd V1593))))))
                     (shen/let Application
                               (list
                                (list Abstraction
                                      (append
                                       (list 'hd)
                                       (nthcdr 1 V1593)))
                                (append
                                 (list 'tl)
                                 (nthcdr 1 V1593)))
                               (vector
                                (list Application))))))
         ((shen/and
           (shen/cons\? V1593)
           (shen/and
            (shen/cons\?
             (shen/hd V1593))
            (shen/and
             (shen/= '/\.
                     (shen/hd
                      (shen/hd V1593)))
             (shen/and
              (shen/cons\?
               (nthcdr 1
                       (shen/hd V1593)))
              (shen/and
               (shen/cons\?
                (shen/hd
                 (nthcdr 1
                         (shen/hd V1593))))
               (shen/and
                (shen/= '@p
                        (shen/hd
                         (shen/hd
                          (nthcdr 1
                                  (shen/hd V1593)))))
                (shen/and
                 (shen/cons\?
                  (nthcdr 1
                          (shen/hd
                           (nthcdr 1
                                   (shen/hd V1593)))))
                 (shen/and
                  (shen/cons\?
                   (nthcdr 2
                           (shen/hd
                            (nthcdr 1
                                    (shen/hd V1593)))))
                  (shen/and
                   (shen/internal/predicate->shen
                    (null
                     (nthcdr 3
                             (shen/hd
                              (nthcdr 1
                                      (shen/hd V1593))))))
                   (shen/and
                    (shen/cons\?
                     (nthcdr 2
                             (shen/hd V1593)))
                    (shen/and
                     (shen/internal/predicate->shen
                      (null
                       (nthcdr 3
                               (shen/hd V1593))))
                     (shen/and
                      (shen/cons\?
                       (nthcdr 1 V1593))
                      (shen/internal/predicate->shen
                       (null
                        (nthcdr 2 V1593)))))))))))))))
          (shen/do
           (shen/shen\.add_test
            (append
             (list 'tuple\?)
             (nthcdr 1 V1593)))
           (shen/let Abstraction
                     (list '/\.
                           (shen/hd
                            (nthcdr 1
                                    (shen/hd
                                     (nthcdr 1
                                             (shen/hd V1593)))))
                           (list '/\.
                                 (shen/hd
                                  (nthcdr 2
                                          (shen/hd
                                           (nthcdr 1
                                                   (shen/hd V1593)))))
                                 (shen/shen\.ebr
                                  (shen/hd
                                   (nthcdr 1 V1593))
                                  (shen/hd
                                   (nthcdr 1
                                           (shen/hd V1593)))
                                  (shen/hd
                                   (nthcdr 2
                                           (shen/hd V1593))))))
                     (shen/let Application
                               (list
                                (list Abstraction
                                      (append
                                       (list 'fst)
                                       (nthcdr 1 V1593)))
                                (append
                                 (list 'snd)
                                 (nthcdr 1 V1593)))
                               (vector
                                (list Application))))))
         ((shen/and
           (shen/cons\? V1593)
           (shen/and
            (shen/cons\?
             (shen/hd V1593))
            (shen/and
             (shen/= '/\.
                     (shen/hd
                      (shen/hd V1593)))
             (shen/and
              (shen/cons\?
               (nthcdr 1
                       (shen/hd V1593)))
              (shen/and
               (shen/cons\?
                (shen/hd
                 (nthcdr 1
                         (shen/hd V1593))))
               (shen/and
                (shen/= '@v
                        (shen/hd
                         (shen/hd
                          (nthcdr 1
                                  (shen/hd V1593)))))
                (shen/and
                 (shen/cons\?
                  (nthcdr 1
                          (shen/hd
                           (nthcdr 1
                                   (shen/hd V1593)))))
                 (shen/and
                  (shen/cons\?
                   (nthcdr 2
                           (shen/hd
                            (nthcdr 1
                                    (shen/hd V1593)))))
                  (shen/and
                   (shen/internal/predicate->shen
                    (null
                     (nthcdr 3
                             (shen/hd
                              (nthcdr 1
                                      (shen/hd V1593))))))
                   (shen/and
                    (shen/cons\?
                     (nthcdr 2
                             (shen/hd V1593)))
                    (shen/and
                     (shen/internal/predicate->shen
                      (null
                       (nthcdr 3
                               (shen/hd V1593))))
                     (shen/and
                      (shen/cons\?
                       (nthcdr 1 V1593))
                      (shen/internal/predicate->shen
                       (null
                        (nthcdr 2 V1593)))))))))))))))
          (shen/do
           (shen/shen\.add_test
            (append
             (list 'shen\.+vector\?)
             (nthcdr 1 V1593)))
           (shen/let Abstraction
                     (list '/\.
                           (shen/hd
                            (nthcdr 1
                                    (shen/hd
                                     (nthcdr 1
                                             (shen/hd V1593)))))
                           (list '/\.
                                 (shen/hd
                                  (nthcdr 2
                                          (shen/hd
                                           (nthcdr 1
                                                   (shen/hd V1593)))))
                                 (shen/shen\.ebr
                                  (shen/hd
                                   (nthcdr 1 V1593))
                                  (shen/hd
                                   (nthcdr 1
                                           (shen/hd V1593)))
                                  (shen/hd
                                   (nthcdr 2
                                           (shen/hd V1593))))))
                     (shen/let Application
                               (list
                                (list Abstraction
                                      (append
                                       (list 'hdv)
                                       (nthcdr 1 V1593)))
                                (append
                                 (list 'tlv)
                                 (nthcdr 1 V1593)))
                               (vector
                                (list Application))))))
         ((shen/and
           (shen/cons\? V1593)
           (shen/and
            (shen/cons\?
             (shen/hd V1593))
            (shen/and
             (shen/= '/\.
                     (shen/hd
                      (shen/hd V1593)))
             (shen/and
              (shen/cons\?
               (nthcdr 1
                       (shen/hd V1593)))
              (shen/and
               (shen/cons\?
                (shen/hd
                 (nthcdr 1
                         (shen/hd V1593))))
               (shen/and
                (shen/= '@s
                        (shen/hd
                         (shen/hd
                          (nthcdr 1
                                  (shen/hd V1593)))))
                (shen/and
                 (shen/cons\?
                  (nthcdr 1
                          (shen/hd
                           (nthcdr 1
                                   (shen/hd V1593)))))
                 (shen/and
                  (shen/cons\?
                   (nthcdr 2
                           (shen/hd
                            (nthcdr 1
                                    (shen/hd V1593)))))
                  (shen/and
                   (shen/internal/predicate->shen
                    (null
                     (nthcdr 3
                             (shen/hd
                              (nthcdr 1
                                      (shen/hd V1593))))))
                   (shen/and
                    (shen/cons\?
                     (nthcdr 2
                             (shen/hd V1593)))
                    (shen/and
                     (shen/internal/predicate->shen
                      (null
                       (nthcdr 3
                               (shen/hd V1593))))
                     (shen/and
                      (shen/cons\?
                       (nthcdr 1 V1593))
                      (shen/internal/predicate->shen
                       (null
                        (nthcdr 2 V1593)))))))))))))))
          (shen/do
           (shen/shen\.add_test
            (append
             (list 'shen\.+string\?)
             (nthcdr 1 V1593)))
           (shen/let Abstraction
                     (list '/\.
                           (shen/hd
                            (nthcdr 1
                                    (shen/hd
                                     (nthcdr 1
                                             (shen/hd V1593)))))
                           (list '/\.
                                 (shen/hd
                                  (nthcdr 2
                                          (shen/hd
                                           (nthcdr 1
                                                   (shen/hd V1593)))))
                                 (shen/shen\.ebr
                                  (shen/hd
                                   (nthcdr 1 V1593))
                                  (shen/hd
                                   (nthcdr 1
                                           (shen/hd V1593)))
                                  (shen/hd
                                   (nthcdr 2
                                           (shen/hd V1593))))))
                     (shen/let Application
                               (list
                                (list Abstraction
                                      (list 'pos
                                            (shen/hd
                                             (nthcdr 1 V1593))
                                            0))
                                (append
                                 (list 'tlstr)
                                 (nthcdr 1 V1593)))
                               (vector
                                (list Application))))))
         ((shen/and
           (shen/cons\? V1593)
           (shen/and
            (shen/cons\?
             (shen/hd V1593))
            (shen/and
             (shen/= '/\.
                     (shen/hd
                      (shen/hd V1593)))
             (shen/and
              (shen/cons\?
               (nthcdr 1
                       (shen/hd V1593)))
              (shen/and
               (shen/cons\?
                (nthcdr 2
                        (shen/hd V1593)))
               (shen/and
                (shen/internal/predicate->shen
                 (null
                  (nthcdr 3
                          (shen/hd V1593))))
                (shen/and
                 (shen/cons\?
                  (nthcdr 1 V1593))
                 (shen/and
                  (shen/internal/predicate->shen
                   (null
                    (nthcdr 2 V1593)))
                  (shen/not
                   (shen/variable\?
                    (shen/hd
                     (nthcdr 1
                             (shen/hd V1593)))))))))))))
          (shen/do
           (shen/shen\.add_test
            (append
             (list '=
                   (shen/hd
                    (nthcdr 1
                            (shen/hd V1593))))
             (nthcdr 1 V1593)))
           (vector
            (list
             (shen/hd
              (nthcdr 2
                      (shen/hd V1593)))))))
         ((shen/and
           (shen/cons\? V1593)
           (shen/and
            (shen/cons\?
             (shen/hd V1593))
            (shen/and
             (shen/= '/\.
                     (shen/hd
                      (shen/hd V1593)))
             (shen/and
              (shen/cons\?
               (nthcdr 1
                       (shen/hd V1593)))
              (shen/and
               (shen/cons\?
                (nthcdr 2
                        (shen/hd V1593)))
               (shen/and
                (shen/internal/predicate->shen
                 (null
                  (nthcdr 3
                          (shen/hd V1593))))
                (shen/and
                 (shen/cons\?
                  (nthcdr 1 V1593))
                 (shen/internal/predicate->shen
                  (null
                   (nthcdr 2 V1593))))))))))
          (vector
           (list
            (shen/shen\.ebr
             (shen/hd
              (nthcdr 1 V1593))
             (shen/hd
              (nthcdr 1
                      (shen/hd V1593)))
             (shen/hd
              (nthcdr 2
                      (shen/hd V1593)))))))
         ((shen/and
           (shen/cons\? V1593)
           (shen/and
            (shen/= 'where
                    (shen/hd V1593))
            (shen/and
             (shen/cons\?
              (nthcdr 1 V1593))
             (shen/and
              (shen/cons\?
               (nthcdr 2 V1593))
              (shen/internal/predicate->shen
               (null
                (nthcdr 3 V1593)))))))
          (shen/do
           (shen/shen\.add_test
            (shen/hd
             (nthcdr 1 V1593)))
           (vector
            (list
             (shen/hd
              (nthcdr 2 V1593))))))
         ((shen/and
           (shen/cons\? V1593)
           (shen/and
            (shen/cons\?
             (nthcdr 1 V1593))
            (shen/internal/predicate->shen
             (null
              (nthcdr 2 V1593)))))
          (shen/let Z
                    (shen/shen\.reduce_help
                     (shen/hd V1593))
                    (shen/if
                     (shen/=
                      (shen/hd V1593)
                      Z)
                     V1593
                     (vector
                      (list
                       (append
                        (list Z)
                        (nthcdr 1 V1593)))))))
         (shen/true V1593))))
    (let
        ((result
          (funcall #'tail-trampoline V1593)))
      (while
          (vectorp result)
        (setq result
              (apply #'tail-trampoline
                     (aref result 0))))
      result)))
(defun shen/shen\.+string\?
    (V1595)
  (shen/cond
   ((shen/= "" V1595)
    'false)
   (shen/true
    (shen/string\? V1595))))
(defun shen/shen\.+vector\?
    (V1597)
  (shen/and
   (shen/absvector\? V1597)
   (shen/>
    (shen/<-address V1597 0)
    0)))
(defun shen/shen\.ebr
    (V1611 V1612 V1613)
  (shen/cond
   ((shen/= V1613 V1612)
    V1611)
   ((shen/and
     (shen/cons\? V1613)
     (shen/and
      (shen/= '/\.
              (shen/hd V1613))
      (shen/and
       (shen/cons\?
        (nthcdr 1 V1613))
       (shen/and
        (shen/cons\?
         (nthcdr 2 V1613))
        (shen/and
         (shen/internal/predicate->shen
          (null
           (nthcdr 3 V1613)))
         (shen/>
          (shen/occurrences V1612
                            (shen/hd
                             (nthcdr 1 V1613)))
          0))))))
    V1613)
   ((shen/and
     (shen/cons\? V1613)
     (shen/and
      (shen/= 'lambda
              (shen/hd V1613))
      (shen/and
       (shen/cons\?
        (nthcdr 1 V1613))
       (shen/and
        (shen/cons\?
         (nthcdr 2 V1613))
        (shen/and
         (shen/internal/predicate->shen
          (null
           (nthcdr 3 V1613)))
         (shen/>
          (shen/occurrences V1612
                            (shen/hd
                             (nthcdr 1 V1613)))
          0))))))
    V1613)
   ((shen/and
     (shen/cons\? V1613)
     (shen/and
      (shen/= 'let
              (shen/hd V1613))
      (shen/and
       (shen/cons\?
        (nthcdr 1 V1613))
       (shen/and
        (shen/cons\?
         (nthcdr 2 V1613))
        (shen/and
         (shen/cons\?
          (nthcdr 3 V1613))
         (shen/and
          (shen/internal/predicate->shen
           (null
            (nthcdr 4 V1613)))
          (shen/=
           (shen/hd
            (nthcdr 1 V1613))
           V1612)))))))
    (append
     (list 'let
           (shen/hd
            (nthcdr 1 V1613))
           (shen/shen\.ebr V1611
                           (shen/hd
                            (nthcdr 1 V1613))
                           (shen/hd
                            (nthcdr 2 V1613))))
     (nthcdr 3 V1613)))
   ((shen/cons\? V1613)
    (append
     (list
      (shen/shen\.ebr V1611 V1612
                      (shen/hd V1613)))
     (shen/shen\.ebr V1611 V1612
                     (nthcdr 1 V1613))))
   (shen/true V1613)))
(defun shen/shen\.add_test
    (V1615)
  (shen/set 'shen\.*teststack*
            (append
             (list V1615)
             (shen/value 'shen\.*teststack*))))
(defun shen/shen\.cond-expression
    (V1619 V1620 V1621)
  (shen/let Err
            (shen/shen\.err-condition V1619)
            (shen/let Cases
                      (shen/shen\.case-form V1621 Err)
                      (shen/let EncodeChoices
                                (shen/shen\.encode-choices Cases V1619)
                                (shen/shen\.cond-form EncodeChoices)))))
(defun shen/shen\.cond-form
    (V1625)
  (shen/cond
   ((shen/and
     (shen/cons\? V1625)
     (shen/and
      (shen/cons\?
       (shen/hd V1625))
      (shen/and
       (shen/= 'true
               (shen/hd
                (shen/hd V1625)))
       (shen/and
        (shen/cons\?
         (nthcdr 1
                 (shen/hd V1625)))
        (shen/internal/predicate->shen
         (null
          (nthcdr 2
                  (shen/hd V1625))))))))
    (shen/hd
     (nthcdr 1
             (shen/hd V1625))))
   (shen/true
    (append
     (list 'cond)
     V1625))))
(defun shen/shen\.encode-choices
    (V1630 V1631)
  (shen/cond
   ((shen/internal/predicate->shen
     (null V1630))
    nil)
   ((shen/and
     (shen/cons\? V1630)
     (shen/and
      (shen/cons\?
       (shen/hd V1630))
      (shen/and
       (shen/= 'true
               (shen/hd
                (shen/hd V1630)))
       (shen/and
        (shen/cons\?
         (nthcdr 1
                 (shen/hd V1630)))
        (shen/and
         (shen/cons\?
          (shen/hd
           (nthcdr 1
                   (shen/hd V1630))))
         (shen/and
          (shen/= 'shen\.choicepoint!
                  (shen/hd
                   (shen/hd
                    (nthcdr 1
                            (shen/hd V1630)))))
          (shen/and
           (shen/cons\?
            (nthcdr 1
                    (shen/hd
                     (nthcdr 1
                             (shen/hd V1630)))))
           (shen/and
            (shen/internal/predicate->shen
             (null
              (nthcdr 2
                      (shen/hd
                       (nthcdr 1
                               (shen/hd V1630))))))
            (shen/and
             (shen/internal/predicate->shen
              (null
               (nthcdr 2
                       (shen/hd V1630))))
             (shen/internal/predicate->shen
              (null
               (nthcdr 1 V1630))))))))))))
    (list
     (list 'true
           (list 'let 'Result
                 (shen/hd
                  (nthcdr 1
                          (shen/hd
                           (nthcdr 1
                                   (shen/hd V1630)))))
                 (list 'if
                       (list '= 'Result
                             (list 'fail))
                       (shen/if
                        (shen/value 'shen\.*installing-kl*)
                        (list 'shen\.sys-error V1631)
                        (list 'shen\.f_error V1631))
                       'Result)))))
   ((shen/and
     (shen/cons\? V1630)
     (shen/and
      (shen/cons\?
       (shen/hd V1630))
      (shen/and
       (shen/= 'true
               (shen/hd
                (shen/hd V1630)))
       (shen/and
        (shen/cons\?
         (nthcdr 1
                 (shen/hd V1630)))
        (shen/and
         (shen/cons\?
          (shen/hd
           (nthcdr 1
                   (shen/hd V1630))))
         (shen/and
          (shen/= 'shen\.choicepoint!
                  (shen/hd
                   (shen/hd
                    (nthcdr 1
                            (shen/hd V1630)))))
          (shen/and
           (shen/cons\?
            (nthcdr 1
                    (shen/hd
                     (nthcdr 1
                             (shen/hd V1630)))))
           (shen/and
            (shen/internal/predicate->shen
             (null
              (nthcdr 2
                      (shen/hd
                       (nthcdr 1
                               (shen/hd V1630))))))
            (shen/internal/predicate->shen
             (null
              (nthcdr 2
                      (shen/hd V1630))))))))))))
    (list
     (list 'true
           (list 'let 'Result
                 (shen/hd
                  (nthcdr 1
                          (shen/hd
                           (nthcdr 1
                                   (shen/hd V1630)))))
                 (list 'if
                       (list '= 'Result
                             (list 'fail))
                       (shen/shen\.cond-form
                        (shen/shen\.encode-choices
                         (nthcdr 1 V1630)
                         V1631))
                       'Result)))))
   ((shen/and
     (shen/cons\? V1630)
     (shen/and
      (shen/cons\?
       (shen/hd V1630))
      (shen/and
       (shen/cons\?
        (nthcdr 1
                (shen/hd V1630)))
       (shen/and
        (shen/cons\?
         (shen/hd
          (nthcdr 1
                  (shen/hd V1630))))
        (shen/and
         (shen/= 'shen\.choicepoint!
                 (shen/hd
                  (shen/hd
                   (nthcdr 1
                           (shen/hd V1630)))))
         (shen/and
          (shen/cons\?
           (nthcdr 1
                   (shen/hd
                    (nthcdr 1
                            (shen/hd V1630)))))
          (shen/and
           (shen/internal/predicate->shen
            (null
             (nthcdr 2
                     (shen/hd
                      (nthcdr 1
                              (shen/hd V1630))))))
           (shen/internal/predicate->shen
            (null
             (nthcdr 2
                     (shen/hd V1630)))))))))))
    (list
     (list 'true
           (list 'let 'Freeze
                 (list 'freeze
                       (shen/shen\.cond-form
                        (shen/shen\.encode-choices
                         (nthcdr 1 V1630)
                         V1631)))
                 (list 'if
                       (shen/hd
                        (shen/hd V1630))
                       (list 'let 'Result
                             (shen/hd
                              (nthcdr 1
                                      (shen/hd
                                       (nthcdr 1
                                               (shen/hd V1630)))))
                             (list 'if
                                   (list '= 'Result
                                         (list 'fail))
                                   (list 'thaw 'Freeze)
                                   'Result))
                       (list 'thaw 'Freeze))))))
   ((shen/and
     (shen/cons\? V1630)
     (shen/and
      (shen/cons\?
       (shen/hd V1630))
      (shen/and
       (shen/cons\?
        (nthcdr 1
                (shen/hd V1630)))
       (shen/internal/predicate->shen
        (null
         (nthcdr 2
                 (shen/hd V1630)))))))
    (append
     (list
      (shen/hd V1630))
     (shen/shen\.encode-choices
      (nthcdr 1 V1630)
      V1631)))
   (shen/true
    (shen/shen\.f_error 'shen\.encode-choices))))
(defun shen/shen\.case-form
    (V1638 V1639)
  (shen/cond
   ((shen/internal/predicate->shen
     (null V1638))
    (list V1639))
   ((shen/and
     (shen/cons\? V1638)
     (shen/and
      (shen/cons\?
       (shen/hd V1638))
      (shen/and
       (shen/cons\?
        (shen/hd
         (shen/hd V1638)))
       (shen/and
        (shen/= ':
                (shen/hd
                 (shen/hd
                  (shen/hd V1638))))
        (shen/and
         (shen/cons\?
          (nthcdr 1
                  (shen/hd
                   (shen/hd V1638))))
         (shen/and
          (shen/= 'shen\.tests
                  (shen/hd
                   (nthcdr 1
                           (shen/hd
                            (shen/hd V1638)))))
          (shen/and
           (shen/internal/predicate->shen
            (null
             (nthcdr 2
                     (shen/hd
                      (shen/hd V1638)))))
           (shen/and
            (shen/cons\?
             (nthcdr 1
                     (shen/hd V1638)))
            (shen/and
             (shen/cons\?
              (shen/hd
               (nthcdr 1
                       (shen/hd V1638))))
             (shen/and
              (shen/= 'shen\.choicepoint!
                      (shen/hd
                       (shen/hd
                        (nthcdr 1
                                (shen/hd V1638)))))
              (shen/and
               (shen/cons\?
                (nthcdr 1
                        (shen/hd
                         (nthcdr 1
                                 (shen/hd V1638)))))
               (shen/and
                (shen/internal/predicate->shen
                 (null
                  (nthcdr 2
                          (shen/hd
                           (nthcdr 1
                                   (shen/hd V1638))))))
                (shen/internal/predicate->shen
                 (null
                  (nthcdr 2
                          (shen/hd V1638))))))))))))))))
    (append
     (list
      (append
       (list 'true)
       (nthcdr 1
               (shen/hd V1638))))
     (shen/shen\.case-form
      (nthcdr 1 V1638)
      V1639)))
   ((shen/and
     (shen/cons\? V1638)
     (shen/and
      (shen/cons\?
       (shen/hd V1638))
      (shen/and
       (shen/cons\?
        (shen/hd
         (shen/hd V1638)))
       (shen/and
        (shen/= ':
                (shen/hd
                 (shen/hd
                  (shen/hd V1638))))
        (shen/and
         (shen/cons\?
          (nthcdr 1
                  (shen/hd
                   (shen/hd V1638))))
         (shen/and
          (shen/= 'shen\.tests
                  (shen/hd
                   (nthcdr 1
                           (shen/hd
                            (shen/hd V1638)))))
          (shen/and
           (shen/internal/predicate->shen
            (null
             (nthcdr 2
                     (shen/hd
                      (shen/hd V1638)))))
           (shen/and
            (shen/cons\?
             (nthcdr 1
                     (shen/hd V1638)))
            (shen/internal/predicate->shen
             (null
              (nthcdr 2
                      (shen/hd V1638))))))))))))
    (list
     (append
      (list 'true)
      (nthcdr 1
              (shen/hd V1638)))))
   ((shen/and
     (shen/cons\? V1638)
     (shen/and
      (shen/cons\?
       (shen/hd V1638))
      (shen/and
       (shen/cons\?
        (shen/hd
         (shen/hd V1638)))
       (shen/and
        (shen/= ':
                (shen/hd
                 (shen/hd
                  (shen/hd V1638))))
        (shen/and
         (shen/cons\?
          (nthcdr 1
                  (shen/hd
                   (shen/hd V1638))))
         (shen/and
          (shen/= 'shen\.tests
                  (shen/hd
                   (nthcdr 1
                           (shen/hd
                            (shen/hd V1638)))))
          (shen/and
           (shen/cons\?
            (nthcdr 1
                    (shen/hd V1638)))
           (shen/internal/predicate->shen
            (null
             (nthcdr 2
                     (shen/hd V1638)))))))))))
    (append
     (list
      (append
       (list
        (shen/shen\.embed-and
         (nthcdr 2
                 (shen/hd
                  (shen/hd V1638)))))
       (nthcdr 1
               (shen/hd V1638))))
     (shen/shen\.case-form
      (nthcdr 1 V1638)
      V1639)))
   (shen/true
    (shen/shen\.f_error 'shen\.case-form))))
(defun shen/shen\.embed-and
    (V1641)
  (shen/cond
   ((shen/and
     (shen/cons\? V1641)
     (shen/internal/predicate->shen
      (null
       (nthcdr 1 V1641))))
    (shen/hd V1641))
   ((shen/cons\? V1641)
    (list 'and
          (shen/hd V1641)
          (shen/shen\.embed-and
           (nthcdr 1 V1641))))
   (shen/true
    (shen/shen\.f_error 'shen\.embed-and))))
(defun shen/shen\.err-condition
    (V1643)
  (list 'true
        (list 'shen\.f_error V1643)))
(defun shen/shen\.sys-error
    (V1645)
  (shen/simple-error
   (shen/cn "system function "
            (shen/shen\.app V1645 ": unexpected argument\n" 'shen\.a))))
(defun shen/thaw
    (V2827)
  (shen/internal/apply-higher-order-function V2827
                                             (list)))
(defun shen/eval
    (V2829)
  (shen/let Macroexpand
            (shen/shen\.walk
             (shen/lambda Y
                          (shen/macroexpand Y))
             V2829)
            (shen/if
             (shen/shen\.packaged\? Macroexpand)
             (shen/map
              (shen/lambda Z
                           (shen/shen\.eval-without-macros Z))
              (shen/shen\.package-contents Macroexpand))
             (shen/shen\.eval-without-macros Macroexpand))))
(defun shen/shen\.eval-without-macros
    (V2831)
  (shen/eval-kl
   (shen/shen\.elim-def
    (shen/shen\.proc-input+ V2831))))
(defun shen/shen\.proc-input+
    (V2833)
  (shen/cond
   ((shen/and
     (shen/cons\? V2833)
     (shen/and
      (shen/= 'input+
              (shen/hd V2833))
      (shen/and
       (shen/cons\?
        (nthcdr 1 V2833))
       (shen/and
        (shen/cons\?
         (nthcdr 2 V2833))
        (shen/internal/predicate->shen
         (null
          (nthcdr 3 V2833)))))))
    (append
     (list 'input+
           (shen/shen\.rcons_form
            (shen/hd
             (nthcdr 1 V2833))))
     (nthcdr 2 V2833)))
   ((shen/and
     (shen/cons\? V2833)
     (shen/and
      (shen/= 'shen\.read+
              (shen/hd V2833))
      (shen/and
       (shen/cons\?
        (nthcdr 1 V2833))
       (shen/and
        (shen/cons\?
         (nthcdr 2 V2833))
        (shen/internal/predicate->shen
         (null
          (nthcdr 3 V2833)))))))
    (append
     (list 'shen\.read+
           (shen/shen\.rcons_form
            (shen/hd
             (nthcdr 1 V2833))))
     (nthcdr 2 V2833)))
   ((shen/cons\? V2833)
    (shen/map
     (shen/lambda Z
                  (shen/shen\.proc-input+ Z))
     V2833))
   (shen/true V2833)))
(defun shen/shen\.elim-def
    (V2835)
  (cl-flet
      ((tail-trampoline
        (V2835)
        (shen/cond
         ((shen/and
           (shen/cons\? V2835)
           (shen/and
            (shen/= 'define
                    (shen/hd V2835))
            (shen/cons\?
             (nthcdr 1 V2835))))
          (shen/shen\.shen->kl
           (shen/hd
            (nthcdr 1 V2835))
           (nthcdr 2 V2835)))
         ((shen/and
           (shen/cons\? V2835)
           (shen/and
            (shen/= 'defmacro
                    (shen/hd V2835))
            (shen/cons\?
             (nthcdr 1 V2835))))
          (shen/let Default
                    (list 'X '-> 'X)
                    (shen/let Def
                              (shen/shen\.elim-def
                               (append
                                (list 'define
                                      (shen/hd
                                       (nthcdr 1 V2835)))
                                (shen/append
                                 (nthcdr 2 V2835)
                                 Default)))
                              (shen/let MacroAdd
                                        (shen/shen\.add-macro
                                         (shen/hd
                                          (nthcdr 1 V2835)))
                                        Def))))
         ((shen/and
           (shen/cons\? V2835)
           (shen/and
            (shen/= 'defcc
                    (shen/hd V2835))
            (shen/cons\?
             (nthcdr 1 V2835))))
          (vector
           (list
            (shen/shen\.yacc V2835))))
         ((shen/cons\? V2835)
          (shen/map
           (shen/lambda Z
                        (shen/shen\.elim-def Z))
           V2835))
         (shen/true V2835))))
    (let
        ((result
          (funcall #'tail-trampoline V2835)))
      (while
          (vectorp result)
        (setq result
              (apply #'tail-trampoline
                     (aref result 0))))
      result)))
(defun shen/shen\.add-macro
    (V2837)
  (shen/let MacroReg
            (shen/value 'shen\.*macroreg*)
            (shen/let NewMacroReg
                      (shen/set 'shen\.*macroreg*
                                (shen/adjoin V2837
                                             (shen/value 'shen\.*macroreg*)))
                      (shen/if
                       (shen/= MacroReg NewMacroReg)
                       'shen\.skip
                       (shen/set '*macros*
                                 (append
                                  (list
                                   (shen/function V2837))
                                  (shen/value '*macros*)))))))
(defun shen/shen\.packaged\?
    (V2845)
  (shen/cond
   ((shen/and
     (shen/cons\? V2845)
     (shen/and
      (shen/= 'package
              (shen/hd V2845))
      (shen/and
       (shen/cons\?
        (nthcdr 1 V2845))
       (shen/cons\?
        (nthcdr 2 V2845)))))
    'true)
   (shen/true 'false)))
(defun shen/external
    (V2847)
  (shen/trap-error
   (shen/get V2847 'shen\.external-symbols
             (shen/value '*property-vector*))
   (shen/lambda E
                (shen/simple-error
                 (shen/cn "package "
                          (shen/shen\.app V2847 " has not been used.\n" 'shen\.a))))))
(defun shen/internal
    (V2849)
  (shen/trap-error
   (shen/get V2849 'shen\.internal-symbols
             (shen/value '*property-vector*))
   (shen/lambda E
                (shen/simple-error
                 (shen/cn "package "
                          (shen/shen\.app V2849 " has not been used.\n" 'shen\.a))))))
(defun shen/shen\.package-contents
    (V2853)
  (shen/cond
   ((shen/and
     (shen/cons\? V2853)
     (shen/and
      (shen/= 'package
              (shen/hd V2853))
      (shen/and
       (shen/cons\?
        (nthcdr 1 V2853))
       (shen/and
        (shen/= 'null
                (shen/hd
                 (nthcdr 1 V2853)))
        (shen/cons\?
         (nthcdr 2 V2853))))))
    (nthcdr 3 V2853))
   ((shen/and
     (shen/cons\? V2853)
     (shen/and
      (shen/= 'package
              (shen/hd V2853))
      (shen/and
       (shen/cons\?
        (nthcdr 1 V2853))
       (shen/cons\?
        (nthcdr 2 V2853)))))
    (shen/let PackageNameDot
              (shen/intern
               (shen/cn
                (shen/str
                 (shen/hd
                  (nthcdr 1 V2853)))
                "."))
              (shen/let ExpPackageNameDot
                        (shen/explode PackageNameDot)
                        (shen/shen\.packageh
                         (shen/hd
                          (nthcdr 1 V2853))
                         (shen/hd
                          (nthcdr 2 V2853))
                         (nthcdr 3 V2853)
                         ExpPackageNameDot))))
   (shen/true
    (shen/shen\.f_error 'shen\.package-contents))))
(defun shen/shen\.walk
    (V2856 V2857)
  (shen/cond
   ((shen/cons\? V2857)
    (shen/internal/apply-higher-order-function V2856
                                               (list
                                                (shen/map
                                                 (shen/lambda Z
                                                              (shen/shen\.walk V2856 Z))
                                                 V2857))))
   (shen/true
    (shen/internal/apply-higher-order-function V2856
                                               (list V2857)))))
(defun shen/compile
    (V2861 V2862 V2863)
  (shen/let O
            (shen/internal/apply-higher-order-function V2861
                                                       (list
                                                        (list V2862 nil)))
            (shen/if
             (shen/or
              (shen/=
               (shen/fail)
               O)
              (shen/not
               (shen/empty\?
                (shen/hd O))))
             (shen/internal/apply-higher-order-function V2863
                                                        (list O))
             (shen/shen\.hdtl O))))
(defun shen/fail-if
    (V2866 V2867)
  (shen/if
   (shen/internal/apply-higher-order-function V2866
                                              (list V2867))
   (shen/fail)
   V2867))
(defun shen/@s
    (V2870 V2871)
  (shen/cn V2870 V2871))
(defun shen/tc\? nil
  (shen/value 'shen\.*tc*))
(defun shen/ps
    (V2873)
  (shen/trap-error
   (shen/get V2873 'shen\.source
             (shen/value '*property-vector*))
   (shen/lambda E
                (shen/simple-error
                 (shen/shen\.app V2873 " not found.\n" 'shen\.a)))))
(defun shen/stinput nil
  (shen/value '*stinput*))
(defun shen/vector
    (V2875)
  (shen/let Vector
            (shen/absvector
             (1+ V2875))
            (shen/let ZeroStamp
                      (shen/address-> Vector 0 V2875)
                      (shen/let Standard
                                (shen/if
                                 (shen/= V2875 0)
                                 ZeroStamp
                                 (shen/shen\.fillvector ZeroStamp 1 V2875
                                                        (shen/fail)))
                                Standard))))
(defun shen/shen\.fillvector
    (V2881 V2882 V2883 V2884)
  (cl-flet
      ((tail-trampoline
        (V2881 V2882 V2883 V2884)
        (shen/cond
         ((shen/= V2883 V2882)
          (shen/address-> V2881 V2883 V2884))
         (shen/true
          (vector
           (list
            (shen/address-> V2881 V2882 V2884)
            (1+ V2882)
            V2883 V2884))))))
    (let
        ((result
          (funcall #'tail-trampoline V2881 V2882 V2883 V2884)))
      (while
          (vectorp result)
        (setq result
              (apply #'tail-trampoline
                     (aref result 0))))
      result)))
(defun shen/vector\?
    (V2886)
  (shen/and
   (shen/absvector\? V2886)
   (shen/let X
             (shen/trap-error
              (shen/<-address V2886 0)
              (shen/lambda E -1))
             (shen/and
              (shen/number\? X)
              (shen/>= X 0)))))
(defun shen/vector->
    (V2890 V2891 V2892)
  (shen/if
   (shen/= V2891 0)
   (shen/simple-error "cannot access 0th element of a vector\n")
   (shen/address-> V2890 V2891 V2892)))
(defun shen/<-vector
    (V2895 V2896)
  (shen/if
   (shen/= V2896 0)
   (shen/simple-error "cannot access 0th element of a vector\n")
   (shen/let VectorElement
             (shen/<-address V2895 V2896)
             (shen/if
              (shen/= VectorElement
                      (shen/fail))
              (shen/simple-error "vector element not found\n")
              VectorElement))))
(defun shen/shen\.posint\?
    (V2898)
  (shen/and
   (shen/integer\? V2898)
   (shen/>= V2898 0)))
(defun shen/limit
    (V2900)
  (shen/<-address V2900 0))
(defun shen/symbol\?
    (V2902)
  (shen/cond
   ((shen/or
     (shen/boolean\? V2902)
     (shen/or
      (shen/number\? V2902)
      (shen/string\? V2902)))
    'false)
   (shen/true
    (shen/trap-error
     (shen/let String
               (shen/str V2902)
               (shen/shen\.analyse-symbol\? String))
     (shen/lambda E 'false)))))
(defun shen/shen\.analyse-symbol\?
    (V2904)
  (shen/cond
   ((shen/= "" V2904)
    'false)
   ((shen/shen\.+string\? V2904)
    (shen/and
     (shen/shen\.alpha\?
      (shen/pos V2904 0))
     (shen/shen\.alphanums\?
      (shen/tlstr V2904))))
   (shen/true
    (shen/shen\.f_error 'shen\.analyse-symbol\?))))
(defun shen/shen\.alpha\?
    (V2906)
  (shen/element\? V2906
                  (list "A" "B" "C" "D" "E" "F" "G" "H" "I" "J" "K" "L" "M" "N" "O" "P" "Q" "R" "S" "T" "U" "V" "W" "X" "Y" "Z" "a" "b" "c" "d" "e" "f" "g" "h" "i" "j" "k" "l" "m" "n" "o" "p" "q" "r" "s" "t" "u" "v" "w" "x" "y" "z" "=" "*" "/" "+" "-" "_" "?" "$" "!" "@" "~" ">" "<" "&" "%" "{" "}" ":" ";" "`" "#" "'" ".")))
(defun shen/shen\.alphanums\?
    (V2908)
  (shen/cond
   ((shen/= "" V2908)
    'true)
   ((shen/shen\.+string\? V2908)
    (shen/and
     (shen/shen\.alphanum\?
      (shen/pos V2908 0))
     (shen/shen\.alphanums\?
      (shen/tlstr V2908))))
   (shen/true
    (shen/shen\.f_error 'shen\.alphanums\?))))
(defun shen/shen\.alphanum\?
    (V2910)
  (shen/or
   (shen/shen\.alpha\? V2910)
   (shen/shen\.digit\? V2910)))
(defun shen/shen\.digit\?
    (V2912)
  (shen/element\? V2912
                  (list "1" "2" "3" "4" "5" "6" "7" "8" "9" "0")))
(defun shen/variable\?
    (V2914)
  (shen/cond
   ((shen/or
     (shen/boolean\? V2914)
     (shen/or
      (shen/number\? V2914)
      (shen/string\? V2914)))
    'false)
   (shen/true
    (shen/trap-error
     (shen/let String
               (shen/str V2914)
               (shen/shen\.analyse-variable\? String))
     (shen/lambda E 'false)))))
(defun shen/shen\.analyse-variable\?
    (V2916)
  (shen/cond
   ((shen/shen\.+string\? V2916)
    (shen/and
     (shen/shen\.uppercase\?
      (shen/pos V2916 0))
     (shen/shen\.alphanums\?
      (shen/tlstr V2916))))
   (shen/true
    (shen/shen\.f_error 'shen\.analyse-variable\?))))
(defun shen/shen\.uppercase\?
    (V2918)
  (shen/element\? V2918
                  (list "A" "B" "C" "D" "E" "F" "G" "H" "I" "J" "K" "L" "M" "N" "O" "P" "Q" "R" "S" "T" "U" "V" "W" "X" "Y" "Z")))
(defun shen/gensym
    (V2920)
  (shen/concat V2920
               (shen/set 'shen\.*gensym*
                         (1+
                          (shen/value 'shen\.*gensym*)))))
(defun shen/concat
    (V2923 V2924)
  (shen/intern
   (shen/cn
    (shen/str V2923)
    (shen/str V2924))))
(defun shen/@p
    (V2927 V2928)
  (shen/let Vector
            (shen/absvector 3)
            (shen/let Tag
                      (shen/address-> Vector 0 'shen\.tuple)
                      (shen/let Fst
                                (shen/address-> Vector 1 V2927)
                                (shen/let Snd
                                          (shen/address-> Vector 2 V2928)
                                          Vector)))))
(defun shen/fst
    (V2930)
  (shen/<-address V2930 1))
(defun shen/snd
    (V2932)
  (shen/<-address V2932 2))
(defun shen/tuple\?
    (V2934)
  (shen/and
   (shen/absvector\? V2934)
   (shen/= 'shen\.tuple
           (shen/trap-error
            (shen/<-address V2934 0)
            (shen/lambda E 'shen\.not-tuple)))))
(defun shen/append
    (Xs Ys)
  (append Xs Ys))
(defun shen/@v
    (V2941 V2942)
  (shen/let Limit
            (shen/limit V2942)
            (shen/let NewVector
                      (shen/vector
                       (1+ Limit))
                      (shen/let X+NewVector
                                (shen/vector-> NewVector 1 V2941)
                                (shen/if
                                 (shen/= Limit 0)
                                 X+NewVector
                                 (shen/shen\.@v-help V2942 1 Limit X+NewVector))))))
(defun shen/shen\.@v-help
    (V2948 V2949 V2950 V2951)
  (cl-flet
      ((tail-trampoline
        (V2948 V2949 V2950 V2951)
        (shen/cond
         ((shen/= V2950 V2949)
          (shen/shen\.copyfromvector V2948 V2951 V2950
                                     (1+ V2950)))
         (shen/true
          (vector
           (list V2948
                 (1+ V2949)
                 V2950
                 (shen/shen\.copyfromvector V2948 V2951 V2949
                                            (1+ V2949))))))))
    (let
        ((result
          (funcall #'tail-trampoline V2948 V2949 V2950 V2951)))
      (while
          (vectorp result)
        (setq result
              (apply #'tail-trampoline
                     (aref result 0))))
      result)))
(defun shen/shen\.copyfromvector
    (V2956 V2957 V2958 V2959)
  (shen/trap-error
   (shen/vector-> V2957 V2959
                  (shen/<-vector V2956 V2958))
   (shen/lambda E V2957)))
(defun shen/hdv
    (V2961)
  (shen/trap-error
   (shen/<-vector V2961 1)
   (shen/lambda E
                (shen/simple-error
                 (shen/cn "hdv needs a non-empty vector as an argument; not "
                          (shen/shen\.app V2961 "\n" 'shen\.s))))))
(defun shen/tlv
    (V2963)
  (shen/let Limit
            (shen/limit V2963)
            (shen/if
             (shen/= Limit 0)
             (shen/simple-error "cannot take the tail of the empty vector\n")
             (shen/if
              (shen/= Limit 1)
              (shen/vector 0)
              (shen/let NewVector
                        (shen/vector
                         (shen/- Limit 1))
                        (shen/shen\.tlv-help V2963 2 Limit
                                             (shen/vector
                                              (shen/- Limit 1))))))))
(defun shen/shen\.tlv-help
    (V2969 V2970 V2971 V2972)
  (cl-flet
      ((tail-trampoline
        (V2969 V2970 V2971 V2972)
        (shen/cond
         ((shen/= V2971 V2970)
          (shen/shen\.copyfromvector V2969 V2972 V2971
                                     (shen/- V2971 1)))
         (shen/true
          (vector
           (list V2969
                 (1+ V2970)
                 V2971
                 (shen/shen\.copyfromvector V2969 V2972 V2970
                                            (shen/- V2970 1))))))))
    (let
        ((result
          (funcall #'tail-trampoline V2969 V2970 V2971 V2972)))
      (while
          (vectorp result)
        (setq result
              (apply #'tail-trampoline
                     (aref result 0))))
      result)))
(defun shen/assoc
    (V2984 V2985)
  (cl-flet
      ((tail-trampoline
        (V2984 V2985)
        (shen/cond
         ((shen/internal/predicate->shen
           (null V2985))
          nil)
         ((shen/and
           (shen/cons\? V2985)
           (shen/and
            (shen/cons\?
             (shen/hd V2985))
            (shen/=
             (shen/hd
              (shen/hd V2985))
             V2984)))
          (shen/hd V2985))
         ((shen/cons\? V2985)
          (vector
           (list V2984
                 (nthcdr 1 V2985))))
         (shen/true
          (shen/shen\.f_error 'assoc)))))
    (let
        ((result
          (funcall #'tail-trampoline V2984 V2985)))
      (while
          (vectorp result)
        (setq result
              (apply #'tail-trampoline
                     (aref result 0))))
      result)))
(defun shen/shen\.assoc-set
    (V2992 V2993 V2994)
  (shen/cond
   ((shen/internal/predicate->shen
     (null V2994))
    (list
     (append
      (list V2992)
      V2993)))
   ((shen/and
     (shen/cons\? V2994)
     (shen/and
      (shen/cons\?
       (shen/hd V2994))
      (shen/=
       (shen/hd
        (shen/hd V2994))
       V2992)))
    (append
     (list
      (append
       (list
        (shen/hd
         (shen/hd V2994)))
       V2993))
     (nthcdr 1 V2994)))
   ((shen/cons\? V2994)
    (append
     (list
      (shen/hd V2994))
     (shen/shen\.assoc-set V2992 V2993
                           (nthcdr 1 V2994))))
   (shen/true
    (shen/shen\.f_error 'shen\.assoc-set))))
(defun shen/shen\.assoc-rm
    (V3000 V3001)
  (shen/cond
   ((shen/internal/predicate->shen
     (null V3001))
    nil)
   ((shen/and
     (shen/cons\? V3001)
     (shen/and
      (shen/cons\?
       (shen/hd V3001))
      (shen/=
       (shen/hd
        (shen/hd V3001))
       V3000)))
    (nthcdr 1 V3001))
   ((shen/cons\? V3001)
    (append
     (list
      (shen/hd V3001))
     (shen/shen\.assoc-rm V3000
                          (nthcdr 1 V3001))))
   (shen/true
    (shen/shen\.f_error 'shen\.assoc-rm))))
(defun shen/boolean\?
    (V3007)
  (shen/cond
   ((shen/= 'true V3007)
    'true)
   ((shen/= 'false V3007)
    'true)
   (shen/true 'false)))
(defun shen/nl
    (V3009)
  (cl-flet
      ((tail-trampoline
        (V3009)
        (shen/cond
         ((shen/= 0 V3009)
          0)
         (shen/true
          (shen/do
           (shen/shen\.prhush "\n"
                              (shen/stoutput))
           (vector
            (list
             (shen/- V3009 1))))))))
    (let
        ((result
          (funcall #'tail-trampoline V3009)))
      (while
          (vectorp result)
        (setq result
              (apply #'tail-trampoline
                     (aref result 0))))
      result)))
(defun shen/difference
    (V3014 V3015)
  (cl-flet
      ((tail-trampoline
        (V3014 V3015)
        (shen/cond
         ((shen/internal/predicate->shen
           (null V3014))
          nil)
         ((shen/cons\? V3014)
          (shen/if
           (shen/element\?
            (shen/hd V3014)
            V3015)
           (vector
            (list
             (nthcdr 1 V3014)
             V3015))
           (append
            (list
             (shen/hd V3014))
            (shen/difference
             (nthcdr 1 V3014)
             V3015))))
         (shen/true
          (shen/shen\.f_error 'difference)))))
    (let
        ((result
          (funcall #'tail-trampoline V3014 V3015)))
      (while
          (vectorp result)
        (setq result
              (apply #'tail-trampoline
                     (aref result 0))))
      result)))
(defun shen/do
    (V3018 V3019)
  V3019)
(defun shen/element\?
    (Element Xs)
  (let
      ((SearchList Xs)
       (Found nil)
       (Length
        (length Xs))
       (Current 0))
    (while
        (and
         (not Found)
         SearchList)
      (setq Found
            (shen/internal/= Element
                             (pop SearchList))))
    (shen/internal/predicate->shen Found)))
(defun shen/empty\?
    (V3038)
  (shen/cond
   ((shen/internal/predicate->shen
     (null V3038))
    'true)
   (shen/true 'false)))
(defun shen/fix
    (V3041 V3042)
  (shen/shen\.fix-help V3041 V3042
                       (shen/internal/apply-higher-order-function V3041
                                                                  (list V3042))))
(defun shen/shen\.fix-help
    (V3053 V3054 V3055)
  (cl-flet
      ((tail-trampoline
        (V3053 V3054 V3055)
        (shen/cond
         ((shen/= V3055 V3054)
          V3055)
         (shen/true
          (vector
           (list V3053 V3055
                 (shen/internal/apply-higher-order-function V3053
                                                            (list V3055))))))))
    (let
        ((result
          (funcall #'tail-trampoline V3053 V3054 V3055)))
      (while
          (vectorp result)
        (setq result
              (apply #'tail-trampoline
                     (aref result 0))))
      result)))
(defun shen/put
    (X Pointer Y Dict)
  (let*
      ((Contents
        (shen/<-address Dict 3))
       (X-Contents
        (shen/<-address Contents X)))
    (if X-Contents
        (progn
          (puthash Pointer Y X-Contents)
          Y)
      (progn
        (setq X-Contents
              (shen/absvector 100))
        (puthash X X-Contents Contents)
        (puthash Pointer Y X-Contents)
        Y))))
(defun shen/unput
    (X Pointer Dict)
  (let*
      ((Contents
        (shen/<-address Dict 3))
       (X-Contents
        (shen/<-address Contents X)))
    (progn
      (if X-Contents
          (remhash Pointer X-Contents))
      X)))
(defun shen/get
    (X Pointer Dict)
  (let*
      ((Contents
        (shen/<-address Dict 3))
       (X-Contents
        (shen/<-address Contents X))
       (Pointer-Contents
        (if X-Contents
            (shen/<-address X-Contents Pointer))))
    (if
        (not Pointer-Contents)
        (shen/simple-error "value not found")
      Pointer-Contents)))
(defun shen/hash
    (N Div)
  (sxhash N))
(defun shen/shen\.mod
    (N Div)
  (mod N Div))
(defun shen/shen\.multiples
    (V3086 V3087)
  (cl-flet
      ((tail-trampoline
        (V3086 V3087)
        (shen/cond
         ((shen/and
           (shen/cons\? V3087)
           (shen/>
            (shen/hd V3087)
            V3086))
          (nthcdr 1 V3087))
         ((shen/cons\? V3087)
          (vector
           (list V3086
                 (append
                  (list
                   (shen/* 2
                           (shen/hd V3087)))
                  V3087))))
         (shen/true
          (shen/shen\.f_error 'shen\.multiples)))))
    (let
        ((result
          (funcall #'tail-trampoline V3086 V3087)))
      (while
          (vectorp result)
        (setq result
              (apply #'tail-trampoline
                     (aref result 0))))
      result)))
(defun shen/shen\.modh
    (V3092 V3093)
  (cl-flet
      ((tail-trampoline
        (V3092 V3093)
        (shen/cond
         ((shen/= 0 V3092)
          0)
         ((shen/internal/predicate->shen
           (null V3093))
          V3092)
         ((shen/and
           (shen/cons\? V3093)
           (shen/>
            (shen/hd V3093)
            V3092))
          (shen/if
           (shen/empty\?
            (nthcdr 1 V3093))
           V3092
           (vector
            (list V3092
                  (nthcdr 1 V3093)))))
         ((shen/cons\? V3093)
          (vector
           (list
            (shen/- V3092
                    (shen/hd V3093))
            V3093)))
         (shen/true
          (shen/shen\.f_error 'shen\.modh)))))
    (let
        ((result
          (funcall #'tail-trampoline V3092 V3093)))
      (while
          (vectorp result)
        (setq result
              (apply #'tail-trampoline
                     (aref result 0))))
      result)))
(defun shen/sum
    (Xs)
  (apply #'+ Xs))
(defun shen/head
    (V3103)
  (shen/cond
   ((shen/cons\? V3103)
    (shen/hd V3103))
   (shen/true
    (shen/simple-error "head expects a non-empty list"))))
(defun shen/tail
    (V3111)
  (shen/cond
   ((shen/cons\? V3111)
    (nthcdr 1 V3111))
   (shen/true
    (shen/simple-error "tail expects a non-empty list"))))
(defun shen/hdstr
    (V3113)
  (shen/pos V3113 0))
(defun shen/intersection
    (V3118 V3119)
  (cl-flet
      ((tail-trampoline
        (V3118 V3119)
        (shen/cond
         ((shen/internal/predicate->shen
           (null V3118))
          nil)
         ((shen/cons\? V3118)
          (shen/if
           (shen/element\?
            (shen/hd V3118)
            V3119)
           (append
            (list
             (shen/hd V3118))
            (shen/intersection
             (nthcdr 1 V3118)
             V3119))
           (vector
            (list
             (nthcdr 1 V3118)
             V3119))))
         (shen/true
          (shen/shen\.f_error 'intersection)))))
    (let
        ((result
          (funcall #'tail-trampoline V3118 V3119)))
      (while
          (vectorp result)
        (setq result
              (apply #'tail-trampoline
                     (aref result 0))))
      result)))
(defun shen/reverse
    (V3121)
  (shen/shen\.reverse_help V3121 nil))
(defun shen/shen\.reverse_help
    (V3124 V3125)
  (cl-flet
      ((tail-trampoline
        (V3124 V3125)
        (shen/cond
         ((shen/internal/predicate->shen
           (null V3124))
          V3125)
         ((shen/cons\? V3124)
          (vector
           (list
            (nthcdr 1 V3124)
            (append
             (list
              (shen/hd V3124))
             V3125))))
         (shen/true
          (shen/shen\.f_error 'shen\.reverse_help)))))
    (let
        ((result
          (funcall #'tail-trampoline V3124 V3125)))
      (while
          (vectorp result)
        (setq result
              (apply #'tail-trampoline
                     (aref result 0))))
      result)))
(defun shen/union
    (V3128 V3129)
  (cl-flet
      ((tail-trampoline
        (V3128 V3129)
        (shen/cond
         ((shen/internal/predicate->shen
           (null V3128))
          V3129)
         ((shen/cons\? V3128)
          (shen/if
           (shen/element\?
            (shen/hd V3128)
            V3129)
           (vector
            (list
             (nthcdr 1 V3128)
             V3129))
           (append
            (list
             (shen/hd V3128))
            (shen/union
             (nthcdr 1 V3128)
             V3129))))
         (shen/true
          (shen/shen\.f_error 'union)))))
    (let
        ((result
          (funcall #'tail-trampoline V3128 V3129)))
      (while
          (vectorp result)
        (setq result
              (apply #'tail-trampoline
                     (aref result 0))))
      result)))
(defun shen/y-or-n\?
    (V3131)
  (cl-flet
      ((tail-trampoline
        (V3131)
        (shen/let Message
                  (shen/shen\.prhush
                   (shen/shen\.proc-nl V3131)
                   (shen/stoutput))
                  (shen/let Y-or-N
                            (shen/shen\.prhush " (y/n) "
                                               (shen/stoutput))
                            (shen/let Input
                                      (shen/shen\.app
                                       (shen/read
                                        (shen/stinput))
                                       "" 'shen\.s)
                                      (shen/if
                                       (shen/= "y" Input)
                                       'true
                                       (shen/if
                                        (shen/= "n" Input)
                                        'false
                                        (shen/do
                                         (shen/shen\.prhush "please answer y or n\n"
                                                            (shen/stoutput))
                                         (vector
                                          (list V3131))))))))))
    (let
        ((result
          (funcall #'tail-trampoline V3131)))
      (while
          (vectorp result)
        (setq result
              (apply #'tail-trampoline
                     (aref result 0))))
      result)))
(defun shen/not
    (V3133)
  (shen/if V3133 'false 'true))
(defun shen/subst
    (V3146 V3147 V3148)
  (shen/cond
   ((shen/= V3148 V3147)
    V3146)
   ((shen/cons\? V3148)
    (shen/map
     (shen/lambda W
                  (shen/subst V3146 V3147 W))
     V3148))
   (shen/true V3148)))
(defun shen/explode
    (V3150)
  (shen/shen\.explode-h
   (shen/shen\.app V3150 "" 'shen\.a)))
(defun shen/shen\.explode-h
    (V3152)
  (shen/cond
   ((shen/= "" V3152)
    nil)
   ((shen/shen\.+string\? V3152)
    (append
     (list
      (shen/pos V3152 0))
     (shen/shen\.explode-h
      (shen/tlstr V3152))))
   (shen/true
    (shen/shen\.f_error 'shen\.explode-h))))
(defun shen/cd
    (V3154)
  (shen/set '*home-directory*
            (shen/if
             (shen/= V3154 "")
             ""
             (shen/shen\.app V3154 "/" 'shen\.a))))
(defun shen/shen\.for-each
    (V3157 V3158)
  (cl-flet
      ((tail-trampoline
        (V3157 V3158)
        (shen/cond
         ((shen/internal/predicate->shen
           (null V3158))
          'true)
         ((shen/cons\? V3158)
          (shen/let _
                    (shen/internal/apply-higher-order-function V3157
                                                               (list
                                                                (shen/hd V3158)))
                    (vector
                     (list V3157
                           (nthcdr 1 V3158)))))
         (shen/true
          (shen/shen\.f_error 'shen\.for-each)))))
    (let
        ((result
          (funcall #'tail-trampoline V3157 V3158)))
      (while
          (vectorp result)
        (setq result
              (apply #'tail-trampoline
                     (aref result 0))))
      result)))
(defun shen/map
    (F Xs)
  (mapcar
   (lambda
     (X)
     (shen/internal/apply-higher-order-function F
                                                (list X)))
   Xs))
(defun shen/shen\.map-h
    (V3168 V3169 V3170)
  (cl-flet
      ((tail-trampoline
        (V3168 V3169 V3170)
        (shen/cond
         ((shen/internal/predicate->shen
           (null V3169))
          (shen/reverse V3170))
         ((shen/cons\? V3169)
          (vector
           (list V3168
                 (nthcdr 1 V3169)
                 (append
                  (list
                   (shen/internal/apply-higher-order-function V3168
                                                              (list
                                                               (shen/hd V3169))))
                  V3170))))
         (shen/true
          (shen/shen\.f_error 'shen\.map-h)))))
    (let
        ((result
          (funcall #'tail-trampoline V3168 V3169 V3170)))
      (while
          (vectorp result)
        (setq result
              (apply #'tail-trampoline
                     (aref result 0))))
      result)))
(defun shen/length
    (V3172)
  (shen/shen\.length-h V3172 0))
(defun shen/shen\.length-h
    (V3175 V3176)
  (cl-flet
      ((tail-trampoline
        (V3175 V3176)
        (shen/cond
         ((shen/internal/predicate->shen
           (null V3175))
          V3176)
         (shen/true
          (vector
           (list
            (nthcdr 1 V3175)
            (1+ V3176)))))))
    (let
        ((result
          (funcall #'tail-trampoline V3175 V3176)))
      (while
          (vectorp result)
        (setq result
              (apply #'tail-trampoline
                     (aref result 0))))
      result)))
(defun shen/occurrences
    (V3188 V3189)
  (shen/cond
   ((shen/= V3189 V3188)
    1)
   ((shen/cons\? V3189)
    (shen/+
     (shen/occurrences V3188
                       (shen/hd V3189))
     (shen/occurrences V3188
                       (nthcdr 1 V3189))))
   (shen/true 0)))
(defun shen/nth
    (I Xs)
  (nth I Xs))
(defun shen/integer\?
    (N)
  (shen/internal/predicate->shen
   (integerp N)))
(defun shen/shen\.abs
    (V3201)
  (shen/if
   (shen/> V3201 0)
   V3201
   (shen/- 0 V3201)))
(defun shen/shen\.magless
    (V3204 V3205)
  (cl-flet
      ((tail-trampoline
        (V3204 V3205)
        (shen/let Nx2
                  (shen/* V3205 2)
                  (shen/if
                   (shen/> Nx2 V3204)
                   V3205
                   (vector
                    (list V3204 Nx2))))))
    (let
        ((result
          (funcall #'tail-trampoline V3204 V3205)))
      (while
          (vectorp result)
        (setq result
              (apply #'tail-trampoline
                     (aref result 0))))
      result)))
(defun shen/shen\.integer-test\?
    (V3211 V3212)
  (cl-flet
      ((tail-trampoline
        (V3211 V3212)
        (shen/cond
         ((shen/= 0 V3211)
          'true)
         ((shen/> 1 V3211)
          'false)
         (shen/true
          (shen/let Abs-N
                    (shen/- V3211 V3212)
                    (shen/if
                     (shen/> 0 Abs-N)
                     (shen/integer\? V3211)
                     (vector
                      (list Abs-N V3212))))))))
    (let
        ((result
          (funcall #'tail-trampoline V3211 V3212)))
      (while
          (vectorp result)
        (setq result
              (apply #'tail-trampoline
                     (aref result 0))))
      result)))
(defun shen/mapcan
    (V3217 V3218)
  (shen/cond
   ((shen/internal/predicate->shen
     (null V3218))
    nil)
   ((shen/cons\? V3218)
    (shen/append
     (shen/internal/apply-higher-order-function V3217
                                                (list
                                                 (shen/hd V3218)))
     (shen/mapcan V3217
                  (nthcdr 1 V3218))))
   (shen/true
    (shen/shen\.f_error 'mapcan))))
(defun shen/==
    (V3230 V3231)
  (shen/cond
   ((shen/= V3231 V3230)
    'true)
   (shen/true 'false)))
(defun shen/abort nil
  (shen/simple-error ""))
(defun shen/bound\?
    (V3233)
  (shen/and
   (shen/symbol\? V3233)
   (shen/let Val
             (shen/trap-error
              (shen/value V3233)
              (shen/lambda E 'shen\.this-symbol-is-unbound))
             (shen/if
              (shen/= Val 'shen\.this-symbol-is-unbound)
              'false 'true))))
(defun shen/shen\.string->bytes
    (S)
  (string-to-list S))
(defun shen/maxinferences
    (V3237)
  (shen/set 'shen\.*maxinferences* V3237))
(defun shen/inferences nil
  (shen/value 'shen\.*infs*))
(defun shen/protect
    (V3239)
  V3239)
(defun shen/stoutput nil
  (shen/value '*stoutput*))
(defun shen/sterror nil
  (shen/value '*sterror*))
(defun shen/string->symbol
    (V3241)
  (shen/let Symbol
            (shen/intern V3241)
            (shen/if
             (shen/symbol\? Symbol)
             Symbol
             (shen/simple-error
              (shen/cn "cannot intern "
                       (shen/shen\.app V3241 " to a symbol" 'shen\.s))))))
(defun shen/optimise
    (V3247)
  (shen/cond
   ((shen/= '+ V3247)
    (shen/set 'shen\.*optimise* 'true))
   ((shen/= '- V3247)
    (shen/set 'shen\.*optimise* 'false))
   (shen/true
    (shen/simple-error "optimise expects a + or a -.\n"))))
(defun shen/os nil
  (shen/value '*os*))
(defun shen/language nil
  (shen/value '*language*))
(defun shen/version nil
  (shen/value '*version*))
(defun shen/port nil
  (shen/value '*port*))
(defun shen/porters nil
  (shen/value '*porters*))
(defun shen/implementation nil
  (shen/value '*implementation*))
(defun shen/release nil
  (shen/value '*release*))
(defun shen/package\?
    (V3249)
  (shen/trap-error
   (shen/do
    (shen/external V3249)
    'true)
   (shen/lambda E 'false)))
(defun shen/function
    (S)
  (shen/shen\.lookup-func
   (shen/internal/unprefix-symbol S)))
(defun shen/shen\.lookup-func
    (V3253)
  (shen/trap-error
   (shen/get V3253 'shen\.lambda-form
             (shen/value '*property-vector*))
   (shen/lambda E
                (shen/simple-error
                 (shen/shen\.app V3253 " has no lambda expansion\n" 'shen\.a)))))
(defun shen/shen\.dict
    (Size)
  (let
      ((Dict
        (shen/absvector 4))
       (Contents
        (shen/absvector Size)))
    (progn
      (shen/address-> Dict 0 'dictionary)
      (shen/address-> Dict 1 Size)
      (shen/address-> Dict 2 0)
      (shen/address-> Dict 3 Contents)
      Dict)))
(defun shen/shen\.dict\?
    (V3257)
  (shen/and
   (shen/absvector\? V3257)
   (shen/=
    (shen/trap-error
     (shen/<-address V3257 0)
     (shen/lambda E 'shen\.not-dictionary))
    'shen\.dictionary)))
(defun shen/shen\.dict-capacity
    (V3259)
  (shen/<-address V3259 1))
(defun shen/shen\.dict-count
    (V3261)
  (shen/<-address V3261 2))
(defun shen/shen\.dict-count->
    (V3264 V3265)
  (shen/address-> V3264 2 V3265))
(defun shen/shen\.<-dict-bucket
    (V3268 V3269)
  (shen/<-address V3268
                  (shen/+ 3 V3269)))
(defun shen/shen\.dict-bucket->
    (V3273 V3274 V3275)
  (shen/address-> V3273
                  (shen/+ 3 V3274)
                  V3275))
(defun shen/shen\.dict-update-count
    (V3279 V3280 V3281)
  (shen/let Diff
            (shen/-
             (shen/length V3281)
             (shen/length V3280))
            (shen/shen\.dict-count-> V3279
                                     (shen/+ Diff
                                             (shen/shen\.dict-count V3279)))))
(defun shen/shen\.dict->
    (Dict Key Value)
  (let*
      ((Count
        (shen/shen\.dict-count Dict))
       (Contents
        (shen/<-address Dict 3))
       (Exists
        (shen/<-address Contents Key)))
    (progn
      (if
          (not Exists)
          (shen/address-> Dict 2
                          (1+ Count)))
      (shen/address-> Contents Key Value))))
(defun shen/shen\.<-dict
    (Dict Key)
  (let*
      ((Contents
        (shen/<-address Dict 3))
       (Existing
        (shen/<-address Contents Key)))
    (if
        (not Existing)
        (shen/freeze
         (shen/simple-error "value not found"))
      Existing)))
(defun shen/shen\.dict-rm
    (Dict Key)
  (let*
      ((Count
        (shen/shen\.dict-count Dict))
       (Contents
        (shen/<-address Dict 3))
       (Exists
        (shen/<-address Contents Key)))
    (if
        (not Exists)
        Key
      (progn
        (remhash Key Contents)
        (shen/address-> Dict 2
                        (1- Count))
        Key))))
(defun shen/shen\.dict-fold
    (F Dict Acc)
  (let
      ((Contents
        (shen/<-address Dict 3)))
    (progn
      (setq NewAcc Acc)
      (maphash
       (lambda
         (Key Value)
         (setq NewAcc
               (shen/internal/apply-higher-order-function F
                                                          (list Key Value NewAcc))))
       Contents)
      NewAcc)))
(defun shen/shen\.dict-fold-h
    (V3308 V3309 V3310 V3311 V3312)
  (cl-flet
      ((tail-trampoline
        (V3308 V3309 V3310 V3311 V3312)
        (shen/cond
         ((shen/= V3312 V3311)
          V3310)
         (shen/true
          (shen/let B
                    (shen/shen\.<-dict-bucket V3309 V3311)
                    (shen/let Acc
                              (shen/shen\.bucket-fold V3308 B V3310)
                              (vector
                               (list V3308 V3309 Acc
                                     (1+ V3311)
                                     V3312))))))))
    (let
        ((result
          (funcall #'tail-trampoline V3308 V3309 V3310 V3311 V3312)))
      (while
          (vectorp result)
        (setq result
              (apply #'tail-trampoline
                     (aref result 0))))
      result)))
(defun shen/shen\.bucket-fold
    (V3316 V3317 V3318)
  (shen/cond
   ((shen/internal/predicate->shen
     (null V3317))
    V3318)
   ((shen/and
     (shen/cons\? V3317)
     (shen/cons\?
      (shen/hd V3317)))
    (shen/internal/apply-higher-order-function V3316
                                               (list
                                                (shen/hd
                                                 (shen/hd V3317))
                                                (nthcdr 1
                                                        (shen/hd V3317))
                                                (shen/shen\.bucket-fold V3316
                                                                        (nthcdr 1 V3317)
                                                                        V3318))))
   (shen/true
    (shen/shen\.f_error 'shen\.bucket-fold))))
(defun shen/shen\.dict-keys
    (Dict)
  (let*
      ((Contents
        (shen/<-address Dict 3)))
    (hash-table-keys Contents)))
(defun shen/shen\.dict-values
    (Dict)
  (let*
      ((Contents
        (shen/<-address Dict 3)))
    (hash-table-values Contents)))
(defun shen/shen\.datatype-error
    (V2635)
  (shen/cond
   ((shen/and
     (shen/cons\? V2635)
     (shen/and
      (shen/cons\?
       (nthcdr 1 V2635))
      (shen/internal/predicate->shen
       (null
        (nthcdr 2 V2635)))))
    (shen/simple-error
     (shen/cn "datatype syntax error here:\n\n "
              (shen/shen\.app
               (shen/shen\.next-50 50
                                   (shen/hd V2635))
               "\n" 'shen\.a))))
   (shen/true
    (shen/shen\.f_error 'shen\.datatype-error))))
(defun shen/shen\.<datatype-rules>
    (V2637)
  (shen/let YaccParse
            (shen/let Parse_shen\.<datatype-rule>
                      (shen/shen\.<datatype-rule> V2637)
                      (shen/if
                       (shen/not
                        (shen/=
                         (shen/fail)
                         Parse_shen\.<datatype-rule>))
                       (shen/let Parse_shen\.<datatype-rules>
                                 (shen/shen\.<datatype-rules> Parse_shen\.<datatype-rule>)
                                 (shen/if
                                  (shen/not
                                   (shen/=
                                    (shen/fail)
                                    Parse_shen\.<datatype-rules>))
                                  (shen/shen\.pair
                                   (shen/hd Parse_shen\.<datatype-rules>)
                                   (append
                                    (list
                                     (shen/shen\.hdtl Parse_shen\.<datatype-rule>))
                                    (shen/shen\.hdtl Parse_shen\.<datatype-rules>)))
                                  (shen/fail)))
                       (shen/fail)))
            (shen/if
             (shen/= YaccParse
                     (shen/fail))
             (shen/let Parse_<e>
                       (shen/<e> V2637)
                       (shen/if
                        (shen/not
                         (shen/=
                          (shen/fail)
                          Parse_<e>))
                        (shen/shen\.pair
                         (shen/hd Parse_<e>)
                         nil)
                        (shen/fail)))
             YaccParse)))
(defun shen/shen\.<datatype-rule>
    (V2639)
  (shen/let YaccParse
            (shen/let Parse_shen\.<side-conditions>
                      (shen/shen\.<side-conditions> V2639)
                      (shen/if
                       (shen/not
                        (shen/=
                         (shen/fail)
                         Parse_shen\.<side-conditions>))
                       (shen/let Parse_shen\.<premises>
                                 (shen/shen\.<premises> Parse_shen\.<side-conditions>)
                                 (shen/if
                                  (shen/not
                                   (shen/=
                                    (shen/fail)
                                    Parse_shen\.<premises>))
                                  (shen/let Parse_shen\.<singleunderline>
                                            (shen/shen\.<singleunderline> Parse_shen\.<premises>)
                                            (shen/if
                                             (shen/not
                                              (shen/=
                                               (shen/fail)
                                               Parse_shen\.<singleunderline>))
                                             (shen/let Parse_shen\.<conclusion>
                                                       (shen/shen\.<conclusion> Parse_shen\.<singleunderline>)
                                                       (shen/if
                                                        (shen/not
                                                         (shen/=
                                                          (shen/fail)
                                                          Parse_shen\.<conclusion>))
                                                        (shen/shen\.pair
                                                         (shen/hd Parse_shen\.<conclusion>)
                                                         (shen/shen\.sequent 'shen\.single
                                                                             (list
                                                                              (shen/shen\.hdtl Parse_shen\.<side-conditions>)
                                                                              (shen/shen\.hdtl Parse_shen\.<premises>)
                                                                              (shen/shen\.hdtl Parse_shen\.<conclusion>))))
                                                        (shen/fail)))
                                             (shen/fail)))
                                  (shen/fail)))
                       (shen/fail)))
            (shen/if
             (shen/= YaccParse
                     (shen/fail))
             (shen/let Parse_shen\.<side-conditions>
                       (shen/shen\.<side-conditions> V2639)
                       (shen/if
                        (shen/not
                         (shen/=
                          (shen/fail)
                          Parse_shen\.<side-conditions>))
                        (shen/let Parse_shen\.<premises>
                                  (shen/shen\.<premises> Parse_shen\.<side-conditions>)
                                  (shen/if
                                   (shen/not
                                    (shen/=
                                     (shen/fail)
                                     Parse_shen\.<premises>))
                                   (shen/let Parse_shen\.<doubleunderline>
                                             (shen/shen\.<doubleunderline> Parse_shen\.<premises>)
                                             (shen/if
                                              (shen/not
                                               (shen/=
                                                (shen/fail)
                                                Parse_shen\.<doubleunderline>))
                                              (shen/let Parse_shen\.<conclusion>
                                                        (shen/shen\.<conclusion> Parse_shen\.<doubleunderline>)
                                                        (shen/if
                                                         (shen/not
                                                          (shen/=
                                                           (shen/fail)
                                                           Parse_shen\.<conclusion>))
                                                         (shen/shen\.pair
                                                          (shen/hd Parse_shen\.<conclusion>)
                                                          (shen/shen\.sequent 'shen\.double
                                                                              (list
                                                                               (shen/shen\.hdtl Parse_shen\.<side-conditions>)
                                                                               (shen/shen\.hdtl Parse_shen\.<premises>)
                                                                               (shen/shen\.hdtl Parse_shen\.<conclusion>))))
                                                         (shen/fail)))
                                              (shen/fail)))
                                   (shen/fail)))
                        (shen/fail)))
             YaccParse)))
(defun shen/shen\.<side-conditions>
    (V2641)
  (shen/let YaccParse
            (shen/let Parse_shen\.<side-condition>
                      (shen/shen\.<side-condition> V2641)
                      (shen/if
                       (shen/not
                        (shen/=
                         (shen/fail)
                         Parse_shen\.<side-condition>))
                       (shen/let Parse_shen\.<side-conditions>
                                 (shen/shen\.<side-conditions> Parse_shen\.<side-condition>)
                                 (shen/if
                                  (shen/not
                                   (shen/=
                                    (shen/fail)
                                    Parse_shen\.<side-conditions>))
                                  (shen/shen\.pair
                                   (shen/hd Parse_shen\.<side-conditions>)
                                   (append
                                    (list
                                     (shen/shen\.hdtl Parse_shen\.<side-condition>))
                                    (shen/shen\.hdtl Parse_shen\.<side-conditions>)))
                                  (shen/fail)))
                       (shen/fail)))
            (shen/if
             (shen/= YaccParse
                     (shen/fail))
             (shen/let Parse_<e>
                       (shen/<e> V2641)
                       (shen/if
                        (shen/not
                         (shen/=
                          (shen/fail)
                          Parse_<e>))
                        (shen/shen\.pair
                         (shen/hd Parse_<e>)
                         nil)
                        (shen/fail)))
             YaccParse)))
(defun shen/shen\.<side-condition>
    (V2643)
  (shen/let YaccParse
            (shen/if
             (shen/and
              (shen/cons\?
               (shen/hd V2643))
              (shen/= 'if
                      (shen/hd
                       (shen/hd V2643))))
             (shen/let Parse_shen\.<expr>
                       (shen/shen\.<expr>
                        (shen/shen\.pair
                         (nthcdr 1
                                 (shen/hd V2643))
                         (shen/shen\.hdtl V2643)))
                       (shen/if
                        (shen/not
                         (shen/=
                          (shen/fail)
                          Parse_shen\.<expr>))
                        (shen/shen\.pair
                         (shen/hd Parse_shen\.<expr>)
                         (list 'if
                               (shen/shen\.hdtl Parse_shen\.<expr>)))
                        (shen/fail)))
             (shen/fail))
            (shen/if
             (shen/= YaccParse
                     (shen/fail))
             (shen/if
              (shen/and
               (shen/cons\?
                (shen/hd V2643))
               (shen/= 'let
                       (shen/hd
                        (shen/hd V2643))))
              (shen/let Parse_shen\.<variable\?>
                        (shen/shen\.<variable\?>
                         (shen/shen\.pair
                          (nthcdr 1
                                  (shen/hd V2643))
                          (shen/shen\.hdtl V2643)))
                        (shen/if
                         (shen/not
                          (shen/=
                           (shen/fail)
                           Parse_shen\.<variable\?>))
                         (shen/let Parse_shen\.<expr>
                                   (shen/shen\.<expr> Parse_shen\.<variable\?>)
                                   (shen/if
                                    (shen/not
                                     (shen/=
                                      (shen/fail)
                                      Parse_shen\.<expr>))
                                    (shen/shen\.pair
                                     (shen/hd Parse_shen\.<expr>)
                                     (list 'let
                                           (shen/shen\.hdtl Parse_shen\.<variable\?>)
                                           (shen/shen\.hdtl Parse_shen\.<expr>)))
                                    (shen/fail)))
                         (shen/fail)))
              (shen/fail))
             YaccParse)))
(defun shen/shen\.<variable\?>
    (V2645)
  (shen/if
   (shen/cons\?
    (shen/hd V2645))
   (shen/let Parse_X
             (shen/hd
              (shen/hd V2645))
             (shen/if
              (shen/variable\? Parse_X)
              (shen/shen\.pair
               (shen/hd
                (shen/shen\.pair
                 (nthcdr 1
                         (shen/hd V2645))
                 (shen/shen\.hdtl V2645)))
               Parse_X)
              (shen/fail)))
   (shen/fail)))
(defun shen/shen\.<expr>
    (V2647)
  (shen/if
   (shen/cons\?
    (shen/hd V2647))
   (shen/let Parse_X
             (shen/hd
              (shen/hd V2647))
             (shen/if
              (shen/not
               (shen/or
                (shen/element\? Parse_X
                                (list '>> '\;))
                (shen/or
                 (shen/shen\.singleunderline\? Parse_X)
                 (shen/shen\.doubleunderline\? Parse_X))))
              (shen/shen\.pair
               (shen/hd
                (shen/shen\.pair
                 (nthcdr 1
                         (shen/hd V2647))
                 (shen/shen\.hdtl V2647)))
               (shen/shen\.remove-bar Parse_X))
              (shen/fail)))
   (shen/fail)))
(defun shen/shen\.remove-bar
    (V2649)
  (shen/cond
   ((shen/and
     (shen/cons\? V2649)
     (shen/and
      (shen/cons\?
       (nthcdr 1 V2649))
      (shen/and
       (shen/cons\?
        (nthcdr 2 V2649))
       (shen/and
        (shen/internal/predicate->shen
         (null
          (nthcdr 3 V2649)))
        (shen/=
         (shen/hd
          (nthcdr 1 V2649))
         'bar!)))))
    (append
     (list
      (shen/hd V2649))
     (shen/hd
      (nthcdr 2 V2649))))
   ((shen/cons\? V2649)
    (append
     (list
      (shen/shen\.remove-bar
       (shen/hd V2649)))
     (shen/shen\.remove-bar
      (nthcdr 1 V2649))))
   (shen/true V2649)))
(defun shen/shen\.<premises>
    (V2651)
  (shen/let YaccParse
            (shen/let Parse_shen\.<premise>
                      (shen/shen\.<premise> V2651)
                      (shen/if
                       (shen/not
                        (shen/=
                         (shen/fail)
                         Parse_shen\.<premise>))
                       (shen/let Parse_shen\.<semicolon-symbol>
                                 (shen/shen\.<semicolon-symbol> Parse_shen\.<premise>)
                                 (shen/if
                                  (shen/not
                                   (shen/=
                                    (shen/fail)
                                    Parse_shen\.<semicolon-symbol>))
                                  (shen/let Parse_shen\.<premises>
                                            (shen/shen\.<premises> Parse_shen\.<semicolon-symbol>)
                                            (shen/if
                                             (shen/not
                                              (shen/=
                                               (shen/fail)
                                               Parse_shen\.<premises>))
                                             (shen/shen\.pair
                                              (shen/hd Parse_shen\.<premises>)
                                              (append
                                               (list
                                                (shen/shen\.hdtl Parse_shen\.<premise>))
                                               (shen/shen\.hdtl Parse_shen\.<premises>)))
                                             (shen/fail)))
                                  (shen/fail)))
                       (shen/fail)))
            (shen/if
             (shen/= YaccParse
                     (shen/fail))
             (shen/let Parse_<e>
                       (shen/<e> V2651)
                       (shen/if
                        (shen/not
                         (shen/=
                          (shen/fail)
                          Parse_<e>))
                        (shen/shen\.pair
                         (shen/hd Parse_<e>)
                         nil)
                        (shen/fail)))
             YaccParse)))
(defun shen/shen\.<semicolon-symbol>
    (V2653)
  (shen/if
   (shen/cons\?
    (shen/hd V2653))
   (shen/let Parse_X
             (shen/hd
              (shen/hd V2653))
             (shen/if
              (shen/= Parse_X '\;)
              (shen/shen\.pair
               (shen/hd
                (shen/shen\.pair
                 (nthcdr 1
                         (shen/hd V2653))
                 (shen/shen\.hdtl V2653)))
               'shen\.skip)
              (shen/fail)))
   (shen/fail)))
(defun shen/shen\.<premise>
    (V2655)
  (shen/let YaccParse
            (shen/if
             (shen/and
              (shen/cons\?
               (shen/hd V2655))
              (shen/= '!
                      (shen/hd
                       (shen/hd V2655))))
             (shen/shen\.pair
              (shen/hd
               (shen/shen\.pair
                (nthcdr 1
                        (shen/hd V2655))
                (shen/shen\.hdtl V2655)))
              '!)
             (shen/fail))
            (shen/if
             (shen/= YaccParse
                     (shen/fail))
             (shen/let YaccParse
                       (shen/let Parse_shen\.<formulae>
                                 (shen/shen\.<formulae> V2655)
                                 (shen/if
                                  (shen/not
                                   (shen/=
                                    (shen/fail)
                                    Parse_shen\.<formulae>))
                                  (shen/if
                                   (shen/and
                                    (shen/cons\?
                                     (shen/hd Parse_shen\.<formulae>))
                                    (shen/= '>>
                                            (shen/hd
                                             (shen/hd Parse_shen\.<formulae>))))
                                   (shen/let Parse_shen\.<formula>
                                             (shen/shen\.<formula>
                                              (shen/shen\.pair
                                               (nthcdr 1
                                                       (shen/hd Parse_shen\.<formulae>))
                                               (shen/shen\.hdtl Parse_shen\.<formulae>)))
                                             (shen/if
                                              (shen/not
                                               (shen/=
                                                (shen/fail)
                                                Parse_shen\.<formula>))
                                              (shen/shen\.pair
                                               (shen/hd Parse_shen\.<formula>)
                                               (shen/shen\.sequent
                                                (shen/shen\.hdtl Parse_shen\.<formulae>)
                                                (shen/shen\.hdtl Parse_shen\.<formula>)))
                                              (shen/fail)))
                                   (shen/fail))
                                  (shen/fail)))
                       (shen/if
                        (shen/= YaccParse
                                (shen/fail))
                        (shen/let Parse_shen\.<formula>
                                  (shen/shen\.<formula> V2655)
                                  (shen/if
                                   (shen/not
                                    (shen/=
                                     (shen/fail)
                                     Parse_shen\.<formula>))
                                   (shen/shen\.pair
                                    (shen/hd Parse_shen\.<formula>)
                                    (shen/shen\.sequent nil
                                                        (shen/shen\.hdtl Parse_shen\.<formula>)))
                                   (shen/fail)))
                        YaccParse))
             YaccParse)))
(defun shen/shen\.<conclusion>
    (V2657)
  (shen/let YaccParse
            (shen/let Parse_shen\.<formulae>
                      (shen/shen\.<formulae> V2657)
                      (shen/if
                       (shen/not
                        (shen/=
                         (shen/fail)
                         Parse_shen\.<formulae>))
                       (shen/if
                        (shen/and
                         (shen/cons\?
                          (shen/hd Parse_shen\.<formulae>))
                         (shen/= '>>
                                 (shen/hd
                                  (shen/hd Parse_shen\.<formulae>))))
                        (shen/let Parse_shen\.<formula>
                                  (shen/shen\.<formula>
                                   (shen/shen\.pair
                                    (nthcdr 1
                                            (shen/hd Parse_shen\.<formulae>))
                                    (shen/shen\.hdtl Parse_shen\.<formulae>)))
                                  (shen/if
                                   (shen/not
                                    (shen/=
                                     (shen/fail)
                                     Parse_shen\.<formula>))
                                   (shen/let Parse_shen\.<semicolon-symbol>
                                             (shen/shen\.<semicolon-symbol> Parse_shen\.<formula>)
                                             (shen/if
                                              (shen/not
                                               (shen/=
                                                (shen/fail)
                                                Parse_shen\.<semicolon-symbol>))
                                              (shen/shen\.pair
                                               (shen/hd Parse_shen\.<semicolon-symbol>)
                                               (shen/shen\.sequent
                                                (shen/shen\.hdtl Parse_shen\.<formulae>)
                                                (shen/shen\.hdtl Parse_shen\.<formula>)))
                                              (shen/fail)))
                                   (shen/fail)))
                        (shen/fail))
                       (shen/fail)))
            (shen/if
             (shen/= YaccParse
                     (shen/fail))
             (shen/let Parse_shen\.<formula>
                       (shen/shen\.<formula> V2657)
                       (shen/if
                        (shen/not
                         (shen/=
                          (shen/fail)
                          Parse_shen\.<formula>))
                        (shen/let Parse_shen\.<semicolon-symbol>
                                  (shen/shen\.<semicolon-symbol> Parse_shen\.<formula>)
                                  (shen/if
                                   (shen/not
                                    (shen/=
                                     (shen/fail)
                                     Parse_shen\.<semicolon-symbol>))
                                   (shen/shen\.pair
                                    (shen/hd Parse_shen\.<semicolon-symbol>)
                                    (shen/shen\.sequent nil
                                                        (shen/shen\.hdtl Parse_shen\.<formula>)))
                                   (shen/fail)))
                        (shen/fail)))
             YaccParse)))
(defun shen/shen\.sequent
    (V2660 V2661)
  (shen/@p V2660 V2661))
(defun shen/shen\.<formulae>
    (V2663)
  (shen/let YaccParse
            (shen/let Parse_shen\.<formula>
                      (shen/shen\.<formula> V2663)
                      (shen/if
                       (shen/not
                        (shen/=
                         (shen/fail)
                         Parse_shen\.<formula>))
                       (shen/let Parse_shen\.<comma-symbol>
                                 (shen/shen\.<comma-symbol> Parse_shen\.<formula>)
                                 (shen/if
                                  (shen/not
                                   (shen/=
                                    (shen/fail)
                                    Parse_shen\.<comma-symbol>))
                                  (shen/let Parse_shen\.<formulae>
                                            (shen/shen\.<formulae> Parse_shen\.<comma-symbol>)
                                            (shen/if
                                             (shen/not
                                              (shen/=
                                               (shen/fail)
                                               Parse_shen\.<formulae>))
                                             (shen/shen\.pair
                                              (shen/hd Parse_shen\.<formulae>)
                                              (append
                                               (list
                                                (shen/shen\.hdtl Parse_shen\.<formula>))
                                               (shen/shen\.hdtl Parse_shen\.<formulae>)))
                                             (shen/fail)))
                                  (shen/fail)))
                       (shen/fail)))
            (shen/if
             (shen/= YaccParse
                     (shen/fail))
             (shen/let YaccParse
                       (shen/let Parse_shen\.<formula>
                                 (shen/shen\.<formula> V2663)
                                 (shen/if
                                  (shen/not
                                   (shen/=
                                    (shen/fail)
                                    Parse_shen\.<formula>))
                                  (shen/shen\.pair
                                   (shen/hd Parse_shen\.<formula>)
                                   (list
                                    (shen/shen\.hdtl Parse_shen\.<formula>)))
                                  (shen/fail)))
                       (shen/if
                        (shen/= YaccParse
                                (shen/fail))
                        (shen/let Parse_<e>
                                  (shen/<e> V2663)
                                  (shen/if
                                   (shen/not
                                    (shen/=
                                     (shen/fail)
                                     Parse_<e>))
                                   (shen/shen\.pair
                                    (shen/hd Parse_<e>)
                                    nil)
                                   (shen/fail)))
                        YaccParse))
             YaccParse)))
(defun shen/shen\.<comma-symbol>
    (V2665)
  (shen/if
   (shen/cons\?
    (shen/hd V2665))
   (shen/let Parse_X
             (shen/hd
              (shen/hd V2665))
             (shen/if
              (shen/= Parse_X
                      (shen/intern ","))
              (shen/shen\.pair
               (shen/hd
                (shen/shen\.pair
                 (nthcdr 1
                         (shen/hd V2665))
                 (shen/shen\.hdtl V2665)))
               'shen\.skip)
              (shen/fail)))
   (shen/fail)))
(defun shen/shen\.<formula>
    (V2667)
  (shen/let YaccParse
            (shen/let Parse_shen\.<expr>
                      (shen/shen\.<expr> V2667)
                      (shen/if
                       (shen/not
                        (shen/=
                         (shen/fail)
                         Parse_shen\.<expr>))
                       (shen/if
                        (shen/and
                         (shen/cons\?
                          (shen/hd Parse_shen\.<expr>))
                         (shen/= ':
                                 (shen/hd
                                  (shen/hd Parse_shen\.<expr>))))
                        (shen/let Parse_shen\.<type>
                                  (shen/shen\.<type>
                                   (shen/shen\.pair
                                    (nthcdr 1
                                            (shen/hd Parse_shen\.<expr>))
                                    (shen/shen\.hdtl Parse_shen\.<expr>)))
                                  (shen/if
                                   (shen/not
                                    (shen/=
                                     (shen/fail)
                                     Parse_shen\.<type>))
                                   (shen/shen\.pair
                                    (shen/hd Parse_shen\.<type>)
                                    (list
                                     (shen/shen\.curry
                                      (shen/shen\.hdtl Parse_shen\.<expr>))
                                     ':
                                     (shen/shen\.demodulate
                                      (shen/shen\.hdtl Parse_shen\.<type>))))
                                   (shen/fail)))
                        (shen/fail))
                       (shen/fail)))
            (shen/if
             (shen/= YaccParse
                     (shen/fail))
             (shen/let Parse_shen\.<expr>
                       (shen/shen\.<expr> V2667)
                       (shen/if
                        (shen/not
                         (shen/=
                          (shen/fail)
                          Parse_shen\.<expr>))
                        (shen/shen\.pair
                         (shen/hd Parse_shen\.<expr>)
                         (shen/shen\.hdtl Parse_shen\.<expr>))
                        (shen/fail)))
             YaccParse)))
(defun shen/shen\.<type>
    (V2669)
  (shen/let Parse_shen\.<expr>
            (shen/shen\.<expr> V2669)
            (shen/if
             (shen/not
              (shen/=
               (shen/fail)
               Parse_shen\.<expr>))
             (shen/shen\.pair
              (shen/hd Parse_shen\.<expr>)
              (shen/shen\.curry-type
               (shen/shen\.hdtl Parse_shen\.<expr>)))
             (shen/fail))))
(defun shen/shen\.<doubleunderline>
    (V2671)
  (shen/if
   (shen/cons\?
    (shen/hd V2671))
   (shen/let Parse_X
             (shen/hd
              (shen/hd V2671))
             (shen/if
              (shen/shen\.doubleunderline\? Parse_X)
              (shen/shen\.pair
               (shen/hd
                (shen/shen\.pair
                 (nthcdr 1
                         (shen/hd V2671))
                 (shen/shen\.hdtl V2671)))
               Parse_X)
              (shen/fail)))
   (shen/fail)))
(defun shen/shen\.<singleunderline>
    (V2673)
  (shen/if
   (shen/cons\?
    (shen/hd V2673))
   (shen/let Parse_X
             (shen/hd
              (shen/hd V2673))
             (shen/if
              (shen/shen\.singleunderline\? Parse_X)
              (shen/shen\.pair
               (shen/hd
                (shen/shen\.pair
                 (nthcdr 1
                         (shen/hd V2673))
                 (shen/shen\.hdtl V2673)))
               Parse_X)
              (shen/fail)))
   (shen/fail)))
(defun shen/shen\.singleunderline\?
    (V2675)
  (shen/and
   (shen/symbol\? V2675)
   (shen/shen\.sh\?
    (shen/str V2675))))
(defun shen/shen\.sh\?
    (V2677)
  (shen/cond
   ((shen/= "_" V2677)
    'true)
   (shen/true
    (shen/and
     (shen/=
      (shen/pos V2677 0)
      "_")
     (shen/shen\.sh\?
      (shen/tlstr V2677))))))
(defun shen/shen\.doubleunderline\?
    (V2679)
  (shen/and
   (shen/symbol\? V2679)
   (shen/shen\.dh\?
    (shen/str V2679))))
(defun shen/shen\.dh\?
    (V2681)
  (shen/cond
   ((shen/= "=" V2681)
    'true)
   (shen/true
    (shen/and
     (shen/=
      (shen/pos V2681 0)
      "=")
     (shen/shen\.dh\?
      (shen/tlstr V2681))))))
(defun shen/shen\.process-datatype
    (V2684 V2685)
  (shen/shen\.remember-datatype
   (shen/shen\.s-prolog
    (shen/shen\.rules->horn-clauses V2684 V2685))))
(defun shen/shen\.remember-datatype
    (V2691)
  (shen/cond
   ((shen/cons\? V2691)
    (shen/do
     (shen/set 'shen\.*datatypes*
               (shen/adjoin
                (shen/hd V2691)
                (shen/value 'shen\.*datatypes*)))
     (shen/do
      (shen/set 'shen\.*alldatatypes*
                (shen/adjoin
                 (shen/hd V2691)
                 (shen/value 'shen\.*alldatatypes*)))
      (shen/hd V2691))))
   (shen/true
    (shen/shen\.f_error 'shen\.remember-datatype))))
(defun shen/shen\.rules->horn-clauses
    (V2696 V2697)
  (cl-flet
      ((tail-trampoline
        (V2696 V2697)
        (shen/cond
         ((shen/internal/predicate->shen
           (null V2697))
          nil)
         ((shen/and
           (shen/cons\? V2697)
           (shen/and
            (shen/tuple\?
             (shen/hd V2697))
            (shen/= 'shen\.single
                    (shen/fst
                     (shen/hd V2697)))))
          (append
           (list
            (shen/shen\.rule->horn-clause V2696
                                          (shen/snd
                                           (shen/hd V2697))))
           (shen/shen\.rules->horn-clauses V2696
                                           (nthcdr 1 V2697))))
         ((shen/and
           (shen/cons\? V2697)
           (shen/and
            (shen/tuple\?
             (shen/hd V2697))
            (shen/= 'shen\.double
                    (shen/fst
                     (shen/hd V2697)))))
          (vector
           (list V2696
                 (shen/append
                  (shen/shen\.double->singles
                   (shen/snd
                    (shen/hd V2697)))
                  (nthcdr 1 V2697)))))
         (shen/true
          (shen/shen\.f_error 'shen\.rules->horn-clauses)))))
    (let
        ((result
          (funcall #'tail-trampoline V2696 V2697)))
      (while
          (vectorp result)
        (setq result
              (apply #'tail-trampoline
                     (aref result 0))))
      result)))
(defun shen/shen\.double->singles
    (V2699)
  (list
   (shen/shen\.right-rule V2699)
   (shen/shen\.left-rule V2699)))
(defun shen/shen\.right-rule
    (V2701)
  (shen/@p 'shen\.single V2701))
(defun shen/shen\.left-rule
    (V2703)
  (shen/cond
   ((shen/and
     (shen/cons\? V2703)
     (shen/and
      (shen/cons\?
       (nthcdr 1 V2703))
      (shen/and
       (shen/cons\?
        (nthcdr 2 V2703))
       (shen/and
        (shen/tuple\?
         (shen/hd
          (nthcdr 2 V2703)))
        (shen/and
         (shen/internal/predicate->shen
          (null
           (shen/fst
            (shen/hd
             (nthcdr 2 V2703)))))
         (shen/internal/predicate->shen
          (null
           (nthcdr 3 V2703))))))))
    (shen/let Q
              (shen/gensym 'Qv)
              (shen/let NewConclusion
                        (shen/@p
                         (list
                          (shen/snd
                           (shen/hd
                            (nthcdr 2 V2703))))
                         Q)
                        (shen/let NewPremises
                                  (list
                                   (shen/@p
                                    (shen/map
                                     (shen/lambda X
                                                  (shen/shen\.right->left X))
                                     (shen/hd
                                      (nthcdr 1 V2703)))
                                    Q))
                                  (shen/@p 'shen\.single
                                           (list
                                            (shen/hd V2703)
                                            NewPremises NewConclusion))))))
   (shen/true
    (shen/shen\.f_error 'shen\.left-rule))))
(defun shen/shen\.right->left
    (V2709)
  (shen/cond
   ((shen/and
     (shen/tuple\? V2709)
     (shen/internal/predicate->shen
      (null
       (shen/fst V2709))))
    (shen/snd V2709))
   (shen/true
    (shen/simple-error "syntax error with ==========\n"))))
(defun shen/shen\.rule->horn-clause
    (V2712 V2713)
  (shen/cond
   ((shen/and
     (shen/cons\? V2713)
     (shen/and
      (shen/cons\?
       (nthcdr 1 V2713))
      (shen/and
       (shen/cons\?
        (nthcdr 2 V2713))
       (shen/and
        (shen/tuple\?
         (shen/hd
          (nthcdr 2 V2713)))
        (shen/internal/predicate->shen
         (null
          (nthcdr 3 V2713)))))))
    (list
     (shen/shen\.rule->horn-clause-head V2712
                                        (shen/snd
                                         (shen/hd
                                          (nthcdr 2 V2713))))
     ':-
     (shen/shen\.rule->horn-clause-body
      (shen/hd V2713)
      (shen/hd
       (nthcdr 1 V2713))
      (shen/fst
       (shen/hd
        (nthcdr 2 V2713))))))
   (shen/true
    (shen/shen\.f_error 'shen\.rule->horn-clause))))
(defun shen/shen\.rule->horn-clause-head
    (V2716 V2717)
  (list V2716
        (shen/shen\.mode-ify V2717)
        'Context_1957))
(defun shen/shen\.mode-ify
    (V2719)
  (shen/cond
   ((shen/and
     (shen/cons\? V2719)
     (shen/and
      (shen/cons\?
       (nthcdr 1 V2719))
      (shen/and
       (shen/= ':
               (shen/hd
                (nthcdr 1 V2719)))
       (shen/and
        (shen/cons\?
         (nthcdr 2 V2719))
        (shen/internal/predicate->shen
         (null
          (nthcdr 3 V2719)))))))
    (list 'mode
          (list
           (shen/hd V2719)
           ':
           (list 'mode
                 (shen/hd
                  (nthcdr 2 V2719))
                 '+))
          '-))
   (shen/true V2719)))
(defun shen/shen\.rule->horn-clause-body
    (V2723 V2724 V2725)
  (shen/let Variables
            (shen/map
             (shen/lambda X
                          (shen/shen\.extract_vars X))
             V2725)
            (shen/let Predicates
                      (shen/map
                       (shen/lambda X
                                    (shen/gensym 'shen\.cl))
                       V2725)
                      (shen/let SearchLiterals
                                (shen/shen\.construct-search-literals Predicates Variables 'Context_1957 'Context1_1957)
                                (shen/let SearchClauses
                                          (shen/shen\.construct-search-clauses Predicates V2725 Variables)
                                          (shen/let SideLiterals
                                                    (shen/shen\.construct-side-literals V2723)
                                                    (shen/let PremissLiterals
                                                              (shen/map
                                                               (shen/lambda X
                                                                            (shen/shen\.construct-premiss-literal X
                                                                                                                  (shen/empty\? V2725)))
                                                               V2724)
                                                              (shen/append SearchLiterals
                                                                           (shen/append SideLiterals PremissLiterals)))))))))
(defun shen/shen\.construct-search-literals
    (V2734 V2735 V2736 V2737)
  (shen/cond
   ((shen/and
     (shen/internal/predicate->shen
      (null V2734))
     (shen/internal/predicate->shen
      (null V2735)))
    nil)
   (shen/true
    (shen/shen\.csl-help V2734 V2735 V2736 V2737))))
(defun shen/shen\.csl-help
    (V2744 V2745 V2746 V2747)
  (shen/cond
   ((shen/and
     (shen/internal/predicate->shen
      (null V2744))
     (shen/internal/predicate->shen
      (null V2745)))
    (list
     (list 'bind 'ContextOut_1957 V2746)))
   ((shen/and
     (shen/cons\? V2744)
     (shen/cons\? V2745))
    (append
     (list
      (append
       (list
        (shen/hd V2744)
        V2746 V2747)
       (shen/hd V2745)))
     (shen/shen\.csl-help
      (nthcdr 1 V2744)
      (nthcdr 1 V2745)
      V2747
      (shen/gensym 'Context))))
   (shen/true
    (shen/shen\.f_error 'shen\.csl-help))))
(defun shen/shen\.construct-search-clauses
    (V2751 V2752 V2753)
  (cl-flet
      ((tail-trampoline
        (V2751 V2752 V2753)
        (shen/cond
         ((shen/and
           (shen/internal/predicate->shen
            (null V2751))
           (shen/and
            (shen/internal/predicate->shen
             (null V2752))
            (shen/internal/predicate->shen
             (null V2753))))
          'shen\.skip)
         ((shen/and
           (shen/cons\? V2751)
           (shen/and
            (shen/cons\? V2752)
            (shen/cons\? V2753)))
          (shen/do
           (shen/shen\.construct-search-clause
            (shen/hd V2751)
            (shen/hd V2752)
            (shen/hd V2753))
           (vector
            (list
             (nthcdr 1 V2751)
             (nthcdr 1 V2752)
             (nthcdr 1 V2753)))))
         (shen/true
          (shen/shen\.f_error 'shen\.construct-search-clauses)))))
    (let
        ((result
          (funcall #'tail-trampoline V2751 V2752 V2753)))
      (while
          (vectorp result)
        (setq result
              (apply #'tail-trampoline
                     (aref result 0))))
      result)))
(defun shen/shen\.construct-search-clause
    (V2757 V2758 V2759)
  (shen/shen\.s-prolog
   (list
    (shen/shen\.construct-base-search-clause V2757 V2758 V2759)
    (shen/shen\.construct-recursive-search-clause V2757 V2758 V2759))))
(defun shen/shen\.construct-base-search-clause
    (V2763 V2764 V2765)
  (list
   (append
    (list V2763
          (append
           (list
            (shen/shen\.mode-ify V2764))
           'In_1957)
          'In_1957)
    V2765)
   ':- nil))
(defun shen/shen\.construct-recursive-search-clause
    (V2769 V2770 V2771)
  (list
   (append
    (list V2769
          (append
           (list 'Assumption_1957)
           'Assumptions_1957)
          (append
           (list 'Assumption_1957)
           'Out_1957))
    V2771)
   ':-
   (list
    (append
     (list V2769 'Assumptions_1957 'Out_1957)
     V2771))))
(defun shen/shen\.construct-side-literals
    (V2777)
  (cl-flet
      ((tail-trampoline
        (V2777)
        (shen/cond
         ((shen/internal/predicate->shen
           (null V2777))
          nil)
         ((shen/and
           (shen/cons\? V2777)
           (shen/and
            (shen/cons\?
             (shen/hd V2777))
            (shen/and
             (shen/= 'if
                     (shen/hd
                      (shen/hd V2777)))
             (shen/and
              (shen/cons\?
               (nthcdr 1
                       (shen/hd V2777)))
              (shen/internal/predicate->shen
               (null
                (nthcdr 2
                        (shen/hd V2777))))))))
          (append
           (list
            (append
             (list 'when)
             (nthcdr 1
                     (shen/hd V2777))))
           (shen/shen\.construct-side-literals
            (nthcdr 1 V2777))))
         ((shen/and
           (shen/cons\? V2777)
           (shen/and
            (shen/cons\?
             (shen/hd V2777))
            (shen/and
             (shen/= 'let
                     (shen/hd
                      (shen/hd V2777)))
             (shen/and
              (shen/cons\?
               (nthcdr 1
                       (shen/hd V2777)))
              (shen/and
               (shen/cons\?
                (nthcdr 2
                        (shen/hd V2777)))
               (shen/internal/predicate->shen
                (null
                 (nthcdr 3
                         (shen/hd V2777)))))))))
          (append
           (list
            (append
             (list 'is)
             (nthcdr 1
                     (shen/hd V2777))))
           (shen/shen\.construct-side-literals
            (nthcdr 1 V2777))))
         ((shen/cons\? V2777)
          (vector
           (list
            (nthcdr 1 V2777))))
         (shen/true
          (shen/shen\.f_error 'shen\.construct-side-literals)))))
    (let
        ((result
          (funcall #'tail-trampoline V2777)))
      (while
          (vectorp result)
        (setq result
              (apply #'tail-trampoline
                     (aref result 0))))
      result)))
(defun shen/shen\.construct-premiss-literal
    (V2784 V2785)
  (shen/cond
   ((shen/tuple\? V2784)
    (list 'shen\.t*
          (shen/shen\.recursive_cons_form
           (shen/snd V2784))
          (shen/shen\.construct-context V2785
                                        (shen/fst V2784))))
   ((shen/= '! V2784)
    (list 'cut 'Throwcontrol))
   (shen/true
    (shen/shen\.f_error 'shen\.construct-premiss-literal))))
(defun shen/shen\.construct-context
    (V2788 V2789)
  (shen/cond
   ((shen/and
     (shen/= 'true V2788)
     (shen/internal/predicate->shen
      (null V2789)))
    'Context_1957)
   ((shen/and
     (shen/= 'false V2788)
     (shen/internal/predicate->shen
      (null V2789)))
    'ContextOut_1957)
   ((shen/cons\? V2789)
    (list 'cons
          (shen/shen\.recursive_cons_form
           (shen/hd V2789))
          (shen/shen\.construct-context V2788
                                        (nthcdr 1 V2789))))
   (shen/true
    (shen/shen\.f_error 'shen\.construct-context))))
(defun shen/shen\.recursive_cons_form
    (V2791)
  (shen/cond
   ((shen/cons\? V2791)
    (list 'cons
          (shen/shen\.recursive_cons_form
           (shen/hd V2791))
          (shen/shen\.recursive_cons_form
           (nthcdr 1 V2791))))
   (shen/true V2791)))
(defun shen/preclude
    (V2793)
  (shen/shen\.preclude-h
   (shen/map
    (shen/lambda X
                 (shen/shen\.intern-type X))
    V2793)))
(defun shen/shen\.preclude-h
    (V2795)
  (shen/let FilterDatatypes
            (shen/set 'shen\.*datatypes*
                      (shen/difference
                       (shen/value 'shen\.*datatypes*)
                       V2795))
            (shen/value 'shen\.*datatypes*)))
(defun shen/include
    (V2797)
  (shen/shen\.include-h
   (shen/map
    (shen/lambda X
                 (shen/shen\.intern-type X))
    V2797)))
(defun shen/shen\.include-h
    (V2799)
  (shen/let ValidTypes
            (shen/intersection V2799
                               (shen/value 'shen\.*alldatatypes*))
            (shen/let NewDatatypes
                      (shen/set 'shen\.*datatypes*
                                (shen/union ValidTypes
                                            (shen/value 'shen\.*datatypes*)))
                      (shen/value 'shen\.*datatypes*))))
(defun shen/preclude-all-but
    (V2801)
  (shen/shen\.preclude-h
   (shen/difference
    (shen/value 'shen\.*alldatatypes*)
    (shen/map
     (shen/lambda X
                  (shen/shen\.intern-type X))
     V2801))))
(defun shen/include-all-but
    (V2803)
  (shen/shen\.include-h
   (shen/difference
    (shen/value 'shen\.*alldatatypes*)
    (shen/map
     (shen/lambda X
                  (shen/shen\.intern-type X))
     V2803))))
(defun shen/shen\.synonyms-help
    (V2809)
  (cl-flet
      ((tail-trampoline
        (V2809)
        (shen/cond
         ((shen/internal/predicate->shen
           (null V2809))
          (shen/shen\.update-demodulation-function
           (shen/value 'shen\.*tc*)
           (shen/mapcan
            (shen/lambda X
                         (shen/shen\.demod-rule X))
            (shen/value 'shen\.*synonyms*))))
         ((shen/and
           (shen/cons\? V2809)
           (shen/cons\?
            (nthcdr 1 V2809)))
          (shen/let Vs
                    (shen/difference
                     (shen/shen\.extract_vars
                      (shen/hd
                       (nthcdr 1 V2809)))
                     (shen/shen\.extract_vars
                      (shen/hd V2809)))
                    (shen/if
                     (shen/empty\? Vs)
                     (shen/do
                      (shen/shen\.pushnew
                       (list
                        (shen/hd V2809)
                        (shen/hd
                         (nthcdr 1 V2809)))
                       'shen\.*synonyms*)
                      (vector
                       (list
                        (nthcdr 2 V2809))))
                     (shen/shen\.free_variable_warnings
                      (shen/hd
                       (nthcdr 1 V2809))
                      Vs))))
         (shen/true
          (shen/simple-error "odd number of synonyms\n")))))
    (let
        ((result
          (funcall #'tail-trampoline V2809)))
      (while
          (vectorp result)
        (setq result
              (apply #'tail-trampoline
                     (aref result 0))))
      result)))
(defun shen/shen\.pushnew
    (V2812 V2813)
  (shen/if
   (shen/element\? V2812
                   (shen/value V2813))
   (shen/value V2813)
   (shen/set V2813
             (append
              (list V2812)
              (shen/value V2813)))))
(defun shen/shen\.demod-rule
    (V2815)
  (shen/cond
   ((shen/and
     (shen/cons\? V2815)
     (shen/and
      (shen/cons\?
       (nthcdr 1 V2815))
      (shen/internal/predicate->shen
       (null
        (nthcdr 2 V2815)))))
    (list
     (shen/shen\.rcons_form
      (shen/hd V2815))
     '->
     (shen/shen\.rcons_form
      (shen/hd
       (nthcdr 1 V2815)))))
   (shen/true
    (shen/shen\.f_error 'shen\.demod-rule))))
(defun shen/shen\.lambda-of-defun
    (V2821)
  (shen/cond
   ((shen/and
     (shen/cons\? V2821)
     (shen/and
      (shen/= 'defun
              (shen/hd V2821))
      (shen/and
       (shen/cons\?
        (nthcdr 1 V2821))
       (shen/and
        (shen/cons\?
         (nthcdr 2 V2821))
        (shen/and
         (shen/cons\?
          (shen/hd
           (nthcdr 2 V2821)))
         (shen/and
          (shen/internal/predicate->shen
           (null
            (nthcdr 1
                    (shen/hd
                     (nthcdr 2 V2821)))))
          (shen/and
           (shen/cons\?
            (nthcdr 3 V2821))
           (shen/internal/predicate->shen
            (null
             (nthcdr 4 V2821))))))))))
    (shen/eval
     (append
      (list '/\.
            (shen/hd
             (shen/hd
              (nthcdr 2 V2821))))
      (nthcdr 3 V2821))))
   (shen/true
    (shen/shen\.f_error 'shen\.lambda-of-defun))))
(defun shen/shen\.update-demodulation-function
    (V2824 V2825)
  (shen/do
   (shen/tc '-)
   (shen/do
    (shen/set 'shen\.*demodulation-function*
              (shen/shen\.lambda-of-defun
               (shen/shen\.elim-def
                (append
                 (list 'define 'shen\.demod)
                 (shen/append V2825
                              (shen/shen\.default-rule))))))
    (shen/do
     (shen/if V2824
              (shen/tc '+)
              'shen\.skip)
     'synonyms))))
(defun shen/shen\.default-rule nil
  (list 'X '-> 'X))
(defun shen/shen\.yacc
    (V4275)
  (shen/cond
   ((shen/and
     (shen/cons\? V4275)
     (shen/and
      (shen/= 'defcc
              (shen/hd V4275))
      (shen/cons\?
       (nthcdr 1 V4275))))
    (shen/shen\.yacc->shen
     (shen/hd
      (nthcdr 1 V4275))
     (nthcdr 2 V4275)))
   (shen/true
    (shen/shen\.f_error 'shen\.yacc))))
(defun shen/shen\.yacc->shen
    (V4278 V4279)
  (shen/let CCRules
            (shen/shen\.split_cc_rules 'true V4279 nil)
            (shen/let CCBody
                      (shen/map
                       (shen/lambda X
                                    (shen/shen\.cc_body X))
                       CCRules)
                      (shen/let YaccCases
                                (shen/shen\.yacc_cases CCBody)
                                (list 'define V4278 'Stream '->
                                      (shen/shen\.kill-code YaccCases))))))
(defun shen/shen\.kill-code
    (V4281)
  (shen/cond
   ((shen/>
     (shen/occurrences 'kill V4281)
     0)
    (list 'trap-error V4281
          (list 'lambda 'E
                (list 'shen\.analyse-kill 'E))))
   (shen/true V4281)))
(defun shen/kill nil
  (shen/simple-error "yacc kill"))
(defun shen/shen\.analyse-kill
    (V4283)
  (shen/let String
            (shen/error-to-string V4283)
            (shen/if
             (shen/= String "yacc kill")
             (shen/fail)
             V4283)))
(defun shen/shen\.split_cc_rules
    (V4289 V4290 V4291)
  (cl-flet
      ((tail-trampoline
        (V4289 V4290 V4291)
        (shen/cond
         ((shen/and
           (shen/internal/predicate->shen
            (null V4290))
           (shen/internal/predicate->shen
            (null V4291)))
          nil)
         ((shen/internal/predicate->shen
           (null V4290))
          (list
           (shen/shen\.split_cc_rule V4289
                                     (shen/reverse V4291)
                                     nil)))
         ((shen/and
           (shen/cons\? V4290)
           (shen/= '\;
                   (shen/hd V4290)))
          (append
           (list
            (shen/shen\.split_cc_rule V4289
                                      (shen/reverse V4291)
                                      nil))
           (shen/shen\.split_cc_rules V4289
                                      (nthcdr 1 V4290)
                                      nil)))
         ((shen/cons\? V4290)
          (vector
           (list V4289
                 (nthcdr 1 V4290)
                 (append
                  (list
                   (shen/hd V4290))
                  V4291))))
         (shen/true
          (shen/shen\.f_error 'shen\.split_cc_rules)))))
    (let
        ((result
          (funcall #'tail-trampoline V4289 V4290 V4291)))
      (while
          (vectorp result)
        (setq result
              (apply #'tail-trampoline
                     (aref result 0))))
      result)))
(defun shen/shen\.split_cc_rule
    (V4299 V4300 V4301)
  (cl-flet
      ((tail-trampoline
        (V4299 V4300 V4301)
        (shen/cond
         ((shen/and
           (shen/cons\? V4300)
           (shen/and
            (shen/= ':=
                    (shen/hd V4300))
            (shen/and
             (shen/cons\?
              (nthcdr 1 V4300))
             (shen/internal/predicate->shen
              (null
               (nthcdr 2 V4300))))))
          (append
           (list
            (shen/reverse V4301))
           (nthcdr 1 V4300)))
         ((shen/and
           (shen/cons\? V4300)
           (shen/and
            (shen/= ':=
                    (shen/hd V4300))
            (shen/and
             (shen/cons\?
              (nthcdr 1 V4300))
             (shen/and
              (shen/cons\?
               (nthcdr 2 V4300))
              (shen/and
               (shen/= 'where
                       (shen/hd
                        (nthcdr 2 V4300)))
               (shen/and
                (shen/cons\?
                 (nthcdr 3 V4300))
                (shen/internal/predicate->shen
                 (null
                  (nthcdr 4 V4300)))))))))
          (list
           (shen/reverse V4301)
           (list 'where
                 (shen/hd
                  (nthcdr 3 V4300))
                 (shen/hd
                  (nthcdr 1 V4300)))))
         ((shen/internal/predicate->shen
           (null V4300))
          (shen/do
           (shen/shen\.semantic-completion-warning V4299 V4301)
           (vector
            (list V4299
                  (list ':=
                        (shen/shen\.default_semantics
                         (shen/reverse V4301)))
                  V4301))))
         ((shen/cons\? V4300)
          (vector
           (list V4299
                 (nthcdr 1 V4300)
                 (append
                  (list
                   (shen/hd V4300))
                  V4301))))
         (shen/true
          (shen/shen\.f_error 'shen\.split_cc_rule)))))
    (let
        ((result
          (funcall #'tail-trampoline V4299 V4300 V4301)))
      (while
          (vectorp result)
        (setq result
              (apply #'tail-trampoline
                     (aref result 0))))
      result)))
(defun shen/shen\.semantic-completion-warning
    (V4312 V4313)
  (shen/cond
   ((shen/= 'true V4312)
    (shen/do
     (shen/shen\.prhush "warning: "
                        (shen/stoutput))
     (shen/do
      (shen/shen\.for-each
       (shen/lambda X
                    (shen/shen\.prhush
                     (shen/shen\.app X " " 'shen\.a)
                     (shen/stoutput)))
       (shen/reverse V4313))
      (shen/shen\.prhush "has no semantics.\n"
                         (shen/stoutput)))))
   (shen/true 'shen\.skip)))
(defun shen/shen\.default_semantics
    (V4315)
  (shen/cond
   ((shen/internal/predicate->shen
     (null V4315))
    nil)
   ((shen/and
     (shen/cons\? V4315)
     (shen/and
      (shen/internal/predicate->shen
       (null
        (nthcdr 1 V4315)))
      (shen/shen\.grammar_symbol\?
       (shen/hd V4315))))
    (shen/hd V4315))
   ((shen/and
     (shen/cons\? V4315)
     (shen/shen\.grammar_symbol\?
      (shen/hd V4315)))
    (list 'append
          (shen/hd V4315)
          (shen/shen\.default_semantics
           (nthcdr 1 V4315))))
   ((shen/cons\? V4315)
    (list 'cons
          (shen/hd V4315)
          (shen/shen\.default_semantics
           (nthcdr 1 V4315))))
   (shen/true
    (shen/shen\.f_error 'shen\.default_semantics))))
(defun shen/shen\.grammar_symbol\?
    (V4317)
  (shen/and
   (shen/symbol\? V4317)
   (shen/let Cs
             (shen/shen\.strip-pathname
              (shen/explode V4317))
             (shen/and
              (shen/=
               (shen/hd Cs)
               "<")
              (shen/=
               (shen/hd
                (shen/reverse Cs))
               ">")))))
(defun shen/shen\.yacc_cases
    (V4319)
  (shen/cond
   ((shen/and
     (shen/cons\? V4319)
     (shen/internal/predicate->shen
      (null
       (nthcdr 1 V4319))))
    (shen/hd V4319))
   ((shen/cons\? V4319)
    (shen/let P 'YaccParse
              (list 'let P
                    (shen/hd V4319)
                    (list 'if
                          (list '= P
                                (list 'fail))
                          (shen/shen\.yacc_cases
                           (nthcdr 1 V4319))
                          P))))
   (shen/true
    (shen/shen\.f_error 'shen\.yacc_cases))))
(defun shen/shen\.cc_body
    (V4321)
  (shen/cond
   ((shen/and
     (shen/cons\? V4321)
     (shen/and
      (shen/cons\?
       (nthcdr 1 V4321))
      (shen/internal/predicate->shen
       (null
        (nthcdr 2 V4321)))))
    (shen/shen\.syntax
     (shen/hd V4321)
     'Stream
     (shen/hd
      (nthcdr 1 V4321))))
   (shen/true
    (shen/shen\.f_error 'shen\.cc_body))))
(defun shen/shen\.syntax
    (V4325 V4326 V4327)
  (shen/cond
   ((shen/and
     (shen/internal/predicate->shen
      (null V4325))
     (shen/and
      (shen/cons\? V4327)
      (shen/and
       (shen/= 'where
               (shen/hd V4327))
       (shen/and
        (shen/cons\?
         (nthcdr 1 V4327))
        (shen/and
         (shen/cons\?
          (nthcdr 2 V4327))
         (shen/internal/predicate->shen
          (null
           (nthcdr 3 V4327))))))))
    (list 'if
          (shen/shen\.semantics
           (shen/hd
            (nthcdr 1 V4327)))
          (list 'shen\.pair
                (list 'hd V4326)
                (shen/shen\.semantics
                 (shen/hd
                  (nthcdr 2 V4327))))
          (list 'fail)))
   ((shen/internal/predicate->shen
     (null V4325))
    (list 'shen\.pair
          (list 'hd V4326)
          (shen/shen\.semantics V4327)))
   ((shen/cons\? V4325)
    (shen/if
     (shen/shen\.grammar_symbol\?
      (shen/hd V4325))
     (shen/shen\.recursive_descent V4325 V4326 V4327)
     (shen/if
      (shen/variable\?
       (shen/hd V4325))
      (shen/shen\.variable-match V4325 V4326 V4327)
      (shen/if
       (shen/shen\.jump_stream\?
        (shen/hd V4325))
       (shen/shen\.jump_stream V4325 V4326 V4327)
       (shen/if
        (shen/shen\.terminal\?
         (shen/hd V4325))
        (shen/shen\.check_stream V4325 V4326 V4327)
        (shen/if
         (shen/cons\?
          (shen/hd V4325))
         (shen/shen\.list-stream
          (shen/shen\.decons
           (shen/hd V4325))
          (nthcdr 1 V4325)
          V4326 V4327)
         (shen/simple-error
          (shen/shen\.app
           (shen/hd V4325)
           " is not legal syntax\n" 'shen\.a))))))))
   (shen/true
    (shen/shen\.f_error 'shen\.syntax))))
(defun shen/shen\.list-stream
    (V4332 V4333 V4334 V4335)
  (shen/let Test
            (list 'and
                  (list 'cons\?
                        (list 'hd V4334))
                  (list 'cons\?
                        (list 'shen\.hdhd V4334)))
            (shen/let Placeholder
                      (shen/gensym 'shen\.place)
                      (shen/let RunOn
                                (shen/shen\.syntax V4333
                                                   (list 'shen\.pair
                                                         (list 'shen\.tlhd V4334)
                                                         (list 'shen\.hdtl V4334))
                                                   V4335)
                                (shen/let Action
                                          (shen/shen\.insert-runon RunOn Placeholder
                                                                   (shen/shen\.syntax V4332
                                                                                      (list 'shen\.pair
                                                                                            (list 'shen\.hdhd V4334)
                                                                                            (list 'shen\.hdtl V4334))
                                                                                      Placeholder))
                                          (list 'if Test Action
                                                (list 'fail)))))))
(defun shen/shen\.decons
    (V4337)
  (shen/cond
   ((shen/and
     (shen/cons\? V4337)
     (shen/and
      (shen/= 'cons
              (shen/hd V4337))
      (shen/and
       (shen/cons\?
        (nthcdr 1 V4337))
       (shen/and
        (shen/cons\?
         (nthcdr 2 V4337))
        (shen/and
         (shen/internal/predicate->shen
          (null
           (shen/hd
            (nthcdr 2 V4337))))
         (shen/internal/predicate->shen
          (null
           (nthcdr 3 V4337))))))))
    (list
     (shen/hd
      (nthcdr 1 V4337))))
   ((shen/and
     (shen/cons\? V4337)
     (shen/and
      (shen/= 'cons
              (shen/hd V4337))
      (shen/and
       (shen/cons\?
        (nthcdr 1 V4337))
       (shen/and
        (shen/cons\?
         (nthcdr 2 V4337))
        (shen/internal/predicate->shen
         (null
          (nthcdr 3 V4337)))))))
    (append
     (list
      (shen/hd
       (nthcdr 1 V4337)))
     (shen/shen\.decons
      (shen/hd
       (nthcdr 2 V4337)))))
   (shen/true V4337)))
(defun shen/shen\.insert-runon
    (V4352 V4353 V4354)
  (shen/cond
   ((shen/and
     (shen/cons\? V4354)
     (shen/and
      (shen/= 'shen\.pair
              (shen/hd V4354))
      (shen/and
       (shen/cons\?
        (nthcdr 1 V4354))
       (shen/and
        (shen/cons\?
         (nthcdr 2 V4354))
        (shen/and
         (shen/internal/predicate->shen
          (null
           (nthcdr 3 V4354)))
         (shen/=
          (shen/hd
           (nthcdr 2 V4354))
          V4353))))))
    V4352)
   ((shen/cons\? V4354)
    (shen/map
     (shen/lambda Z
                  (shen/shen\.insert-runon V4352 V4353 Z))
     V4354))
   (shen/true V4354)))
(defun shen/shen\.strip-pathname
    (V4360)
  (cl-flet
      ((tail-trampoline
        (V4360)
        (shen/cond
         ((shen/not
           (shen/element\? "." V4360))
          V4360)
         ((shen/cons\? V4360)
          (vector
           (list
            (nthcdr 1 V4360))))
         (shen/true
          (shen/shen\.f_error 'shen\.strip-pathname)))))
    (let
        ((result
          (funcall #'tail-trampoline V4360)))
      (while
          (vectorp result)
        (setq result
              (apply #'tail-trampoline
                     (aref result 0))))
      result)))
(defun shen/shen\.recursive_descent
    (V4364 V4365 V4366)
  (shen/cond
   ((shen/cons\? V4364)
    (shen/let Test
              (list
               (shen/hd V4364)
               V4365)
              (shen/let Action
                        (shen/shen\.syntax
                         (nthcdr 1 V4364)
                         (shen/concat 'Parse_
                                      (shen/hd V4364))
                         V4366)
                        (shen/let Else
                                  (list 'fail)
                                  (list 'let
                                        (shen/concat 'Parse_
                                                     (shen/hd V4364))
                                        Test
                                        (list 'if
                                              (list 'not
                                                    (list '=
                                                          (list 'fail)
                                                          (shen/concat 'Parse_
                                                                       (shen/hd V4364))))
                                              Action Else))))))
   (shen/true
    (shen/shen\.f_error 'shen\.recursive_descent))))
(defun shen/shen\.variable-match
    (V4370 V4371 V4372)
  (shen/cond
   ((shen/cons\? V4370)
    (shen/let Test
              (list 'cons\?
                    (list 'hd V4371))
              (shen/let Action
                        (list 'let
                              (shen/concat 'Parse_
                                           (shen/hd V4370))
                              (list 'shen\.hdhd V4371)
                              (shen/shen\.syntax
                               (nthcdr 1 V4370)
                               (list 'shen\.pair
                                     (list 'shen\.tlhd V4371)
                                     (list 'shen\.hdtl V4371))
                               V4372))
                        (shen/let Else
                                  (list 'fail)
                                  (list 'if Test Action Else)))))
   (shen/true
    (shen/shen\.f_error 'shen\.variable-match))))
(defun shen/shen\.terminal\?
    (V4382)
  (shen/cond
   ((shen/cons\? V4382)
    'false)
   ((shen/variable\? V4382)
    'false)
   (shen/true 'true)))
(defun shen/shen\.jump_stream\?
    (V4388)
  (shen/cond
   ((shen/= V4388 '_)
    'true)
   (shen/true 'false)))
(defun shen/shen\.check_stream
    (V4392 V4393 V4394)
  (shen/cond
   ((shen/cons\? V4392)
    (shen/let Test
              (list 'and
                    (list 'cons\?
                          (list 'hd V4393))
                    (list '=
                          (shen/hd V4392)
                          (list 'shen\.hdhd V4393)))
              (shen/let NewStr
                        (shen/gensym 'NewStream)
                        (shen/let Action
                                  (list 'let NewStr
                                        (list 'shen\.pair
                                              (list 'shen\.tlhd V4393)
                                              (list 'shen\.hdtl V4393))
                                        (shen/shen\.syntax
                                         (nthcdr 1 V4392)
                                         NewStr V4394))
                                  (shen/let Else
                                            (list 'fail)
                                            (list 'if Test Action Else))))))
   (shen/true
    (shen/shen\.f_error 'shen\.check_stream))))
(defun shen/shen\.jump_stream
    (V4398 V4399 V4400)
  (shen/cond
   ((shen/cons\? V4398)
    (shen/let Test
              (list 'cons\?
                    (list 'hd V4399))
              (shen/let Action
                        (shen/shen\.syntax
                         (nthcdr 1 V4398)
                         (list 'shen\.pair
                               (list 'shen\.tlhd V4399)
                               (list 'shen\.hdtl V4399))
                         V4400)
                        (shen/let Else
                                  (list 'fail)
                                  (list 'if Test Action Else)))))
   (shen/true
    (shen/shen\.f_error 'shen\.jump_stream))))
(defun shen/shen\.semantics
    (V4402)
  (shen/cond
   ((shen/internal/predicate->shen
     (null V4402))
    nil)
   ((shen/shen\.grammar_symbol\? V4402)
    (list 'shen\.hdtl
          (shen/concat 'Parse_ V4402)))
   ((shen/variable\? V4402)
    (shen/concat 'Parse_ V4402))
   ((shen/cons\? V4402)
    (shen/map
     (shen/lambda Z
                  (shen/shen\.semantics Z))
     V4402))
   (shen/true V4402)))
(defun shen/shen\.pair
    (V4405 V4406)
  (list V4405 V4406))
(defun shen/shen\.hdtl
    (V4408)
  (shen/hd
   (nthcdr 1 V4408)))
(defun shen/shen\.hdhd
    (V4410)
  (shen/hd
   (shen/hd V4410)))
(defun shen/shen\.tlhd
    (V4412)
  (nthcdr 1
          (shen/hd V4412)))
(defun shen/shen\.snd-or-fail
    (V4420)
  (shen/cond
   ((shen/and
     (shen/cons\? V4420)
     (shen/and
      (shen/cons\?
       (nthcdr 1 V4420))
      (shen/internal/predicate->shen
       (null
        (nthcdr 2 V4420)))))
    (shen/hd
     (nthcdr 1 V4420)))
   (shen/true
    (shen/fail))))
(defun shen/fail nil 'shen\.fail!)
(defun shen/<!>
    (V4428)
  (shen/cond
   ((shen/and
     (shen/cons\? V4428)
     (shen/and
      (shen/cons\?
       (nthcdr 1 V4428))
      (shen/internal/predicate->shen
       (null
        (nthcdr 2 V4428)))))
    (list nil
          (shen/hd V4428)))
   (shen/true
    (shen/fail))))
(defun shen/<e>
    (V4434)
  (shen/cond
   ((shen/and
     (shen/cons\? V4434)
     (shen/and
      (shen/cons\?
       (nthcdr 1 V4434))
      (shen/internal/predicate->shen
       (null
        (nthcdr 2 V4434)))))
    (list
     (shen/hd V4434)
     nil))
   (shen/true
    (shen/shen\.f_error '<e>))))
(defun shen/shen\.read-char-code
    (V2358)
  (shen/read-byte V2358))
(defun shen/read-file-as-bytelist
    (V2360)
  (shen/shen\.read-file-as-Xlist V2360
                                 (shen/lambda S
                                              (shen/read-byte S))))
(defun shen/shen\.read-file-as-charlist
    (V2362)
  (shen/shen\.read-file-as-Xlist V2362
                                 (shen/lambda S
                                              (shen/shen\.read-char-code S))))
(defun shen/shen\.read-file-as-Xlist
    (V2365 V2366)
  (shen/let Stream
            (shen/open V2365 'in)
            (shen/let X
                      (shen/internal/apply-higher-order-function V2366
                                                                 (list Stream))
                      (shen/let Xs
                                (shen/shen\.read-file-as-Xlist-help Stream V2366 X nil)
                                (shen/let Close
                                          (shen/close Stream)
                                          (shen/reverse Xs))))))
(defun shen/shen\.read-file-as-Xlist-help
    (V2371 V2372 V2373 V2374)
  (cl-flet
      ((tail-trampoline
        (V2371 V2372 V2373 V2374)
        (shen/cond
         ((shen/= -1 V2373)
          V2374)
         (shen/true
          (vector
           (list V2371 V2372
                 (shen/internal/apply-higher-order-function V2372
                                                            (list V2371))
                 (append
                  (list V2373)
                  V2374)))))))
    (let
        ((result
          (funcall #'tail-trampoline V2371 V2372 V2373 V2374)))
      (while
          (vectorp result)
        (setq result
              (apply #'tail-trampoline
                     (aref result 0))))
      result)))
(defun shen/read-file-as-string
    (V2376)
  (shen/let Stream
            (shen/open V2376 'in)
            (shen/shen\.rfas-h Stream
                               (shen/shen\.read-char-code Stream)
                               "")))
(defun shen/shen\.rfas-h
    (V2380 V2381 V2382)
  (cl-flet
      ((tail-trampoline
        (V2380 V2381 V2382)
        (shen/cond
         ((shen/= -1 V2381)
          (shen/do
           (shen/close V2380)
           V2382))
         (shen/true
          (vector
           (list V2380
                 (shen/shen\.read-char-code V2380)
                 (shen/cn V2382
                          (shen/n->string V2381))))))))
    (let
        ((result
          (funcall #'tail-trampoline V2380 V2381 V2382)))
      (while
          (vectorp result)
        (setq result
              (apply #'tail-trampoline
                     (aref result 0))))
      result)))
(defun shen/input
    (V2384)
  (shen/eval-kl
   (shen/read V2384)))
(defun shen/input+
    (V2387 V2388)
  (shen/let Mono\?
            (shen/shen\.monotype V2387)
            (shen/let Input
                      (shen/read V2388)
                      (shen/if
                       (shen/= 'false
                               (shen/shen\.typecheck Input
                                                     (shen/shen\.demodulate V2387)))
                       (shen/simple-error
                        (shen/cn "type error: "
                                 (shen/shen\.app Input
                                                 (shen/cn " is not of type "
                                                          (shen/shen\.app V2387 "\n" 'shen\.r))
                                                 'shen\.r)))
                       (shen/eval-kl Input)))))
(defun shen/shen\.monotype
    (V2390)
  (shen/cond
   ((shen/cons\? V2390)
    (shen/map
     (shen/lambda Z
                  (shen/shen\.monotype Z))
     V2390))
   (shen/true
    (shen/if
     (shen/variable\? V2390)
     (shen/simple-error
      (shen/cn "input+ expects a monotype: not "
               (shen/shen\.app V2390 "\n" 'shen\.a)))
     V2390))))
(defun shen/read
    (V2392)
  (shen/hd
   (shen/shen\.read-loop V2392
                         (shen/shen\.read-char-code V2392)
                         nil)))
(defun shen/it nil
  (shen/value 'shen\.*it*))
(defun shen/shen\.read-loop
    (V2400 V2401 V2402)
  (cl-flet
      ((tail-trampoline
        (V2400 V2401 V2402)
        (shen/cond
         ((shen/= 94 V2401)
          (shen/simple-error "read aborted"))
         ((shen/= -1 V2401)
          (shen/if
           (shen/empty\? V2402)
           (shen/simple-error "error: empty stream")
           (shen/compile
            (shen/lambda X
                         (shen/shen\.<st_input> X))
            V2402
            (shen/lambda E E))))
         ((shen/shen\.terminator\? V2401)
          (shen/let AllChars
                    (shen/append V2402
                                 (list V2401))
                    (shen/let It
                              (shen/shen\.record-it AllChars)
                              (shen/let Read
                                        (shen/compile
                                         (shen/lambda X
                                                      (shen/shen\.<st_input> X))
                                         AllChars
                                         (shen/lambda E 'shen\.nextbyte))
                                        (shen/if
                                         (shen/or
                                          (shen/= Read 'shen\.nextbyte)
                                          (shen/empty\? Read))
                                         (vector
                                          (list V2400
                                                (shen/shen\.read-char-code V2400)
                                                AllChars))
                                         Read)))))
         (shen/true
          (vector
           (list V2400
                 (shen/shen\.read-char-code V2400)
                 (shen/append V2402
                              (list V2401))))))))
    (let
        ((result
          (funcall #'tail-trampoline V2400 V2401 V2402)))
      (while
          (vectorp result)
        (setq result
              (apply #'tail-trampoline
                     (aref result 0))))
      result)))
(defun shen/shen\.terminator\?
    (V2404)
  (shen/element\? V2404
                  (list 9 10 13 32 34 41 93)))
(defun shen/lineread
    (V2406)
  (shen/shen\.lineread-loop
   (shen/shen\.read-char-code V2406)
   nil V2406))
(defun shen/shen\.lineread-loop
    (V2411 V2412 V2413)
  (cl-flet
      ((tail-trampoline
        (V2411 V2412 V2413)
        (shen/cond
         ((shen/= -1 V2411)
          (shen/if
           (shen/empty\? V2412)
           (shen/simple-error "empty stream")
           (shen/compile
            (shen/lambda X
                         (shen/shen\.<st_input> X))
            V2412
            (shen/lambda E E))))
         ((shen/= V2411
                  (shen/shen\.hat))
          (shen/simple-error "line read aborted"))
         ((shen/element\? V2411
                          (list
                           (shen/shen\.newline)
                           (shen/shen\.carriage-return)))
          (shen/let Line
                    (shen/compile
                     (shen/lambda X
                                  (shen/shen\.<st_input> X))
                     V2412
                     (shen/lambda E 'shen\.nextline))
                    (shen/let It
                              (shen/shen\.record-it V2412)
                              (shen/if
                               (shen/or
                                (shen/= Line 'shen\.nextline)
                                (shen/empty\? Line))
                               (vector
                                (list
                                 (shen/shen\.read-char-code V2413)
                                 (shen/append V2412
                                              (list V2411))
                                 V2413))
                               Line))))
         (shen/true
          (vector
           (list
            (shen/shen\.read-char-code V2413)
            (shen/append V2412
                         (list V2411))
            V2413))))))
    (let
        ((result
          (funcall #'tail-trampoline V2411 V2412 V2413)))
      (while
          (vectorp result)
        (setq result
              (apply #'tail-trampoline
                     (aref result 0))))
      result)))
(defun shen/shen\.record-it
    (V2415)
  (shen/let TrimLeft
            (shen/shen\.trim-whitespace V2415)
            (shen/let TrimRight
                      (shen/shen\.trim-whitespace
                       (shen/reverse TrimLeft))
                      (shen/let Trimmed
                                (shen/reverse TrimRight)
                                (shen/shen\.record-it-h Trimmed)))))
(defun shen/shen\.trim-whitespace
    (V2417)
  (cl-flet
      ((tail-trampoline
        (V2417)
        (shen/cond
         ((shen/and
           (shen/cons\? V2417)
           (shen/element\?
            (shen/hd V2417)
            (list 9 10 13 32)))
          (vector
           (list
            (nthcdr 1 V2417))))
         (shen/true V2417))))
    (let
        ((result
          (funcall #'tail-trampoline V2417)))
      (while
          (vectorp result)
        (setq result
              (apply #'tail-trampoline
                     (aref result 0))))
      result)))
(defun shen/shen\.record-it-h
    (V2419)
  (shen/do
   (shen/set 'shen\.*it*
             (shen/shen\.cn-all
              (shen/map
               (shen/lambda X
                            (shen/n->string X))
               V2419)))
   V2419))
(defun shen/shen\.cn-all
    (V2421)
  (shen/cond
   ((shen/internal/predicate->shen
     (null V2421))
    "")
   ((shen/cons\? V2421)
    (shen/cn
     (shen/hd V2421)
     (shen/shen\.cn-all
      (nthcdr 1 V2421))))
   (shen/true
    (shen/shen\.f_error 'shen\.cn-all))))
(defun shen/read-file
    (V2423)
  (shen/let Charlist
            (shen/shen\.read-file-as-charlist V2423)
            (shen/compile
             (shen/lambda X
                          (shen/shen\.<st_input> X))
             Charlist
             (shen/lambda X
                          (shen/shen\.read-error X)))))
(defun shen/read-from-string
    (V2425)
  (shen/let Ns
            (shen/map
             (shen/lambda X
                          (shen/string->n X))
             (shen/explode V2425))
            (shen/compile
             (shen/lambda X
                          (shen/shen\.<st_input> X))
             Ns
             (shen/lambda X
                          (shen/shen\.read-error X)))))
(defun shen/shen\.read-error
    (V2433)
  (shen/cond
   ((shen/and
     (shen/cons\? V2433)
     (shen/and
      (shen/cons\?
       (shen/hd V2433))
      (shen/and
       (shen/cons\?
        (nthcdr 1 V2433))
       (shen/internal/predicate->shen
        (null
         (nthcdr 2 V2433))))))
    (shen/simple-error
     (shen/cn "read error here:\n\n "
              (shen/shen\.app
               (shen/shen\.compress-50 50
                                       (shen/hd V2433))
               "\n" 'shen\.a))))
   (shen/true
    (shen/simple-error "read error\n"))))
(defun shen/shen\.compress-50
    (V2440 V2441)
  (shen/cond
   ((shen/internal/predicate->shen
     (null V2441))
    "")
   ((shen/= 0 V2440)
    "")
   ((shen/cons\? V2441)
    (shen/cn
     (shen/n->string
      (shen/hd V2441))
     (shen/shen\.compress-50
      (shen/- V2440 1)
      (nthcdr 1 V2441))))
   (shen/true
    (shen/shen\.f_error 'shen\.compress-50))))
(defun shen/shen\.<st_input>
    (V2443)
  (shen/let YaccParse
            (shen/let Parse_shen\.<lsb>
                      (shen/shen\.<lsb> V2443)
                      (shen/if
                       (shen/not
                        (shen/=
                         (shen/fail)
                         Parse_shen\.<lsb>))
                       (shen/let Parse_shen\.<st_input1>
                                 (shen/shen\.<st_input1> Parse_shen\.<lsb>)
                                 (shen/if
                                  (shen/not
                                   (shen/=
                                    (shen/fail)
                                    Parse_shen\.<st_input1>))
                                  (shen/let Parse_shen\.<rsb>
                                            (shen/shen\.<rsb> Parse_shen\.<st_input1>)
                                            (shen/if
                                             (shen/not
                                              (shen/=
                                               (shen/fail)
                                               Parse_shen\.<rsb>))
                                             (shen/let Parse_shen\.<st_input2>
                                                       (shen/shen\.<st_input2> Parse_shen\.<rsb>)
                                                       (shen/if
                                                        (shen/not
                                                         (shen/=
                                                          (shen/fail)
                                                          Parse_shen\.<st_input2>))
                                                        (shen/shen\.pair
                                                         (shen/hd Parse_shen\.<st_input2>)
                                                         (append
                                                          (list
                                                           (shen/macroexpand
                                                            (shen/shen\.cons_form
                                                             (shen/shen\.hdtl Parse_shen\.<st_input1>))))
                                                          (shen/shen\.hdtl Parse_shen\.<st_input2>)))
                                                        (shen/fail)))
                                             (shen/fail)))
                                  (shen/fail)))
                       (shen/fail)))
            (shen/if
             (shen/= YaccParse
                     (shen/fail))
             (shen/let YaccParse
                       (shen/let Parse_shen\.<lrb>
                                 (shen/shen\.<lrb> V2443)
                                 (shen/if
                                  (shen/not
                                   (shen/=
                                    (shen/fail)
                                    Parse_shen\.<lrb>))
                                  (shen/let Parse_shen\.<st_input1>
                                            (shen/shen\.<st_input1> Parse_shen\.<lrb>)
                                            (shen/if
                                             (shen/not
                                              (shen/=
                                               (shen/fail)
                                               Parse_shen\.<st_input1>))
                                             (shen/let Parse_shen\.<rrb>
                                                       (shen/shen\.<rrb> Parse_shen\.<st_input1>)
                                                       (shen/if
                                                        (shen/not
                                                         (shen/=
                                                          (shen/fail)
                                                          Parse_shen\.<rrb>))
                                                        (shen/let Parse_shen\.<st_input2>
                                                                  (shen/shen\.<st_input2> Parse_shen\.<rrb>)
                                                                  (shen/if
                                                                   (shen/not
                                                                    (shen/=
                                                                     (shen/fail)
                                                                     Parse_shen\.<st_input2>))
                                                                   (shen/shen\.pair
                                                                    (shen/hd Parse_shen\.<st_input2>)
                                                                    (shen/shen\.package-macro
                                                                     (shen/macroexpand
                                                                      (shen/shen\.hdtl Parse_shen\.<st_input1>))
                                                                     (shen/shen\.hdtl Parse_shen\.<st_input2>)))
                                                                   (shen/fail)))
                                                        (shen/fail)))
                                             (shen/fail)))
                                  (shen/fail)))
                       (shen/if
                        (shen/= YaccParse
                                (shen/fail))
                        (shen/let YaccParse
                                  (shen/let Parse_shen\.<lcurly>
                                            (shen/shen\.<lcurly> V2443)
                                            (shen/if
                                             (shen/not
                                              (shen/=
                                               (shen/fail)
                                               Parse_shen\.<lcurly>))
                                             (shen/let Parse_shen\.<st_input>
                                                       (shen/shen\.<st_input> Parse_shen\.<lcurly>)
                                                       (shen/if
                                                        (shen/not
                                                         (shen/=
                                                          (shen/fail)
                                                          Parse_shen\.<st_input>))
                                                        (shen/shen\.pair
                                                         (shen/hd Parse_shen\.<st_input>)
                                                         (append
                                                          (list '{)
                                                          (shen/shen\.hdtl Parse_shen\.<st_input>)))
                                                        (shen/fail)))
                                             (shen/fail)))
                                  (shen/if
                                   (shen/= YaccParse
                                           (shen/fail))
                                   (shen/let YaccParse
                                             (shen/let Parse_shen\.<rcurly>
                                                       (shen/shen\.<rcurly> V2443)
                                                       (shen/if
                                                        (shen/not
                                                         (shen/=
                                                          (shen/fail)
                                                          Parse_shen\.<rcurly>))
                                                        (shen/let Parse_shen\.<st_input>
                                                                  (shen/shen\.<st_input> Parse_shen\.<rcurly>)
                                                                  (shen/if
                                                                   (shen/not
                                                                    (shen/=
                                                                     (shen/fail)
                                                                     Parse_shen\.<st_input>))
                                                                   (shen/shen\.pair
                                                                    (shen/hd Parse_shen\.<st_input>)
                                                                    (append
                                                                     (list '})
                                                                     (shen/shen\.hdtl Parse_shen\.<st_input>)))
                                                                   (shen/fail)))
                                                        (shen/fail)))
                                             (shen/if
                                              (shen/= YaccParse
                                                      (shen/fail))
                                              (shen/let YaccParse
                                                        (shen/let Parse_shen\.<bar>
                                                                  (shen/shen\.<bar> V2443)
                                                                  (shen/if
                                                                   (shen/not
                                                                    (shen/=
                                                                     (shen/fail)
                                                                     Parse_shen\.<bar>))
                                                                   (shen/let Parse_shen\.<st_input>
                                                                             (shen/shen\.<st_input> Parse_shen\.<bar>)
                                                                             (shen/if
                                                                              (shen/not
                                                                               (shen/=
                                                                                (shen/fail)
                                                                                Parse_shen\.<st_input>))
                                                                              (shen/shen\.pair
                                                                               (shen/hd Parse_shen\.<st_input>)
                                                                               (append
                                                                                (list 'bar!)
                                                                                (shen/shen\.hdtl Parse_shen\.<st_input>)))
                                                                              (shen/fail)))
                                                                   (shen/fail)))
                                                        (shen/if
                                                         (shen/= YaccParse
                                                                 (shen/fail))
                                                         (shen/let YaccParse
                                                                   (shen/let Parse_shen\.<semicolon>
                                                                             (shen/shen\.<semicolon> V2443)
                                                                             (shen/if
                                                                              (shen/not
                                                                               (shen/=
                                                                                (shen/fail)
                                                                                Parse_shen\.<semicolon>))
                                                                              (shen/let Parse_shen\.<st_input>
                                                                                        (shen/shen\.<st_input> Parse_shen\.<semicolon>)
                                                                                        (shen/if
                                                                                         (shen/not
                                                                                          (shen/=
                                                                                           (shen/fail)
                                                                                           Parse_shen\.<st_input>))
                                                                                         (shen/shen\.pair
                                                                                          (shen/hd Parse_shen\.<st_input>)
                                                                                          (append
                                                                                           (list '\;)
                                                                                           (shen/shen\.hdtl Parse_shen\.<st_input>)))
                                                                                         (shen/fail)))
                                                                              (shen/fail)))
                                                                   (shen/if
                                                                    (shen/= YaccParse
                                                                            (shen/fail))
                                                                    (shen/let YaccParse
                                                                              (shen/let Parse_shen\.<colon>
                                                                                        (shen/shen\.<colon> V2443)
                                                                                        (shen/if
                                                                                         (shen/not
                                                                                          (shen/=
                                                                                           (shen/fail)
                                                                                           Parse_shen\.<colon>))
                                                                                         (shen/let Parse_shen\.<equal>
                                                                                                   (shen/shen\.<equal> Parse_shen\.<colon>)
                                                                                                   (shen/if
                                                                                                    (shen/not
                                                                                                     (shen/=
                                                                                                      (shen/fail)
                                                                                                      Parse_shen\.<equal>))
                                                                                                    (shen/let Parse_shen\.<st_input>
                                                                                                              (shen/shen\.<st_input> Parse_shen\.<equal>)
                                                                                                              (shen/if
                                                                                                               (shen/not
                                                                                                                (shen/=
                                                                                                                 (shen/fail)
                                                                                                                 Parse_shen\.<st_input>))
                                                                                                               (shen/shen\.pair
                                                                                                                (shen/hd Parse_shen\.<st_input>)
                                                                                                                (append
                                                                                                                 (list ':=)
                                                                                                                 (shen/shen\.hdtl Parse_shen\.<st_input>)))
                                                                                                               (shen/fail)))
                                                                                                    (shen/fail)))
                                                                                         (shen/fail)))
                                                                              (shen/if
                                                                               (shen/= YaccParse
                                                                                       (shen/fail))
                                                                               (shen/let YaccParse
                                                                                         (shen/let Parse_shen\.<colon>
                                                                                                   (shen/shen\.<colon> V2443)
                                                                                                   (shen/if
                                                                                                    (shen/not
                                                                                                     (shen/=
                                                                                                      (shen/fail)
                                                                                                      Parse_shen\.<colon>))
                                                                                                    (shen/let Parse_shen\.<minus>
                                                                                                              (shen/shen\.<minus> Parse_shen\.<colon>)
                                                                                                              (shen/if
                                                                                                               (shen/not
                                                                                                                (shen/=
                                                                                                                 (shen/fail)
                                                                                                                 Parse_shen\.<minus>))
                                                                                                               (shen/let Parse_shen\.<st_input>
                                                                                                                         (shen/shen\.<st_input> Parse_shen\.<minus>)
                                                                                                                         (shen/if
                                                                                                                          (shen/not
                                                                                                                           (shen/=
                                                                                                                            (shen/fail)
                                                                                                                            Parse_shen\.<st_input>))
                                                                                                                          (shen/shen\.pair
                                                                                                                           (shen/hd Parse_shen\.<st_input>)
                                                                                                                           (append
                                                                                                                            (list ':-)
                                                                                                                            (shen/shen\.hdtl Parse_shen\.<st_input>)))
                                                                                                                          (shen/fail)))
                                                                                                               (shen/fail)))
                                                                                                    (shen/fail)))
                                                                                         (shen/if
                                                                                          (shen/= YaccParse
                                                                                                  (shen/fail))
                                                                                          (shen/let YaccParse
                                                                                                    (shen/let Parse_shen\.<colon>
                                                                                                              (shen/shen\.<colon> V2443)
                                                                                                              (shen/if
                                                                                                               (shen/not
                                                                                                                (shen/=
                                                                                                                 (shen/fail)
                                                                                                                 Parse_shen\.<colon>))
                                                                                                               (shen/let Parse_shen\.<st_input>
                                                                                                                         (shen/shen\.<st_input> Parse_shen\.<colon>)
                                                                                                                         (shen/if
                                                                                                                          (shen/not
                                                                                                                           (shen/=
                                                                                                                            (shen/fail)
                                                                                                                            Parse_shen\.<st_input>))
                                                                                                                          (shen/shen\.pair
                                                                                                                           (shen/hd Parse_shen\.<st_input>)
                                                                                                                           (append
                                                                                                                            (list ':)
                                                                                                                            (shen/shen\.hdtl Parse_shen\.<st_input>)))
                                                                                                                          (shen/fail)))
                                                                                                               (shen/fail)))
                                                                                                    (shen/if
                                                                                                     (shen/= YaccParse
                                                                                                             (shen/fail))
                                                                                                     (shen/let YaccParse
                                                                                                               (shen/let Parse_shen\.<comma>
                                                                                                                         (shen/shen\.<comma> V2443)
                                                                                                                         (shen/if
                                                                                                                          (shen/not
                                                                                                                           (shen/=
                                                                                                                            (shen/fail)
                                                                                                                            Parse_shen\.<comma>))
                                                                                                                          (shen/let Parse_shen\.<st_input>
                                                                                                                                    (shen/shen\.<st_input> Parse_shen\.<comma>)
                                                                                                                                    (shen/if
                                                                                                                                     (shen/not
                                                                                                                                      (shen/=
                                                                                                                                       (shen/fail)
                                                                                                                                       Parse_shen\.<st_input>))
                                                                                                                                     (shen/shen\.pair
                                                                                                                                      (shen/hd Parse_shen\.<st_input>)
                                                                                                                                      (append
                                                                                                                                       (list
                                                                                                                                        (shen/intern ","))
                                                                                                                                       (shen/shen\.hdtl Parse_shen\.<st_input>)))
                                                                                                                                     (shen/fail)))
                                                                                                                          (shen/fail)))
                                                                                                               (shen/if
                                                                                                                (shen/= YaccParse
                                                                                                                        (shen/fail))
                                                                                                                (shen/let YaccParse
                                                                                                                          (shen/let Parse_shen\.<comment>
                                                                                                                                    (shen/shen\.<comment> V2443)
                                                                                                                                    (shen/if
                                                                                                                                     (shen/not
                                                                                                                                      (shen/=
                                                                                                                                       (shen/fail)
                                                                                                                                       Parse_shen\.<comment>))
                                                                                                                                     (shen/let Parse_shen\.<st_input>
                                                                                                                                               (shen/shen\.<st_input> Parse_shen\.<comment>)
                                                                                                                                               (shen/if
                                                                                                                                                (shen/not
                                                                                                                                                 (shen/=
                                                                                                                                                  (shen/fail)
                                                                                                                                                  Parse_shen\.<st_input>))
                                                                                                                                                (shen/shen\.pair
                                                                                                                                                 (shen/hd Parse_shen\.<st_input>)
                                                                                                                                                 (shen/shen\.hdtl Parse_shen\.<st_input>))
                                                                                                                                                (shen/fail)))
                                                                                                                                     (shen/fail)))
                                                                                                                          (shen/if
                                                                                                                           (shen/= YaccParse
                                                                                                                                   (shen/fail))
                                                                                                                           (shen/let YaccParse
                                                                                                                                     (shen/let Parse_shen\.<atom>
                                                                                                                                               (shen/shen\.<atom> V2443)
                                                                                                                                               (shen/if
                                                                                                                                                (shen/not
                                                                                                                                                 (shen/=
                                                                                                                                                  (shen/fail)
                                                                                                                                                  Parse_shen\.<atom>))
                                                                                                                                                (shen/let Parse_shen\.<st_input>
                                                                                                                                                          (shen/shen\.<st_input> Parse_shen\.<atom>)
                                                                                                                                                          (shen/if
                                                                                                                                                           (shen/not
                                                                                                                                                            (shen/=
                                                                                                                                                             (shen/fail)
                                                                                                                                                             Parse_shen\.<st_input>))
                                                                                                                                                           (shen/shen\.pair
                                                                                                                                                            (shen/hd Parse_shen\.<st_input>)
                                                                                                                                                            (append
                                                                                                                                                             (list
                                                                                                                                                              (shen/macroexpand
                                                                                                                                                               (shen/shen\.hdtl Parse_shen\.<atom>)))
                                                                                                                                                             (shen/shen\.hdtl Parse_shen\.<st_input>)))
                                                                                                                                                           (shen/fail)))
                                                                                                                                                (shen/fail)))
                                                                                                                                     (shen/if
                                                                                                                                      (shen/= YaccParse
                                                                                                                                              (shen/fail))
                                                                                                                                      (shen/let YaccParse
                                                                                                                                                (shen/let Parse_shen\.<whitespaces>
                                                                                                                                                          (shen/shen\.<whitespaces> V2443)
                                                                                                                                                          (shen/if
                                                                                                                                                           (shen/not
                                                                                                                                                            (shen/=
                                                                                                                                                             (shen/fail)
                                                                                                                                                             Parse_shen\.<whitespaces>))
                                                                                                                                                           (shen/let Parse_shen\.<st_input>
                                                                                                                                                                     (shen/shen\.<st_input> Parse_shen\.<whitespaces>)
                                                                                                                                                                     (shen/if
                                                                                                                                                                      (shen/not
                                                                                                                                                                       (shen/=
                                                                                                                                                                        (shen/fail)
                                                                                                                                                                        Parse_shen\.<st_input>))
                                                                                                                                                                      (shen/shen\.pair
                                                                                                                                                                       (shen/hd Parse_shen\.<st_input>)
                                                                                                                                                                       (shen/shen\.hdtl Parse_shen\.<st_input>))
                                                                                                                                                                      (shen/fail)))
                                                                                                                                                           (shen/fail)))
                                                                                                                                                (shen/if
                                                                                                                                                 (shen/= YaccParse
                                                                                                                                                         (shen/fail))
                                                                                                                                                 (shen/let Parse_<e>
                                                                                                                                                           (shen/<e> V2443)
                                                                                                                                                           (shen/if
                                                                                                                                                            (shen/not
                                                                                                                                                             (shen/=
                                                                                                                                                              (shen/fail)
                                                                                                                                                              Parse_<e>))
                                                                                                                                                            (shen/shen\.pair
                                                                                                                                                             (shen/hd Parse_<e>)
                                                                                                                                                             nil)
                                                                                                                                                            (shen/fail)))
                                                                                                                                                 YaccParse))
                                                                                                                                      YaccParse))
                                                                                                                           YaccParse))
                                                                                                                YaccParse))
                                                                                                     YaccParse))
                                                                                          YaccParse))
                                                                               YaccParse))
                                                                    YaccParse))
                                                         YaccParse))
                                              YaccParse))
                                   YaccParse))
                        YaccParse))
             YaccParse)))
(defun shen/shen\.<lsb>
    (V2445)
  (shen/if
   (shen/and
    (shen/cons\?
     (shen/hd V2445))
    (shen/= 91
            (shen/hd
             (shen/hd V2445))))
   (shen/shen\.pair
    (shen/hd
     (shen/shen\.pair
      (nthcdr 1
              (shen/hd V2445))
      (shen/shen\.hdtl V2445)))
    'shen\.skip)
   (shen/fail)))
(defun shen/shen\.<rsb>
    (V2447)
  (shen/if
   (shen/and
    (shen/cons\?
     (shen/hd V2447))
    (shen/= 93
            (shen/hd
             (shen/hd V2447))))
   (shen/shen\.pair
    (shen/hd
     (shen/shen\.pair
      (nthcdr 1
              (shen/hd V2447))
      (shen/shen\.hdtl V2447)))
    'shen\.skip)
   (shen/fail)))
(defun shen/shen\.<lcurly>
    (V2449)
  (shen/if
   (shen/and
    (shen/cons\?
     (shen/hd V2449))
    (shen/= 123
            (shen/hd
             (shen/hd V2449))))
   (shen/shen\.pair
    (shen/hd
     (shen/shen\.pair
      (nthcdr 1
              (shen/hd V2449))
      (shen/shen\.hdtl V2449)))
    'shen\.skip)
   (shen/fail)))
(defun shen/shen\.<rcurly>
    (V2451)
  (shen/if
   (shen/and
    (shen/cons\?
     (shen/hd V2451))
    (shen/= 125
            (shen/hd
             (shen/hd V2451))))
   (shen/shen\.pair
    (shen/hd
     (shen/shen\.pair
      (nthcdr 1
              (shen/hd V2451))
      (shen/shen\.hdtl V2451)))
    'shen\.skip)
   (shen/fail)))
(defun shen/shen\.<bar>
    (V2453)
  (shen/if
   (shen/and
    (shen/cons\?
     (shen/hd V2453))
    (shen/= 124
            (shen/hd
             (shen/hd V2453))))
   (shen/shen\.pair
    (shen/hd
     (shen/shen\.pair
      (nthcdr 1
              (shen/hd V2453))
      (shen/shen\.hdtl V2453)))
    'shen\.skip)
   (shen/fail)))
(defun shen/shen\.<semicolon>
    (V2455)
  (shen/if
   (shen/and
    (shen/cons\?
     (shen/hd V2455))
    (shen/= 59
            (shen/hd
             (shen/hd V2455))))
   (shen/shen\.pair
    (shen/hd
     (shen/shen\.pair
      (nthcdr 1
              (shen/hd V2455))
      (shen/shen\.hdtl V2455)))
    'shen\.skip)
   (shen/fail)))
(defun shen/shen\.<colon>
    (V2457)
  (shen/if
   (shen/and
    (shen/cons\?
     (shen/hd V2457))
    (shen/= 58
            (shen/hd
             (shen/hd V2457))))
   (shen/shen\.pair
    (shen/hd
     (shen/shen\.pair
      (nthcdr 1
              (shen/hd V2457))
      (shen/shen\.hdtl V2457)))
    'shen\.skip)
   (shen/fail)))
(defun shen/shen\.<comma>
    (V2459)
  (shen/if
   (shen/and
    (shen/cons\?
     (shen/hd V2459))
    (shen/= 44
            (shen/hd
             (shen/hd V2459))))
   (shen/shen\.pair
    (shen/hd
     (shen/shen\.pair
      (nthcdr 1
              (shen/hd V2459))
      (shen/shen\.hdtl V2459)))
    'shen\.skip)
   (shen/fail)))
(defun shen/shen\.<equal>
    (V2461)
  (shen/if
   (shen/and
    (shen/cons\?
     (shen/hd V2461))
    (shen/= 61
            (shen/hd
             (shen/hd V2461))))
   (shen/shen\.pair
    (shen/hd
     (shen/shen\.pair
      (nthcdr 1
              (shen/hd V2461))
      (shen/shen\.hdtl V2461)))
    'shen\.skip)
   (shen/fail)))
(defun shen/shen\.<minus>
    (V2463)
  (shen/if
   (shen/and
    (shen/cons\?
     (shen/hd V2463))
    (shen/= 45
            (shen/hd
             (shen/hd V2463))))
   (shen/shen\.pair
    (shen/hd
     (shen/shen\.pair
      (nthcdr 1
              (shen/hd V2463))
      (shen/shen\.hdtl V2463)))
    'shen\.skip)
   (shen/fail)))
(defun shen/shen\.<lrb>
    (V2465)
  (shen/if
   (shen/and
    (shen/cons\?
     (shen/hd V2465))
    (shen/= 40
            (shen/hd
             (shen/hd V2465))))
   (shen/shen\.pair
    (shen/hd
     (shen/shen\.pair
      (nthcdr 1
              (shen/hd V2465))
      (shen/shen\.hdtl V2465)))
    'shen\.skip)
   (shen/fail)))
(defun shen/shen\.<rrb>
    (V2467)
  (shen/if
   (shen/and
    (shen/cons\?
     (shen/hd V2467))
    (shen/= 41
            (shen/hd
             (shen/hd V2467))))
   (shen/shen\.pair
    (shen/hd
     (shen/shen\.pair
      (nthcdr 1
              (shen/hd V2467))
      (shen/shen\.hdtl V2467)))
    'shen\.skip)
   (shen/fail)))
(defun shen/shen\.<atom>
    (V2469)
  (shen/let YaccParse
            (shen/let Parse_shen\.<str>
                      (shen/shen\.<str> V2469)
                      (shen/if
                       (shen/not
                        (shen/=
                         (shen/fail)
                         Parse_shen\.<str>))
                       (shen/shen\.pair
                        (shen/hd Parse_shen\.<str>)
                        (shen/shen\.control-chars
                         (shen/shen\.hdtl Parse_shen\.<str>)))
                       (shen/fail)))
            (shen/if
             (shen/= YaccParse
                     (shen/fail))
             (shen/let YaccParse
                       (shen/let Parse_shen\.<number>
                                 (shen/shen\.<number> V2469)
                                 (shen/if
                                  (shen/not
                                   (shen/=
                                    (shen/fail)
                                    Parse_shen\.<number>))
                                  (shen/shen\.pair
                                   (shen/hd Parse_shen\.<number>)
                                   (shen/shen\.hdtl Parse_shen\.<number>))
                                  (shen/fail)))
                       (shen/if
                        (shen/= YaccParse
                                (shen/fail))
                        (shen/let Parse_shen\.<sym>
                                  (shen/shen\.<sym> V2469)
                                  (shen/if
                                   (shen/not
                                    (shen/=
                                     (shen/fail)
                                     Parse_shen\.<sym>))
                                   (shen/shen\.pair
                                    (shen/hd Parse_shen\.<sym>)
                                    (shen/if
                                     (shen/=
                                      (shen/shen\.hdtl Parse_shen\.<sym>)
                                      "<>")
                                     (list 'vector 0)
                                     (shen/intern
                                      (shen/shen\.hdtl Parse_shen\.<sym>))))
                                   (shen/fail)))
                        YaccParse))
             YaccParse)))
(defun shen/shen\.control-chars
    (V2471)
  (shen/cond
   ((shen/internal/predicate->shen
     (null V2471))
    "")
   ((shen/and
     (shen/cons\? V2471)
     (shen/and
      (shen/= "c"
              (shen/hd V2471))
      (shen/and
       (shen/cons\?
        (nthcdr 1 V2471))
       (shen/= "#"
               (shen/hd
                (nthcdr 1 V2471))))))
    (shen/let CodePoint
              (shen/shen\.code-point
               (nthcdr 2 V2471))
              (shen/let AfterCodePoint
                        (shen/shen\.after-codepoint
                         (nthcdr 2 V2471))
                        (concat
                         (concat
                          (shen/n->string
                           (shen/shen\.decimalise CodePoint)))
                         (shen/shen\.control-chars AfterCodePoint)))))
   ((shen/cons\? V2471)
    (concat
     (concat
      (shen/hd V2471))
     (shen/shen\.control-chars
      (nthcdr 1 V2471))))
   (shen/true
    (shen/shen\.f_error 'shen\.control-chars))))
(defun shen/shen\.code-point
    (V2475)
  (shen/cond
   ((shen/and
     (shen/cons\? V2475)
     (shen/= ";"
             (shen/hd V2475)))
    "")
   ((shen/and
     (shen/cons\? V2475)
     (shen/element\?
      (shen/hd V2475)
      (list "0" "1" "2" "3" "4" "5" "6" "7" "8" "9" "0")))
    (append
     (list
      (shen/hd V2475))
     (shen/shen\.code-point
      (nthcdr 1 V2475))))
   (shen/true
    (shen/simple-error
     (shen/cn "code point parse error "
              (shen/shen\.app V2475 "\n" 'shen\.a))))))
(defun shen/shen\.after-codepoint
    (V2481)
  (cl-flet
      ((tail-trampoline
        (V2481)
        (shen/cond
         ((shen/internal/predicate->shen
           (null V2481))
          nil)
         ((shen/and
           (shen/cons\? V2481)
           (shen/= ";"
                   (shen/hd V2481)))
          (nthcdr 1 V2481))
         ((shen/cons\? V2481)
          (vector
           (list
            (nthcdr 1 V2481))))
         (shen/true
          (shen/shen\.f_error 'shen\.after-codepoint)))))
    (let
        ((result
          (funcall #'tail-trampoline V2481)))
      (while
          (vectorp result)
        (setq result
              (apply #'tail-trampoline
                     (aref result 0))))
      result)))
(defun shen/shen\.decimalise
    (V2483)
  (shen/shen\.pre
   (shen/reverse
    (shen/shen\.digits->integers V2483))
   0))
(defun shen/shen\.digits->integers
    (V2489)
  (shen/cond
   ((shen/and
     (shen/cons\? V2489)
     (shen/= "0"
             (shen/hd V2489)))
    (append
     (list 0)
     (shen/shen\.digits->integers
      (nthcdr 1 V2489))))
   ((shen/and
     (shen/cons\? V2489)
     (shen/= "1"
             (shen/hd V2489)))
    (append
     (list 1)
     (shen/shen\.digits->integers
      (nthcdr 1 V2489))))
   ((shen/and
     (shen/cons\? V2489)
     (shen/= "2"
             (shen/hd V2489)))
    (append
     (list 2)
     (shen/shen\.digits->integers
      (nthcdr 1 V2489))))
   ((shen/and
     (shen/cons\? V2489)
     (shen/= "3"
             (shen/hd V2489)))
    (append
     (list 3)
     (shen/shen\.digits->integers
      (nthcdr 1 V2489))))
   ((shen/and
     (shen/cons\? V2489)
     (shen/= "4"
             (shen/hd V2489)))
    (append
     (list 4)
     (shen/shen\.digits->integers
      (nthcdr 1 V2489))))
   ((shen/and
     (shen/cons\? V2489)
     (shen/= "5"
             (shen/hd V2489)))
    (append
     (list 5)
     (shen/shen\.digits->integers
      (nthcdr 1 V2489))))
   ((shen/and
     (shen/cons\? V2489)
     (shen/= "6"
             (shen/hd V2489)))
    (append
     (list 6)
     (shen/shen\.digits->integers
      (nthcdr 1 V2489))))
   ((shen/and
     (shen/cons\? V2489)
     (shen/= "7"
             (shen/hd V2489)))
    (append
     (list 7)
     (shen/shen\.digits->integers
      (nthcdr 1 V2489))))
   ((shen/and
     (shen/cons\? V2489)
     (shen/= "8"
             (shen/hd V2489)))
    (append
     (list 8)
     (shen/shen\.digits->integers
      (nthcdr 1 V2489))))
   ((shen/and
     (shen/cons\? V2489)
     (shen/= "9"
             (shen/hd V2489)))
    (append
     (list 9)
     (shen/shen\.digits->integers
      (nthcdr 1 V2489))))
   (shen/true nil)))
(defun shen/shen\.<sym>
    (V2491)
  (shen/let Parse_shen\.<alpha>
            (shen/shen\.<alpha> V2491)
            (shen/if
             (shen/not
              (shen/=
               (shen/fail)
               Parse_shen\.<alpha>))
             (shen/let Parse_shen\.<alphanums>
                       (shen/shen\.<alphanums> Parse_shen\.<alpha>)
                       (shen/if
                        (shen/not
                         (shen/=
                          (shen/fail)
                          Parse_shen\.<alphanums>))
                        (shen/shen\.pair
                         (shen/hd Parse_shen\.<alphanums>)
                         (concat
                          (concat
                           (shen/shen\.hdtl Parse_shen\.<alpha>))
                          (shen/shen\.hdtl Parse_shen\.<alphanums>)))
                        (shen/fail)))
             (shen/fail))))
(defun shen/shen\.<alphanums>
    (V2493)
  (shen/let YaccParse
            (shen/let Parse_shen\.<alphanum>
                      (shen/shen\.<alphanum> V2493)
                      (shen/if
                       (shen/not
                        (shen/=
                         (shen/fail)
                         Parse_shen\.<alphanum>))
                       (shen/let Parse_shen\.<alphanums>
                                 (shen/shen\.<alphanums> Parse_shen\.<alphanum>)
                                 (shen/if
                                  (shen/not
                                   (shen/=
                                    (shen/fail)
                                    Parse_shen\.<alphanums>))
                                  (shen/shen\.pair
                                   (shen/hd Parse_shen\.<alphanums>)
                                   (concat
                                    (concat
                                     (shen/shen\.hdtl Parse_shen\.<alphanum>))
                                    (shen/shen\.hdtl Parse_shen\.<alphanums>)))
                                  (shen/fail)))
                       (shen/fail)))
            (shen/if
             (shen/= YaccParse
                     (shen/fail))
             (shen/let Parse_<e>
                       (shen/<e> V2493)
                       (shen/if
                        (shen/not
                         (shen/=
                          (shen/fail)
                          Parse_<e>))
                        (shen/shen\.pair
                         (shen/hd Parse_<e>)
                         "")
                        (shen/fail)))
             YaccParse)))
(defun shen/shen\.<alphanum>
    (V2495)
  (shen/let YaccParse
            (shen/let Parse_shen\.<alpha>
                      (shen/shen\.<alpha> V2495)
                      (shen/if
                       (shen/not
                        (shen/=
                         (shen/fail)
                         Parse_shen\.<alpha>))
                       (shen/shen\.pair
                        (shen/hd Parse_shen\.<alpha>)
                        (shen/shen\.hdtl Parse_shen\.<alpha>))
                       (shen/fail)))
            (shen/if
             (shen/= YaccParse
                     (shen/fail))
             (shen/let Parse_shen\.<num>
                       (shen/shen\.<num> V2495)
                       (shen/if
                        (shen/not
                         (shen/=
                          (shen/fail)
                          Parse_shen\.<num>))
                        (shen/shen\.pair
                         (shen/hd Parse_shen\.<num>)
                         (shen/shen\.hdtl Parse_shen\.<num>))
                        (shen/fail)))
             YaccParse)))
(defun shen/shen\.<num>
    (V2497)
  (shen/if
   (shen/cons\?
    (shen/hd V2497))
   (shen/let Parse_Char
             (shen/hd
              (shen/hd V2497))
             (shen/if
              (shen/shen\.numbyte\? Parse_Char)
              (shen/shen\.pair
               (shen/hd
                (shen/shen\.pair
                 (nthcdr 1
                         (shen/hd V2497))
                 (shen/shen\.hdtl V2497)))
               (shen/n->string Parse_Char))
              (shen/fail)))
   (shen/fail)))
(defun shen/shen\.numbyte\?
    (V2503)
  (shen/cond
   ((shen/= 48 V2503)
    'true)
   ((shen/= 49 V2503)
    'true)
   ((shen/= 50 V2503)
    'true)
   ((shen/= 51 V2503)
    'true)
   ((shen/= 52 V2503)
    'true)
   ((shen/= 53 V2503)
    'true)
   ((shen/= 54 V2503)
    'true)
   ((shen/= 55 V2503)
    'true)
   ((shen/= 56 V2503)
    'true)
   ((shen/= 57 V2503)
    'true)
   (shen/true 'false)))
(defun shen/shen\.<alpha>
    (V2505)
  (shen/if
   (shen/cons\?
    (shen/hd V2505))
   (shen/let Parse_Char
             (shen/hd
              (shen/hd V2505))
             (shen/if
              (shen/shen\.symbol-code\? Parse_Char)
              (shen/shen\.pair
               (shen/hd
                (shen/shen\.pair
                 (nthcdr 1
                         (shen/hd V2505))
                 (shen/shen\.hdtl V2505)))
               (shen/n->string Parse_Char))
              (shen/fail)))
   (shen/fail)))
(defun shen/shen\.symbol-code\?
    (V2507)
  (shen/or
   (shen/= V2507 126)
   (shen/or
    (shen/and
     (shen/> V2507 94)
     (shen/< V2507 123))
    (shen/or
     (shen/and
      (shen/> V2507 59)
      (shen/< V2507 91))
     (shen/or
      (shen/and
       (shen/> V2507 41)
       (shen/and
        (shen/< V2507 58)
        (shen/not
         (shen/= V2507 44))))
      (shen/or
       (shen/and
        (shen/> V2507 34)
        (shen/< V2507 40))
       (shen/= V2507 33)))))))
(defun shen/shen\.<str>
    (V2509)
  (shen/let Parse_shen\.<dbq>
            (shen/shen\.<dbq> V2509)
            (shen/if
             (shen/not
              (shen/=
               (shen/fail)
               Parse_shen\.<dbq>))
             (shen/let Parse_shen\.<strcontents>
                       (shen/shen\.<strcontents> Parse_shen\.<dbq>)
                       (shen/if
                        (shen/not
                         (shen/=
                          (shen/fail)
                          Parse_shen\.<strcontents>))
                        (shen/let Parse_shen\.<dbq>
                                  (shen/shen\.<dbq> Parse_shen\.<strcontents>)
                                  (shen/if
                                   (shen/not
                                    (shen/=
                                     (shen/fail)
                                     Parse_shen\.<dbq>))
                                   (shen/shen\.pair
                                    (shen/hd Parse_shen\.<dbq>)
                                    (shen/shen\.hdtl Parse_shen\.<strcontents>))
                                   (shen/fail)))
                        (shen/fail)))
             (shen/fail))))
(defun shen/shen\.<dbq>
    (V2511)
  (shen/if
   (shen/cons\?
    (shen/hd V2511))
   (shen/let Parse_Char
             (shen/hd
              (shen/hd V2511))
             (shen/if
              (shen/= Parse_Char 34)
              (shen/shen\.pair
               (shen/hd
                (shen/shen\.pair
                 (nthcdr 1
                         (shen/hd V2511))
                 (shen/shen\.hdtl V2511)))
               Parse_Char)
              (shen/fail)))
   (shen/fail)))
(defun shen/shen\.<strcontents>
    (V2513)
  (shen/let YaccParse
            (shen/let Parse_shen\.<strc>
                      (shen/shen\.<strc> V2513)
                      (shen/if
                       (shen/not
                        (shen/=
                         (shen/fail)
                         Parse_shen\.<strc>))
                       (shen/let Parse_shen\.<strcontents>
                                 (shen/shen\.<strcontents> Parse_shen\.<strc>)
                                 (shen/if
                                  (shen/not
                                   (shen/=
                                    (shen/fail)
                                    Parse_shen\.<strcontents>))
                                  (shen/shen\.pair
                                   (shen/hd Parse_shen\.<strcontents>)
                                   (append
                                    (list
                                     (shen/shen\.hdtl Parse_shen\.<strc>))
                                    (shen/shen\.hdtl Parse_shen\.<strcontents>)))
                                  (shen/fail)))
                       (shen/fail)))
            (shen/if
             (shen/= YaccParse
                     (shen/fail))
             (shen/let Parse_<e>
                       (shen/<e> V2513)
                       (shen/if
                        (shen/not
                         (shen/=
                          (shen/fail)
                          Parse_<e>))
                        (shen/shen\.pair
                         (shen/hd Parse_<e>)
                         nil)
                        (shen/fail)))
             YaccParse)))
(defun shen/shen\.<byte>
    (V2515)
  (shen/if
   (shen/cons\?
    (shen/hd V2515))
   (shen/let Parse_Char
             (shen/hd
              (shen/hd V2515))
             (shen/shen\.pair
              (shen/hd
               (shen/shen\.pair
                (nthcdr 1
                        (shen/hd V2515))
                (shen/shen\.hdtl V2515)))
              (shen/n->string Parse_Char)))
   (shen/fail)))
(defun shen/shen\.<strc>
    (V2517)
  (shen/if
   (shen/cons\?
    (shen/hd V2517))
   (shen/let Parse_Char
             (shen/hd
              (shen/hd V2517))
             (shen/if
              (shen/not
               (shen/= Parse_Char 34))
              (shen/shen\.pair
               (shen/hd
                (shen/shen\.pair
                 (nthcdr 1
                         (shen/hd V2517))
                 (shen/shen\.hdtl V2517)))
               (shen/n->string Parse_Char))
              (shen/fail)))
   (shen/fail)))
(defun shen/shen\.<number>
    (V2519)
  (shen/let YaccParse
            (shen/let Parse_shen\.<minus>
                      (shen/shen\.<minus> V2519)
                      (shen/if
                       (shen/not
                        (shen/=
                         (shen/fail)
                         Parse_shen\.<minus>))
                       (shen/let Parse_shen\.<number>
                                 (shen/shen\.<number> Parse_shen\.<minus>)
                                 (shen/if
                                  (shen/not
                                   (shen/=
                                    (shen/fail)
                                    Parse_shen\.<number>))
                                  (shen/shen\.pair
                                   (shen/hd Parse_shen\.<number>)
                                   (shen/- 0
                                           (shen/shen\.hdtl Parse_shen\.<number>)))
                                  (shen/fail)))
                       (shen/fail)))
            (shen/if
             (shen/= YaccParse
                     (shen/fail))
             (shen/let YaccParse
                       (shen/let Parse_shen\.<plus>
                                 (shen/shen\.<plus> V2519)
                                 (shen/if
                                  (shen/not
                                   (shen/=
                                    (shen/fail)
                                    Parse_shen\.<plus>))
                                  (shen/let Parse_shen\.<number>
                                            (shen/shen\.<number> Parse_shen\.<plus>)
                                            (shen/if
                                             (shen/not
                                              (shen/=
                                               (shen/fail)
                                               Parse_shen\.<number>))
                                             (shen/shen\.pair
                                              (shen/hd Parse_shen\.<number>)
                                              (shen/shen\.hdtl Parse_shen\.<number>))
                                             (shen/fail)))
                                  (shen/fail)))
                       (shen/if
                        (shen/= YaccParse
                                (shen/fail))
                        (shen/let YaccParse
                                  (shen/let Parse_shen\.<predigits>
                                            (shen/shen\.<predigits> V2519)
                                            (shen/if
                                             (shen/not
                                              (shen/=
                                               (shen/fail)
                                               Parse_shen\.<predigits>))
                                             (shen/let Parse_shen\.<stop>
                                                       (shen/shen\.<stop> Parse_shen\.<predigits>)
                                                       (shen/if
                                                        (shen/not
                                                         (shen/=
                                                          (shen/fail)
                                                          Parse_shen\.<stop>))
                                                        (shen/let Parse_shen\.<postdigits>
                                                                  (shen/shen\.<postdigits> Parse_shen\.<stop>)
                                                                  (shen/if
                                                                   (shen/not
                                                                    (shen/=
                                                                     (shen/fail)
                                                                     Parse_shen\.<postdigits>))
                                                                   (shen/let Parse_shen\.<E>
                                                                             (shen/shen\.<E> Parse_shen\.<postdigits>)
                                                                             (shen/if
                                                                              (shen/not
                                                                               (shen/=
                                                                                (shen/fail)
                                                                                Parse_shen\.<E>))
                                                                              (shen/let Parse_shen\.<log10>
                                                                                        (shen/shen\.<log10> Parse_shen\.<E>)
                                                                                        (shen/if
                                                                                         (shen/not
                                                                                          (shen/=
                                                                                           (shen/fail)
                                                                                           Parse_shen\.<log10>))
                                                                                         (shen/shen\.pair
                                                                                          (shen/hd Parse_shen\.<log10>)
                                                                                          (shen/*
                                                                                           (shen/shen\.expt 10
                                                                                                            (shen/shen\.hdtl Parse_shen\.<log10>))
                                                                                           (shen/+
                                                                                            (shen/shen\.pre
                                                                                             (shen/reverse
                                                                                              (shen/shen\.hdtl Parse_shen\.<predigits>))
                                                                                             0)
                                                                                            (shen/shen\.post
                                                                                             (shen/shen\.hdtl Parse_shen\.<postdigits>)
                                                                                             1))))
                                                                                         (shen/fail)))
                                                                              (shen/fail)))
                                                                   (shen/fail)))
                                                        (shen/fail)))
                                             (shen/fail)))
                                  (shen/if
                                   (shen/= YaccParse
                                           (shen/fail))
                                   (shen/let YaccParse
                                             (shen/let Parse_shen\.<digits>
                                                       (shen/shen\.<digits> V2519)
                                                       (shen/if
                                                        (shen/not
                                                         (shen/=
                                                          (shen/fail)
                                                          Parse_shen\.<digits>))
                                                        (shen/let Parse_shen\.<E>
                                                                  (shen/shen\.<E> Parse_shen\.<digits>)
                                                                  (shen/if
                                                                   (shen/not
                                                                    (shen/=
                                                                     (shen/fail)
                                                                     Parse_shen\.<E>))
                                                                   (shen/let Parse_shen\.<log10>
                                                                             (shen/shen\.<log10> Parse_shen\.<E>)
                                                                             (shen/if
                                                                              (shen/not
                                                                               (shen/=
                                                                                (shen/fail)
                                                                                Parse_shen\.<log10>))
                                                                              (shen/shen\.pair
                                                                               (shen/hd Parse_shen\.<log10>)
                                                                               (shen/*
                                                                                (shen/shen\.expt 10
                                                                                                 (shen/shen\.hdtl Parse_shen\.<log10>))
                                                                                (shen/shen\.pre
                                                                                 (shen/reverse
                                                                                  (shen/shen\.hdtl Parse_shen\.<digits>))
                                                                                 0)))
                                                                              (shen/fail)))
                                                                   (shen/fail)))
                                                        (shen/fail)))
                                             (shen/if
                                              (shen/= YaccParse
                                                      (shen/fail))
                                              (shen/let YaccParse
                                                        (shen/let Parse_shen\.<predigits>
                                                                  (shen/shen\.<predigits> V2519)
                                                                  (shen/if
                                                                   (shen/not
                                                                    (shen/=
                                                                     (shen/fail)
                                                                     Parse_shen\.<predigits>))
                                                                   (shen/let Parse_shen\.<stop>
                                                                             (shen/shen\.<stop> Parse_shen\.<predigits>)
                                                                             (shen/if
                                                                              (shen/not
                                                                               (shen/=
                                                                                (shen/fail)
                                                                                Parse_shen\.<stop>))
                                                                              (shen/let Parse_shen\.<postdigits>
                                                                                        (shen/shen\.<postdigits> Parse_shen\.<stop>)
                                                                                        (shen/if
                                                                                         (shen/not
                                                                                          (shen/=
                                                                                           (shen/fail)
                                                                                           Parse_shen\.<postdigits>))
                                                                                         (shen/shen\.pair
                                                                                          (shen/hd Parse_shen\.<postdigits>)
                                                                                          (shen/+
                                                                                           (shen/shen\.pre
                                                                                            (shen/reverse
                                                                                             (shen/shen\.hdtl Parse_shen\.<predigits>))
                                                                                            0)
                                                                                           (shen/shen\.post
                                                                                            (shen/shen\.hdtl Parse_shen\.<postdigits>)
                                                                                            1)))
                                                                                         (shen/fail)))
                                                                              (shen/fail)))
                                                                   (shen/fail)))
                                                        (shen/if
                                                         (shen/= YaccParse
                                                                 (shen/fail))
                                                         (shen/let Parse_shen\.<digits>
                                                                   (shen/shen\.<digits> V2519)
                                                                   (shen/if
                                                                    (shen/not
                                                                     (shen/=
                                                                      (shen/fail)
                                                                      Parse_shen\.<digits>))
                                                                    (shen/shen\.pair
                                                                     (shen/hd Parse_shen\.<digits>)
                                                                     (shen/shen\.pre
                                                                      (shen/reverse
                                                                       (shen/shen\.hdtl Parse_shen\.<digits>))
                                                                      0))
                                                                    (shen/fail)))
                                                         YaccParse))
                                              YaccParse))
                                   YaccParse))
                        YaccParse))
             YaccParse)))
(defun shen/shen\.<E>
    (V2521)
  (shen/if
   (shen/and
    (shen/cons\?
     (shen/hd V2521))
    (shen/= 101
            (shen/hd
             (shen/hd V2521))))
   (shen/shen\.pair
    (shen/hd
     (shen/shen\.pair
      (nthcdr 1
              (shen/hd V2521))
      (shen/shen\.hdtl V2521)))
    'shen\.skip)
   (shen/fail)))
(defun shen/shen\.<log10>
    (V2523)
  (shen/let YaccParse
            (shen/let Parse_shen\.<minus>
                      (shen/shen\.<minus> V2523)
                      (shen/if
                       (shen/not
                        (shen/=
                         (shen/fail)
                         Parse_shen\.<minus>))
                       (shen/let Parse_shen\.<digits>
                                 (shen/shen\.<digits> Parse_shen\.<minus>)
                                 (shen/if
                                  (shen/not
                                   (shen/=
                                    (shen/fail)
                                    Parse_shen\.<digits>))
                                  (shen/shen\.pair
                                   (shen/hd Parse_shen\.<digits>)
                                   (shen/- 0
                                           (shen/shen\.pre
                                            (shen/reverse
                                             (shen/shen\.hdtl Parse_shen\.<digits>))
                                            0)))
                                  (shen/fail)))
                       (shen/fail)))
            (shen/if
             (shen/= YaccParse
                     (shen/fail))
             (shen/let Parse_shen\.<digits>
                       (shen/shen\.<digits> V2523)
                       (shen/if
                        (shen/not
                         (shen/=
                          (shen/fail)
                          Parse_shen\.<digits>))
                        (shen/shen\.pair
                         (shen/hd Parse_shen\.<digits>)
                         (shen/shen\.pre
                          (shen/reverse
                           (shen/shen\.hdtl Parse_shen\.<digits>))
                          0))
                        (shen/fail)))
             YaccParse)))
(defun shen/shen\.<plus>
    (V2525)
  (shen/if
   (shen/cons\?
    (shen/hd V2525))
   (shen/let Parse_Char
             (shen/hd
              (shen/hd V2525))
             (shen/if
              (shen/= Parse_Char 43)
              (shen/shen\.pair
               (shen/hd
                (shen/shen\.pair
                 (nthcdr 1
                         (shen/hd V2525))
                 (shen/shen\.hdtl V2525)))
               Parse_Char)
              (shen/fail)))
   (shen/fail)))
(defun shen/shen\.<stop>
    (V2527)
  (shen/if
   (shen/cons\?
    (shen/hd V2527))
   (shen/let Parse_Char
             (shen/hd
              (shen/hd V2527))
             (shen/if
              (shen/= Parse_Char 46)
              (shen/shen\.pair
               (shen/hd
                (shen/shen\.pair
                 (nthcdr 1
                         (shen/hd V2527))
                 (shen/shen\.hdtl V2527)))
               Parse_Char)
              (shen/fail)))
   (shen/fail)))
(defun shen/shen\.<predigits>
    (V2529)
  (shen/let YaccParse
            (shen/let Parse_shen\.<digits>
                      (shen/shen\.<digits> V2529)
                      (shen/if
                       (shen/not
                        (shen/=
                         (shen/fail)
                         Parse_shen\.<digits>))
                       (shen/shen\.pair
                        (shen/hd Parse_shen\.<digits>)
                        (shen/shen\.hdtl Parse_shen\.<digits>))
                       (shen/fail)))
            (shen/if
             (shen/= YaccParse
                     (shen/fail))
             (shen/let Parse_<e>
                       (shen/<e> V2529)
                       (shen/if
                        (shen/not
                         (shen/=
                          (shen/fail)
                          Parse_<e>))
                        (shen/shen\.pair
                         (shen/hd Parse_<e>)
                         nil)
                        (shen/fail)))
             YaccParse)))
(defun shen/shen\.<postdigits>
    (V2531)
  (shen/let Parse_shen\.<digits>
            (shen/shen\.<digits> V2531)
            (shen/if
             (shen/not
              (shen/=
               (shen/fail)
               Parse_shen\.<digits>))
             (shen/shen\.pair
              (shen/hd Parse_shen\.<digits>)
              (shen/shen\.hdtl Parse_shen\.<digits>))
             (shen/fail))))
(defun shen/shen\.<digits>
    (V2533)
  (shen/let YaccParse
            (shen/let Parse_shen\.<digit>
                      (shen/shen\.<digit> V2533)
                      (shen/if
                       (shen/not
                        (shen/=
                         (shen/fail)
                         Parse_shen\.<digit>))
                       (shen/let Parse_shen\.<digits>
                                 (shen/shen\.<digits> Parse_shen\.<digit>)
                                 (shen/if
                                  (shen/not
                                   (shen/=
                                    (shen/fail)
                                    Parse_shen\.<digits>))
                                  (shen/shen\.pair
                                   (shen/hd Parse_shen\.<digits>)
                                   (append
                                    (list
                                     (shen/shen\.hdtl Parse_shen\.<digit>))
                                    (shen/shen\.hdtl Parse_shen\.<digits>)))
                                  (shen/fail)))
                       (shen/fail)))
            (shen/if
             (shen/= YaccParse
                     (shen/fail))
             (shen/let Parse_shen\.<digit>
                       (shen/shen\.<digit> V2533)
                       (shen/if
                        (shen/not
                         (shen/=
                          (shen/fail)
                          Parse_shen\.<digit>))
                        (shen/shen\.pair
                         (shen/hd Parse_shen\.<digit>)
                         (list
                          (shen/shen\.hdtl Parse_shen\.<digit>)))
                        (shen/fail)))
             YaccParse)))
(defun shen/shen\.<digit>
    (V2535)
  (shen/if
   (shen/cons\?
    (shen/hd V2535))
   (shen/let Parse_X
             (shen/hd
              (shen/hd V2535))
             (shen/if
              (shen/shen\.numbyte\? Parse_X)
              (shen/shen\.pair
               (shen/hd
                (shen/shen\.pair
                 (nthcdr 1
                         (shen/hd V2535))
                 (shen/shen\.hdtl V2535)))
               (shen/shen\.byte->digit Parse_X))
              (shen/fail)))
   (shen/fail)))
(defun shen/shen\.byte->digit
    (V2537)
  (shen/cond
   ((shen/= 48 V2537)
    0)
   ((shen/= 49 V2537)
    1)
   ((shen/= 50 V2537)
    2)
   ((shen/= 51 V2537)
    3)
   ((shen/= 52 V2537)
    4)
   ((shen/= 53 V2537)
    5)
   ((shen/= 54 V2537)
    6)
   ((shen/= 55 V2537)
    7)
   ((shen/= 56 V2537)
    8)
   ((shen/= 57 V2537)
    9)
   (shen/true
    (shen/shen\.f_error 'shen\.byte->digit))))
(defun shen/shen\.pre
    (V2542 V2543)
  (shen/cond
   ((shen/internal/predicate->shen
     (null V2542))
    0)
   ((shen/cons\? V2542)
    (shen/+
     (shen/*
      (shen/shen\.expt 10 V2543)
      (shen/hd V2542))
     (shen/shen\.pre
      (nthcdr 1 V2542)
      (1+ V2543))))
   (shen/true
    (shen/shen\.f_error 'shen\.pre))))
(defun shen/shen\.post
    (V2548 V2549)
  (shen/cond
   ((shen/internal/predicate->shen
     (null V2548))
    0)
   ((shen/cons\? V2548)
    (shen/+
     (shen/*
      (shen/shen\.expt 10
                       (shen/- 0 V2549))
      (shen/hd V2548))
     (shen/shen\.post
      (nthcdr 1 V2548)
      (1+ V2549))))
   (shen/true
    (shen/shen\.f_error 'shen\.post))))
(defun shen/shen\.expt
    (V2554 V2555)
  (shen/cond
   ((shen/= 0 V2555)
    1)
   ((shen/> V2555 0)
    (shen/* V2554
            (shen/shen\.expt V2554
                             (shen/- V2555 1))))
   (shen/true
    (shen/* 1
            (shen//
             (shen/shen\.expt V2554
                              (1+ V2555))
             V2554)))))
(defun shen/shen\.<st_input1>
    (V2557)
  (shen/let Parse_shen\.<st_input>
            (shen/shen\.<st_input> V2557)
            (shen/if
             (shen/not
              (shen/=
               (shen/fail)
               Parse_shen\.<st_input>))
             (shen/shen\.pair
              (shen/hd Parse_shen\.<st_input>)
              (shen/shen\.hdtl Parse_shen\.<st_input>))
             (shen/fail))))
(defun shen/shen\.<st_input2>
    (V2559)
  (shen/let Parse_shen\.<st_input>
            (shen/shen\.<st_input> V2559)
            (shen/if
             (shen/not
              (shen/=
               (shen/fail)
               Parse_shen\.<st_input>))
             (shen/shen\.pair
              (shen/hd Parse_shen\.<st_input>)
              (shen/shen\.hdtl Parse_shen\.<st_input>))
             (shen/fail))))
(defun shen/shen\.<comment>
    (V2561)
  (shen/let YaccParse
            (shen/let Parse_shen\.<singleline>
                      (shen/shen\.<singleline> V2561)
                      (shen/if
                       (shen/not
                        (shen/=
                         (shen/fail)
                         Parse_shen\.<singleline>))
                       (shen/shen\.pair
                        (shen/hd Parse_shen\.<singleline>)
                        'shen\.skip)
                       (shen/fail)))
            (shen/if
             (shen/= YaccParse
                     (shen/fail))
             (shen/let Parse_shen\.<multiline>
                       (shen/shen\.<multiline> V2561)
                       (shen/if
                        (shen/not
                         (shen/=
                          (shen/fail)
                          Parse_shen\.<multiline>))
                        (shen/shen\.pair
                         (shen/hd Parse_shen\.<multiline>)
                         'shen\.skip)
                        (shen/fail)))
             YaccParse)))
(defun shen/shen\.<singleline>
    (V2563)
  (shen/let Parse_shen\.<backslash>
            (shen/shen\.<backslash> V2563)
            (shen/if
             (shen/not
              (shen/=
               (shen/fail)
               Parse_shen\.<backslash>))
             (shen/let Parse_shen\.<backslash>
                       (shen/shen\.<backslash> Parse_shen\.<backslash>)
                       (shen/if
                        (shen/not
                         (shen/=
                          (shen/fail)
                          Parse_shen\.<backslash>))
                        (shen/let Parse_shen\.<anysingle>
                                  (shen/shen\.<anysingle> Parse_shen\.<backslash>)
                                  (shen/if
                                   (shen/not
                                    (shen/=
                                     (shen/fail)
                                     Parse_shen\.<anysingle>))
                                   (shen/let Parse_shen\.<return>
                                             (shen/shen\.<return> Parse_shen\.<anysingle>)
                                             (shen/if
                                              (shen/not
                                               (shen/=
                                                (shen/fail)
                                                Parse_shen\.<return>))
                                              (shen/shen\.pair
                                               (shen/hd Parse_shen\.<return>)
                                               'shen\.skip)
                                              (shen/fail)))
                                   (shen/fail)))
                        (shen/fail)))
             (shen/fail))))
(defun shen/shen\.<backslash>
    (V2565)
  (shen/if
   (shen/and
    (shen/cons\?
     (shen/hd V2565))
    (shen/= 92
            (shen/hd
             (shen/hd V2565))))
   (shen/shen\.pair
    (shen/hd
     (shen/shen\.pair
      (nthcdr 1
              (shen/hd V2565))
      (shen/shen\.hdtl V2565)))
    'shen\.skip)
   (shen/fail)))
(defun shen/shen\.<anysingle>
    (V2567)
  (shen/let YaccParse
            (shen/let Parse_shen\.<non-return>
                      (shen/shen\.<non-return> V2567)
                      (shen/if
                       (shen/not
                        (shen/=
                         (shen/fail)
                         Parse_shen\.<non-return>))
                       (shen/let Parse_shen\.<anysingle>
                                 (shen/shen\.<anysingle> Parse_shen\.<non-return>)
                                 (shen/if
                                  (shen/not
                                   (shen/=
                                    (shen/fail)
                                    Parse_shen\.<anysingle>))
                                  (shen/shen\.pair
                                   (shen/hd Parse_shen\.<anysingle>)
                                   'shen\.skip)
                                  (shen/fail)))
                       (shen/fail)))
            (shen/if
             (shen/= YaccParse
                     (shen/fail))
             (shen/let Parse_<e>
                       (shen/<e> V2567)
                       (shen/if
                        (shen/not
                         (shen/=
                          (shen/fail)
                          Parse_<e>))
                        (shen/shen\.pair
                         (shen/hd Parse_<e>)
                         'shen\.skip)
                        (shen/fail)))
             YaccParse)))
(defun shen/shen\.<non-return>
    (V2569)
  (shen/if
   (shen/cons\?
    (shen/hd V2569))
   (shen/let Parse_X
             (shen/hd
              (shen/hd V2569))
             (shen/if
              (shen/not
               (shen/element\? Parse_X
                               (list 10 13)))
              (shen/shen\.pair
               (shen/hd
                (shen/shen\.pair
                 (nthcdr 1
                         (shen/hd V2569))
                 (shen/shen\.hdtl V2569)))
               'shen\.skip)
              (shen/fail)))
   (shen/fail)))
(defun shen/shen\.<return>
    (V2571)
  (shen/if
   (shen/cons\?
    (shen/hd V2571))
   (shen/let Parse_X
             (shen/hd
              (shen/hd V2571))
             (shen/if
              (shen/element\? Parse_X
                              (list 10 13))
              (shen/shen\.pair
               (shen/hd
                (shen/shen\.pair
                 (nthcdr 1
                         (shen/hd V2571))
                 (shen/shen\.hdtl V2571)))
               'shen\.skip)
              (shen/fail)))
   (shen/fail)))
(defun shen/shen\.<multiline>
    (V2573)
  (shen/let Parse_shen\.<backslash>
            (shen/shen\.<backslash> V2573)
            (shen/if
             (shen/not
              (shen/=
               (shen/fail)
               Parse_shen\.<backslash>))
             (shen/let Parse_shen\.<times>
                       (shen/shen\.<times> Parse_shen\.<backslash>)
                       (shen/if
                        (shen/not
                         (shen/=
                          (shen/fail)
                          Parse_shen\.<times>))
                        (shen/let Parse_shen\.<anymulti>
                                  (shen/shen\.<anymulti> Parse_shen\.<times>)
                                  (shen/if
                                   (shen/not
                                    (shen/=
                                     (shen/fail)
                                     Parse_shen\.<anymulti>))
                                   (shen/shen\.pair
                                    (shen/hd Parse_shen\.<anymulti>)
                                    'shen\.skip)
                                   (shen/fail)))
                        (shen/fail)))
             (shen/fail))))
(defun shen/shen\.<times>
    (V2575)
  (shen/if
   (shen/and
    (shen/cons\?
     (shen/hd V2575))
    (shen/= 42
            (shen/hd
             (shen/hd V2575))))
   (shen/shen\.pair
    (shen/hd
     (shen/shen\.pair
      (nthcdr 1
              (shen/hd V2575))
      (shen/shen\.hdtl V2575)))
    'shen\.skip)
   (shen/fail)))
(defun shen/shen\.<anymulti>
    (V2577)
  (shen/let YaccParse
            (shen/let Parse_shen\.<comment>
                      (shen/shen\.<comment> V2577)
                      (shen/if
                       (shen/not
                        (shen/=
                         (shen/fail)
                         Parse_shen\.<comment>))
                       (shen/let Parse_shen\.<anymulti>
                                 (shen/shen\.<anymulti> Parse_shen\.<comment>)
                                 (shen/if
                                  (shen/not
                                   (shen/=
                                    (shen/fail)
                                    Parse_shen\.<anymulti>))
                                  (shen/shen\.pair
                                   (shen/hd Parse_shen\.<anymulti>)
                                   'shen\.skip)
                                  (shen/fail)))
                       (shen/fail)))
            (shen/if
             (shen/= YaccParse
                     (shen/fail))
             (shen/let YaccParse
                       (shen/let Parse_shen\.<times>
                                 (shen/shen\.<times> V2577)
                                 (shen/if
                                  (shen/not
                                   (shen/=
                                    (shen/fail)
                                    Parse_shen\.<times>))
                                  (shen/let Parse_shen\.<backslash>
                                            (shen/shen\.<backslash> Parse_shen\.<times>)
                                            (shen/if
                                             (shen/not
                                              (shen/=
                                               (shen/fail)
                                               Parse_shen\.<backslash>))
                                             (shen/shen\.pair
                                              (shen/hd Parse_shen\.<backslash>)
                                              'shen\.skip)
                                             (shen/fail)))
                                  (shen/fail)))
                       (shen/if
                        (shen/= YaccParse
                                (shen/fail))
                        (shen/if
                         (shen/cons\?
                          (shen/hd V2577))
                         (shen/let Parse_X
                                   (shen/hd
                                    (shen/hd V2577))
                                   (shen/let Parse_shen\.<anymulti>
                                             (shen/shen\.<anymulti>
                                              (shen/shen\.pair
                                               (nthcdr 1
                                                       (shen/hd V2577))
                                               (shen/shen\.hdtl V2577)))
                                             (shen/if
                                              (shen/not
                                               (shen/=
                                                (shen/fail)
                                                Parse_shen\.<anymulti>))
                                              (shen/shen\.pair
                                               (shen/hd Parse_shen\.<anymulti>)
                                               'shen\.skip)
                                              (shen/fail))))
                         (shen/fail))
                        YaccParse))
             YaccParse)))
(defun shen/shen\.<whitespaces>
    (V2579)
  (shen/let YaccParse
            (shen/let Parse_shen\.<whitespace>
                      (shen/shen\.<whitespace> V2579)
                      (shen/if
                       (shen/not
                        (shen/=
                         (shen/fail)
                         Parse_shen\.<whitespace>))
                       (shen/let Parse_shen\.<whitespaces>
                                 (shen/shen\.<whitespaces> Parse_shen\.<whitespace>)
                                 (shen/if
                                  (shen/not
                                   (shen/=
                                    (shen/fail)
                                    Parse_shen\.<whitespaces>))
                                  (shen/shen\.pair
                                   (shen/hd Parse_shen\.<whitespaces>)
                                   'shen\.skip)
                                  (shen/fail)))
                       (shen/fail)))
            (shen/if
             (shen/= YaccParse
                     (shen/fail))
             (shen/let Parse_shen\.<whitespace>
                       (shen/shen\.<whitespace> V2579)
                       (shen/if
                        (shen/not
                         (shen/=
                          (shen/fail)
                          Parse_shen\.<whitespace>))
                        (shen/shen\.pair
                         (shen/hd Parse_shen\.<whitespace>)
                         'shen\.skip)
                        (shen/fail)))
             YaccParse)))
(defun shen/shen\.<whitespace>
    (V2581)
  (shen/if
   (shen/cons\?
    (shen/hd V2581))
   (shen/let Parse_X
             (shen/hd
              (shen/hd V2581))
             (shen/if
              (shen/let Parse_Case Parse_X
                        (shen/or
                         (shen/= Parse_Case 32)
                         (shen/or
                          (shen/= Parse_Case 13)
                          (shen/or
                           (shen/= Parse_Case 10)
                           (shen/= Parse_Case 9)))))
              (shen/shen\.pair
               (shen/hd
                (shen/shen\.pair
                 (nthcdr 1
                         (shen/hd V2581))
                 (shen/shen\.hdtl V2581)))
               'shen\.skip)
              (shen/fail)))
   (shen/fail)))
(defun shen/shen\.cons_form
    (V2583)
  (shen/cond
   ((shen/internal/predicate->shen
     (null V2583))
    nil)
   ((shen/and
     (shen/cons\? V2583)
     (shen/and
      (shen/cons\?
       (nthcdr 1 V2583))
      (shen/and
       (shen/cons\?
        (nthcdr 2 V2583))
       (shen/and
        (shen/internal/predicate->shen
         (null
          (nthcdr 3 V2583)))
        (shen/=
         (shen/hd
          (nthcdr 1 V2583))
         'bar!)))))
    (append
     (list 'cons
           (shen/hd V2583))
     (nthcdr 2 V2583)))
   ((shen/cons\? V2583)
    (list 'cons
          (shen/hd V2583)
          (shen/shen\.cons_form
           (nthcdr 1 V2583))))
   (shen/true
    (shen/shen\.f_error 'shen\.cons_form))))
(defun shen/shen\.package-macro
    (V2588 V2589)
  (shen/cond
   ((shen/and
     (shen/cons\? V2588)
     (shen/and
      (shen/= '$
              (shen/hd V2588))
      (shen/and
       (shen/cons\?
        (nthcdr 1 V2588))
       (shen/internal/predicate->shen
        (null
         (nthcdr 2 V2588))))))
    (shen/append
     (shen/explode
      (shen/hd
       (nthcdr 1 V2588)))
     V2589))
   ((shen/and
     (shen/cons\? V2588)
     (shen/and
      (shen/= 'package
              (shen/hd V2588))
      (shen/and
       (shen/cons\?
        (nthcdr 1 V2588))
       (shen/and
        (shen/= 'null
                (shen/hd
                 (nthcdr 1 V2588)))
        (shen/cons\?
         (nthcdr 2 V2588))))))
    (shen/append
     (nthcdr 3 V2588)
     V2589))
   ((shen/and
     (shen/cons\? V2588)
     (shen/and
      (shen/= 'package
              (shen/hd V2588))
      (shen/and
       (shen/cons\?
        (nthcdr 1 V2588))
       (shen/cons\?
        (nthcdr 2 V2588)))))
    (shen/let ListofExceptions
              (shen/shen\.eval-without-macros
               (shen/hd
                (nthcdr 2 V2588)))
              (shen/let External
                        (shen/shen\.record-exceptions ListofExceptions
                                                      (shen/hd
                                                       (nthcdr 1 V2588)))
                        (shen/let PackageNameDot
                                  (shen/intern
                                   (shen/cn
                                    (shen/str
                                     (shen/hd
                                      (nthcdr 1 V2588)))
                                    "."))
                                  (shen/let ExpPackageNameDot
                                            (shen/explode PackageNameDot)
                                            (shen/let Packaged
                                                      (shen/shen\.packageh PackageNameDot ListofExceptions
                                                                           (nthcdr 3 V2588)
                                                                           ExpPackageNameDot)
                                                      (shen/let Internal
                                                                (shen/shen\.record-internal
                                                                 (shen/hd
                                                                  (nthcdr 1 V2588))
                                                                 (shen/shen\.internal-symbols ExpPackageNameDot Packaged))
                                                                (shen/append Packaged V2589))))))))
   (shen/true
    (append
     (list V2588)
     V2589))))
(defun shen/shen\.record-exceptions
    (V2592 V2593)
  (shen/let CurrExceptions
            (shen/trap-error
             (shen/get V2593 'shen\.external-symbols
                       (shen/value '*property-vector*))
             (shen/lambda E nil))
            (shen/let AllExceptions
                      (shen/union V2592 CurrExceptions)
                      (shen/put V2593 'shen\.external-symbols AllExceptions
                                (shen/value '*property-vector*)))))
(defun shen/shen\.record-internal
    (V2596 V2597)
  (shen/put V2596 'shen\.internal-symbols
            (shen/union V2597
                        (shen/trap-error
                         (shen/get V2596 'shen\.internal-symbols
                                   (shen/value '*property-vector*))
                         (shen/lambda E nil)))
            (shen/value '*property-vector*)))
(defun shen/shen\.internal-symbols
    (V2608 V2609)
  (shen/cond
   ((shen/and
     (shen/symbol\? V2609)
     (shen/shen\.prefix\? V2608
                          (shen/explode V2609)))
    (list V2609))
   ((shen/cons\? V2609)
    (shen/union
     (shen/shen\.internal-symbols V2608
                                  (shen/hd V2609))
     (shen/shen\.internal-symbols V2608
                                  (nthcdr 1 V2609))))
   (shen/true nil)))
(defun shen/shen\.packageh
    (V2626 V2627 V2628 V2629)
  (shen/cond
   ((shen/cons\? V2628)
    (append
     (list
      (shen/shen\.packageh V2626 V2627
                           (shen/hd V2628)
                           V2629))
     (shen/shen\.packageh V2626 V2627
                          (nthcdr 1 V2628)
                          V2629)))
   ((shen/or
     (shen/shen\.sysfunc\? V2628)
     (shen/or
      (shen/variable\? V2628)
      (shen/or
       (shen/element\? V2628 V2627)
       (shen/or
        (shen/shen\.doubleunderline\? V2628)
        (shen/shen\.singleunderline\? V2628)))))
    V2628)
   ((shen/and
     (shen/symbol\? V2628)
     (shen/let ExplodeX
               (shen/explode V2628)
               (shen/and
                (shen/not
                 (shen/shen\.prefix\?
                  (list "s" "h" "e" "n" ".")
                  ExplodeX))
                (shen/not
                 (shen/shen\.prefix\? V2629 ExplodeX)))))
    (shen/concat V2626 V2628))
   (shen/true V2628)))
(defun shen/shen\.<defprolog>
    (V1809)
  (shen/let Parse_shen\.<predicate*>
            (shen/shen\.<predicate*> V1809)
            (shen/if
             (shen/not
              (shen/=
               (shen/fail)
               Parse_shen\.<predicate*>))
             (shen/let Parse_shen\.<clauses*>
                       (shen/shen\.<clauses*> Parse_shen\.<predicate*>)
                       (shen/if
                        (shen/not
                         (shen/=
                          (shen/fail)
                          Parse_shen\.<clauses*>))
                        (shen/shen\.pair
                         (shen/hd Parse_shen\.<clauses*>)
                         (shen/hd
                          (shen/shen\.prolog->shen
                           (shen/map
                            (shen/lambda Parse_X
                                         (shen/shen\.insert-predicate
                                          (shen/shen\.hdtl Parse_shen\.<predicate*>)
                                          Parse_X))
                            (shen/shen\.hdtl Parse_shen\.<clauses*>)))))
                        (shen/fail)))
             (shen/fail))))
(defun shen/shen\.prolog-error
    (V1818 V1819)
  (shen/cond
   ((shen/and
     (shen/cons\? V1819)
     (shen/and
      (shen/cons\?
       (nthcdr 1 V1819))
      (shen/internal/predicate->shen
       (null
        (nthcdr 2 V1819)))))
    (shen/simple-error
     (shen/cn "prolog syntax error in "
              (shen/shen\.app V1818
                              (shen/cn " here:\n\n "
                                       (shen/shen\.app
                                        (shen/shen\.next-50 50
                                                            (shen/hd V1819))
                                        "\n" 'shen\.a))
                              'shen\.a))))
   (shen/true
    (shen/simple-error
     (shen/cn "prolog syntax error in "
              (shen/shen\.app V1818 "\n" 'shen\.a))))))
(defun shen/shen\.next-50
    (V1826 V1827)
  (shen/cond
   ((shen/internal/predicate->shen
     (null V1827))
    "")
   ((shen/= 0 V1826)
    "")
   ((shen/cons\? V1827)
    (shen/cn
     (shen/shen\.decons-string
      (shen/hd V1827))
     (shen/shen\.next-50
      (shen/- V1826 1)
      (nthcdr 1 V1827))))
   (shen/true
    (shen/shen\.f_error 'shen\.next-50))))
(defun shen/shen\.decons-string
    (V1829)
  (shen/cond
   ((shen/and
     (shen/cons\? V1829)
     (shen/and
      (shen/= 'cons
              (shen/hd V1829))
      (shen/and
       (shen/cons\?
        (nthcdr 1 V1829))
       (shen/and
        (shen/cons\?
         (nthcdr 2 V1829))
        (shen/internal/predicate->shen
         (null
          (nthcdr 3 V1829)))))))
    (shen/shen\.app
     (shen/shen\.eval-cons V1829)
     " " 'shen\.s))
   (shen/true
    (shen/shen\.app V1829 " " 'shen\.r))))
(defun shen/shen\.insert-predicate
    (V1832 V1833)
  (shen/cond
   ((shen/and
     (shen/cons\? V1833)
     (shen/and
      (shen/cons\?
       (nthcdr 1 V1833))
      (shen/internal/predicate->shen
       (null
        (nthcdr 2 V1833)))))
    (append
     (list
      (append
       (list V1832)
       (shen/hd V1833))
      ':-)
     (nthcdr 1 V1833)))
   (shen/true
    (shen/shen\.f_error 'shen\.insert-predicate))))
(defun shen/shen\.<predicate*>
    (V1835)
  (shen/if
   (shen/cons\?
    (shen/hd V1835))
   (shen/let Parse_X
             (shen/hd
              (shen/hd V1835))
             (shen/shen\.pair
              (shen/hd
               (shen/shen\.pair
                (nthcdr 1
                        (shen/hd V1835))
                (shen/shen\.hdtl V1835)))
              Parse_X))
   (shen/fail)))
(defun shen/shen\.<clauses*>
    (V1837)
  (shen/let YaccParse
            (shen/let Parse_shen\.<clause*>
                      (shen/shen\.<clause*> V1837)
                      (shen/if
                       (shen/not
                        (shen/=
                         (shen/fail)
                         Parse_shen\.<clause*>))
                       (shen/let Parse_shen\.<clauses*>
                                 (shen/shen\.<clauses*> Parse_shen\.<clause*>)
                                 (shen/if
                                  (shen/not
                                   (shen/=
                                    (shen/fail)
                                    Parse_shen\.<clauses*>))
                                  (shen/shen\.pair
                                   (shen/hd Parse_shen\.<clauses*>)
                                   (append
                                    (list
                                     (shen/shen\.hdtl Parse_shen\.<clause*>))
                                    (shen/shen\.hdtl Parse_shen\.<clauses*>)))
                                  (shen/fail)))
                       (shen/fail)))
            (shen/if
             (shen/= YaccParse
                     (shen/fail))
             (shen/let Parse_<e>
                       (shen/<e> V1837)
                       (shen/if
                        (shen/not
                         (shen/=
                          (shen/fail)
                          Parse_<e>))
                        (shen/shen\.pair
                         (shen/hd Parse_<e>)
                         nil)
                        (shen/fail)))
             YaccParse)))
(defun shen/shen\.<clause*>
    (V1839)
  (shen/let Parse_shen\.<head*>
            (shen/shen\.<head*> V1839)
            (shen/if
             (shen/not
              (shen/=
               (shen/fail)
               Parse_shen\.<head*>))
             (shen/if
              (shen/and
               (shen/cons\?
                (shen/hd Parse_shen\.<head*>))
               (shen/= '<--
                       (shen/hd
                        (shen/hd Parse_shen\.<head*>))))
              (shen/let Parse_shen\.<body*>
                        (shen/shen\.<body*>
                         (shen/shen\.pair
                          (nthcdr 1
                                  (shen/hd Parse_shen\.<head*>))
                          (shen/shen\.hdtl Parse_shen\.<head*>)))
                        (shen/if
                         (shen/not
                          (shen/=
                           (shen/fail)
                           Parse_shen\.<body*>))
                         (shen/let Parse_shen\.<end*>
                                   (shen/shen\.<end*> Parse_shen\.<body*>)
                                   (shen/if
                                    (shen/not
                                     (shen/=
                                      (shen/fail)
                                      Parse_shen\.<end*>))
                                    (shen/shen\.pair
                                     (shen/hd Parse_shen\.<end*>)
                                     (list
                                      (shen/shen\.hdtl Parse_shen\.<head*>)
                                      (shen/shen\.hdtl Parse_shen\.<body*>)))
                                    (shen/fail)))
                         (shen/fail)))
              (shen/fail))
             (shen/fail))))
(defun shen/shen\.<head*>
    (V1841)
  (shen/let YaccParse
            (shen/let Parse_shen\.<term*>
                      (shen/shen\.<term*> V1841)
                      (shen/if
                       (shen/not
                        (shen/=
                         (shen/fail)
                         Parse_shen\.<term*>))
                       (shen/let Parse_shen\.<head*>
                                 (shen/shen\.<head*> Parse_shen\.<term*>)
                                 (shen/if
                                  (shen/not
                                   (shen/=
                                    (shen/fail)
                                    Parse_shen\.<head*>))
                                  (shen/shen\.pair
                                   (shen/hd Parse_shen\.<head*>)
                                   (append
                                    (list
                                     (shen/shen\.hdtl Parse_shen\.<term*>))
                                    (shen/shen\.hdtl Parse_shen\.<head*>)))
                                  (shen/fail)))
                       (shen/fail)))
            (shen/if
             (shen/= YaccParse
                     (shen/fail))
             (shen/let Parse_<e>
                       (shen/<e> V1841)
                       (shen/if
                        (shen/not
                         (shen/=
                          (shen/fail)
                          Parse_<e>))
                        (shen/shen\.pair
                         (shen/hd Parse_<e>)
                         nil)
                        (shen/fail)))
             YaccParse)))
(defun shen/shen\.<term*>
    (V1843)
  (shen/if
   (shen/cons\?
    (shen/hd V1843))
   (shen/let Parse_X
             (shen/hd
              (shen/hd V1843))
             (shen/if
              (shen/and
               (shen/not
                (shen/= '<-- Parse_X))
               (shen/shen\.legitimate-term\? Parse_X))
              (shen/shen\.pair
               (shen/hd
                (shen/shen\.pair
                 (nthcdr 1
                         (shen/hd V1843))
                 (shen/shen\.hdtl V1843)))
               (shen/shen\.eval-cons Parse_X))
              (shen/fail)))
   (shen/fail)))
(defun shen/shen\.legitimate-term\?
    (V1849)
  (cl-flet
      ((tail-trampoline
        (V1849)
        (shen/cond
         ((shen/and
           (shen/cons\? V1849)
           (shen/and
            (shen/= 'cons
                    (shen/hd V1849))
            (shen/and
             (shen/cons\?
              (nthcdr 1 V1849))
             (shen/and
              (shen/cons\?
               (nthcdr 2 V1849))
              (shen/internal/predicate->shen
               (null
                (nthcdr 3 V1849)))))))
          (shen/and
           (shen/shen\.legitimate-term\?
            (shen/hd
             (nthcdr 1 V1849)))
           (shen/shen\.legitimate-term\?
            (shen/hd
             (nthcdr 2 V1849)))))
         ((shen/and
           (shen/cons\? V1849)
           (shen/and
            (shen/= 'mode
                    (shen/hd V1849))
            (shen/and
             (shen/cons\?
              (nthcdr 1 V1849))
             (shen/and
              (shen/cons\?
               (nthcdr 2 V1849))
              (shen/and
               (shen/= '+
                       (shen/hd
                        (nthcdr 2 V1849)))
               (shen/internal/predicate->shen
                (null
                 (nthcdr 3 V1849))))))))
          (vector
           (list
            (shen/hd
             (nthcdr 1 V1849)))))
         ((shen/and
           (shen/cons\? V1849)
           (shen/and
            (shen/= 'mode
                    (shen/hd V1849))
            (shen/and
             (shen/cons\?
              (nthcdr 1 V1849))
             (shen/and
              (shen/cons\?
               (nthcdr 2 V1849))
              (shen/and
               (shen/= '-
                       (shen/hd
                        (nthcdr 2 V1849)))
               (shen/internal/predicate->shen
                (null
                 (nthcdr 3 V1849))))))))
          (vector
           (list
            (shen/hd
             (nthcdr 1 V1849)))))
         ((shen/cons\? V1849)
          'false)
         (shen/true 'true))))
    (let
        ((result
          (funcall #'tail-trampoline V1849)))
      (while
          (vectorp result)
        (setq result
              (apply #'tail-trampoline
                     (aref result 0))))
      result)))
(defun shen/shen\.eval-cons
    (V1851)
  (shen/cond
   ((shen/and
     (shen/cons\? V1851)
     (shen/and
      (shen/= 'cons
              (shen/hd V1851))
      (shen/and
       (shen/cons\?
        (nthcdr 1 V1851))
       (shen/and
        (shen/cons\?
         (nthcdr 2 V1851))
        (shen/internal/predicate->shen
         (null
          (nthcdr 3 V1851)))))))
    (append
     (list
      (shen/shen\.eval-cons
       (shen/hd
        (nthcdr 1 V1851))))
     (shen/shen\.eval-cons
      (shen/hd
       (nthcdr 2 V1851)))))
   ((shen/and
     (shen/cons\? V1851)
     (shen/and
      (shen/= 'mode
              (shen/hd V1851))
      (shen/and
       (shen/cons\?
        (nthcdr 1 V1851))
       (shen/and
        (shen/cons\?
         (nthcdr 2 V1851))
        (shen/internal/predicate->shen
         (null
          (nthcdr 3 V1851)))))))
    (append
     (list 'mode
           (shen/shen\.eval-cons
            (shen/hd
             (nthcdr 1 V1851))))
     (nthcdr 2 V1851)))
   (shen/true V1851)))
(defun shen/shen\.<body*>
    (V1853)
  (shen/let YaccParse
            (shen/let Parse_shen\.<literal*>
                      (shen/shen\.<literal*> V1853)
                      (shen/if
                       (shen/not
                        (shen/=
                         (shen/fail)
                         Parse_shen\.<literal*>))
                       (shen/let Parse_shen\.<body*>
                                 (shen/shen\.<body*> Parse_shen\.<literal*>)
                                 (shen/if
                                  (shen/not
                                   (shen/=
                                    (shen/fail)
                                    Parse_shen\.<body*>))
                                  (shen/shen\.pair
                                   (shen/hd Parse_shen\.<body*>)
                                   (append
                                    (list
                                     (shen/shen\.hdtl Parse_shen\.<literal*>))
                                    (shen/shen\.hdtl Parse_shen\.<body*>)))
                                  (shen/fail)))
                       (shen/fail)))
            (shen/if
             (shen/= YaccParse
                     (shen/fail))
             (shen/let Parse_<e>
                       (shen/<e> V1853)
                       (shen/if
                        (shen/not
                         (shen/=
                          (shen/fail)
                          Parse_<e>))
                        (shen/shen\.pair
                         (shen/hd Parse_<e>)
                         nil)
                        (shen/fail)))
             YaccParse)))
(defun shen/shen\.<literal*>
    (V1855)
  (shen/let YaccParse
            (shen/if
             (shen/and
              (shen/cons\?
               (shen/hd V1855))
              (shen/= '!
                      (shen/hd
                       (shen/hd V1855))))
             (shen/shen\.pair
              (shen/hd
               (shen/shen\.pair
                (nthcdr 1
                        (shen/hd V1855))
                (shen/shen\.hdtl V1855)))
              (list 'cut
                    (shen/intern "Throwcontrol")))
             (shen/fail))
            (shen/if
             (shen/= YaccParse
                     (shen/fail))
             (shen/if
              (shen/cons\?
               (shen/hd V1855))
              (shen/let Parse_X
                        (shen/hd
                         (shen/hd V1855))
                        (shen/if
                         (shen/cons\? Parse_X)
                         (shen/shen\.pair
                          (shen/hd
                           (shen/shen\.pair
                            (nthcdr 1
                                    (shen/hd V1855))
                            (shen/shen\.hdtl V1855)))
                          Parse_X)
                         (shen/fail)))
              (shen/fail))
             YaccParse)))
(defun shen/shen\.<end*>
    (V1857)
  (shen/if
   (shen/cons\?
    (shen/hd V1857))
   (shen/let Parse_X
             (shen/hd
              (shen/hd V1857))
             (shen/if
              (shen/= Parse_X '\;)
              (shen/shen\.pair
               (shen/hd
                (shen/shen\.pair
                 (nthcdr 1
                         (shen/hd V1857))
                 (shen/shen\.hdtl V1857)))
               Parse_X)
              (shen/fail)))
   (shen/fail)))
(defun shen/cut
    (V1861 V1862 V1863)
  (shen/let Result
            (shen/thaw V1863)
            (shen/if
             (shen/= Result 'false)
             V1861 Result)))
(defun shen/shen\.insert_modes
    (V1865)
  (shen/cond
   ((shen/and
     (shen/cons\? V1865)
     (shen/and
      (shen/= 'mode
              (shen/hd V1865))
      (shen/and
       (shen/cons\?
        (nthcdr 1 V1865))
       (shen/and
        (shen/cons\?
         (nthcdr 2 V1865))
        (shen/internal/predicate->shen
         (null
          (nthcdr 3 V1865)))))))
    V1865)
   ((shen/internal/predicate->shen
     (null V1865))
    nil)
   ((shen/cons\? V1865)
    (list
     (list 'mode
           (shen/hd V1865)
           '+)
     'mode
     (shen/shen\.insert_modes
      (nthcdr 1 V1865))
     '-))
   (shen/true V1865)))
(defun shen/shen\.s-prolog
    (V1867)
  (shen/map
   (shen/lambda X
                (shen/eval X))
   (shen/shen\.prolog->shen V1867)))
(defun shen/shen\.prolog->shen
    (V1869)
  (shen/map
   (shen/lambda X
                (shen/shen\.compile_prolog_procedure X))
   (shen/shen\.group_clauses
    (shen/map
     (shen/lambda X
                  (shen/shen\.s-prolog_clause X))
     (shen/mapcan
      (shen/lambda X
                   (shen/shen\.head_abstraction X))
      V1869)))))
(defun shen/shen\.s-prolog_clause
    (V1871)
  (shen/cond
   ((shen/and
     (shen/cons\? V1871)
     (shen/and
      (shen/cons\?
       (nthcdr 1 V1871))
      (shen/and
       (shen/= ':-
               (shen/hd
                (nthcdr 1 V1871)))
       (shen/and
        (shen/cons\?
         (nthcdr 2 V1871))
        (shen/internal/predicate->shen
         (null
          (nthcdr 3 V1871)))))))
    (list
     (shen/hd V1871)
     ':-
     (shen/map
      (shen/lambda X
                   (shen/shen\.s-prolog_literal X))
      (shen/hd
       (nthcdr 2 V1871)))))
   (shen/true
    (shen/shen\.f_error 'shen\.s-prolog_clause))))
(defun shen/shen\.head_abstraction
    (V1873)
  (shen/cond
   ((shen/and
     (shen/cons\? V1873)
     (shen/and
      (shen/cons\?
       (nthcdr 1 V1873))
      (shen/and
       (shen/= ':-
               (shen/hd
                (nthcdr 1 V1873)))
       (shen/and
        (shen/cons\?
         (nthcdr 2 V1873))
        (shen/and
         (shen/internal/predicate->shen
          (null
           (nthcdr 3 V1873)))
         (shen/trap-error
          (shen/<
           (shen/shen\.complexity_head
            (shen/hd V1873))
           (shen/value 'shen\.*maxcomplexity*))
          (shen/lambda _ 'false)))))))
    (list V1873))
   ((shen/and
     (shen/cons\? V1873)
     (shen/and
      (shen/cons\?
       (shen/hd V1873))
      (shen/and
       (shen/cons\?
        (nthcdr 1 V1873))
       (shen/and
        (shen/= ':-
                (shen/hd
                 (nthcdr 1 V1873)))
        (shen/and
         (shen/cons\?
          (nthcdr 2 V1873))
         (shen/internal/predicate->shen
          (null
           (nthcdr 3 V1873))))))))
    (shen/let Terms
              (shen/map
               (shen/lambda Y
                            (shen/gensym 'V))
               (nthcdr 1
                       (shen/hd V1873)))
              (shen/let XTerms
                        (shen/shen\.rcons_form
                         (shen/shen\.remove_modes
                          (nthcdr 1
                                  (shen/hd V1873))))
                        (shen/let Literal
                                  (list 'unify
                                        (shen/shen\.cons_form Terms)
                                        XTerms)
                                  (shen/let Clause
                                            (list
                                             (append
                                              (list
                                               (shen/hd
                                                (shen/hd V1873)))
                                              Terms)
                                             ':-
                                             (append
                                              (list Literal)
                                              (shen/hd
                                               (nthcdr 2 V1873))))
                                            (list Clause))))))
   (shen/true
    (shen/shen\.f_error 'shen\.head_abstraction))))
(defun shen/shen\.complexity_head
    (V1879)
  (shen/cond
   ((shen/cons\? V1879)
    (shen/shen\.safe-product
     (shen/map
      (shen/lambda X
                   (shen/shen\.complexity X))
      (nthcdr 1 V1879))))
   (shen/true
    (shen/shen\.f_error 'shen\.complexity_head))))
(defun shen/shen\.safe-multiply
    (V1882 V1883)
  (shen/* V1882 V1883))
(defun shen/shen\.complexity
    (V1892)
  (cl-flet
      ((tail-trampoline
        (V1892)
        (shen/cond
         ((shen/and
           (shen/cons\? V1892)
           (shen/and
            (shen/= 'mode
                    (shen/hd V1892))
            (shen/and
             (shen/cons\?
              (nthcdr 1 V1892))
             (shen/and
              (shen/cons\?
               (shen/hd
                (nthcdr 1 V1892)))
              (shen/and
               (shen/= 'mode
                       (shen/hd
                        (shen/hd
                         (nthcdr 1 V1892))))
               (shen/and
                (shen/cons\?
                 (nthcdr 1
                         (shen/hd
                          (nthcdr 1 V1892))))
                (shen/and
                 (shen/cons\?
                  (nthcdr 2
                          (shen/hd
                           (nthcdr 1 V1892))))
                 (shen/and
                  (shen/internal/predicate->shen
                   (null
                    (nthcdr 3
                            (shen/hd
                             (nthcdr 1 V1892)))))
                  (shen/and
                   (shen/cons\?
                    (nthcdr 2 V1892))
                   (shen/internal/predicate->shen
                    (null
                     (nthcdr 3 V1892))))))))))))
          (vector
           (list
            (shen/hd
             (nthcdr 1 V1892)))))
         ((shen/and
           (shen/cons\? V1892)
           (shen/and
            (shen/= 'mode
                    (shen/hd V1892))
            (shen/and
             (shen/cons\?
              (nthcdr 1 V1892))
             (shen/and
              (shen/cons\?
               (shen/hd
                (nthcdr 1 V1892)))
              (shen/and
               (shen/cons\?
                (nthcdr 2 V1892))
               (shen/and
                (shen/= '+
                        (shen/hd
                         (nthcdr 2 V1892)))
                (shen/internal/predicate->shen
                 (null
                  (nthcdr 3 V1892)))))))))
          (shen/shen\.safe-multiply 2
                                    (shen/shen\.safe-multiply
                                     (shen/shen\.complexity
                                      (append
                                       (list 'mode
                                             (shen/hd
                                              (shen/hd
                                               (nthcdr 1 V1892))))
                                       (nthcdr 2 V1892)))
                                     (shen/shen\.complexity
                                      (append
                                       (list 'mode
                                             (nthcdr 1
                                                     (shen/hd
                                                      (nthcdr 1 V1892))))
                                       (nthcdr 2 V1892))))))
         ((shen/and
           (shen/cons\? V1892)
           (shen/and
            (shen/= 'mode
                    (shen/hd V1892))
            (shen/and
             (shen/cons\?
              (nthcdr 1 V1892))
             (shen/and
              (shen/cons\?
               (shen/hd
                (nthcdr 1 V1892)))
              (shen/and
               (shen/cons\?
                (nthcdr 2 V1892))
               (shen/and
                (shen/= '-
                        (shen/hd
                         (nthcdr 2 V1892)))
                (shen/internal/predicate->shen
                 (null
                  (nthcdr 3 V1892)))))))))
          (shen/shen\.safe-multiply
           (shen/shen\.complexity
            (append
             (list 'mode
                   (shen/hd
                    (shen/hd
                     (nthcdr 1 V1892))))
             (nthcdr 2 V1892)))
           (shen/shen\.complexity
            (append
             (list 'mode
                   (nthcdr 1
                           (shen/hd
                            (nthcdr 1 V1892))))
             (nthcdr 2 V1892)))))
         ((shen/and
           (shen/cons\? V1892)
           (shen/and
            (shen/= 'mode
                    (shen/hd V1892))
            (shen/and
             (shen/cons\?
              (nthcdr 1 V1892))
             (shen/and
              (shen/cons\?
               (nthcdr 2 V1892))
              (shen/and
               (shen/internal/predicate->shen
                (null
                 (nthcdr 3 V1892)))
               (shen/variable\?
                (shen/hd
                 (nthcdr 1 V1892))))))))
          1)
         ((shen/and
           (shen/cons\? V1892)
           (shen/and
            (shen/= 'mode
                    (shen/hd V1892))
            (shen/and
             (shen/cons\?
              (nthcdr 1 V1892))
             (shen/and
              (shen/cons\?
               (nthcdr 2 V1892))
              (shen/and
               (shen/= '+
                       (shen/hd
                        (nthcdr 2 V1892)))
               (shen/internal/predicate->shen
                (null
                 (nthcdr 3 V1892))))))))
          2)
         ((shen/and
           (shen/cons\? V1892)
           (shen/and
            (shen/= 'mode
                    (shen/hd V1892))
            (shen/and
             (shen/cons\?
              (nthcdr 1 V1892))
             (shen/and
              (shen/cons\?
               (nthcdr 2 V1892))
              (shen/and
               (shen/= '-
                       (shen/hd
                        (nthcdr 2 V1892)))
               (shen/internal/predicate->shen
                (null
                 (nthcdr 3 V1892))))))))
          1)
         (shen/true
          (vector
           (list
            (list 'mode V1892 '+)))))))
    (let
        ((result
          (funcall #'tail-trampoline V1892)))
      (while
          (vectorp result)
        (setq result
              (apply #'tail-trampoline
                     (aref result 0))))
      result)))
(defun shen/shen\.safe-product
    (V1894)
  (shen/cond
   ((shen/internal/predicate->shen
     (null V1894))
    1)
   ((shen/cons\? V1894)
    (shen/shen\.safe-multiply
     (shen/hd V1894)
     (shen/shen\.safe-product
      (nthcdr 1 V1894))))
   (shen/true
    (shen/shen\.f_error 'shen\.safe-product))))
(defun shen/shen\.s-prolog_literal
    (V1896)
  (shen/cond
   ((shen/and
     (shen/cons\? V1896)
     (shen/and
      (shen/= 'is
              (shen/hd V1896))
      (shen/and
       (shen/cons\?
        (nthcdr 1 V1896))
       (shen/and
        (shen/cons\?
         (nthcdr 2 V1896))
        (shen/internal/predicate->shen
         (null
          (nthcdr 3 V1896)))))))
    (list 'bind
          (shen/hd
           (nthcdr 1 V1896))
          (shen/shen\.insert_deref
           (shen/hd
            (nthcdr 2 V1896)))))
   ((shen/and
     (shen/cons\? V1896)
     (shen/and
      (shen/= 'when
              (shen/hd V1896))
      (shen/and
       (shen/cons\?
        (nthcdr 1 V1896))
       (shen/internal/predicate->shen
        (null
         (nthcdr 2 V1896))))))
    (list 'fwhen
          (shen/shen\.insert_deref
           (shen/hd
            (nthcdr 1 V1896)))))
   ((shen/and
     (shen/cons\? V1896)
     (shen/and
      (shen/= 'bind
              (shen/hd V1896))
      (shen/and
       (shen/cons\?
        (nthcdr 1 V1896))
       (shen/and
        (shen/cons\?
         (nthcdr 2 V1896))
        (shen/internal/predicate->shen
         (null
          (nthcdr 3 V1896)))))))
    (list 'bind
          (shen/hd
           (nthcdr 1 V1896))
          (shen/shen\.insert_lazyderef
           (shen/hd
            (nthcdr 2 V1896)))))
   ((shen/and
     (shen/cons\? V1896)
     (shen/and
      (shen/= 'fwhen
              (shen/hd V1896))
      (shen/and
       (shen/cons\?
        (nthcdr 1 V1896))
       (shen/internal/predicate->shen
        (null
         (nthcdr 2 V1896))))))
    (list 'fwhen
          (shen/shen\.insert_lazyderef
           (shen/hd
            (nthcdr 1 V1896)))))
   ((shen/cons\? V1896)
    V1896)
   (shen/true
    (shen/shen\.f_error 'shen\.s-prolog_literal))))
(defun shen/shen\.insert_deref
    (V1898)
  (shen/cond
   ((shen/variable\? V1898)
    (list 'shen\.deref V1898 'ProcessN))
   ((shen/cons\? V1898)
    (append
     (list
      (shen/shen\.insert_deref
       (shen/hd V1898)))
     (shen/shen\.insert_deref
      (nthcdr 1 V1898))))
   (shen/true V1898)))
(defun shen/shen\.insert_lazyderef
    (V1900)
  (shen/cond
   ((shen/variable\? V1900)
    (list 'shen\.lazyderef V1900 'ProcessN))
   ((shen/cons\? V1900)
    (append
     (list
      (shen/shen\.insert_lazyderef
       (shen/hd V1900)))
     (shen/shen\.insert_lazyderef
      (nthcdr 1 V1900))))
   (shen/true V1900)))
(defun shen/shen\.group_clauses
    (V1902)
  (shen/cond
   ((shen/internal/predicate->shen
     (null V1902))
    nil)
   ((shen/cons\? V1902)
    (shen/let Group
              (shen/shen\.collect
               (shen/lambda X
                            (shen/shen\.same_predicate\?
                             (shen/hd V1902)
                             X))
               V1902)
              (shen/let Rest
                        (shen/difference V1902 Group)
                        (append
                         (list Group)
                         (shen/shen\.group_clauses Rest)))))
   (shen/true
    (shen/shen\.f_error 'shen\.group_clauses))))
(defun shen/shen\.collect
    (V1907 V1908)
  (cl-flet
      ((tail-trampoline
        (V1907 V1908)
        (shen/cond
         ((shen/internal/predicate->shen
           (null V1908))
          nil)
         ((shen/cons\? V1908)
          (shen/if
           (shen/internal/apply-higher-order-function V1907
                                                      (list
                                                       (shen/hd V1908)))
           (append
            (list
             (shen/hd V1908))
            (shen/shen\.collect V1907
                                (nthcdr 1 V1908)))
           (vector
            (list V1907
                  (nthcdr 1 V1908)))))
         (shen/true
          (shen/shen\.f_error 'shen\.collect)))))
    (let
        ((result
          (funcall #'tail-trampoline V1907 V1908)))
      (while
          (vectorp result)
        (setq result
              (apply #'tail-trampoline
                     (aref result 0))))
      result)))
(defun shen/shen\.same_predicate\?
    (V1927 V1928)
  (shen/cond
   ((shen/and
     (shen/cons\? V1927)
     (shen/and
      (shen/cons\?
       (shen/hd V1927))
      (shen/and
       (shen/cons\? V1928)
       (shen/cons\?
        (shen/hd V1928)))))
    (shen/=
     (shen/hd
      (shen/hd V1927))
     (shen/hd
      (shen/hd V1928))))
   (shen/true
    (shen/shen\.f_error 'shen\.same_predicate\?))))
(defun shen/shen\.compile_prolog_procedure
    (V1930)
  (shen/let F
            (shen/shen\.procedure_name V1930)
            (shen/let Shen
                      (shen/shen\.clauses-to-shen F V1930)
                      Shen)))
(defun shen/shen\.procedure_name
    (V1944)
  (shen/cond
   ((shen/and
     (shen/cons\? V1944)
     (shen/and
      (shen/cons\?
       (shen/hd V1944))
      (shen/cons\?
       (shen/hd
        (shen/hd V1944)))))
    (shen/hd
     (shen/hd
      (shen/hd V1944))))
   (shen/true
    (shen/shen\.f_error 'shen\.procedure_name))))
(defun shen/shen\.clauses-to-shen
    (V1947 V1948)
  (shen/let Linear
            (shen/map
             (shen/lambda X
                          (shen/shen\.linearise-clause X))
             V1948)
            (shen/let Arity
                      (shen/shen\.prolog-aritycheck V1947
                                                    (shen/map
                                                     (shen/lambda X
                                                                  (shen/head X))
                                                     V1948))
                      (shen/let Parameters
                                (shen/shen\.parameters Arity)
                                (shen/let AUM_instructions
                                          (shen/map
                                           (shen/lambda X
                                                        (shen/shen\.aum X Parameters))
                                           Linear)
                                          (shen/let Code
                                                    (shen/shen\.catch-cut
                                                     (shen/shen\.nest-disjunct
                                                      (shen/map
                                                       (shen/lambda X
                                                                    (shen/shen\.aum_to_shen X))
                                                       AUM_instructions)))
                                                    (shen/let ShenDef
                                                              (append
                                                               (list 'define V1947)
                                                               (shen/append Parameters
                                                                            (shen/append
                                                                             (list 'ProcessN 'Continuation)
                                                                             (list '-> Code))))
                                                              ShenDef)))))))
(defun shen/shen\.catch-cut
    (V1950)
  (shen/cond
   ((shen/not
     (shen/shen\.occurs\? 'cut V1950))
    V1950)
   (shen/true
    (list 'let 'Throwcontrol
          (list 'shen\.catchpoint)
          (list 'shen\.cutpoint 'Throwcontrol V1950)))))
(defun shen/shen\.catchpoint nil
  (shen/set 'shen\.*catch*
            (1+
             (shen/value 'shen\.*catch*))))
(defun shen/shen\.cutpoint
    (V1958 V1959)
  (shen/cond
   ((shen/= V1959 V1958)
    'false)
   (shen/true V1959)))
(defun shen/shen\.nest-disjunct
    (V1961)
  (shen/cond
   ((shen/and
     (shen/cons\? V1961)
     (shen/internal/predicate->shen
      (null
       (nthcdr 1 V1961))))
    (shen/hd V1961))
   ((shen/cons\? V1961)
    (shen/shen\.lisp-or
     (shen/hd V1961)
     (shen/shen\.nest-disjunct
      (nthcdr 1 V1961))))
   (shen/true
    (shen/shen\.f_error 'shen\.nest-disjunct))))
(defun shen/shen\.lisp-or
    (V1964 V1965)
  (list 'let 'Case V1964
        (list 'if
              (list '= 'Case 'false)
              V1965 'Case)))
(defun shen/shen\.prolog-aritycheck
    (V1970 V1971)
  (cl-flet
      ((tail-trampoline
        (V1970 V1971)
        (shen/cond
         ((shen/and
           (shen/cons\? V1971)
           (shen/internal/predicate->shen
            (null
             (nthcdr 1 V1971))))
          (shen/-
           (shen/length
            (shen/hd V1971))
           1))
         ((shen/and
           (shen/cons\? V1971)
           (shen/cons\?
            (nthcdr 1 V1971)))
          (shen/if
           (shen/=
            (shen/length
             (shen/hd V1971))
            (shen/length
             (shen/hd
              (nthcdr 1 V1971))))
           (vector
            (list V1970
                  (nthcdr 1 V1971)))
           (shen/simple-error
            (shen/cn "arity error in prolog procedure "
                     (shen/shen\.app
                      (list V1970)
                      "\n" 'shen\.a)))))
         (shen/true
          (shen/shen\.f_error 'shen\.prolog-aritycheck)))))
    (let
        ((result
          (funcall #'tail-trampoline V1970 V1971)))
      (while
          (vectorp result)
        (setq result
              (apply #'tail-trampoline
                     (aref result 0))))
      result)))
(defun shen/shen\.linearise-clause
    (V1973)
  (shen/cond
   ((shen/and
     (shen/cons\? V1973)
     (shen/and
      (shen/cons\?
       (nthcdr 1 V1973))
      (shen/and
       (shen/= ':-
               (shen/hd
                (nthcdr 1 V1973)))
       (shen/and
        (shen/cons\?
         (nthcdr 2 V1973))
        (shen/internal/predicate->shen
         (null
          (nthcdr 3 V1973)))))))
    (shen/let Linear
              (shen/shen\.linearise
               (append
                (list
                 (shen/hd V1973))
                (nthcdr 2 V1973)))
              (shen/shen\.clause_form Linear)))
   (shen/true
    (shen/shen\.f_error 'shen\.linearise-clause))))
(defun shen/shen\.clause_form
    (V1975)
  (shen/cond
   ((shen/and
     (shen/cons\? V1975)
     (shen/and
      (shen/cons\?
       (nthcdr 1 V1975))
      (shen/internal/predicate->shen
       (null
        (nthcdr 2 V1975)))))
    (list
     (shen/shen\.explicit_modes
      (shen/hd V1975))
     ':-
     (shen/shen\.cf_help
      (shen/hd
       (nthcdr 1 V1975)))))
   (shen/true
    (shen/shen\.f_error 'shen\.clause_form))))
(defun shen/shen\.explicit_modes
    (V1977)
  (shen/cond
   ((shen/cons\? V1977)
    (append
     (list
      (shen/hd V1977))
     (shen/map
      (shen/lambda X
                   (shen/shen\.em_help X))
      (nthcdr 1 V1977))))
   (shen/true
    (shen/shen\.f_error 'shen\.explicit_modes))))
(defun shen/shen\.em_help
    (V1979)
  (shen/cond
   ((shen/and
     (shen/cons\? V1979)
     (shen/and
      (shen/= 'mode
              (shen/hd V1979))
      (shen/and
       (shen/cons\?
        (nthcdr 1 V1979))
       (shen/and
        (shen/cons\?
         (nthcdr 2 V1979))
        (shen/internal/predicate->shen
         (null
          (nthcdr 3 V1979)))))))
    V1979)
   (shen/true
    (list 'mode V1979 '+))))
(defun shen/shen\.cf_help
    (V1981)
  (shen/cond
   ((shen/and
     (shen/cons\? V1981)
     (shen/and
      (shen/= 'where
              (shen/hd V1981))
      (shen/and
       (shen/cons\?
        (nthcdr 1 V1981))
       (shen/and
        (shen/cons\?
         (shen/hd
          (nthcdr 1 V1981)))
        (shen/and
         (shen/= '=
                 (shen/hd
                  (shen/hd
                   (nthcdr 1 V1981))))
         (shen/and
          (shen/cons\?
           (nthcdr 1
                   (shen/hd
                    (nthcdr 1 V1981))))
          (shen/and
           (shen/cons\?
            (nthcdr 2
                    (shen/hd
                     (nthcdr 1 V1981))))
           (shen/and
            (shen/internal/predicate->shen
             (null
              (nthcdr 3
                      (shen/hd
                       (nthcdr 1 V1981)))))
            (shen/and
             (shen/cons\?
              (nthcdr 2 V1981))
             (shen/internal/predicate->shen
              (null
               (nthcdr 3 V1981))))))))))))
    (append
     (list
      (append
       (list
        (shen/if
         (shen/value 'shen\.*occurs*)
         'unify! 'unify))
       (nthcdr 1
               (shen/hd
                (nthcdr 1 V1981)))))
     (shen/shen\.cf_help
      (shen/hd
       (nthcdr 2 V1981)))))
   (shen/true V1981)))
(defun shen/occurs-check
    (V1987)
  (shen/cond
   ((shen/= '+ V1987)
    (shen/set 'shen\.*occurs* 'true))
   ((shen/= '- V1987)
    (shen/set 'shen\.*occurs* 'false))
   (shen/true
    (shen/simple-error "occurs-check expects + or -\n"))))
(defun shen/shen\.aum
    (V1990 V1991)
  (shen/cond
   ((shen/and
     (shen/cons\? V1990)
     (shen/and
      (shen/cons\?
       (shen/hd V1990))
      (shen/and
       (shen/cons\?
        (nthcdr 1 V1990))
       (shen/and
        (shen/= ':-
                (shen/hd
                 (nthcdr 1 V1990)))
        (shen/and
         (shen/cons\?
          (nthcdr 2 V1990))
         (shen/internal/predicate->shen
          (null
           (nthcdr 3 V1990))))))))
    (shen/let MuApplication
              (shen/shen\.make_mu_application
               (list 'shen\.mu
                     (nthcdr 1
                             (shen/hd V1990))
                     (shen/shen\.continuation_call
                      (nthcdr 1
                              (shen/hd V1990))
                      (shen/hd
                       (nthcdr 2 V1990))))
               V1991)
              (shen/shen\.mu_reduction MuApplication '+)))
   (shen/true
    (shen/shen\.f_error 'shen\.aum))))
(defun shen/shen\.continuation_call
    (V1994 V1995)
  (shen/let VTerms
            (append
             (list 'ProcessN)
             (shen/shen\.extract_vars V1994))
            (shen/let VBody
                      (shen/shen\.extract_vars V1995)
                      (shen/let Free
                                (shen/remove 'Throwcontrol
                                             (shen/difference VBody VTerms))
                                (shen/shen\.cc_help Free V1995)))))
(defun shen/remove
    (V1998 V1999)
  (shen/shen\.remove-h V1998 V1999 nil))
(defun shen/shen\.remove-h
    (V2006 V2007 V2008)
  (cl-flet
      ((tail-trampoline
        (V2006 V2007 V2008)
        (shen/cond
         ((shen/internal/predicate->shen
           (null V2007))
          (shen/reverse V2008))
         ((shen/and
           (shen/cons\? V2007)
           (shen/=
            (shen/hd V2007)
            V2006))
          (vector
           (list
            (shen/hd V2007)
            (nthcdr 1 V2007)
            V2008)))
         ((shen/cons\? V2007)
          (vector
           (list V2006
                 (nthcdr 1 V2007)
                 (append
                  (list
                   (shen/hd V2007))
                  V2008))))
         (shen/true
          (shen/shen\.f_error 'shen\.remove-h)))))
    (let
        ((result
          (funcall #'tail-trampoline V2006 V2007 V2008)))
      (while
          (vectorp result)
        (setq result
              (apply #'tail-trampoline
                     (aref result 0))))
      result)))
(defun shen/shen\.cc_help
    (V2011 V2012)
  (shen/cond
   ((shen/and
     (shen/internal/predicate->shen
      (null V2011))
     (shen/internal/predicate->shen
      (null V2012)))
    (list 'shen\.pop 'shen\.the 'shen\.stack))
   ((shen/internal/predicate->shen
     (null V2012))
    (list 'shen\.rename 'shen\.the 'shen\.variables 'in V2011 'and 'shen\.then
          (list 'shen\.pop 'shen\.the 'shen\.stack)))
   ((shen/internal/predicate->shen
     (null V2011))
    (list 'call 'shen\.the 'shen\.continuation V2012))
   (shen/true
    (list 'shen\.rename 'shen\.the 'shen\.variables 'in V2011 'and 'shen\.then
          (list 'call 'shen\.the 'shen\.continuation V2012)))))
(defun shen/shen\.make_mu_application
    (V2015 V2016)
  (shen/cond
   ((shen/and
     (shen/cons\? V2015)
     (shen/and
      (shen/= 'shen\.mu
              (shen/hd V2015))
      (shen/and
       (shen/cons\?
        (nthcdr 1 V2015))
       (shen/and
        (shen/internal/predicate->shen
         (null
          (shen/hd
           (nthcdr 1 V2015))))
        (shen/and
         (shen/cons\?
          (nthcdr 2 V2015))
         (shen/and
          (shen/internal/predicate->shen
           (null
            (nthcdr 3 V2015)))
          (shen/internal/predicate->shen
           (null V2016))))))))
    (shen/hd
     (nthcdr 2 V2015)))
   ((shen/and
     (shen/cons\? V2015)
     (shen/and
      (shen/= 'shen\.mu
              (shen/hd V2015))
      (shen/and
       (shen/cons\?
        (nthcdr 1 V2015))
       (shen/and
        (shen/cons\?
         (shen/hd
          (nthcdr 1 V2015)))
        (shen/and
         (shen/cons\?
          (nthcdr 2 V2015))
         (shen/and
          (shen/internal/predicate->shen
           (null
            (nthcdr 3 V2015)))
          (shen/cons\? V2016)))))))
    (list
     (list 'shen\.mu
           (shen/hd
            (shen/hd
             (nthcdr 1 V2015)))
           (shen/shen\.make_mu_application
            (append
             (list 'shen\.mu
                   (nthcdr 1
                           (shen/hd
                            (nthcdr 1 V2015))))
             (nthcdr 2 V2015))
            (nthcdr 1 V2016)))
     (shen/hd V2016)))
   (shen/true
    (shen/shen\.f_error 'shen\.make_mu_application))))
(defun shen/shen\.mu_reduction
    (V2025 V2026)
  (cl-flet
      ((tail-trampoline
        (V2025 V2026)
        (shen/cond
         ((shen/and
           (shen/cons\? V2025)
           (shen/and
            (shen/cons\?
             (shen/hd V2025))
            (shen/and
             (shen/= 'shen\.mu
                     (shen/hd
                      (shen/hd V2025)))
             (shen/and
              (shen/cons\?
               (nthcdr 1
                       (shen/hd V2025)))
              (shen/and
               (shen/cons\?
                (shen/hd
                 (nthcdr 1
                         (shen/hd V2025))))
               (shen/and
                (shen/= 'mode
                        (shen/hd
                         (shen/hd
                          (nthcdr 1
                                  (shen/hd V2025)))))
                (shen/and
                 (shen/cons\?
                  (nthcdr 1
                          (shen/hd
                           (nthcdr 1
                                   (shen/hd V2025)))))
                 (shen/and
                  (shen/cons\?
                   (nthcdr 2
                           (shen/hd
                            (nthcdr 1
                                    (shen/hd V2025)))))
                  (shen/and
                   (shen/internal/predicate->shen
                    (null
                     (nthcdr 3
                             (shen/hd
                              (nthcdr 1
                                      (shen/hd V2025))))))
                   (shen/and
                    (shen/cons\?
                     (nthcdr 2
                             (shen/hd V2025)))
                    (shen/and
                     (shen/internal/predicate->shen
                      (null
                       (nthcdr 3
                               (shen/hd V2025))))
                     (shen/and
                      (shen/cons\?
                       (nthcdr 1 V2025))
                      (shen/internal/predicate->shen
                       (null
                        (nthcdr 2 V2025)))))))))))))))
          (vector
           (list
            (append
             (list
              (append
               (list 'shen\.mu
                     (shen/hd
                      (nthcdr 1
                              (shen/hd
                               (nthcdr 1
                                       (shen/hd V2025))))))
               (nthcdr 2
                       (shen/hd V2025))))
             (nthcdr 1 V2025))
            (shen/hd
             (nthcdr 2
                     (shen/hd
                      (nthcdr 1
                              (shen/hd V2025))))))))
         ((shen/and
           (shen/cons\? V2025)
           (shen/and
            (shen/cons\?
             (shen/hd V2025))
            (shen/and
             (shen/= 'shen\.mu
                     (shen/hd
                      (shen/hd V2025)))
             (shen/and
              (shen/cons\?
               (nthcdr 1
                       (shen/hd V2025)))
              (shen/and
               (shen/cons\?
                (nthcdr 2
                        (shen/hd V2025)))
               (shen/and
                (shen/internal/predicate->shen
                 (null
                  (nthcdr 3
                          (shen/hd V2025))))
                (shen/and
                 (shen/cons\?
                  (nthcdr 1 V2025))
                 (shen/and
                  (shen/internal/predicate->shen
                   (null
                    (nthcdr 2 V2025)))
                  (shen/= '_
                          (shen/hd
                           (nthcdr 1
                                   (shen/hd V2025))))))))))))
          (vector
           (list
            (shen/hd
             (nthcdr 2
                     (shen/hd V2025)))
            V2026)))
         ((shen/and
           (shen/cons\? V2025)
           (shen/and
            (shen/cons\?
             (shen/hd V2025))
            (shen/and
             (shen/= 'shen\.mu
                     (shen/hd
                      (shen/hd V2025)))
             (shen/and
              (shen/cons\?
               (nthcdr 1
                       (shen/hd V2025)))
              (shen/and
               (shen/cons\?
                (nthcdr 2
                        (shen/hd V2025)))
               (shen/and
                (shen/internal/predicate->shen
                 (null
                  (nthcdr 3
                          (shen/hd V2025))))
                (shen/and
                 (shen/cons\?
                  (nthcdr 1 V2025))
                 (shen/and
                  (shen/internal/predicate->shen
                   (null
                    (nthcdr 2 V2025)))
                  (shen/shen\.ephemeral_variable\?
                   (shen/hd
                    (nthcdr 1
                            (shen/hd V2025)))
                   (shen/hd
                    (nthcdr 1 V2025)))))))))))
          (shen/subst
           (shen/hd
            (nthcdr 1 V2025))
           (shen/hd
            (nthcdr 1
                    (shen/hd V2025)))
           (shen/shen\.mu_reduction
            (shen/hd
             (nthcdr 2
                     (shen/hd V2025)))
            V2026)))
         ((shen/and
           (shen/cons\? V2025)
           (shen/and
            (shen/cons\?
             (shen/hd V2025))
            (shen/and
             (shen/= 'shen\.mu
                     (shen/hd
                      (shen/hd V2025)))
             (shen/and
              (shen/cons\?
               (nthcdr 1
                       (shen/hd V2025)))
              (shen/and
               (shen/cons\?
                (nthcdr 2
                        (shen/hd V2025)))
               (shen/and
                (shen/internal/predicate->shen
                 (null
                  (nthcdr 3
                          (shen/hd V2025))))
                (shen/and
                 (shen/cons\?
                  (nthcdr 1 V2025))
                 (shen/and
                  (shen/internal/predicate->shen
                   (null
                    (nthcdr 2 V2025)))
                  (shen/variable\?
                   (shen/hd
                    (nthcdr 1
                            (shen/hd V2025))))))))))))
          (list 'let
                (shen/hd
                 (nthcdr 1
                         (shen/hd V2025)))
                'shen\.be
                (shen/hd
                 (nthcdr 1 V2025))
                'in
                (shen/shen\.mu_reduction
                 (shen/hd
                  (nthcdr 2
                          (shen/hd V2025)))
                 V2026)))
         ((shen/and
           (shen/cons\? V2025)
           (shen/and
            (shen/cons\?
             (shen/hd V2025))
            (shen/and
             (shen/= 'shen\.mu
                     (shen/hd
                      (shen/hd V2025)))
             (shen/and
              (shen/cons\?
               (nthcdr 1
                       (shen/hd V2025)))
              (shen/and
               (shen/cons\?
                (nthcdr 2
                        (shen/hd V2025)))
               (shen/and
                (shen/internal/predicate->shen
                 (null
                  (nthcdr 3
                          (shen/hd V2025))))
                (shen/and
                 (shen/cons\?
                  (nthcdr 1 V2025))
                 (shen/and
                  (shen/internal/predicate->shen
                   (null
                    (nthcdr 2 V2025)))
                  (shen/and
                   (shen/= '- V2026)
                   (shen/shen\.prolog_constant\?
                    (shen/hd
                     (nthcdr 1
                             (shen/hd V2025)))))))))))))
          (shen/let Z
                    (shen/gensym 'V)
                    (list 'let Z 'shen\.be
                          (append
                           (list 'shen\.the 'shen\.result 'shen\.of 'shen\.dereferencing)
                           (nthcdr 1 V2025))
                          'in
                          (list 'if
                                (list Z 'is 'identical 'shen\.to
                                      (shen/hd
                                       (nthcdr 1
                                               (shen/hd V2025))))
                                'shen\.then
                                (shen/shen\.mu_reduction
                                 (shen/hd
                                  (nthcdr 2
                                          (shen/hd V2025)))
                                 '-)
                                'shen\.else 'shen\.failed!))))
         ((shen/and
           (shen/cons\? V2025)
           (shen/and
            (shen/cons\?
             (shen/hd V2025))
            (shen/and
             (shen/= 'shen\.mu
                     (shen/hd
                      (shen/hd V2025)))
             (shen/and
              (shen/cons\?
               (nthcdr 1
                       (shen/hd V2025)))
              (shen/and
               (shen/cons\?
                (nthcdr 2
                        (shen/hd V2025)))
               (shen/and
                (shen/internal/predicate->shen
                 (null
                  (nthcdr 3
                          (shen/hd V2025))))
                (shen/and
                 (shen/cons\?
                  (nthcdr 1 V2025))
                 (shen/and
                  (shen/internal/predicate->shen
                   (null
                    (nthcdr 2 V2025)))
                  (shen/and
                   (shen/= '+ V2026)
                   (shen/shen\.prolog_constant\?
                    (shen/hd
                     (nthcdr 1
                             (shen/hd V2025)))))))))))))
          (shen/let Z
                    (shen/gensym 'V)
                    (list 'let Z 'shen\.be
                          (append
                           (list 'shen\.the 'shen\.result 'shen\.of 'shen\.dereferencing)
                           (nthcdr 1 V2025))
                          'in
                          (list 'if
                                (list Z 'is 'identical 'shen\.to
                                      (shen/hd
                                       (nthcdr 1
                                               (shen/hd V2025))))
                                'shen\.then
                                (shen/shen\.mu_reduction
                                 (shen/hd
                                  (nthcdr 2
                                          (shen/hd V2025)))
                                 '+)
                                'shen\.else
                                (list 'if
                                      (list Z 'is 'shen\.a 'shen\.variable)
                                      'shen\.then
                                      (list 'bind Z 'shen\.to
                                            (shen/hd
                                             (nthcdr 1
                                                     (shen/hd V2025)))
                                            'in
                                            (shen/shen\.mu_reduction
                                             (shen/hd
                                              (nthcdr 2
                                                      (shen/hd V2025)))
                                             '+))
                                      'shen\.else 'shen\.failed!)))))
         ((shen/and
           (shen/cons\? V2025)
           (shen/and
            (shen/cons\?
             (shen/hd V2025))
            (shen/and
             (shen/= 'shen\.mu
                     (shen/hd
                      (shen/hd V2025)))
             (shen/and
              (shen/cons\?
               (nthcdr 1
                       (shen/hd V2025)))
              (shen/and
               (shen/cons\?
                (shen/hd
                 (nthcdr 1
                         (shen/hd V2025))))
               (shen/and
                (shen/cons\?
                 (nthcdr 2
                         (shen/hd V2025)))
                (shen/and
                 (shen/internal/predicate->shen
                  (null
                   (nthcdr 3
                           (shen/hd V2025))))
                 (shen/and
                  (shen/cons\?
                   (nthcdr 1 V2025))
                  (shen/and
                   (shen/internal/predicate->shen
                    (null
                     (nthcdr 2 V2025)))
                   (shen/= '- V2026))))))))))
          (shen/let Z
                    (shen/gensym 'V)
                    (list 'let Z 'shen\.be
                          (append
                           (list 'shen\.the 'shen\.result 'shen\.of 'shen\.dereferencing)
                           (nthcdr 1 V2025))
                          'in
                          (list 'if
                                (list Z 'is 'shen\.a 'shen\.non-empty 'list)
                                'shen\.then
                                (shen/shen\.mu_reduction
                                 (list
                                  (list 'shen\.mu
                                        (shen/hd
                                         (shen/hd
                                          (nthcdr 1
                                                  (shen/hd V2025))))
                                        (list
                                         (append
                                          (list 'shen\.mu
                                                (nthcdr 1
                                                        (shen/hd
                                                         (nthcdr 1
                                                                 (shen/hd V2025)))))
                                          (nthcdr 2
                                                  (shen/hd V2025)))
                                         (list 'shen\.the 'tail 'shen\.of Z)))
                                  (list 'shen\.the 'head 'shen\.of Z))
                                 '-)
                                'shen\.else 'shen\.failed!))))
         ((shen/and
           (shen/cons\? V2025)
           (shen/and
            (shen/cons\?
             (shen/hd V2025))
            (shen/and
             (shen/= 'shen\.mu
                     (shen/hd
                      (shen/hd V2025)))
             (shen/and
              (shen/cons\?
               (nthcdr 1
                       (shen/hd V2025)))
              (shen/and
               (shen/cons\?
                (shen/hd
                 (nthcdr 1
                         (shen/hd V2025))))
               (shen/and
                (shen/cons\?
                 (nthcdr 2
                         (shen/hd V2025)))
                (shen/and
                 (shen/internal/predicate->shen
                  (null
                   (nthcdr 3
                           (shen/hd V2025))))
                 (shen/and
                  (shen/cons\?
                   (nthcdr 1 V2025))
                  (shen/and
                   (shen/internal/predicate->shen
                    (null
                     (nthcdr 2 V2025)))
                   (shen/= '+ V2026))))))))))
          (shen/let Z
                    (shen/gensym 'V)
                    (list 'let Z 'shen\.be
                          (append
                           (list 'shen\.the 'shen\.result 'shen\.of 'shen\.dereferencing)
                           (nthcdr 1 V2025))
                          'in
                          (list 'if
                                (list Z 'is 'shen\.a 'shen\.non-empty 'list)
                                'shen\.then
                                (shen/shen\.mu_reduction
                                 (list
                                  (list 'shen\.mu
                                        (shen/hd
                                         (shen/hd
                                          (nthcdr 1
                                                  (shen/hd V2025))))
                                        (list
                                         (append
                                          (list 'shen\.mu
                                                (nthcdr 1
                                                        (shen/hd
                                                         (nthcdr 1
                                                                 (shen/hd V2025)))))
                                          (nthcdr 2
                                                  (shen/hd V2025)))
                                         (list 'shen\.the 'tail 'shen\.of Z)))
                                  (list 'shen\.the 'head 'shen\.of Z))
                                 '+)
                                'shen\.else
                                (list 'if
                                      (list Z 'is 'shen\.a 'shen\.variable)
                                      'shen\.then
                                      (list 'shen\.rename 'shen\.the 'shen\.variables 'in
                                            (shen/shen\.extract_vars
                                             (shen/hd
                                              (nthcdr 1
                                                      (shen/hd V2025))))
                                            'and 'shen\.then
                                            (list 'bind Z 'shen\.to
                                                  (shen/shen\.rcons_form
                                                   (shen/shen\.remove_modes
                                                    (shen/hd
                                                     (nthcdr 1
                                                             (shen/hd V2025)))))
                                                  'in
                                                  (shen/shen\.mu_reduction
                                                   (shen/hd
                                                    (nthcdr 2
                                                            (shen/hd V2025)))
                                                   '+)))
                                      'shen\.else 'shen\.failed!)))))
         (shen/true V2025))))
    (let
        ((result
          (funcall #'tail-trampoline V2025 V2026)))
      (while
          (vectorp result)
        (setq result
              (apply #'tail-trampoline
                     (aref result 0))))
      result)))
(defun shen/shen\.rcons_form
    (V2028)
  (shen/cond
   ((shen/cons\? V2028)
    (list 'cons
          (shen/shen\.rcons_form
           (shen/hd V2028))
          (shen/shen\.rcons_form
           (nthcdr 1 V2028))))
   (shen/true V2028)))
(defun shen/shen\.remove_modes
    (V2030)
  (cl-flet
      ((tail-trampoline
        (V2030)
        (shen/cond
         ((shen/and
           (shen/cons\? V2030)
           (shen/and
            (shen/= 'mode
                    (shen/hd V2030))
            (shen/and
             (shen/cons\?
              (nthcdr 1 V2030))
             (shen/and
              (shen/cons\?
               (nthcdr 2 V2030))
              (shen/and
               (shen/= '+
                       (shen/hd
                        (nthcdr 2 V2030)))
               (shen/internal/predicate->shen
                (null
                 (nthcdr 3 V2030))))))))
          (vector
           (list
            (shen/hd
             (nthcdr 1 V2030)))))
         ((shen/and
           (shen/cons\? V2030)
           (shen/and
            (shen/= 'mode
                    (shen/hd V2030))
            (shen/and
             (shen/cons\?
              (nthcdr 1 V2030))
             (shen/and
              (shen/cons\?
               (nthcdr 2 V2030))
              (shen/and
               (shen/= '-
                       (shen/hd
                        (nthcdr 2 V2030)))
               (shen/internal/predicate->shen
                (null
                 (nthcdr 3 V2030))))))))
          (vector
           (list
            (shen/hd
             (nthcdr 1 V2030)))))
         ((shen/cons\? V2030)
          (append
           (list
            (shen/shen\.remove_modes
             (shen/hd V2030)))
           (shen/shen\.remove_modes
            (nthcdr 1 V2030))))
         (shen/true V2030))))
    (let
        ((result
          (funcall #'tail-trampoline V2030)))
      (while
          (vectorp result)
        (setq result
              (apply #'tail-trampoline
                     (aref result 0))))
      result)))
(defun shen/shen\.ephemeral_variable\?
    (V2033 V2034)
  (shen/and
   (shen/variable\? V2033)
   (shen/variable\? V2034)))
(defun shen/shen\.prolog_constant\?
    (V2044)
  (shen/cond
   ((shen/cons\? V2044)
    'false)
   (shen/true 'true)))
(defun shen/shen\.aum_to_shen
    (V2046)
  (cl-flet
      ((tail-trampoline
        (V2046)
        (shen/cond
         ((shen/and
           (shen/cons\? V2046)
           (shen/and
            (shen/= 'let
                    (shen/hd V2046))
            (shen/and
             (shen/cons\?
              (nthcdr 1 V2046))
             (shen/and
              (shen/cons\?
               (nthcdr 2 V2046))
              (shen/and
               (shen/= 'shen\.be
                       (shen/hd
                        (nthcdr 2 V2046)))
               (shen/and
                (shen/cons\?
                 (nthcdr 3 V2046))
                (shen/and
                 (shen/cons\?
                  (nthcdr 4 V2046))
                 (shen/and
                  (shen/= 'in
                          (shen/hd
                           (nthcdr 4 V2046)))
                  (shen/and
                   (shen/cons\?
                    (nthcdr 5 V2046))
                   (shen/internal/predicate->shen
                    (null
                     (nthcdr 6 V2046))))))))))))
          (list 'let
                (shen/hd
                 (nthcdr 1 V2046))
                (shen/shen\.aum_to_shen
                 (shen/hd
                  (nthcdr 3 V2046)))
                (shen/shen\.aum_to_shen
                 (shen/hd
                  (nthcdr 5 V2046)))))
         ((shen/and
           (shen/cons\? V2046)
           (shen/and
            (shen/= 'shen\.the
                    (shen/hd V2046))
            (shen/and
             (shen/cons\?
              (nthcdr 1 V2046))
             (shen/and
              (shen/= 'shen\.result
                      (shen/hd
                       (nthcdr 1 V2046)))
              (shen/and
               (shen/cons\?
                (nthcdr 2 V2046))
               (shen/and
                (shen/= 'shen\.of
                        (shen/hd
                         (nthcdr 2 V2046)))
                (shen/and
                 (shen/cons\?
                  (nthcdr 3 V2046))
                 (shen/and
                  (shen/= 'shen\.dereferencing
                          (shen/hd
                           (nthcdr 3 V2046)))
                  (shen/and
                   (shen/cons\?
                    (nthcdr 4 V2046))
                   (shen/internal/predicate->shen
                    (null
                     (nthcdr 5 V2046))))))))))))
          (list 'shen\.lazyderef
                (shen/shen\.aum_to_shen
                 (shen/hd
                  (nthcdr 4 V2046)))
                'ProcessN))
         ((shen/and
           (shen/cons\? V2046)
           (shen/and
            (shen/= 'if
                    (shen/hd V2046))
            (shen/and
             (shen/cons\?
              (nthcdr 1 V2046))
             (shen/and
              (shen/cons\?
               (nthcdr 2 V2046))
              (shen/and
               (shen/= 'shen\.then
                       (shen/hd
                        (nthcdr 2 V2046)))
               (shen/and
                (shen/cons\?
                 (nthcdr 3 V2046))
                (shen/and
                 (shen/cons\?
                  (nthcdr 4 V2046))
                 (shen/and
                  (shen/= 'shen\.else
                          (shen/hd
                           (nthcdr 4 V2046)))
                  (shen/and
                   (shen/cons\?
                    (nthcdr 5 V2046))
                   (shen/internal/predicate->shen
                    (null
                     (nthcdr 6 V2046))))))))))))
          (list 'if
                (shen/shen\.aum_to_shen
                 (shen/hd
                  (nthcdr 1 V2046)))
                (shen/shen\.aum_to_shen
                 (shen/hd
                  (nthcdr 3 V2046)))
                (shen/shen\.aum_to_shen
                 (shen/hd
                  (nthcdr 5 V2046)))))
         ((shen/and
           (shen/cons\? V2046)
           (shen/and
            (shen/cons\?
             (nthcdr 1 V2046))
            (shen/and
             (shen/= 'is
                     (shen/hd
                      (nthcdr 1 V2046)))
             (shen/and
              (shen/cons\?
               (nthcdr 2 V2046))
              (shen/and
               (shen/= 'shen\.a
                       (shen/hd
                        (nthcdr 2 V2046)))
               (shen/and
                (shen/cons\?
                 (nthcdr 3 V2046))
                (shen/and
                 (shen/= 'shen\.variable
                         (shen/hd
                          (nthcdr 3 V2046)))
                 (shen/internal/predicate->shen
                  (null
                   (nthcdr 4 V2046))))))))))
          (list 'shen\.pvar\?
                (shen/hd V2046)))
         ((shen/and
           (shen/cons\? V2046)
           (shen/and
            (shen/cons\?
             (nthcdr 1 V2046))
            (shen/and
             (shen/= 'is
                     (shen/hd
                      (nthcdr 1 V2046)))
             (shen/and
              (shen/cons\?
               (nthcdr 2 V2046))
              (shen/and
               (shen/= 'shen\.a
                       (shen/hd
                        (nthcdr 2 V2046)))
               (shen/and
                (shen/cons\?
                 (nthcdr 3 V2046))
                (shen/and
                 (shen/= 'shen\.non-empty
                         (shen/hd
                          (nthcdr 3 V2046)))
                 (shen/and
                  (shen/cons\?
                   (nthcdr 4 V2046))
                  (shen/and
                   (shen/= 'list
                           (shen/hd
                            (nthcdr 4 V2046)))
                   (shen/internal/predicate->shen
                    (null
                     (nthcdr 5 V2046))))))))))))
          (list 'cons\?
                (shen/hd V2046)))
         ((shen/and
           (shen/cons\? V2046)
           (shen/and
            (shen/= 'shen\.rename
                    (shen/hd V2046))
            (shen/and
             (shen/cons\?
              (nthcdr 1 V2046))
             (shen/and
              (shen/= 'shen\.the
                      (shen/hd
                       (nthcdr 1 V2046)))
              (shen/and
               (shen/cons\?
                (nthcdr 2 V2046))
               (shen/and
                (shen/= 'shen\.variables
                        (shen/hd
                         (nthcdr 2 V2046)))
                (shen/and
                 (shen/cons\?
                  (nthcdr 3 V2046))
                 (shen/and
                  (shen/= 'in
                          (shen/hd
                           (nthcdr 3 V2046)))
                  (shen/and
                   (shen/cons\?
                    (nthcdr 4 V2046))
                   (shen/and
                    (shen/internal/predicate->shen
                     (null
                      (shen/hd
                       (nthcdr 4 V2046))))
                    (shen/and
                     (shen/cons\?
                      (nthcdr 5 V2046))
                     (shen/and
                      (shen/= 'and
                              (shen/hd
                               (nthcdr 5 V2046)))
                      (shen/and
                       (shen/cons\?
                        (nthcdr 6 V2046))
                       (shen/and
                        (shen/= 'shen\.then
                                (shen/hd
                                 (nthcdr 6 V2046)))
                        (shen/and
                         (shen/cons\?
                          (nthcdr 7 V2046))
                         (shen/internal/predicate->shen
                          (null
                           (nthcdr 8 V2046))))))))))))))))))
          (vector
           (list
            (shen/hd
             (nthcdr 7 V2046)))))
         ((shen/and
           (shen/cons\? V2046)
           (shen/and
            (shen/= 'shen\.rename
                    (shen/hd V2046))
            (shen/and
             (shen/cons\?
              (nthcdr 1 V2046))
             (shen/and
              (shen/= 'shen\.the
                      (shen/hd
                       (nthcdr 1 V2046)))
              (shen/and
               (shen/cons\?
                (nthcdr 2 V2046))
               (shen/and
                (shen/= 'shen\.variables
                        (shen/hd
                         (nthcdr 2 V2046)))
                (shen/and
                 (shen/cons\?
                  (nthcdr 3 V2046))
                 (shen/and
                  (shen/= 'in
                          (shen/hd
                           (nthcdr 3 V2046)))
                  (shen/and
                   (shen/cons\?
                    (nthcdr 4 V2046))
                   (shen/and
                    (shen/cons\?
                     (shen/hd
                      (nthcdr 4 V2046)))
                    (shen/and
                     (shen/cons\?
                      (nthcdr 5 V2046))
                     (shen/and
                      (shen/= 'and
                              (shen/hd
                               (nthcdr 5 V2046)))
                      (shen/and
                       (shen/cons\?
                        (nthcdr 6 V2046))
                       (shen/and
                        (shen/= 'shen\.then
                                (shen/hd
                                 (nthcdr 6 V2046)))
                        (shen/and
                         (shen/cons\?
                          (nthcdr 7 V2046))
                         (shen/internal/predicate->shen
                          (null
                           (nthcdr 8 V2046))))))))))))))))))
          (list 'let
                (shen/hd
                 (shen/hd
                  (nthcdr 4 V2046)))
                (list 'shen\.newpv 'ProcessN)
                (shen/shen\.aum_to_shen
                 (append
                  (list 'shen\.rename 'shen\.the 'shen\.variables 'in
                        (nthcdr 1
                                (shen/hd
                                 (nthcdr 4 V2046))))
                  (nthcdr 5 V2046)))))
         ((shen/and
           (shen/cons\? V2046)
           (shen/and
            (shen/= 'bind
                    (shen/hd V2046))
            (shen/and
             (shen/cons\?
              (nthcdr 1 V2046))
             (shen/and
              (shen/cons\?
               (nthcdr 2 V2046))
              (shen/and
               (shen/= 'shen\.to
                       (shen/hd
                        (nthcdr 2 V2046)))
               (shen/and
                (shen/cons\?
                 (nthcdr 3 V2046))
                (shen/and
                 (shen/cons\?
                  (nthcdr 4 V2046))
                 (shen/and
                  (shen/= 'in
                          (shen/hd
                           (nthcdr 4 V2046)))
                  (shen/and
                   (shen/cons\?
                    (nthcdr 5 V2046))
                   (shen/internal/predicate->shen
                    (null
                     (nthcdr 6 V2046))))))))))))
          (list 'do
                (list 'shen\.bindv
                      (shen/hd
                       (nthcdr 1 V2046))
                      (shen/shen\.chwild
                       (shen/hd
                        (nthcdr 3 V2046)))
                      'ProcessN)
                (list 'let 'Result
                      (shen/shen\.aum_to_shen
                       (shen/hd
                        (nthcdr 5 V2046)))
                      (list 'do
                            (list 'shen\.unbindv
                                  (shen/hd
                                   (nthcdr 1 V2046))
                                  'ProcessN)
                            'Result))))
         ((shen/and
           (shen/cons\? V2046)
           (shen/and
            (shen/cons\?
             (nthcdr 1 V2046))
            (shen/and
             (shen/= 'is
                     (shen/hd
                      (nthcdr 1 V2046)))
             (shen/and
              (shen/cons\?
               (nthcdr 2 V2046))
              (shen/and
               (shen/= 'identical
                       (shen/hd
                        (nthcdr 2 V2046)))
               (shen/and
                (shen/cons\?
                 (nthcdr 3 V2046))
                (shen/and
                 (shen/= 'shen\.to
                         (shen/hd
                          (nthcdr 3 V2046)))
                 (shen/and
                  (shen/cons\?
                   (nthcdr 4 V2046))
                  (shen/internal/predicate->shen
                   (null
                    (nthcdr 5 V2046)))))))))))
          (list '=
                (shen/hd
                 (nthcdr 4 V2046))
                (shen/hd V2046)))
         ((shen/= 'shen\.failed! V2046)
          'false)
         ((shen/and
           (shen/cons\? V2046)
           (shen/and
            (shen/= 'shen\.the
                    (shen/hd V2046))
            (shen/and
             (shen/cons\?
              (nthcdr 1 V2046))
             (shen/and
              (shen/= 'head
                      (shen/hd
                       (nthcdr 1 V2046)))
              (shen/and
               (shen/cons\?
                (nthcdr 2 V2046))
               (shen/and
                (shen/= 'shen\.of
                        (shen/hd
                         (nthcdr 2 V2046)))
                (shen/and
                 (shen/cons\?
                  (nthcdr 3 V2046))
                 (shen/internal/predicate->shen
                  (null
                   (nthcdr 4 V2046))))))))))
          (append
           (list 'hd)
           (nthcdr 3 V2046)))
         ((shen/and
           (shen/cons\? V2046)
           (shen/and
            (shen/= 'shen\.the
                    (shen/hd V2046))
            (shen/and
             (shen/cons\?
              (nthcdr 1 V2046))
             (shen/and
              (shen/= 'tail
                      (shen/hd
                       (nthcdr 1 V2046)))
              (shen/and
               (shen/cons\?
                (nthcdr 2 V2046))
               (shen/and
                (shen/= 'shen\.of
                        (shen/hd
                         (nthcdr 2 V2046)))
                (shen/and
                 (shen/cons\?
                  (nthcdr 3 V2046))
                 (shen/internal/predicate->shen
                  (null
                   (nthcdr 4 V2046))))))))))
          (append
           (list 'tl)
           (nthcdr 3 V2046)))
         ((shen/and
           (shen/cons\? V2046)
           (shen/and
            (shen/= 'shen\.pop
                    (shen/hd V2046))
            (shen/and
             (shen/cons\?
              (nthcdr 1 V2046))
             (shen/and
              (shen/= 'shen\.the
                      (shen/hd
                       (nthcdr 1 V2046)))
              (shen/and
               (shen/cons\?
                (nthcdr 2 V2046))
               (shen/and
                (shen/= 'shen\.stack
                        (shen/hd
                         (nthcdr 2 V2046)))
                (shen/internal/predicate->shen
                 (null
                  (nthcdr 3 V2046)))))))))
          (list 'do
                (list 'shen\.incinfs)
                (list 'thaw 'Continuation)))
         ((shen/and
           (shen/cons\? V2046)
           (shen/and
            (shen/= 'call
                    (shen/hd V2046))
            (shen/and
             (shen/cons\?
              (nthcdr 1 V2046))
             (shen/and
              (shen/= 'shen\.the
                      (shen/hd
                       (nthcdr 1 V2046)))
              (shen/and
               (shen/cons\?
                (nthcdr 2 V2046))
               (shen/and
                (shen/= 'shen\.continuation
                        (shen/hd
                         (nthcdr 2 V2046)))
                (shen/and
                 (shen/cons\?
                  (nthcdr 3 V2046))
                 (shen/internal/predicate->shen
                  (null
                   (nthcdr 4 V2046))))))))))
          (list 'do
                (list 'shen\.incinfs)
                (shen/shen\.call_the_continuation
                 (shen/shen\.chwild
                  (shen/hd
                   (nthcdr 3 V2046)))
                 'ProcessN 'Continuation)))
         (shen/true V2046))))
    (let
        ((result
          (funcall #'tail-trampoline V2046)))
      (while
          (vectorp result)
        (setq result
              (apply #'tail-trampoline
                     (aref result 0))))
      result)))
(defun shen/shen\.chwild
    (V2048)
  (shen/cond
   ((shen/= V2048 '_)
    (list 'shen\.newpv 'ProcessN))
   ((shen/cons\? V2048)
    (shen/map
     (shen/lambda Z
                  (shen/shen\.chwild Z))
     V2048))
   (shen/true V2048)))
(defun shen/shen\.newpv
    (V2050)
  (shen/let Count+1
            (1+
             (shen/<-address
              (shen/value 'shen\.*varcounter*)
              V2050))
            (shen/let IncVar
                      (shen/address->
                       (shen/value 'shen\.*varcounter*)
                       V2050 Count+1)
                      (shen/let Vector
                                (shen/<-address
                                 (shen/value 'shen\.*prologvectors*)
                                 V2050)
                                (shen/let ResizeVectorIfNeeded
                                          (shen/if
                                           (shen/= Count+1
                                                   (shen/limit Vector))
                                           (shen/shen\.resizeprocessvector V2050 Count+1)
                                           'shen\.skip)
                                          (shen/shen\.mk-pvar Count+1))))))
(defun shen/shen\.resizeprocessvector
    (V2053 V2054)
  (shen/let Vector
            (shen/<-address
             (shen/value 'shen\.*prologvectors*)
             V2053)
            (shen/let BigVector
                      (shen/shen\.resize-vector Vector
                                                (shen/+ V2054 V2054)
                                                'shen\.-null-)
                      (shen/address->
                       (shen/value 'shen\.*prologvectors*)
                       V2053 BigVector))))
(defun shen/shen\.resize-vector
    (V2058 V2059 V2060)
  (shen/let BigVector
            (shen/address->
             (shen/absvector
              (1+ V2059))
             0 V2059)
            (shen/shen\.copy-vector V2058 BigVector
                                    (shen/limit V2058)
                                    V2059 V2060)))
(defun shen/shen\.copy-vector
    (V2066 V2067 V2068 V2069 V2070)
  (shen/shen\.copy-vector-stage-2
   (1+ V2068)
   (1+ V2069)
   V2070
   (shen/shen\.copy-vector-stage-1 1 V2066 V2067
                                   (1+ V2068))))
(defun shen/shen\.copy-vector-stage-1
    (V2078 V2079 V2080 V2081)
  (cl-flet
      ((tail-trampoline
        (V2078 V2079 V2080 V2081)
        (shen/cond
         ((shen/= V2081 V2078)
          V2080)
         (shen/true
          (vector
           (list
            (1+ V2078)
            V2079
            (shen/address-> V2080 V2078
                            (shen/<-address V2079 V2078))
            V2081))))))
    (let
        ((result
          (funcall #'tail-trampoline V2078 V2079 V2080 V2081)))
      (while
          (vectorp result)
        (setq result
              (apply #'tail-trampoline
                     (aref result 0))))
      result)))
(defun shen/shen\.copy-vector-stage-2
    (V2089 V2090 V2091 V2092)
  (cl-flet
      ((tail-trampoline
        (V2089 V2090 V2091 V2092)
        (shen/cond
         ((shen/= V2090 V2089)
          V2092)
         (shen/true
          (vector
           (list
            (1+ V2089)
            V2090 V2091
            (shen/address-> V2092 V2089 V2091)))))))
    (let
        ((result
          (funcall #'tail-trampoline V2089 V2090 V2091 V2092)))
      (while
          (vectorp result)
        (setq result
              (apply #'tail-trampoline
                     (aref result 0))))
      result)))
(defun shen/shen\.mk-pvar
    (V2094)
  (shen/address->
   (shen/address->
    (shen/absvector 2)
    0 'shen\.pvar)
   1 V2094))
(defun shen/shen\.pvar\?
    (V2096)
  (shen/and
   (shen/absvector\? V2096)
   (shen/=
    (shen/trap-error
     (shen/<-address V2096 0)
     (shen/lambda E 'shen\.not-pvar))
    'shen\.pvar)))
(defun shen/shen\.bindv
    (V2100 V2101 V2102)
  (shen/let Vector
            (shen/<-address
             (shen/value 'shen\.*prologvectors*)
             V2102)
            (shen/address-> Vector
                            (shen/<-address V2100 1)
                            V2101)))
(defun shen/shen\.unbindv
    (V2105 V2106)
  (shen/let Vector
            (shen/<-address
             (shen/value 'shen\.*prologvectors*)
             V2106)
            (shen/address-> Vector
                            (shen/<-address V2105 1)
                            'shen\.-null-)))
(defun shen/shen\.incinfs nil
  (shen/set 'shen\.*infs*
            (1+
             (shen/value 'shen\.*infs*))))
(defun shen/shen\.call_the_continuation
    (V2110 V2111 V2112)
  (shen/cond
   ((shen/and
     (shen/cons\? V2110)
     (shen/and
      (shen/cons\?
       (shen/hd V2110))
      (shen/internal/predicate->shen
       (null
        (nthcdr 1 V2110)))))
    (append
     (list
      (shen/hd
       (shen/hd V2110)))
     (shen/append
      (nthcdr 1
              (shen/hd V2110))
      (list V2111 V2112))))
   ((shen/and
     (shen/cons\? V2110)
     (shen/cons\?
      (shen/hd V2110)))
    (shen/let NewContinuation
              (shen/shen\.newcontinuation
               (nthcdr 1 V2110)
               V2111 V2112)
              (append
               (list
                (shen/hd
                 (shen/hd V2110)))
               (shen/append
                (nthcdr 1
                        (shen/hd V2110))
                (list V2111 NewContinuation)))))
   (shen/true
    (shen/shen\.f_error 'shen\.call_the_continuation))))
(defun shen/shen\.newcontinuation
    (V2116 V2117 V2118)
  (shen/cond
   ((shen/internal/predicate->shen
     (null V2116))
    V2118)
   ((shen/and
     (shen/cons\? V2116)
     (shen/cons\?
      (shen/hd V2116)))
    (list 'freeze
          (append
           (list
            (shen/hd
             (shen/hd V2116)))
           (shen/append
            (nthcdr 1
                    (shen/hd V2116))
            (list V2117
                  (shen/shen\.newcontinuation
                   (nthcdr 1 V2116)
                   V2117 V2118))))))
   (shen/true
    (shen/shen\.f_error 'shen\.newcontinuation))))
(defun shen/return
    (V2126 V2127 V2128)
  (shen/shen\.deref V2126 V2127))
(defun shen/shen\.measure&return
    (V2136 V2137 V2138)
  (shen/do
   (shen/shen\.prhush
    (shen/shen\.app
     (shen/value 'shen\.*infs*)
     " inferences\n" 'shen\.a)
    (shen/stoutput))
   (shen/shen\.deref V2136 V2137)))
(defun shen/unify
    (V2143 V2144 V2145 V2146)
  (shen/shen\.lzy=
   (shen/shen\.lazyderef V2143 V2145)
   (shen/shen\.lazyderef V2144 V2145)
   V2145 V2146))
(defun shen/shen\.lzy=
    (V2168 V2169 V2170 V2171)
  (cl-flet
      ((tail-trampoline
        (V2168 V2169 V2170 V2171)
        (shen/cond
         ((shen/= V2169 V2168)
          (shen/thaw V2171))
         ((shen/shen\.pvar\? V2168)
          (shen/bind V2168 V2169 V2170 V2171))
         ((shen/shen\.pvar\? V2169)
          (shen/bind V2169 V2168 V2170 V2171))
         ((shen/and
           (shen/cons\? V2168)
           (shen/cons\? V2169))
          (vector
           (list
            (shen/shen\.lazyderef
             (shen/hd V2168)
             V2170)
            (shen/shen\.lazyderef
             (shen/hd V2169)
             V2170)
            V2170
            (shen/freeze
             (shen/shen\.lzy=
              (shen/shen\.lazyderef
               (nthcdr 1 V2168)
               V2170)
              (shen/shen\.lazyderef
               (nthcdr 1 V2169)
               V2170)
              V2170 V2171)))))
         (shen/true 'false))))
    (let
        ((result
          (funcall #'tail-trampoline V2168 V2169 V2170 V2171)))
      (while
          (vectorp result)
        (setq result
              (apply #'tail-trampoline
                     (aref result 0))))
      result)))
(defun shen/shen\.deref
    (V2174 V2175)
  (cl-flet
      ((tail-trampoline
        (V2174 V2175)
        (shen/cond
         ((shen/cons\? V2174)
          (append
           (list
            (shen/shen\.deref
             (shen/hd V2174)
             V2175))
           (shen/shen\.deref
            (nthcdr 1 V2174)
            V2175)))
         (shen/true
          (shen/if
           (shen/shen\.pvar\? V2174)
           (shen/let Value
                     (shen/shen\.valvector V2174 V2175)
                     (shen/if
                      (shen/= Value 'shen\.-null-)
                      V2174
                      (vector
                       (list Value V2175))))
           V2174)))))
    (let
        ((result
          (funcall #'tail-trampoline V2174 V2175)))
      (while
          (vectorp result)
        (setq result
              (apply #'tail-trampoline
                     (aref result 0))))
      result)))
(defun shen/shen\.lazyderef
    (X ProcessN)
  (let
      ((Current X)
       (KeepLooking t))
    (while KeepLooking
      (shen/if
       (shen/shen\.pvar\? Current)
       (shen/let Value
                 (shen/shen\.valvector Current ProcessN)
                 (shen/if
                  (shen/= Value 'shen\.-null-)
                  (setq KeepLooking nil)
                  (setq Current Value)))
       (setq KeepLooking nil)))
    Current))
(defun shen/shen\.valvector
    (V2182 V2183)
  (shen/<-address
   (shen/<-address
    (shen/value 'shen\.*prologvectors*)
    V2183)
   (shen/<-address V2182 1)))
(defun shen/unify!
    (V2188 V2189 V2190 V2191)
  (shen/shen\.lzy=!
   (shen/shen\.lazyderef V2188 V2190)
   (shen/shen\.lazyderef V2189 V2190)
   V2190 V2191))
(defun shen/shen\.lzy=!
    (V2213 V2214 V2215 V2216)
  (cl-flet
      ((tail-trampoline
        (V2213 V2214 V2215 V2216)
        (shen/cond
         ((shen/= V2214 V2213)
          (shen/thaw V2216))
         ((shen/and
           (shen/shen\.pvar\? V2213)
           (shen/not
            (shen/shen\.occurs\? V2213
                                 (shen/shen\.deref V2214 V2215))))
          (shen/bind V2213 V2214 V2215 V2216))
         ((shen/and
           (shen/shen\.pvar\? V2214)
           (shen/not
            (shen/shen\.occurs\? V2214
                                 (shen/shen\.deref V2213 V2215))))
          (shen/bind V2214 V2213 V2215 V2216))
         ((shen/and
           (shen/cons\? V2213)
           (shen/cons\? V2214))
          (vector
           (list
            (shen/shen\.lazyderef
             (shen/hd V2213)
             V2215)
            (shen/shen\.lazyderef
             (shen/hd V2214)
             V2215)
            V2215
            (shen/freeze
             (shen/shen\.lzy=!
              (shen/shen\.lazyderef
               (nthcdr 1 V2213)
               V2215)
              (shen/shen\.lazyderef
               (nthcdr 1 V2214)
               V2215)
              V2215 V2216)))))
         (shen/true 'false))))
    (let
        ((result
          (funcall #'tail-trampoline V2213 V2214 V2215 V2216)))
      (while
          (vectorp result)
        (setq result
              (apply #'tail-trampoline
                     (aref result 0))))
      result)))
(defun shen/shen\.occurs\?
    (V2228 V2229)
  (shen/cond
   ((shen/= V2229 V2228)
    'true)
   ((shen/cons\? V2229)
    (shen/or
     (shen/shen\.occurs\? V2228
                          (shen/hd V2229))
     (shen/shen\.occurs\? V2228
                          (nthcdr 1 V2229))))
   (shen/true 'false)))
(defun shen/identical
    (V2234 V2235 V2236 V2237)
  (shen/shen\.lzy==
   (shen/shen\.lazyderef V2234 V2236)
   (shen/shen\.lazyderef V2235 V2236)
   V2236 V2237))
(defun shen/shen\.lzy==
    (V2259 V2260 V2261 V2262)
  (cl-flet
      ((tail-trampoline
        (V2259 V2260 V2261 V2262)
        (shen/cond
         ((shen/= V2260 V2259)
          (shen/thaw V2262))
         ((shen/and
           (shen/cons\? V2259)
           (shen/cons\? V2260))
          (vector
           (list
            (shen/shen\.lazyderef
             (shen/hd V2259)
             V2261)
            (shen/shen\.lazyderef
             (shen/hd V2260)
             V2261)
            V2261
            (shen/freeze
             (shen/shen\.lzy==
              (nthcdr 1 V2259)
              (nthcdr 1 V2260)
              V2261 V2262)))))
         (shen/true 'false))))
    (let
        ((result
          (funcall #'tail-trampoline V2259 V2260 V2261 V2262)))
      (while
          (vectorp result)
        (setq result
              (apply #'tail-trampoline
                     (aref result 0))))
      result)))
(defun shen/shen\.pvar
    (V2264)
  (shen/cn "Var"
           (shen/shen\.app
            (shen/<-address V2264 1)
            "" 'shen\.a)))
(defun shen/bind
    (V2269 V2270 V2271 V2272)
  (shen/do
   (shen/shen\.bindv V2269 V2270 V2271)
   (shen/let Result
             (shen/thaw V2272)
             (shen/do
              (shen/shen\.unbindv V2269 V2271)
              Result))))
(defun shen/fwhen
    (V2290 V2291 V2292)
  (shen/cond
   ((shen/= 'true V2290)
    (shen/thaw V2292))
   ((shen/= 'false V2290)
    'false)
   (shen/true
    (shen/simple-error
     (shen/cn "fwhen expects a boolean: not "
              (shen/shen\.app V2290 "%" 'shen\.s))))))
(defun shen/call
    (V2308 V2309 V2310)
  (shen/cond
   ((shen/cons\? V2308)
    (shen/shen\.call-help
     (shen/function
      (shen/shen\.lazyderef
       (shen/hd V2308)
       V2309))
     (nthcdr 1 V2308)
     V2309 V2310))
   (shen/true 'false)))
(defun shen/shen\.call-help
    (V2315 V2316 V2317 V2318)
  (cl-flet
      ((tail-trampoline
        (V2315 V2316 V2317 V2318)
        (shen/cond
         ((shen/internal/predicate->shen
           (null V2316))
          (shen/internal/apply-higher-order-function V2315
                                                     (list V2317 V2318)))
         ((shen/cons\? V2316)
          (vector
           (list
            (shen/internal/apply-higher-order-function V2315
                                                       (list
                                                        (shen/hd V2316)))
            (nthcdr 1 V2316)
            V2317 V2318)))
         (shen/true
          (shen/shen\.f_error 'shen\.call-help)))))
    (let
        ((result
          (funcall #'tail-trampoline V2315 V2316 V2317 V2318)))
      (while
          (vectorp result)
        (setq result
              (apply #'tail-trampoline
                     (aref result 0))))
      result)))
(defun shen/shen\.intprolog
    (V2320)
  (shen/cond
   ((shen/and
     (shen/cons\? V2320)
     (shen/cons\?
      (shen/hd V2320)))
    (shen/let ProcessN
              (shen/shen\.start-new-prolog-process)
              (shen/shen\.intprolog-help
               (shen/hd
                (shen/hd V2320))
               (shen/shen\.insert-prolog-variables
                (list
                 (nthcdr 1
                         (shen/hd V2320))
                 (nthcdr 1 V2320))
                ProcessN)
               ProcessN)))
   (shen/true
    (shen/shen\.f_error 'shen\.intprolog))))
(defun shen/shen\.intprolog-help
    (V2324 V2325 V2326)
  (shen/cond
   ((shen/and
     (shen/cons\? V2325)
     (shen/and
      (shen/cons\?
       (nthcdr 1 V2325))
      (shen/internal/predicate->shen
       (null
        (nthcdr 2 V2325)))))
    (shen/shen\.intprolog-help-help V2324
                                    (shen/hd V2325)
                                    (shen/hd
                                     (nthcdr 1 V2325))
                                    V2326))
   (shen/true
    (shen/shen\.f_error 'shen\.intprolog-help))))
(defun shen/shen\.intprolog-help-help
    (V2331 V2332 V2333 V2334)
  (cl-flet
      ((tail-trampoline
        (V2331 V2332 V2333 V2334)
        (shen/cond
         ((shen/internal/predicate->shen
           (null V2332))
          (shen/internal/apply-higher-order-function V2331
                                                     (list V2334
                                                           (shen/freeze
                                                            (shen/shen\.call-rest V2333 V2334)))))
         ((shen/cons\? V2332)
          (vector
           (list
            (shen/internal/apply-higher-order-function V2331
                                                       (list
                                                        (shen/hd V2332)))
            (nthcdr 1 V2332)
            V2333 V2334)))
         (shen/true
          (shen/shen\.f_error 'shen\.intprolog-help-help)))))
    (let
        ((result
          (funcall #'tail-trampoline V2331 V2332 V2333 V2334)))
      (while
          (vectorp result)
        (setq result
              (apply #'tail-trampoline
                     (aref result 0))))
      result)))
(defun shen/shen\.call-rest
    (V2339 V2340)
  (cl-flet
      ((tail-trampoline
        (V2339 V2340)
        (shen/cond
         ((shen/internal/predicate->shen
           (null V2339))
          'true)
         ((shen/and
           (shen/cons\? V2339)
           (shen/and
            (shen/cons\?
             (shen/hd V2339))
            (shen/cons\?
             (nthcdr 1
                     (shen/hd V2339)))))
          (vector
           (list
            (append
             (list
              (append
               (list
                (shen/internal/apply-function-expression
                 (shen/hd
                  (shen/hd V2339))
                 (list
                  (shen/hd
                   (nthcdr 1
                           (shen/hd V2339))))))
               (nthcdr 2
                       (shen/hd V2339))))
             (nthcdr 1 V2339))
            V2340)))
         ((shen/and
           (shen/cons\? V2339)
           (shen/and
            (shen/cons\?
             (shen/hd V2339))
            (shen/internal/predicate->shen
             (null
              (nthcdr 1
                      (shen/hd V2339))))))
          (shen/internal/apply-function-expression
           (shen/hd
            (shen/hd V2339))
           (list V2340
                 (shen/freeze
                  (shen/shen\.call-rest
                   (nthcdr 1 V2339)
                   V2340)))))
         (shen/true
          (shen/shen\.f_error 'shen\.call-rest)))))
    (let
        ((result
          (funcall #'tail-trampoline V2339 V2340)))
      (while
          (vectorp result)
        (setq result
              (apply #'tail-trampoline
                     (aref result 0))))
      result)))
(defun shen/shen\.start-new-prolog-process nil
  (shen/let IncrementProcessCounter
            (shen/set 'shen\.*process-counter*
                      (1+
                       (shen/value 'shen\.*process-counter*)))
            (shen/shen\.initialise-prolog IncrementProcessCounter)))
(defun shen/shen\.insert-prolog-variables
    (V2343 V2344)
  (shen/shen\.insert-prolog-variables-help V2343
                                           (shen/shen\.flatten V2343)
                                           V2344))
(defun shen/shen\.insert-prolog-variables-help
    (V2352 V2353 V2354)
  (cl-flet
      ((tail-trampoline
        (V2352 V2353 V2354)
        (shen/cond
         ((shen/internal/predicate->shen
           (null V2353))
          V2352)
         ((shen/and
           (shen/cons\? V2353)
           (shen/variable\?
            (shen/hd V2353)))
          (shen/let V
                    (shen/shen\.newpv V2354)
                    (shen/let XV/Y
                              (shen/subst V
                                          (shen/hd V2353)
                                          V2352)
                              (shen/let Z-Y
                                        (shen/remove
                                         (shen/hd V2353)
                                         (nthcdr 1 V2353))
                                        (vector
                                         (list XV/Y Z-Y V2354))))))
         ((shen/cons\? V2353)
          (vector
           (list V2352
                 (nthcdr 1 V2353)
                 V2354)))
         (shen/true
          (shen/shen\.f_error 'shen\.insert-prolog-variables-help)))))
    (let
        ((result
          (funcall #'tail-trampoline V2352 V2353 V2354)))
      (while
          (vectorp result)
        (setq result
              (apply #'tail-trampoline
                     (aref result 0))))
      result)))
(defun shen/shen\.initialise-prolog
    (V2356)
  (shen/let Vector
            (shen/address->
             (shen/value 'shen\.*prologvectors*)
             V2356
             (shen/shen\.fillvector
              (shen/vector 10)
              1 10 'shen\.-null-))
            (shen/let Counter
                      (shen/address->
                       (shen/value 'shen\.*varcounter*)
                       V2356 1)
                      V2356)))
(defun shen/shen\.f_error
    (V4048)
  (shen/do
   (shen/shen\.prhush
    (shen/cn "partial function "
             (shen/shen\.app V4048 ";\n" 'shen\.a))
    (shen/stoutput))
   (shen/do
    (shen/if
     (shen/and
      (shen/not
       (shen/shen\.tracked\? V4048))
      (shen/y-or-n\?
       (shen/cn "track "
                (shen/shen\.app V4048 "? " 'shen\.a))))
     (shen/shen\.track-function
      (shen/ps V4048))
     'shen\.ok)
    (shen/simple-error "aborted"))))
(defun shen/shen\.tracked\?
    (V4050)
  (shen/element\? V4050
                  (shen/value 'shen\.*tracking*)))
(defun shen/track
    (V4052)
  (shen/let Source
            (shen/ps V4052)
            (shen/shen\.track-function Source)))
(defun shen/shen\.track-function
    (V4054)
  (shen/cond
   ((shen/and
     (shen/cons\? V4054)
     (shen/and
      (shen/= 'defun
              (shen/hd V4054))
      (shen/and
       (shen/cons\?
        (nthcdr 1 V4054))
       (shen/and
        (shen/cons\?
         (nthcdr 2 V4054))
        (shen/and
         (shen/cons\?
          (nthcdr 3 V4054))
         (shen/internal/predicate->shen
          (null
           (nthcdr 4 V4054))))))))
    (shen/let KL
              (list 'defun
                    (shen/hd
                     (nthcdr 1 V4054))
                    (shen/hd
                     (nthcdr 2 V4054))
                    (shen/shen\.insert-tracking-code
                     (shen/hd
                      (nthcdr 1 V4054))
                     (shen/hd
                      (nthcdr 2 V4054))
                     (shen/hd
                      (nthcdr 3 V4054))))
              (shen/let Ob
                        (shen/eval-kl KL)
                        (shen/let Tr
                                  (shen/set 'shen\.*tracking*
                                            (append
                                             (list Ob)
                                             (shen/value 'shen\.*tracking*)))
                                  Ob))))
   (shen/true
    (shen/shen\.f_error 'shen\.track-function))))
(defun shen/shen\.insert-tracking-code
    (V4058 V4059 V4060)
  (list 'do
        (list 'set 'shen\.*call*
              (list '+
                    (list 'value 'shen\.*call*)
                    1))
        (list 'do
              (list 'shen\.input-track
                    (list 'value 'shen\.*call*)
                    V4058
                    (shen/shen\.cons_form V4059))
              (list 'do
                    (list 'shen\.terpri-or-read-char)
                    (list 'let 'Result V4060
                          (list 'do
                                (list 'shen\.output-track
                                      (list 'value 'shen\.*call*)
                                      V4058 'Result)
                                (list 'do
                                      (list 'set 'shen\.*call*
                                            (list '-
                                                  (list 'value 'shen\.*call*)
                                                  1))
                                      (list 'do
                                            (list 'shen\.terpri-or-read-char)
                                            'Result))))))))
(shen/set 'shen\.*step* 'false)
(defun shen/step
    (V4066)
  (shen/cond
   ((shen/= '+ V4066)
    (shen/set 'shen\.*step* 'true))
   ((shen/= '- V4066)
    (shen/set 'shen\.*step* 'false))
   (shen/true
    (shen/simple-error "step expects a + or a -.\n"))))
(defun shen/spy
    (V4072)
  (shen/cond
   ((shen/= '+ V4072)
    (shen/set 'shen\.*spy* 'true))
   ((shen/= '- V4072)
    (shen/set 'shen\.*spy* 'false))
   (shen/true
    (shen/simple-error "spy expects a + or a -.\n"))))
(defun shen/shen\.terpri-or-read-char nil
  (shen/if
   (shen/value 'shen\.*step*)
   (shen/shen\.check-byte
    (shen/read-byte
     (shen/value '*stinput*)))
   (shen/nl 1)))
(defun shen/shen\.check-byte
    (V4078)
  (shen/cond
   ((shen/= V4078
            (shen/shen\.hat))
    (shen/simple-error "aborted"))
   (shen/true 'true)))
(defun shen/shen\.input-track
    (V4082 V4083 V4084)
  (shen/do
   (shen/shen\.prhush
    (shen/cn "\n"
             (shen/shen\.app
              (shen/shen\.spaces V4082)
              (shen/cn "<"
                       (shen/shen\.app V4082
                                       (shen/cn "> Inputs to "
                                                (shen/shen\.app V4083
                                                                (shen/cn " \n"
                                                                         (shen/shen\.app
                                                                          (shen/shen\.spaces V4082)
                                                                          "" 'shen\.a))
                                                                'shen\.a))
                                       'shen\.a))
              'shen\.a))
    (shen/stoutput))
   (shen/shen\.recursively-print V4084)))
(defun shen/shen\.recursively-print
    (V4086)
  (cl-flet
      ((tail-trampoline
        (V4086)
        (shen/cond
         ((shen/internal/predicate->shen
           (null V4086))
          (shen/shen\.prhush " ==>"
                             (shen/stoutput)))
         ((shen/cons\? V4086)
          (shen/do
           (shen/print
            (shen/hd V4086))
           (shen/do
            (shen/shen\.prhush ", "
                               (shen/stoutput))
            (vector
             (list
              (nthcdr 1 V4086))))))
         (shen/true
          (shen/shen\.f_error 'shen\.recursively-print)))))
    (let
        ((result
          (funcall #'tail-trampoline V4086)))
      (while
          (vectorp result)
        (setq result
              (apply #'tail-trampoline
                     (aref result 0))))
      result)))
(defun shen/shen\.spaces
    (V4088)
  (shen/cond
   ((shen/= 0 V4088)
    "")
   (shen/true
    (shen/cn " "
             (shen/shen\.spaces
              (shen/- V4088 1))))))
(defun shen/shen\.output-track
    (V4092 V4093 V4094)
  (shen/shen\.prhush
   (shen/cn "\n"
            (shen/shen\.app
             (shen/shen\.spaces V4092)
             (shen/cn "<"
                      (shen/shen\.app V4092
                                      (shen/cn "> Output from "
                                               (shen/shen\.app V4093
                                                               (shen/cn " \n"
                                                                        (shen/shen\.app
                                                                         (shen/shen\.spaces V4092)
                                                                         (shen/cn "==> "
                                                                                  (shen/shen\.app V4094 "" 'shen\.s))
                                                                         'shen\.a))
                                                               'shen\.a))
                                      'shen\.a))
             'shen\.a))
   (shen/stoutput)))
(defun shen/untrack
    (F)
  (progn
    (shen/set shen\.*tracking*
              (shen/internal/delete-first-eq F
                                             (shen/value shen\.*tracking*)))
    (shen/eval
     (shen/ps F))))
(defun shen/profile
    (V4098)
  (shen/shen\.profile-help
   (shen/ps V4098)))
(defun shen/shen\.profile-help
    (V4104)
  (shen/cond
   ((shen/and
     (shen/cons\? V4104)
     (shen/and
      (shen/= 'defun
              (shen/hd V4104))
      (shen/and
       (shen/cons\?
        (nthcdr 1 V4104))
       (shen/and
        (shen/cons\?
         (nthcdr 2 V4104))
        (shen/and
         (shen/cons\?
          (nthcdr 3 V4104))
         (shen/internal/predicate->shen
          (null
           (nthcdr 4 V4104))))))))
    (shen/let G
              (shen/gensym 'shen\.f)
              (shen/let Profile
                        (list 'defun
                              (shen/hd
                               (nthcdr 1 V4104))
                              (shen/hd
                               (nthcdr 2 V4104))
                              (shen/shen\.profile-func
                               (shen/hd
                                (nthcdr 1 V4104))
                               (shen/hd
                                (nthcdr 2 V4104))
                               (append
                                (list G)
                                (shen/hd
                                 (nthcdr 2 V4104)))))
                        (shen/let Def
                                  (list 'defun G
                                        (shen/hd
                                         (nthcdr 2 V4104))
                                        (shen/subst G
                                                    (shen/hd
                                                     (nthcdr 1 V4104))
                                                    (shen/hd
                                                     (nthcdr 3 V4104))))
                                  (shen/let CompileProfile
                                            (shen/shen\.eval-without-macros Profile)
                                            (shen/let CompileG
                                                      (shen/shen\.eval-without-macros Def)
                                                      (shen/hd
                                                       (nthcdr 1 V4104))))))))
   (shen/true
    (shen/simple-error "Cannot profile.\n"))))
(defun shen/unprofile
    (V4106)
  (shen/untrack V4106))
(defun shen/shen\.profile-func
    (V4110 V4111 V4112)
  (list 'let 'Start
        (list 'get-time 'run)
        (list 'let 'Result V4112
              (list 'let 'Finish
                    (list '-
                          (list 'get-time 'run)
                          'Start)
                    (list 'let 'Record
                          (list 'shen\.put-profile V4110
                                (list '+
                                      (list 'shen\.get-profile V4110)
                                      'Finish))
                          'Result)))))
(defun shen/profile-results
    (V4114)
  (shen/let Results
            (shen/shen\.get-profile V4114)
            (shen/let Initialise
                      (shen/shen\.put-profile V4114 0)
                      (shen/@p V4114 Results))))
(defun shen/shen\.get-profile
    (V4116)
  (shen/trap-error
   (shen/get V4116 'profile
             (shen/value '*property-vector*))
   (shen/lambda E 0)))
(defun shen/shen\.put-profile
    (V4119 V4120)
  (shen/put V4119 'profile V4120
            (shen/value '*property-vector*)))
(defun shen/load
    (V1673)
  (shen/let Load
            (shen/let Start
                      (shen/get-time 'run)
                      (shen/let Result
                                (shen/shen\.load-help
                                 (shen/value 'shen\.*tc*)
                                 (shen/read-file V1673))
                                (shen/let Finish
                                          (shen/get-time 'run)
                                          (shen/let Time
                                                    (shen/- Finish Start)
                                                    (shen/let Message
                                                              (shen/shen\.prhush
                                                               (shen/cn "\nrun time: "
                                                                        (shen/cn
                                                                         (shen/str Time)
                                                                         " secs\n"))
                                                               (shen/stoutput))
                                                              Result)))))
            (shen/let Infs
                      (shen/if
                       (shen/value 'shen\.*tc*)
                       (shen/shen\.prhush
                        (shen/cn "\ntypechecked in "
                                 (shen/shen\.app
                                  (shen/inferences)
                                  " inferences\n" 'shen\.a))
                        (shen/stoutput))
                       'shen\.skip)
                      'loaded)))
(defun shen/shen\.load-help
    (V1680 V1681)
  (shen/cond
   ((shen/= 'false V1680)
    (shen/shen\.for-each
     (shen/lambda X
                  (shen/shen\.prhush
                   (shen/shen\.app
                    (shen/shen\.eval-without-macros X)
                    "\n" 'shen\.s)
                   (shen/stoutput)))
     V1681))
   (shen/true
    (shen/let RemoveSynonyms
              (shen/mapcan
               (shen/lambda X
                            (shen/shen\.remove-synonyms X))
               V1681)
              (shen/let Table
                        (shen/mapcan
                         (shen/lambda X
                                      (shen/shen\.typetable X))
                         RemoveSynonyms)
                        (shen/let Assume
                                  (shen/shen\.for-each
                                   (shen/lambda X
                                                (shen/shen\.assumetype X))
                                   Table)
                                  (shen/trap-error
                                   (shen/shen\.for-each
                                    (shen/lambda X
                                                 (shen/shen\.typecheck-and-load X))
                                    RemoveSynonyms)
                                   (shen/lambda E
                                                (shen/shen\.unwind-types E Table)))))))))
(defun shen/shen\.remove-synonyms
    (V1683)
  (shen/cond
   ((shen/and
     (shen/cons\? V1683)
     (shen/= 'shen\.synonyms-help
             (shen/hd V1683)))
    (shen/do
     (shen/eval V1683)
     nil))
   (shen/true
    (list V1683))))
(defun shen/shen\.typecheck-and-load
    (V1685)
  (shen/do
   (shen/nl 1)
   (shen/shen\.typecheck-and-evaluate V1685
                                      (shen/gensym 'A))))
(defun shen/shen\.typetable
    (V1691)
  (shen/cond
   ((shen/and
     (shen/cons\? V1691)
     (shen/and
      (shen/= 'define
              (shen/hd V1691))
      (shen/cons\?
       (nthcdr 1 V1691))))
    (shen/let Sig
              (shen/compile
               (shen/lambda Y
                            (shen/shen\.<sig+rest> Y))
               (nthcdr 2 V1691)
               (shen/lambda E
                            (shen/simple-error
                             (shen/shen\.app
                              (shen/hd
                               (nthcdr 1 V1691))
                              " lacks a proper signature.\n" 'shen\.a))))
              (list
               (append
                (list
                 (shen/hd
                  (nthcdr 1 V1691)))
                Sig))))
   (shen/true nil)))
(defun shen/shen\.assumetype
    (V1693)
  (shen/cond
   ((shen/cons\? V1693)
    (shen/declare
     (shen/hd V1693)
     (nthcdr 1 V1693)))
   (shen/true
    (shen/shen\.f_error 'shen\.assumetype))))
(defun shen/shen\.unwind-types
    (V1700 V1701)
  (cl-flet
      ((tail-trampoline
        (V1700 V1701)
        (shen/cond
         ((shen/internal/predicate->shen
           (null V1701))
          (shen/simple-error
           (shen/error-to-string V1700)))
         ((shen/and
           (shen/cons\? V1701)
           (shen/cons\?
            (shen/hd V1701)))
          (shen/do
           (shen/shen\.remtype
            (shen/hd
             (shen/hd V1701)))
           (vector
            (list V1700
                  (nthcdr 1 V1701)))))
         (shen/true
          (shen/shen\.f_error 'shen\.unwind-types)))))
    (let
        ((result
          (funcall #'tail-trampoline V1700 V1701)))
      (while
          (vectorp result)
        (setq result
              (apply #'tail-trampoline
                     (aref result 0))))
      result)))
(defun shen/shen\.remtype
    (V1703)
  (shen/set 'shen\.*signedfuncs*
            (shen/shen\.removetype V1703
                                   (shen/value 'shen\.*signedfuncs*))))
(defun shen/shen\.removetype
    (V1711 V1712)
  (cl-flet
      ((tail-trampoline
        (V1711 V1712)
        (shen/cond
         ((shen/internal/predicate->shen
           (null V1712))
          nil)
         ((shen/and
           (shen/cons\? V1712)
           (shen/and
            (shen/cons\?
             (shen/hd V1712))
            (shen/=
             (shen/hd
              (shen/hd V1712))
             V1711)))
          (vector
           (list
            (shen/hd
             (shen/hd V1712))
            (nthcdr 1 V1712))))
         ((shen/cons\? V1712)
          (append
           (list
            (shen/hd V1712))
           (shen/shen\.removetype V1711
                                  (nthcdr 1 V1712))))
         (shen/true
          (shen/shen\.f_error 'shen\.removetype)))))
    (let
        ((result
          (funcall #'tail-trampoline V1711 V1712)))
      (while
          (vectorp result)
        (setq result
              (apply #'tail-trampoline
                     (aref result 0))))
      result)))
(defun shen/shen\.<sig+rest>
    (V1714)
  (shen/let Parse_shen\.<signature>
            (shen/shen\.<signature> V1714)
            (shen/if
             (shen/not
              (shen/=
               (shen/fail)
               Parse_shen\.<signature>))
             (shen/let Parse_<!>
                       (shen/<!> Parse_shen\.<signature>)
                       (shen/if
                        (shen/not
                         (shen/=
                          (shen/fail)
                          Parse_<!>))
                        (shen/shen\.pair
                         (shen/hd Parse_<!>)
                         (shen/shen\.hdtl Parse_shen\.<signature>))
                        (shen/fail)))
             (shen/fail))))
(defun shen/write-to-file
    (V1717 V1718)
  (shen/let Stream
            (shen/open V1717 'out)
            (shen/let String
                      (shen/if
                       (shen/string\? V1718)
                       (shen/shen\.app V1718 "\n\n" 'shen\.a)
                       (shen/shen\.app V1718 "\n\n" 'shen\.s))
                      (shen/let Write
                                (shen/pr String Stream)
                                (shen/let Close
                                          (shen/close Stream)
                                          V1718)))))
(defun shen/pr
    (V4147 V4148)
  (shen/trap-error
   (shen/shen\.prh V4147 V4148 0)
   (shen/lambda E V4147)))
(defun shen/shen\.prh
    (V4152 V4153 V4154)
  (cl-flet
      ((tail-trampoline
        (V4152 V4153 V4154)
        (vector
         (list V4152 V4153
               (shen/shen\.write-char-and-inc V4152 V4153 V4154)))))
    (let
        ((result
          (funcall #'tail-trampoline V4152 V4153 V4154)))
      (while
          (vectorp result)
        (setq result
              (apply #'tail-trampoline
                     (aref result 0))))
      result)))
(defun shen/shen\.write-char-and-inc
    (V4158 V4159 V4160)
  (shen/do
   (shen/write-byte
    (shen/string->n
     (shen/pos V4158 V4160))
    V4159)
   (1+ V4160)))
(defun shen/print
    (V4162)
  (shen/let String
            (shen/shen\.insert V4162 "~S")
            (shen/let Print
                      (shen/shen\.prhush String
                                         (shen/stoutput))
                      V4162)))
(defun shen/shen\.prhush
    (V4165 V4166)
  (shen/if
   (shen/value '*hush*)
   V4165
   (shen/pr V4165 V4166)))
(defun shen/shen\.mkstr
    (V4169 V4170)
  (shen/cond
   ((shen/string\? V4169)
    (shen/shen\.mkstr-l
     (shen/shen\.proc-nl V4169)
     V4170))
   (shen/true
    (shen/shen\.mkstr-r
     (list 'shen\.proc-nl V4169)
     V4170))))
(defun shen/shen\.mkstr-l
    (V4173 V4174)
  (cl-flet
      ((tail-trampoline
        (V4173 V4174)
        (shen/cond
         ((shen/internal/predicate->shen
           (null V4174))
          V4173)
         ((shen/cons\? V4174)
          (vector
           (list
            (shen/shen\.insert-l
             (shen/hd V4174)
             V4173)
            (nthcdr 1 V4174))))
         (shen/true
          (shen/shen\.f_error 'shen\.mkstr-l)))))
    (let
        ((result
          (funcall #'tail-trampoline V4173 V4174)))
      (while
          (vectorp result)
        (setq result
              (apply #'tail-trampoline
                     (aref result 0))))
      result)))
(defun shen/shen\.insert-l
    (V4179 V4180)
  (shen/cond
   ((shen/= "" V4180)
    "")
   ((shen/and
     (shen/shen\.+string\? V4180)
     (shen/and
      (shen/= "~"
              (shen/pos V4180 0))
      (shen/and
       (shen/shen\.+string\?
        (shen/tlstr V4180))
       (shen/= "A"
               (shen/pos
                (shen/tlstr V4180)
                0)))))
    (list 'shen\.app V4179
          (shen/tlstr
           (shen/tlstr V4180))
          'shen\.a))
   ((shen/and
     (shen/shen\.+string\? V4180)
     (shen/and
      (shen/= "~"
              (shen/pos V4180 0))
      (shen/and
       (shen/shen\.+string\?
        (shen/tlstr V4180))
       (shen/= "R"
               (shen/pos
                (shen/tlstr V4180)
                0)))))
    (list 'shen\.app V4179
          (shen/tlstr
           (shen/tlstr V4180))
          'shen\.r))
   ((shen/and
     (shen/shen\.+string\? V4180)
     (shen/and
      (shen/= "~"
              (shen/pos V4180 0))
      (shen/and
       (shen/shen\.+string\?
        (shen/tlstr V4180))
       (shen/= "S"
               (shen/pos
                (shen/tlstr V4180)
                0)))))
    (list 'shen\.app V4179
          (shen/tlstr
           (shen/tlstr V4180))
          'shen\.s))
   ((shen/shen\.+string\? V4180)
    (shen/shen\.factor-cn
     (list 'cn
           (shen/pos V4180 0)
           (shen/shen\.insert-l V4179
                                (shen/tlstr V4180)))))
   ((shen/and
     (shen/cons\? V4180)
     (shen/and
      (shen/= 'cn
              (shen/hd V4180))
      (shen/and
       (shen/cons\?
        (nthcdr 1 V4180))
       (shen/and
        (shen/cons\?
         (nthcdr 2 V4180))
        (shen/internal/predicate->shen
         (null
          (nthcdr 3 V4180)))))))
    (list 'cn
          (shen/hd
           (nthcdr 1 V4180))
          (shen/shen\.insert-l V4179
                               (shen/hd
                                (nthcdr 2 V4180)))))
   ((shen/and
     (shen/cons\? V4180)
     (shen/and
      (shen/= 'shen\.app
              (shen/hd V4180))
      (shen/and
       (shen/cons\?
        (nthcdr 1 V4180))
       (shen/and
        (shen/cons\?
         (nthcdr 2 V4180))
        (shen/and
         (shen/cons\?
          (nthcdr 3 V4180))
         (shen/internal/predicate->shen
          (null
           (nthcdr 4 V4180))))))))
    (append
     (list 'shen\.app
           (shen/hd
            (nthcdr 1 V4180))
           (shen/shen\.insert-l V4179
                                (shen/hd
                                 (nthcdr 2 V4180))))
     (nthcdr 3 V4180)))
   (shen/true
    (shen/shen\.f_error 'shen\.insert-l))))
(defun shen/shen\.factor-cn
    (V4182)
  (shen/cond
   ((shen/and
     (shen/cons\? V4182)
     (shen/and
      (shen/= 'cn
              (shen/hd V4182))
      (shen/and
       (shen/cons\?
        (nthcdr 1 V4182))
       (shen/and
        (shen/cons\?
         (nthcdr 2 V4182))
        (shen/and
         (shen/cons\?
          (shen/hd
           (nthcdr 2 V4182)))
         (shen/and
          (shen/= 'cn
                  (shen/hd
                   (shen/hd
                    (nthcdr 2 V4182))))
          (shen/and
           (shen/cons\?
            (nthcdr 1
                    (shen/hd
                     (nthcdr 2 V4182))))
           (shen/and
            (shen/cons\?
             (nthcdr 2
                     (shen/hd
                      (nthcdr 2 V4182))))
            (shen/and
             (shen/internal/predicate->shen
              (null
               (nthcdr 3
                       (shen/hd
                        (nthcdr 2 V4182)))))
             (shen/and
              (shen/internal/predicate->shen
               (null
                (nthcdr 3 V4182)))
              (shen/and
               (shen/string\?
                (shen/hd
                 (nthcdr 1 V4182)))
               (shen/string\?
                (shen/hd
                 (nthcdr 1
                         (shen/hd
                          (nthcdr 2 V4182))))))))))))))))
    (append
     (list 'cn
           (shen/cn
            (shen/hd
             (nthcdr 1 V4182))
            (shen/hd
             (nthcdr 1
                     (shen/hd
                      (nthcdr 2 V4182))))))
     (nthcdr 2
             (shen/hd
              (nthcdr 2 V4182)))))
   (shen/true V4182)))
(defun shen/shen\.proc-nl
    (V4184)
  (shen/cond
   ((shen/= "" V4184)
    "")
   ((shen/and
     (shen/shen\.+string\? V4184)
     (shen/and
      (shen/= "~"
              (shen/pos V4184 0))
      (shen/and
       (shen/shen\.+string\?
        (shen/tlstr V4184))
       (shen/= "%"
               (shen/pos
                (shen/tlstr V4184)
                0)))))
    (shen/cn
     (shen/n->string 10)
     (shen/shen\.proc-nl
      (shen/tlstr
       (shen/tlstr V4184)))))
   ((shen/shen\.+string\? V4184)
    (shen/cn
     (shen/pos V4184 0)
     (shen/shen\.proc-nl
      (shen/tlstr V4184))))
   (shen/true
    (shen/shen\.f_error 'shen\.proc-nl))))
(defun shen/shen\.mkstr-r
    (V4187 V4188)
  (cl-flet
      ((tail-trampoline
        (V4187 V4188)
        (shen/cond
         ((shen/internal/predicate->shen
           (null V4188))
          V4187)
         ((shen/cons\? V4188)
          (vector
           (list
            (list 'shen\.insert
                  (shen/hd V4188)
                  V4187)
            (nthcdr 1 V4188))))
         (shen/true
          (shen/shen\.f_error 'shen\.mkstr-r)))))
    (let
        ((result
          (funcall #'tail-trampoline V4187 V4188)))
      (while
          (vectorp result)
        (setq result
              (apply #'tail-trampoline
                     (aref result 0))))
      result)))
(defun shen/shen\.insert
    (V4191 V4192)
  (shen/shen\.insert-h V4191 V4192 ""))
(defun shen/shen\.insert-h
    (V4198 V4199 V4200)
  (cl-flet
      ((tail-trampoline
        (V4198 V4199 V4200)
        (shen/cond
         ((shen/= "" V4199)
          V4200)
         ((shen/and
           (shen/shen\.+string\? V4199)
           (shen/and
            (shen/= "~"
                    (shen/pos V4199 0))
            (shen/and
             (shen/shen\.+string\?
              (shen/tlstr V4199))
             (shen/= "A"
                     (shen/pos
                      (shen/tlstr V4199)
                      0)))))
          (shen/cn V4200
                   (shen/shen\.app V4198
                                   (shen/tlstr
                                    (shen/tlstr V4199))
                                   'shen\.a)))
         ((shen/and
           (shen/shen\.+string\? V4199)
           (shen/and
            (shen/= "~"
                    (shen/pos V4199 0))
            (shen/and
             (shen/shen\.+string\?
              (shen/tlstr V4199))
             (shen/= "R"
                     (shen/pos
                      (shen/tlstr V4199)
                      0)))))
          (shen/cn V4200
                   (shen/shen\.app V4198
                                   (shen/tlstr
                                    (shen/tlstr V4199))
                                   'shen\.r)))
         ((shen/and
           (shen/shen\.+string\? V4199)
           (shen/and
            (shen/= "~"
                    (shen/pos V4199 0))
            (shen/and
             (shen/shen\.+string\?
              (shen/tlstr V4199))
             (shen/= "S"
                     (shen/pos
                      (shen/tlstr V4199)
                      0)))))
          (shen/cn V4200
                   (shen/shen\.app V4198
                                   (shen/tlstr
                                    (shen/tlstr V4199))
                                   'shen\.s)))
         ((shen/shen\.+string\? V4199)
          (vector
           (list V4198
                 (shen/tlstr V4199)
                 (shen/cn V4200
                          (shen/pos V4199 0)))))
         (shen/true
          (shen/shen\.f_error 'shen\.insert-h)))))
    (let
        ((result
          (funcall #'tail-trampoline V4198 V4199 V4200)))
      (while
          (vectorp result)
        (setq result
              (apply #'tail-trampoline
                     (aref result 0))))
      result)))
(defun shen/shen\.app
    (V4204 V4205 V4206)
  (shen/cn
   (shen/shen\.arg->str V4204 V4206)
   V4205))
(defun shen/shen\.arg->str
    (V4214 V4215)
  (shen/cond
   ((shen/= V4214
            (shen/fail))
    "...")
   ((shen/shen\.list\? V4214)
    (shen/shen\.list->str V4214 V4215))
   ((shen/string\? V4214)
    (shen/shen\.str->str V4214 V4215))
   ((shen/absvector\? V4214)
    (shen/shen\.vector->str V4214 V4215))
   (shen/true
    (shen/shen\.atom->str V4214))))
(defun shen/shen\.list->str
    (V4218 V4219)
  (shen/cond
   ((shen/= 'shen\.r V4219)
    (concat
     (concat "("
             (shen/shen\.iter-list V4218 'shen\.r
                                   (shen/shen\.maxseq)))
     ")"))
   (shen/true
    (concat
     (concat "["
             (shen/shen\.iter-list V4218 V4219
                                   (shen/shen\.maxseq)))
     "]"))))
(defun shen/shen\.maxseq nil
  (shen/value '*maximum-print-sequence-size*))
(defun shen/shen\.iter-list
    (V4233 V4234 V4235)
  (shen/cond
   ((shen/internal/predicate->shen
     (null V4233))
    "")
   ((shen/= 0 V4235)
    "... etc")
   ((shen/and
     (shen/cons\? V4233)
     (shen/internal/predicate->shen
      (null
       (nthcdr 1 V4233))))
    (shen/shen\.arg->str
     (shen/hd V4233)
     V4234))
   ((shen/cons\? V4233)
    (concat
     (concat
      (shen/shen\.arg->str
       (shen/hd V4233)
       V4234)
      " ")
     (shen/shen\.iter-list
      (nthcdr 1 V4233)
      V4234
      (shen/- V4235 1))))
   (shen/true
    (concat
     (concat "|" " ")
     (shen/shen\.arg->str V4233 V4234)))))
(defun shen/shen\.str->str
    (V4242 V4243)
  (shen/cond
   ((shen/= 'shen\.a V4243)
    V4242)
   (shen/true
    (concat
     (concat
      (shen/n->string 34)
      V4242)
     (shen/n->string 34)))))
(defun shen/shen\.vector->str
    (V4246 V4247)
  (shen/if
   (shen/shen\.print-vector\? V4246)
   (shen/internal/apply-function-expression
    (shen/function
     (shen/<-address V4246 0))
    (list V4246))
   (shen/if
    (shen/vector\? V4246)
    (concat
     (concat "<"
             (shen/shen\.iter-vector V4246 1 V4247
                                     (shen/shen\.maxseq)))
     ">")
    (concat
     (concat "<" "<"
             (shen/shen\.iter-vector V4246 0 V4247
                                     (shen/shen\.maxseq)))
     ">>"))))
(defun shen/shen\.print-vector\?
    (V4249)
  (shen/let Zero
            (shen/<-address V4249 0)
            (shen/if
             (shen/= Zero 'shen\.tuple)
             'true
             (shen/if
              (shen/= Zero 'shen\.pvar)
              'true
              (shen/if
               (shen/= Zero 'shen\.dictionary)
               'true
               (shen/if
                (shen/not
                 (shen/number\? Zero))
                (shen/shen\.fbound\? Zero)
                'false))))))
(defun shen/shen\.fbound\?
    (V4251)
  (shen/trap-error
   (shen/do
    (shen/shen\.lookup-func V4251)
    'true)
   (shen/lambda E 'false)))
(defun shen/shen\.tuple
    (V4253)
  (shen/cn "(@p "
           (shen/shen\.app
            (shen/<-address V4253 1)
            (shen/cn " "
                     (shen/shen\.app
                      (shen/<-address V4253 2)
                      ")" 'shen\.s))
            'shen\.s)))
(defun shen/shen\.dictionary
    (V4255)
  "(dict ...)")
(defun shen/shen\.iter-vector
    (V4266 V4267 V4268 V4269)
  (shen/cond
   ((shen/= 0 V4269)
    "... etc")
   (shen/true
    (shen/let Item
              (shen/trap-error
               (shen/<-address V4266 V4267)
               (shen/lambda E 'shen\.out-of-bounds))
              (shen/let Next
                        (shen/trap-error
                         (shen/<-address V4266
                                         (1+ V4267))
                         (shen/lambda E 'shen\.out-of-bounds))
                        (shen/if
                         (shen/= Item 'shen\.out-of-bounds)
                         ""
                         (shen/if
                          (shen/= Next 'shen\.out-of-bounds)
                          (shen/shen\.arg->str Item V4268)
                          (concat
                           (concat
                            (shen/shen\.arg->str Item V4268)
                            " ")
                           (shen/shen\.iter-vector V4266
                                                   (1+ V4267)
                                                   V4268
                                                   (shen/- V4269 1))))))))))
(defun shen/shen\.atom->str
    (V4271)
  (shen/trap-error
   (shen/str V4271)
   (shen/lambda E
                (shen/shen\.funexstring))))
(defun shen/shen\.funexstring nil
  (concat
   (concat "" "f" "u" "n" "e"
           (shen/shen\.arg->str
            (shen/gensym
             (shen/intern "x"))
            'shen\.a))
   ""))
(defun shen/shen\.list\?
    (V4273)
  (shen/or
   (shen/empty\? V4273)
   (shen/cons\? V4273)))
(defun shen/macroexpand
    (V1720)
  (shen/let Y
            (shen/shen\.compose
             (shen/value '*macros*)
             V1720)
            (shen/if
             (shen/= V1720 Y)
             V1720
             (shen/shen\.walk
              (shen/lambda Z
                           (shen/macroexpand Z))
              Y))))
(defun shen/shen\.error-macro
    (V1722)
  (shen/cond
   ((shen/and
     (shen/cons\? V1722)
     (shen/and
      (shen/= 'error
              (shen/hd V1722))
      (shen/cons\?
       (nthcdr 1 V1722))))
    (list 'simple-error
          (shen/shen\.mkstr
           (shen/hd
            (nthcdr 1 V1722))
           (nthcdr 2 V1722))))
   (shen/true V1722)))
(defun shen/shen\.output-macro
    (V1724)
  (shen/cond
   ((shen/and
     (shen/cons\? V1724)
     (shen/and
      (shen/= 'output
              (shen/hd V1724))
      (shen/cons\?
       (nthcdr 1 V1724))))
    (list 'shen\.prhush
          (shen/shen\.mkstr
           (shen/hd
            (nthcdr 1 V1724))
           (nthcdr 2 V1724))
          (list 'stoutput)))
   ((shen/and
     (shen/cons\? V1724)
     (shen/and
      (shen/= 'pr
              (shen/hd V1724))
      (shen/and
       (shen/cons\?
        (nthcdr 1 V1724))
       (shen/internal/predicate->shen
        (null
         (nthcdr 2 V1724))))))
    (list 'pr
          (shen/hd
           (nthcdr 1 V1724))
          (list 'stoutput)))
   (shen/true V1724)))
(defun shen/shen\.make-string-macro
    (V1726)
  (shen/cond
   ((shen/and
     (shen/cons\? V1726)
     (shen/and
      (shen/= 'make-string
              (shen/hd V1726))
      (shen/cons\?
       (nthcdr 1 V1726))))
    (shen/shen\.mkstr
     (shen/hd
      (nthcdr 1 V1726))
     (nthcdr 2 V1726)))
   (shen/true V1726)))
(defun shen/shen\.input-macro
    (V1728)
  (shen/cond
   ((shen/and
     (shen/cons\? V1728)
     (shen/and
      (shen/= 'lineread
              (shen/hd V1728))
      (shen/internal/predicate->shen
       (null
        (nthcdr 1 V1728)))))
    (list 'lineread
          (list 'stinput)))
   ((shen/and
     (shen/cons\? V1728)
     (shen/and
      (shen/= 'input
              (shen/hd V1728))
      (shen/internal/predicate->shen
       (null
        (nthcdr 1 V1728)))))
    (list 'input
          (list 'stinput)))
   ((shen/and
     (shen/cons\? V1728)
     (shen/and
      (shen/= 'read
              (shen/hd V1728))
      (shen/internal/predicate->shen
       (null
        (nthcdr 1 V1728)))))
    (list 'read
          (list 'stinput)))
   ((shen/and
     (shen/cons\? V1728)
     (shen/and
      (shen/= 'input+
              (shen/hd V1728))
      (shen/and
       (shen/cons\?
        (nthcdr 1 V1728))
       (shen/internal/predicate->shen
        (null
         (nthcdr 2 V1728))))))
    (list 'input+
          (shen/hd
           (nthcdr 1 V1728))
          (list 'stinput)))
   ((shen/and
     (shen/cons\? V1728)
     (shen/and
      (shen/= 'read-byte
              (shen/hd V1728))
      (shen/internal/predicate->shen
       (null
        (nthcdr 1 V1728)))))
    (list 'read-byte
          (list 'stinput)))
   (shen/true V1728)))
(defun shen/shen\.compose
    (Fs X)
  (let
      ((Result X))
    (dolist
        (F Fs Result)
      (setq Result
            (funcall F Result)))))
(defun shen/shen\.compile-macro
    (V1734)
  (shen/cond
   ((shen/and
     (shen/cons\? V1734)
     (shen/and
      (shen/= 'compile
              (shen/hd V1734))
      (shen/and
       (shen/cons\?
        (nthcdr 1 V1734))
       (shen/and
        (shen/cons\?
         (nthcdr 2 V1734))
        (shen/internal/predicate->shen
         (null
          (nthcdr 3 V1734)))))))
    (list 'compile
          (shen/hd
           (nthcdr 1 V1734))
          (shen/hd
           (nthcdr 2 V1734))
          (list 'lambda 'E
                (list 'if
                      (list 'cons\? 'E)
                      (list 'error "parse error here: ~S~%" 'E)
                      (list 'error "parse error~%")))))
   (shen/true V1734)))
(defun shen/shen\.prolog-macro
    (V1736)
  (shen/cond
   ((shen/and
     (shen/cons\? V1736)
     (shen/= 'prolog\?
             (shen/hd V1736)))
    (shen/let F
              (shen/gensym 'shen\.f)
              (shen/let Receive
                        (shen/shen\.receive-terms
                         (nthcdr 1 V1736))
                        (shen/let PrologDef
                                  (shen/eval
                                   (shen/append
                                    (list 'defprolog F)
                                    (shen/append Receive
                                                 (shen/append
                                                  (list '<--)
                                                  (shen/append
                                                   (shen/shen\.pass-literals
                                                    (nthcdr 1 V1736))
                                                   (list '\;))))))
                                  (shen/let Query
                                            (append
                                             (list F)
                                             (shen/append Receive
                                                          (list
                                                           (list 'shen\.start-new-prolog-process)
                                                           (list 'freeze 'true))))
                                            Query)))))
   (shen/true V1736)))
(defun shen/shen\.receive-terms
    (V1742)
  (cl-flet
      ((tail-trampoline
        (V1742)
        (shen/cond
         ((shen/internal/predicate->shen
           (null V1742))
          nil)
         ((shen/and
           (shen/cons\? V1742)
           (shen/and
            (shen/cons\?
             (shen/hd V1742))
            (shen/and
             (shen/= 'receive
                     (shen/hd
                      (shen/hd V1742)))
             (shen/and
              (shen/cons\?
               (nthcdr 1
                       (shen/hd V1742)))
              (shen/internal/predicate->shen
               (null
                (nthcdr 2
                        (shen/hd V1742))))))))
          (append
           (list
            (shen/hd
             (nthcdr 1
                     (shen/hd V1742))))
           (shen/shen\.receive-terms
            (nthcdr 1 V1742))))
         ((shen/cons\? V1742)
          (vector
           (list
            (nthcdr 1 V1742))))
         (shen/true
          (shen/shen\.f_error 'shen\.receive-terms)))))
    (let
        ((result
          (funcall #'tail-trampoline V1742)))
      (while
          (vectorp result)
        (setq result
              (apply #'tail-trampoline
                     (aref result 0))))
      result)))
(defun shen/shen\.pass-literals
    (V1746)
  (cl-flet
      ((tail-trampoline
        (V1746)
        (shen/cond
         ((shen/internal/predicate->shen
           (null V1746))
          nil)
         ((shen/and
           (shen/cons\? V1746)
           (shen/and
            (shen/cons\?
             (shen/hd V1746))
            (shen/and
             (shen/= 'receive
                     (shen/hd
                      (shen/hd V1746)))
             (shen/and
              (shen/cons\?
               (nthcdr 1
                       (shen/hd V1746)))
              (shen/internal/predicate->shen
               (null
                (nthcdr 2
                        (shen/hd V1746))))))))
          (vector
           (list
            (nthcdr 1 V1746))))
         ((shen/cons\? V1746)
          (append
           (list
            (shen/hd V1746))
           (shen/shen\.pass-literals
            (nthcdr 1 V1746))))
         (shen/true
          (shen/shen\.f_error 'shen\.pass-literals)))))
    (let
        ((result
          (funcall #'tail-trampoline V1746)))
      (while
          (vectorp result)
        (setq result
              (apply #'tail-trampoline
                     (aref result 0))))
      result)))
(defun shen/shen\.defprolog-macro
    (V1748)
  (shen/cond
   ((shen/and
     (shen/cons\? V1748)
     (shen/and
      (shen/= 'defprolog
              (shen/hd V1748))
      (shen/cons\?
       (nthcdr 1 V1748))))
    (shen/compile
     (shen/lambda Y
                  (shen/shen\.<defprolog> Y))
     (nthcdr 1 V1748)
     (shen/lambda Y
                  (shen/shen\.prolog-error
                   (shen/hd
                    (nthcdr 1 V1748))
                   Y))))
   (shen/true V1748)))
(defun shen/shen\.datatype-macro
    (V1750)
  (shen/cond
   ((shen/and
     (shen/cons\? V1750)
     (shen/and
      (shen/= 'datatype
              (shen/hd V1750))
      (shen/cons\?
       (nthcdr 1 V1750))))
    (list 'shen\.process-datatype
          (shen/shen\.intern-type
           (shen/hd
            (nthcdr 1 V1750)))
          (list 'compile
                (list 'lambda 'X
                      (list 'shen\.<datatype-rules> 'X))
                (shen/shen\.rcons_form
                 (nthcdr 2 V1750))
                (list 'function 'shen\.datatype-error))))
   (shen/true V1750)))
(defun shen/shen\.intern-type
    (V1752)
  (shen/intern
   (shen/cn "type#"
            (shen/str V1752))))
(defun shen/shen\.@s-macro
    (V1754)
  (cl-flet
      ((tail-trampoline
        (V1754)
        (shen/cond
         ((shen/and
           (shen/cons\? V1754)
           (shen/and
            (shen/= '@s
                    (shen/hd V1754))
            (shen/and
             (shen/cons\?
              (nthcdr 1 V1754))
             (shen/and
              (shen/cons\?
               (nthcdr 2 V1754))
              (shen/cons\?
               (nthcdr 3 V1754))))))
          (list '@s
                (shen/hd
                 (nthcdr 1 V1754))
                (shen/shen\.@s-macro
                 (append
                  (list '@s)
                  (nthcdr 2 V1754)))))
         ((shen/and
           (shen/cons\? V1754)
           (shen/and
            (shen/= '@s
                    (shen/hd V1754))
            (shen/and
             (shen/cons\?
              (nthcdr 1 V1754))
             (shen/and
              (shen/cons\?
               (nthcdr 2 V1754))
              (shen/and
               (shen/internal/predicate->shen
                (null
                 (nthcdr 3 V1754)))
               (shen/string\?
                (shen/hd
                 (nthcdr 1 V1754))))))))
          (shen/let E
                    (shen/explode
                     (shen/hd
                      (nthcdr 1 V1754)))
                    (shen/if
                     (shen/>
                      (shen/length E)
                      1)
                     (vector
                      (list
                       (append
                        (list '@s)
                        (shen/append E
                                     (nthcdr 2 V1754)))))
                     V1754)))
         (shen/true V1754))))
    (let
        ((result
          (funcall #'tail-trampoline V1754)))
      (while
          (vectorp result)
        (setq result
              (apply #'tail-trampoline
                     (aref result 0))))
      result)))
(defun shen/shen\.synonyms-macro
    (V1756)
  (shen/cond
   ((shen/and
     (shen/cons\? V1756)
     (shen/= 'synonyms
             (shen/hd V1756)))
    (list 'shen\.synonyms-help
          (shen/shen\.rcons_form
           (shen/shen\.curry-synonyms
            (nthcdr 1 V1756)))))
   (shen/true V1756)))
(defun shen/shen\.curry-synonyms
    (V1758)
  (shen/map
   (shen/lambda X
                (shen/shen\.curry-type X))
   V1758))
(defun shen/shen\.nl-macro
    (V1760)
  (shen/cond
   ((shen/and
     (shen/cons\? V1760)
     (shen/and
      (shen/= 'nl
              (shen/hd V1760))
      (shen/internal/predicate->shen
       (null
        (nthcdr 1 V1760)))))
    (list 'nl 1))
   (shen/true V1760)))
(defun shen/shen\.assoc-macro
    (V1762)
  (shen/cond
   ((shen/and
     (shen/cons\? V1762)
     (shen/and
      (shen/cons\?
       (nthcdr 1 V1762))
      (shen/and
       (shen/cons\?
        (nthcdr 2 V1762))
       (shen/and
        (shen/cons\?
         (nthcdr 3 V1762))
        (shen/element\?
         (shen/hd V1762)
         (list '@p '@v 'append 'and 'or '+ '* 'do))))))
    (list
     (shen/hd V1762)
     (shen/hd
      (nthcdr 1 V1762))
     (shen/shen\.assoc-macro
      (append
       (list
        (shen/hd V1762))
       (nthcdr 2 V1762)))))
   (shen/true V1762)))
(defun shen/shen\.let-macro
    (V1764)
  (shen/cond
   ((shen/and
     (shen/cons\? V1764)
     (shen/and
      (shen/= 'let
              (shen/hd V1764))
      (shen/and
       (shen/cons\?
        (nthcdr 1 V1764))
       (shen/and
        (shen/cons\?
         (nthcdr 2 V1764))
        (shen/and
         (shen/cons\?
          (nthcdr 3 V1764))
         (shen/cons\?
          (nthcdr 4 V1764)))))))
    (list 'let
          (shen/hd
           (nthcdr 1 V1764))
          (shen/hd
           (nthcdr 2 V1764))
          (shen/shen\.let-macro
           (append
            (list 'let)
            (nthcdr 3 V1764)))))
   (shen/true V1764)))
(defun shen/shen\.abs-macro
    (V1766)
  (shen/cond
   ((shen/and
     (shen/cons\? V1766)
     (shen/and
      (shen/= '/\.
              (shen/hd V1766))
      (shen/and
       (shen/cons\?
        (nthcdr 1 V1766))
       (shen/and
        (shen/cons\?
         (nthcdr 2 V1766))
        (shen/cons\?
         (nthcdr 3 V1766))))))
    (list 'lambda
          (shen/hd
           (nthcdr 1 V1766))
          (shen/shen\.abs-macro
           (append
            (list '/\.)
            (nthcdr 2 V1766)))))
   ((shen/and
     (shen/cons\? V1766)
     (shen/and
      (shen/= '/\.
              (shen/hd V1766))
      (shen/and
       (shen/cons\?
        (nthcdr 1 V1766))
       (shen/and
        (shen/cons\?
         (nthcdr 2 V1766))
        (shen/internal/predicate->shen
         (null
          (nthcdr 3 V1766)))))))
    (append
     (list 'lambda)
     (nthcdr 1 V1766)))
   (shen/true V1766)))
(defun shen/shen\.cases-macro
    (V1770)
  (shen/cond
   ((shen/and
     (shen/cons\? V1770)
     (shen/and
      (shen/= 'cases
              (shen/hd V1770))
      (shen/and
       (shen/cons\?
        (nthcdr 1 V1770))
       (shen/and
        (shen/= 'true
                (shen/hd
                 (nthcdr 1 V1770)))
        (shen/cons\?
         (nthcdr 2 V1770))))))
    (shen/hd
     (nthcdr 2 V1770)))
   ((shen/and
     (shen/cons\? V1770)
     (shen/and
      (shen/= 'cases
              (shen/hd V1770))
      (shen/and
       (shen/cons\?
        (nthcdr 1 V1770))
       (shen/and
        (shen/cons\?
         (nthcdr 2 V1770))
        (shen/internal/predicate->shen
         (null
          (nthcdr 3 V1770)))))))
    (list 'if
          (shen/hd
           (nthcdr 1 V1770))
          (shen/hd
           (nthcdr 2 V1770))
          (list 'simple-error "error: cases exhausted")))
   ((shen/and
     (shen/cons\? V1770)
     (shen/and
      (shen/= 'cases
              (shen/hd V1770))
      (shen/and
       (shen/cons\?
        (nthcdr 1 V1770))
       (shen/cons\?
        (nthcdr 2 V1770)))))
    (list 'if
          (shen/hd
           (nthcdr 1 V1770))
          (shen/hd
           (nthcdr 2 V1770))
          (shen/shen\.cases-macro
           (append
            (list 'cases)
            (nthcdr 3 V1770)))))
   ((shen/and
     (shen/cons\? V1770)
     (shen/and
      (shen/= 'cases
              (shen/hd V1770))
      (shen/and
       (shen/cons\?
        (nthcdr 1 V1770))
       (shen/internal/predicate->shen
        (null
         (nthcdr 2 V1770))))))
    (shen/simple-error "error: odd number of case elements\n"))
   (shen/true V1770)))
(defun shen/shen\.timer-macro
    (V1772)
  (shen/cond
   ((shen/and
     (shen/cons\? V1772)
     (shen/and
      (shen/= 'time
              (shen/hd V1772))
      (shen/and
       (shen/cons\?
        (nthcdr 1 V1772))
       (shen/internal/predicate->shen
        (null
         (nthcdr 2 V1772))))))
    (shen/shen\.let-macro
     (list 'let 'Start
           (list 'get-time 'run)
           'Result
           (shen/hd
            (nthcdr 1 V1772))
           'Finish
           (list 'get-time 'run)
           'Time
           (list '- 'Finish 'Start)
           'Message
           (list 'shen\.prhush
                 (list 'cn "\nrun time: "
                       (list 'cn
                             (list 'str 'Time)
                             " secs\n"))
                 (list 'stoutput))
           'Result)))
   (shen/true V1772)))
(defun shen/shen\.tuple-up
    (V1774)
  (shen/cond
   ((shen/cons\? V1774)
    (list '@p
          (shen/hd V1774)
          (shen/shen\.tuple-up
           (nthcdr 1 V1774))))
   (shen/true V1774)))
(defun shen/shen\.put/get-macro
    (V1776)
  (shen/cond
   ((shen/and
     (shen/cons\? V1776)
     (shen/and
      (shen/= 'put
              (shen/hd V1776))
      (shen/and
       (shen/cons\?
        (nthcdr 1 V1776))
       (shen/and
        (shen/cons\?
         (nthcdr 2 V1776))
        (shen/and
         (shen/cons\?
          (nthcdr 3 V1776))
         (shen/internal/predicate->shen
          (null
           (nthcdr 4 V1776))))))))
    (list 'put
          (shen/hd
           (nthcdr 1 V1776))
          (shen/hd
           (nthcdr 2 V1776))
          (shen/hd
           (nthcdr 3 V1776))
          (list 'value '*property-vector*)))
   ((shen/and
     (shen/cons\? V1776)
     (shen/and
      (shen/= 'get
              (shen/hd V1776))
      (shen/and
       (shen/cons\?
        (nthcdr 1 V1776))
       (shen/and
        (shen/cons\?
         (nthcdr 2 V1776))
        (shen/internal/predicate->shen
         (null
          (nthcdr 3 V1776)))))))
    (list 'get
          (shen/hd
           (nthcdr 1 V1776))
          (shen/hd
           (nthcdr 2 V1776))
          (list 'value '*property-vector*)))
   ((shen/and
     (shen/cons\? V1776)
     (shen/and
      (shen/= 'unput
              (shen/hd V1776))
      (shen/and
       (shen/cons\?
        (nthcdr 1 V1776))
       (shen/and
        (shen/cons\?
         (nthcdr 2 V1776))
        (shen/internal/predicate->shen
         (null
          (nthcdr 3 V1776)))))))
    (list 'unput
          (shen/hd
           (nthcdr 1 V1776))
          (shen/hd
           (nthcdr 2 V1776))
          (list 'value '*property-vector*)))
   (shen/true V1776)))
(defun shen/shen\.function-macro
    (V1778)
  (shen/cond
   ((shen/and
     (shen/cons\? V1778)
     (shen/and
      (shen/= 'function
              (shen/hd V1778))
      (shen/and
       (shen/cons\?
        (nthcdr 1 V1778))
       (shen/internal/predicate->shen
        (null
         (nthcdr 2 V1778))))))
    (shen/shen\.function-abstraction
     (shen/hd
      (nthcdr 1 V1778))
     (shen/arity
      (shen/hd
       (nthcdr 1 V1778)))))
   (shen/true V1778)))
(defun shen/shen\.function-abstraction
    (V1781 V1782)
  (shen/cond
   ((shen/= 0 V1782)
    (shen/simple-error
     (shen/shen\.app V1781 " has no lambda form\n" 'shen\.a)))
   ((shen/= -1 V1782)
    (list 'function V1781))
   (shen/true
    (shen/shen\.function-abstraction-help V1781 V1782 nil))))
(defun shen/shen\.function-abstraction-help
    (V1786 V1787 V1788)
  (shen/cond
   ((shen/= 0 V1787)
    (append
     (list V1786)
     V1788))
   (shen/true
    (shen/let X
              (shen/gensym 'V)
              (list '/\. X
                    (shen/shen\.function-abstraction-help V1786
                                                          (shen/- V1787 1)
                                                          (shen/append V1788
                                                                       (list X))))))))
(defun shen/undefmacro
    (V1790)
  (shen/let MacroReg
            (shen/value 'shen\.*macroreg*)
            (shen/let Pos
                      (shen/shen\.findpos V1790 MacroReg)
                      (shen/let Remove1
                                (shen/set 'shen\.*macroreg*
                                          (shen/remove V1790 MacroReg))
                                (shen/let Remove2
                                          (shen/set '*macros*
                                                    (shen/shen\.remove-nth Pos
                                                                           (shen/value '*macros*)))
                                          V1790)))))
(defun shen/shen\.findpos
    (V1800 V1801)
  (shen/cond
   ((shen/internal/predicate->shen
     (null V1801))
    (shen/simple-error
     (shen/shen\.app V1800 " is not a macro\n" 'shen\.a)))
   ((shen/and
     (shen/cons\? V1801)
     (shen/=
      (shen/hd V1801)
      V1800))
    1)
   ((shen/cons\? V1801)
    (1+
     (shen/shen\.findpos V1800
                         (nthcdr 1 V1801))))
   (shen/true
    (shen/shen\.f_error 'shen\.findpos))))
(defun shen/shen\.remove-nth
    (V1806 V1807)
  (shen/cond
   ((shen/and
     (shen/= 1 V1806)
     (shen/cons\? V1807))
    (nthcdr 1 V1807))
   ((shen/cons\? V1807)
    (append
     (list
      (shen/hd V1807))
     (shen/shen\.remove-nth
      (shen/- V1806 1)
      (nthcdr 1 V1807))))
   (shen/true
    (shen/shen\.f_error 'shen\.remove-nth))))
(shen/set 'shen\.*installing-kl* 'false)
(shen/set 'shen\.*history* nil)
(shen/set 'shen\.*tc* 'false)
(shen/set '*property-vector*
          (shen/shen\.dict 20000))
(shen/set 'shen\.*process-counter* 0)
(shen/set 'shen\.*varcounter*
          (shen/vector 10000))
(shen/set 'shen\.*prologvectors*
          (shen/vector 10000))
(shen/set 'shen\.*demodulation-function*
          (shen/lambda X X))
(shen/set 'shen\.*macroreg*
          (list 'shen\.timer-macro 'shen\.cases-macro 'shen\.abs-macro 'shen\.put/get-macro 'shen\.compile-macro 'shen\.datatype-macro 'shen\.let-macro 'shen\.assoc-macro 'shen\.make-string-macro 'shen\.output-macro 'shen\.input-macro 'shen\.error-macro 'shen\.prolog-macro 'shen\.synonyms-macro 'shen\.nl-macro 'shen\.@s-macro 'shen\.defprolog-macro 'shen\.function-macro))
(shen/set '*macros*
          (list
           (shen/lambda X
                        (shen/shen\.timer-macro X))
           (shen/lambda X
                        (shen/shen\.cases-macro X))
           (shen/lambda X
                        (shen/shen\.abs-macro X))
           (shen/lambda X
                        (shen/shen\.put/get-macro X))
           (shen/lambda X
                        (shen/shen\.compile-macro X))
           (shen/lambda X
                        (shen/shen\.datatype-macro X))
           (shen/lambda X
                        (shen/shen\.let-macro X))
           (shen/lambda X
                        (shen/shen\.assoc-macro X))
           (shen/lambda X
                        (shen/shen\.make-string-macro X))
           (shen/lambda X
                        (shen/shen\.output-macro X))
           (shen/lambda X
                        (shen/shen\.input-macro X))
           (shen/lambda X
                        (shen/shen\.error-macro X))
           (shen/lambda X
                        (shen/shen\.prolog-macro X))
           (shen/lambda X
                        (shen/shen\.synonyms-macro X))
           (shen/lambda X
                        (shen/shen\.nl-macro X))
           (shen/lambda X
                        (shen/shen\.@s-macro X))
           (shen/lambda X
                        (shen/shen\.defprolog-macro X))
           (shen/lambda X
                        (shen/shen\.function-macro X))))
(shen/set 'shen\.*gensym* 0)
(shen/set 'shen\.*tracking* nil)
(shen/set 'shen\.*alphabet*
          (list 'A 'B 'C 'D 'E 'F 'G 'H 'I 'J 'K 'L 'M 'N 'O 'P 'Q 'R 'S 'T 'U 'V 'W 'X 'Y 'Z))
(shen/set 'shen\.*special*
          (list '@p '@s '@v 'cons 'lambda 'let 'where 'set 'open))
(shen/set 'shen\.*extraspecial*
          (list 'define 'shen\.process-datatype 'input+ 'defcc 'shen\.read+ 'defmacro))
(shen/set 'shen\.*spy* 'false)
(shen/set 'shen\.*datatypes* nil)
(shen/set 'shen\.*alldatatypes* nil)
(shen/set 'shen\.*shen-type-theory-enabled\?* 'true)
(shen/set 'shen\.*synonyms* nil)
(shen/set 'shen\.*system* nil)
(shen/set 'shen\.*signedfuncs* nil)
(shen/set 'shen\.*maxcomplexity* 128)
(shen/set 'shen\.*occurs* 'true)
(shen/set 'shen\.*maxinferences* 1000000)
(shen/set '*maximum-print-sequence-size* 20)
(shen/set 'shen\.*catch* 0)
(shen/set 'shen\.*call* 0)
(shen/set 'shen\.*infs* 0)
(shen/set '*hush* 'false)
(shen/set 'shen\.*optimise* 'false)
(shen/set '*version* "Shen 21")
(shen/if
 (shen/not
  (shen/bound\? '*home-directory*))
 (shen/set '*home-directory* "")
 'shen\.skip)
(shen/if
 (shen/not
  (shen/bound\? '*sterror*))
 (shen/set '*sterror*
           (shen/value '*stoutput*))
 'shen\.skip)
(defun shen/shen\.initialise_arity_table
    (V1647)
  (cl-flet
      ((tail-trampoline
        (V1647)
        (shen/cond
         ((shen/internal/predicate->shen
           (null V1647))
          nil)
         ((shen/and
           (shen/cons\? V1647)
           (shen/cons\?
            (nthcdr 1 V1647)))
          (shen/let DecArity
                    (shen/put
                     (shen/hd V1647)
                     'arity
                     (shen/hd
                      (nthcdr 1 V1647))
                     (shen/value '*property-vector*))
                    (vector
                     (list
                      (nthcdr 2 V1647)))))
         (shen/true
          (shen/shen\.f_error 'shen\.initialise_arity_table)))))
    (let
        ((result
          (funcall #'tail-trampoline V1647)))
      (while
          (vectorp result)
        (setq result
              (apply #'tail-trampoline
                     (aref result 0))))
      result)))
(defun shen/arity
    (V1649)
  (shen/trap-error
   (shen/get V1649 'arity
             (shen/value '*property-vector*))
   (shen/lambda E -1)))
(shen/shen\.initialise_arity_table
 (list 'abort 0 'absvector\? 1 'absvector 1 'adjoin 2 'and 2 'append 2 'arity 1 'assoc 2 'boolean\? 1 'bound\? 1 'cd 1 'close 1 'compile 3 'concat 2 'cons 2 'cons\? 1 'cn 2 'declare 2 'destroy 1 'difference 2 'do 2 'element\? 2 'empty\? 1 'enable-type-theory 1 'error-to-string 1 'shen\.interror 2 'eval 1 'eval-kl 1 'explode 1 'external 1 'fail-if 2 'fail 0 'fix 2 'findall 5 'freeze 1 'fst 1 'gensym 1 'get 3 'get-time 1 'address-> 3 '<-address 2 '<-vector 2 '> 2 '>= 2 '= 2 'hash 2 'hd 1 'hdv 1 'hdstr 1 'head 1 'if 3 'integer\? 1 'intern 1 'identical 4 'inferences 0 'input 1 'input+ 2 'implementation 0 'intersection 2 'internal 1 'it 0 'kill 0 'language 0 'length 1 'limit 1 'lineread 1 'load 1 '< 2 '<= 2 'vector 1 'macroexpand 1 'map 2 'mapcan 2 'maxinferences 1 'nl 1 'not 1 'nth 2 'n->string 1 'number\? 1 'occurs-check 1 'occurrences 2 'occurs-check 1 'open 2 'optimise 1 'or 2 'os 0 'package 3 'package\? 1 'port 0 'porters 0 'pos 2 'print 1 'profile 1 'profile-results 1 'pr 2 'ps 1 'preclude 1 'preclude-all-but 1 'protect 1 'address-> 3 'put 4 'shen\.reassemble 2 'read-file-as-string 1 'read-file 1 'read-file-as-bytelist 1 'read 1 'read-byte 1 'read-from-string 1 'receive 1 'release 0 'remove 2 'shen\.require 3 'reverse 1 'set 2 'simple-error 1 'snd 1 'specialise 1 'spy 1 'step 1 'stinput 0 'stoutput 0 'sterror 0 'string->n 1 'string->symbol 1 'string\? 1 'str 1 'subst 3 'sum 1 'symbol\? 1 'systemf 1 'tail 1 'tl 1 'tc 1 'tc\? 0 'thaw 1 'tlstr 1 'track 1 'trap-error 2 'tuple\? 1 'type 2 'return 3 'undefmacro 1 'unput 3 'unprofile 1 'unify 4 'unify! 4 'union 2 'untrack 1 'unspecialise 1 'undefmacro 1 'vector 1 'vector\? 1 'vector-> 3 'value 1 'variable\? 1 'version 0 'write-byte 2 'write-to-file 2 'y-or-n\? 1 '+ 2 '* 2 '/ 2 '- 2 '== 2 '<e> 1 '<!> 1 '@p 2 '@v 2 '@s 2 'preclude 1 'include 1 'preclude-all-but 1 'include-all-but 1))
(defun shen/systemf
    (V1651)
  (shen/let Shen
            (shen/intern "shen")
            (shen/let External
                      (shen/get Shen 'shen\.external-symbols
                                (shen/value '*property-vector*))
                      (shen/let Place
                                (shen/put Shen 'shen\.external-symbols
                                          (shen/adjoin V1651 External)
                                          (shen/value '*property-vector*))
                                V1651))))
(defun shen/adjoin
    (V1654 V1655)
  (shen/if
   (shen/element\? V1654 V1655)
   V1655
   (append
    (list V1654)
    V1655)))
(shen/put
 (shen/intern "shen")
 'shen\.external-symbols
 (list '! '} '{ '--> '<-- '&& ': '\; ':- ':= '_ '\, '*language* '*implementation* '*stinput* '*stoutput* '*sterror* '*home-directory* '*version* '*maximum-print-sequence-size* '*macros* '*os* '*release* '*property-vector* '*port* '*porters* '*hush* '@v '@p '@s '<- '-> '<e> '<!> '== '= '>= '> '/\. '=! '$ '- '/ '* '+ '<= '< '>>
       (shen/vector 0)
       'y-or-n\? 'write-to-file 'write-byte 'where 'when 'warn 'version 'verified 'variable\? 'value 'vector-> '<-vector 'vector 'vector\? 'unspecialise 'untrack 'unit 'shen\.unix 'union 'unify 'unify! 'unput 'unprofile 'undefmacro 'return 'type 'tuple\? 'true 'trap-error 'track 'time 'thaw 'tc\? 'tc 'tl 'tlstr 'tlv 'tail 'systemf 'synonyms 'symbol 'symbol\? 'string->symbol 'sum 'subst 'string\? 'string->n 'stream 'string 'stinput 'sterror 'stoutput 'step 'spy 'specialise 'snd 'simple-error 'set 'save 'str 'run 'reverse 'remove 'release 'read 'receive 'read-file 'read-file-as-bytelist 'read-file-as-string 'read-byte 'read-from-string 'package\? 'put 'preclude 'preclude-all-but 'ps 'prolog\? 'protect 'profile-results 'profile 'print 'pr 'pos 'porters 'port 'package 'output 'out 'os 'or 'optimise 'open 'occurrences 'occurs-check 'n->string 'number\? 'number 'null 'nth 'not 'nl 'mode 'macroexpand 'maxinferences 'mapcan 'map 'make-string 'load 'loaded 'list 'lineread 'limit 'length 'let 'lazy 'lambda 'language 'kill 'is 'intersection 'inferences 'intern 'integer\? 'input 'input+ 'include 'include-all-but 'it 'in 'internal 'implementation 'if 'identical 'head 'hd 'hdv 'hdstr 'hash 'get 'get-time 'gensym 'function 'fst 'freeze 'fix 'file 'fail 'fail-if 'fwhen 'findall 'false 'enable-type-theory 'explode 'external 'exception 'eval-kl 'eval 'error-to-string 'error 'empty\? 'element\? 'do 'difference 'destroy 'defun 'define 'defmacro 'defcc 'defprolog 'declare 'datatype 'cut 'cn 'cons\? 'cons 'cond 'concat 'compile 'cd 'cases 'call 'close 'bind 'bound\? 'boolean\? 'boolean 'bar! 'assoc 'arity 'abort 'append 'and 'adjoin '<-address 'address-> 'absvector\? 'absvector)
 (shen/value '*property-vector*))
(defun shen/shen\.lambda-form-entry
    (V1657)
  (shen/cond
   ((shen/= 'package V1657)
    nil)
   ((shen/= 'receive V1657)
    nil)
   (shen/true
    (shen/let ArityF
              (shen/arity V1657)
              (shen/if
               (shen/= ArityF -1)
               nil
               (shen/if
                (shen/= ArityF 0)
                nil
                (list
                 (append
                  (list V1657)
                  (shen/eval-kl
                   (shen/shen\.lambda-form V1657 ArityF))))))))))
(defun shen/shen\.lambda-form
    (V1660 V1661)
  (shen/cond
   ((shen/= 0 V1661)
    V1660)
   (shen/true
    (shen/let X
              (shen/gensym 'V)
              (list 'lambda X
                    (shen/shen\.lambda-form
                     (shen/shen\.add-end V1660 X)
                     (shen/- V1661 1)))))))
(defun shen/shen\.add-end
    (V1664 V1665)
  (shen/cond
   ((shen/cons\? V1664)
    (shen/append V1664
                 (list V1665)))
   (shen/true
    (list V1664 V1665))))
(defun shen/shen\.set-lambda-form-entry
    (V1667)
  (shen/cond
   ((shen/cons\? V1667)
    (shen/put
     (shen/hd V1667)
     'shen\.lambda-form
     (nthcdr 1 V1667)
     (shen/value '*property-vector*)))
   (shen/true
    (shen/shen\.f_error 'shen\.set-lambda-form-entry))))
(shen/shen\.for-each
 (shen/lambda Entry
              (shen/shen\.set-lambda-form-entry Entry))
 (append
  (list
   (append
    (list 'shen\.datatype-error)
    (shen/lambda X
                 (shen/shen\.datatype-error X)))
   (append
    (list 'shen\.tuple)
    (shen/lambda X
                 (shen/shen\.tuple X)))
   (append
    (list 'shen\.pvar)
    (shen/lambda X
                 (shen/shen\.pvar X)))
   (append
    (list 'shen\.dictionary)
    (shen/lambda X
                 (shen/shen\.dictionary X))))
  (shen/mapcan
   (shen/lambda X
                (shen/shen\.lambda-form-entry X))
   (shen/external
    (shen/intern "shen")))))
(defun shen/specialise
    (V1669)
  (shen/do
   (shen/set 'shen\.*special*
             (append
              (list V1669)
              (shen/value 'shen\.*special*)))
   V1669))
(defun shen/unspecialise
    (V1671)
  (shen/do
   (shen/set 'shen\.*special*
             (shen/remove V1671
                          (shen/value 'shen\.*special*)))
   V1671))
(defun shen/shen\.typecheck
    (V3644 V3645)
  (shen/let Curry
            (shen/shen\.curry V3644)
            (shen/let ProcessN
                      (shen/shen\.start-new-prolog-process)
                      (shen/let Type
                                (shen/shen\.insert-prolog-variables
                                 (shen/shen\.demodulate
                                  (shen/shen\.curry-type V3645))
                                 ProcessN)
                                (shen/let Continuation
                                          (shen/freeze
                                           (shen/return Type ProcessN 'shen\.void))
                                          (shen/shen\.t*
                                           (list Curry ': Type)
                                           nil ProcessN Continuation))))))
(defun shen/shen\.curry
    (V3647)
  (cl-flet
      ((tail-trampoline
        (V3647)
        (shen/cond
         ((shen/and
           (shen/cons\? V3647)
           (shen/shen\.special\?
            (shen/hd V3647)))
          (append
           (list
            (shen/hd V3647))
           (shen/map
            (shen/lambda Y
                         (shen/shen\.curry Y))
            (nthcdr 1 V3647))))
         ((shen/and
           (shen/cons\? V3647)
           (shen/and
            (shen/cons\?
             (nthcdr 1 V3647))
            (shen/shen\.extraspecial\?
             (shen/hd V3647))))
          V3647)
         ((shen/and
           (shen/cons\? V3647)
           (shen/and
            (shen/= 'type
                    (shen/hd V3647))
            (shen/and
             (shen/cons\?
              (nthcdr 1 V3647))
             (shen/and
              (shen/cons\?
               (nthcdr 2 V3647))
              (shen/internal/predicate->shen
               (null
                (nthcdr 3 V3647)))))))
          (append
           (list 'type
                 (shen/shen\.curry
                  (shen/hd
                   (nthcdr 1 V3647))))
           (nthcdr 2 V3647)))
         ((shen/and
           (shen/cons\? V3647)
           (shen/and
            (shen/cons\?
             (nthcdr 1 V3647))
            (shen/cons\?
             (nthcdr 2 V3647))))
          (vector
           (list
            (append
             (list
              (list
               (shen/hd V3647)
               (shen/hd
                (nthcdr 1 V3647))))
             (nthcdr 2 V3647)))))
         ((shen/and
           (shen/cons\? V3647)
           (shen/and
            (shen/cons\?
             (nthcdr 1 V3647))
            (shen/internal/predicate->shen
             (null
              (nthcdr 2 V3647)))))
          (list
           (shen/shen\.curry
            (shen/hd V3647))
           (shen/shen\.curry
            (shen/hd
             (nthcdr 1 V3647)))))
         (shen/true V3647))))
    (let
        ((result
          (funcall #'tail-trampoline V3647)))
      (while
          (vectorp result)
        (setq result
              (apply #'tail-trampoline
                     (aref result 0))))
      result)))
(defun shen/shen\.special\?
    (V3649)
  (shen/element\? V3649
                  (shen/value 'shen\.*special*)))
(defun shen/shen\.extraspecial\?
    (V3651)
  (shen/element\? V3651
                  (shen/value 'shen\.*extraspecial*)))
(defun shen/shen\.t*
    (V3656 V3657 V3658 V3659)
  (shen/let Throwcontrol
            (shen/shen\.catchpoint)
            (shen/shen\.cutpoint Throwcontrol
                                 (shen/let Case
                                           (shen/let Error
                                                     (shen/shen\.newpv V3658)
                                                     (shen/do
                                                      (shen/shen\.incinfs)
                                                      (shen/fwhen
                                                       (shen/shen\.maxinfexceeded\?)
                                                       V3658
                                                       (shen/freeze
                                                        (shen/bind Error
                                                                   (shen/shen\.errormaxinfs)
                                                                   V3658 V3659)))))
                                           (shen/if
                                            (shen/= Case 'false)
                                            (shen/let Case
                                                      (shen/let V3636
                                                                (shen/shen\.lazyderef V3656 V3658)
                                                                (shen/if
                                                                 (shen/= 'fail V3636)
                                                                 (shen/do
                                                                  (shen/shen\.incinfs)
                                                                  (shen/cut Throwcontrol V3658
                                                                            (shen/freeze
                                                                             (shen/shen\.prolog-failure V3658 V3659))))
                                                                 'false))
                                                      (shen/if
                                                       (shen/= Case 'false)
                                                       (shen/let Case
                                                                 (shen/let V3637
                                                                           (shen/shen\.lazyderef V3656 V3658)
                                                                           (shen/if
                                                                            (shen/cons\? V3637)
                                                                            (shen/let X
                                                                                      (shen/hd V3637)
                                                                                      (shen/let V3638
                                                                                                (shen/shen\.lazyderef
                                                                                                 (nthcdr 1 V3637)
                                                                                                 V3658)
                                                                                                (shen/if
                                                                                                 (shen/cons\? V3638)
                                                                                                 (shen/let V3639
                                                                                                           (shen/shen\.lazyderef
                                                                                                            (shen/hd V3638)
                                                                                                            V3658)
                                                                                                           (shen/if
                                                                                                            (shen/= ': V3639)
                                                                                                            (shen/let V3640
                                                                                                                      (shen/shen\.lazyderef
                                                                                                                       (nthcdr 1 V3638)
                                                                                                                       V3658)
                                                                                                                      (shen/if
                                                                                                                       (shen/cons\? V3640)
                                                                                                                       (shen/let A
                                                                                                                                 (shen/hd V3640)
                                                                                                                                 (shen/let V3641
                                                                                                                                           (shen/shen\.lazyderef
                                                                                                                                            (nthcdr 1 V3640)
                                                                                                                                            V3658)
                                                                                                                                           (shen/if
                                                                                                                                            (shen/internal/predicate->shen
                                                                                                                                             (null V3641))
                                                                                                                                            (shen/do
                                                                                                                                             (shen/shen\.incinfs)
                                                                                                                                             (shen/fwhen
                                                                                                                                              (shen/shen\.type-theory-enabled\?)
                                                                                                                                              V3658
                                                                                                                                              (shen/freeze
                                                                                                                                               (shen/cut Throwcontrol V3658
                                                                                                                                                         (shen/freeze
                                                                                                                                                          (shen/shen\.th* X A V3657 V3658 V3659))))))
                                                                                                                                            'false)))
                                                                                                                       'false))
                                                                                                            'false))
                                                                                                 'false)))
                                                                            'false))
                                                                 (shen/if
                                                                  (shen/= Case 'false)
                                                                  (shen/let Datatypes
                                                                            (shen/shen\.newpv V3658)
                                                                            (shen/do
                                                                             (shen/shen\.incinfs)
                                                                             (shen/shen\.show V3656 V3657 V3658
                                                                                              (shen/freeze
                                                                                               (shen/bind Datatypes
                                                                                                          (shen/value 'shen\.*datatypes*)
                                                                                                          V3658
                                                                                                          (shen/freeze
                                                                                                           (shen/shen\.udefs* V3656 V3657 Datatypes V3658 V3659)))))))
                                                                  Case))
                                                       Case))
                                            Case)))))
(defun shen/shen\.type-theory-enabled\? nil
  (shen/value 'shen\.*shen-type-theory-enabled\?*))
(defun shen/enable-type-theory
    (V3665)
  (shen/cond
   ((shen/= '+ V3665)
    (shen/set 'shen\.*shen-type-theory-enabled\?* 'true))
   ((shen/= '- V3665)
    (shen/set 'shen\.*shen-type-theory-enabled\?* 'false))
   (shen/true
    (shen/simple-error "enable-type-theory expects a + or a -\n"))))
(defun shen/shen\.prolog-failure
    (V3676 V3677)
  'false)
(defun shen/shen\.maxinfexceeded\? nil
  (shen/>
   (shen/inferences)
   (shen/value 'shen\.*maxinferences*)))
(defun shen/shen\.errormaxinfs nil
  (shen/simple-error "maximum inferences exceeded~%"))
(defun shen/shen\.udefs*
    (V3683 V3684 V3685 V3686 V3687)
  (cl-flet
      ((tail-trampoline
        (V3683 V3684 V3685 V3686 V3687)
        (shen/let Case
                  (shen/let V3632
                            (shen/shen\.lazyderef V3685 V3686)
                            (shen/if
                             (shen/cons\? V3632)
                             (shen/let D
                                       (shen/hd V3632)
                                       (shen/do
                                        (shen/shen\.incinfs)
                                        (shen/call
                                         (list D V3683 V3684)
                                         V3686 V3687)))
                             'false))
                  (shen/if
                   (shen/= Case 'false)
                   (shen/let V3633
                             (shen/shen\.lazyderef V3685 V3686)
                             (shen/if
                              (shen/cons\? V3633)
                              (shen/let Ds
                                        (nthcdr 1 V3633)
                                        (shen/do
                                         (shen/shen\.incinfs)
                                         (vector
                                          (list V3683 V3684 Ds V3686 V3687))))
                              'false))
                   Case))))
    (let
        ((result
          (funcall #'tail-trampoline V3683 V3684 V3685 V3686 V3687)))
      (while
          (vectorp result)
        (setq result
              (apply #'tail-trampoline
                     (aref result 0))))
      result)))
(defun shen/shen\.th*
    (V3693 V3694 V3695 V3696 V3697)
  (shen/let Throwcontrol
            (shen/shen\.catchpoint)
            (shen/shen\.cutpoint Throwcontrol
                                 (shen/let Case
                                           (shen/do
                                            (shen/shen\.incinfs)
                                            (shen/shen\.show
                                             (list V3693 ': V3694)
                                             V3695 V3696
                                             (shen/freeze
                                              (shen/fwhen 'false V3696 V3697))))
                                           (shen/if
                                            (shen/= Case 'false)
                                            (shen/let Case
                                                      (shen/let F
                                                                (shen/shen\.newpv V3696)
                                                                (shen/do
                                                                 (shen/shen\.incinfs)
                                                                 (shen/fwhen
                                                                  (shen/shen\.typedf\?
                                                                   (shen/shen\.lazyderef V3693 V3696))
                                                                  V3696
                                                                  (shen/freeze
                                                                   (shen/bind F
                                                                              (shen/shen\.sigf
                                                                               (shen/shen\.lazyderef V3693 V3696))
                                                                              V3696
                                                                              (shen/freeze
                                                                               (shen/call
                                                                                (list F V3694)
                                                                                V3696 V3697)))))))
                                                      (shen/if
                                                       (shen/= Case 'false)
                                                       (shen/let Case
                                                                 (shen/do
                                                                  (shen/shen\.incinfs)
                                                                  (shen/shen\.base V3693 V3694 V3696 V3697))
                                                                 (shen/if
                                                                  (shen/= Case 'false)
                                                                  (shen/let Case
                                                                            (shen/do
                                                                             (shen/shen\.incinfs)
                                                                             (shen/shen\.by_hypothesis V3693 V3694 V3695 V3696 V3697))
                                                                            (shen/if
                                                                             (shen/= Case 'false)
                                                                             (shen/let Case
                                                                                       (shen/let V3528
                                                                                                 (shen/shen\.lazyderef V3693 V3696)
                                                                                                 (shen/if
                                                                                                  (shen/cons\? V3528)
                                                                                                  (shen/let F
                                                                                                            (shen/hd V3528)
                                                                                                            (shen/let V3529
                                                                                                                      (shen/shen\.lazyderef
                                                                                                                       (nthcdr 1 V3528)
                                                                                                                       V3696)
                                                                                                                      (shen/if
                                                                                                                       (shen/internal/predicate->shen
                                                                                                                        (null V3529))
                                                                                                                       (shen/do
                                                                                                                        (shen/shen\.incinfs)
                                                                                                                        (shen/shen\.th* F
                                                                                                                                        (list '--> V3694)
                                                                                                                                        V3695 V3696 V3697))
                                                                                                                       'false)))
                                                                                                  'false))
                                                                                       (shen/if
                                                                                        (shen/= Case 'false)
                                                                                        (shen/let Case
                                                                                                  (shen/let V3530
                                                                                                            (shen/shen\.lazyderef V3693 V3696)
                                                                                                            (shen/if
                                                                                                             (shen/cons\? V3530)
                                                                                                             (shen/let F
                                                                                                                       (shen/hd V3530)
                                                                                                                       (shen/let V3531
                                                                                                                                 (shen/shen\.lazyderef
                                                                                                                                  (nthcdr 1 V3530)
                                                                                                                                  V3696)
                                                                                                                                 (shen/if
                                                                                                                                  (shen/cons\? V3531)
                                                                                                                                  (shen/let X
                                                                                                                                            (shen/hd V3531)
                                                                                                                                            (shen/let V3532
                                                                                                                                                      (shen/shen\.lazyderef
                                                                                                                                                       (nthcdr 1 V3531)
                                                                                                                                                       V3696)
                                                                                                                                                      (shen/if
                                                                                                                                                       (shen/internal/predicate->shen
                                                                                                                                                        (null V3532))
                                                                                                                                                       (shen/let B
                                                                                                                                                                 (shen/shen\.newpv V3696)
                                                                                                                                                                 (shen/do
                                                                                                                                                                  (shen/shen\.incinfs)
                                                                                                                                                                  (shen/shen\.th* F
                                                                                                                                                                                  (list B '--> V3694)
                                                                                                                                                                                  V3695 V3696
                                                                                                                                                                                  (shen/freeze
                                                                                                                                                                                   (shen/shen\.th* X B V3695 V3696 V3697)))))
                                                                                                                                                       'false)))
                                                                                                                                  'false)))
                                                                                                             'false))
                                                                                                  (shen/if
                                                                                                   (shen/= Case 'false)
                                                                                                   (shen/let Case
                                                                                                             (shen/let V3533
                                                                                                                       (shen/shen\.lazyderef V3693 V3696)
                                                                                                                       (shen/if
                                                                                                                        (shen/cons\? V3533)
                                                                                                                        (shen/let V3534
                                                                                                                                  (shen/shen\.lazyderef
                                                                                                                                   (shen/hd V3533)
                                                                                                                                   V3696)
                                                                                                                                  (shen/if
                                                                                                                                   (shen/= 'cons V3534)
                                                                                                                                   (shen/let V3535
                                                                                                                                             (shen/shen\.lazyderef
                                                                                                                                              (nthcdr 1 V3533)
                                                                                                                                              V3696)
                                                                                                                                             (shen/if
                                                                                                                                              (shen/cons\? V3535)
                                                                                                                                              (shen/let X
                                                                                                                                                        (shen/hd V3535)
                                                                                                                                                        (shen/let V3536
                                                                                                                                                                  (shen/shen\.lazyderef
                                                                                                                                                                   (nthcdr 1 V3535)
                                                                                                                                                                   V3696)
                                                                                                                                                                  (shen/if
                                                                                                                                                                   (shen/cons\? V3536)
                                                                                                                                                                   (shen/let Y
                                                                                                                                                                             (shen/hd V3536)
                                                                                                                                                                             (shen/let V3537
                                                                                                                                                                                       (shen/shen\.lazyderef
                                                                                                                                                                                        (nthcdr 1 V3536)
                                                                                                                                                                                        V3696)
                                                                                                                                                                                       (shen/if
                                                                                                                                                                                        (shen/internal/predicate->shen
                                                                                                                                                                                         (null V3537))
                                                                                                                                                                                        (shen/let V3538
                                                                                                                                                                                                  (shen/shen\.lazyderef V3694 V3696)
                                                                                                                                                                                                  (shen/if
                                                                                                                                                                                                   (shen/cons\? V3538)
                                                                                                                                                                                                   (shen/let V3539
                                                                                                                                                                                                             (shen/shen\.lazyderef
                                                                                                                                                                                                              (shen/hd V3538)
                                                                                                                                                                                                              V3696)
                                                                                                                                                                                                             (shen/if
                                                                                                                                                                                                              (shen/= 'list V3539)
                                                                                                                                                                                                              (shen/let V3540
                                                                                                                                                                                                                        (shen/shen\.lazyderef
                                                                                                                                                                                                                         (nthcdr 1 V3538)
                                                                                                                                                                                                                         V3696)
                                                                                                                                                                                                                        (shen/if
                                                                                                                                                                                                                         (shen/cons\? V3540)
                                                                                                                                                                                                                         (shen/let A
                                                                                                                                                                                                                                   (shen/hd V3540)
                                                                                                                                                                                                                                   (shen/let V3541
                                                                                                                                                                                                                                             (shen/shen\.lazyderef
                                                                                                                                                                                                                                              (nthcdr 1 V3540)
                                                                                                                                                                                                                                              V3696)
                                                                                                                                                                                                                                             (shen/if
                                                                                                                                                                                                                                              (shen/internal/predicate->shen
                                                                                                                                                                                                                                               (null V3541))
                                                                                                                                                                                                                                              (shen/do
                                                                                                                                                                                                                                               (shen/shen\.incinfs)
                                                                                                                                                                                                                                               (shen/shen\.th* X A V3695 V3696
                                                                                                                                                                                                                                                               (shen/freeze
                                                                                                                                                                                                                                                                (shen/shen\.th* Y
                                                                                                                                                                                                                                                                                (list 'list A)
                                                                                                                                                                                                                                                                                V3695 V3696 V3697))))
                                                                                                                                                                                                                                              (shen/if
                                                                                                                                                                                                                                               (shen/shen\.pvar\? V3541)
                                                                                                                                                                                                                                               (shen/do
                                                                                                                                                                                                                                                (shen/shen\.bindv V3541 nil V3696)
                                                                                                                                                                                                                                                (shen/let Result
                                                                                                                                                                                                                                                          (shen/do
                                                                                                                                                                                                                                                           (shen/shen\.incinfs)
                                                                                                                                                                                                                                                           (shen/shen\.th* X A V3695 V3696
                                                                                                                                                                                                                                                                           (shen/freeze
                                                                                                                                                                                                                                                                            (shen/shen\.th* Y
                                                                                                                                                                                                                                                                                            (list 'list A)
                                                                                                                                                                                                                                                                                            V3695 V3696 V3697))))
                                                                                                                                                                                                                                                          (shen/do
                                                                                                                                                                                                                                                           (shen/shen\.unbindv V3541 V3696)
                                                                                                                                                                                                                                                           Result)))
                                                                                                                                                                                                                                               'false))))
                                                                                                                                                                                                                         (shen/if
                                                                                                                                                                                                                          (shen/shen\.pvar\? V3540)
                                                                                                                                                                                                                          (shen/let A
                                                                                                                                                                                                                                    (shen/shen\.newpv V3696)
                                                                                                                                                                                                                                    (shen/do
                                                                                                                                                                                                                                     (shen/shen\.bindv V3540
                                                                                                                                                                                                                                                       (list A)
                                                                                                                                                                                                                                                       V3696)
                                                                                                                                                                                                                                     (shen/let Result
                                                                                                                                                                                                                                               (shen/do
                                                                                                                                                                                                                                                (shen/shen\.incinfs)
                                                                                                                                                                                                                                                (shen/shen\.th* X A V3695 V3696
                                                                                                                                                                                                                                                                (shen/freeze
                                                                                                                                                                                                                                                                 (shen/shen\.th* Y
                                                                                                                                                                                                                                                                                 (list 'list A)
                                                                                                                                                                                                                                                                                 V3695 V3696 V3697))))
                                                                                                                                                                                                                                               (shen/do
                                                                                                                                                                                                                                                (shen/shen\.unbindv V3540 V3696)
                                                                                                                                                                                                                                                Result))))
                                                                                                                                                                                                                          'false)))
                                                                                                                                                                                                              (shen/if
                                                                                                                                                                                                               (shen/shen\.pvar\? V3539)
                                                                                                                                                                                                               (shen/do
                                                                                                                                                                                                                (shen/shen\.bindv V3539 'list V3696)
                                                                                                                                                                                                                (shen/let Result
                                                                                                                                                                                                                          (shen/let V3542
                                                                                                                                                                                                                                    (shen/shen\.lazyderef
                                                                                                                                                                                                                                     (nthcdr 1 V3538)
                                                                                                                                                                                                                                     V3696)
                                                                                                                                                                                                                                    (shen/if
                                                                                                                                                                                                                                     (shen/cons\? V3542)
                                                                                                                                                                                                                                     (shen/let A
                                                                                                                                                                                                                                               (shen/hd V3542)
                                                                                                                                                                                                                                               (shen/let V3543
                                                                                                                                                                                                                                                         (shen/shen\.lazyderef
                                                                                                                                                                                                                                                          (nthcdr 1 V3542)
                                                                                                                                                                                                                                                          V3696)
                                                                                                                                                                                                                                                         (shen/if
                                                                                                                                                                                                                                                          (shen/internal/predicate->shen
                                                                                                                                                                                                                                                           (null V3543))
                                                                                                                                                                                                                                                          (shen/do
                                                                                                                                                                                                                                                           (shen/shen\.incinfs)
                                                                                                                                                                                                                                                           (shen/shen\.th* X A V3695 V3696
                                                                                                                                                                                                                                                                           (shen/freeze
                                                                                                                                                                                                                                                                            (shen/shen\.th* Y
                                                                                                                                                                                                                                                                                            (list 'list A)
                                                                                                                                                                                                                                                                                            V3695 V3696 V3697))))
                                                                                                                                                                                                                                                          (shen/if
                                                                                                                                                                                                                                                           (shen/shen\.pvar\? V3543)
                                                                                                                                                                                                                                                           (shen/do
                                                                                                                                                                                                                                                            (shen/shen\.bindv V3543 nil V3696)
                                                                                                                                                                                                                                                            (shen/let Result
                                                                                                                                                                                                                                                                      (shen/do
                                                                                                                                                                                                                                                                       (shen/shen\.incinfs)
                                                                                                                                                                                                                                                                       (shen/shen\.th* X A V3695 V3696
                                                                                                                                                                                                                                                                                       (shen/freeze
                                                                                                                                                                                                                                                                                        (shen/shen\.th* Y
                                                                                                                                                                                                                                                                                                        (list 'list A)
                                                                                                                                                                                                                                                                                                        V3695 V3696 V3697))))
                                                                                                                                                                                                                                                                      (shen/do
                                                                                                                                                                                                                                                                       (shen/shen\.unbindv V3543 V3696)
                                                                                                                                                                                                                                                                       Result)))
                                                                                                                                                                                                                                                           'false))))
                                                                                                                                                                                                                                     (shen/if
                                                                                                                                                                                                                                      (shen/shen\.pvar\? V3542)
                                                                                                                                                                                                                                      (shen/let A
                                                                                                                                                                                                                                                (shen/shen\.newpv V3696)
                                                                                                                                                                                                                                                (shen/do
                                                                                                                                                                                                                                                 (shen/shen\.bindv V3542
                                                                                                                                                                                                                                                                   (list A)
                                                                                                                                                                                                                                                                   V3696)
                                                                                                                                                                                                                                                 (shen/let Result
                                                                                                                                                                                                                                                           (shen/do
                                                                                                                                                                                                                                                            (shen/shen\.incinfs)
                                                                                                                                                                                                                                                            (shen/shen\.th* X A V3695 V3696
                                                                                                                                                                                                                                                                            (shen/freeze
                                                                                                                                                                                                                                                                             (shen/shen\.th* Y
                                                                                                                                                                                                                                                                                             (list 'list A)
                                                                                                                                                                                                                                                                                             V3695 V3696 V3697))))
                                                                                                                                                                                                                                                           (shen/do
                                                                                                                                                                                                                                                            (shen/shen\.unbindv V3542 V3696)
                                                                                                                                                                                                                                                            Result))))
                                                                                                                                                                                                                                      'false)))
                                                                                                                                                                                                                          (shen/do
                                                                                                                                                                                                                           (shen/shen\.unbindv V3539 V3696)
                                                                                                                                                                                                                           Result)))
                                                                                                                                                                                                               'false)))
                                                                                                                                                                                                   (shen/if
                                                                                                                                                                                                    (shen/shen\.pvar\? V3538)
                                                                                                                                                                                                    (shen/let A
                                                                                                                                                                                                              (shen/shen\.newpv V3696)
                                                                                                                                                                                                              (shen/do
                                                                                                                                                                                                               (shen/shen\.bindv V3538
                                                                                                                                                                                                                                 (list 'list A)
                                                                                                                                                                                                                                 V3696)
                                                                                                                                                                                                               (shen/let Result
                                                                                                                                                                                                                         (shen/do
                                                                                                                                                                                                                          (shen/shen\.incinfs)
                                                                                                                                                                                                                          (shen/shen\.th* X A V3695 V3696
                                                                                                                                                                                                                                          (shen/freeze
                                                                                                                                                                                                                                           (shen/shen\.th* Y
                                                                                                                                                                                                                                                           (list 'list A)
                                                                                                                                                                                                                                                           V3695 V3696 V3697))))
                                                                                                                                                                                                                         (shen/do
                                                                                                                                                                                                                          (shen/shen\.unbindv V3538 V3696)
                                                                                                                                                                                                                          Result))))
                                                                                                                                                                                                    'false)))
                                                                                                                                                                                        'false)))
                                                                                                                                                                   'false)))
                                                                                                                                              'false))
                                                                                                                                   'false))
                                                                                                                        'false))
                                                                                                             (shen/if
                                                                                                              (shen/= Case 'false)
                                                                                                              (shen/let Case
                                                                                                                        (shen/let V3544
                                                                                                                                  (shen/shen\.lazyderef V3693 V3696)
                                                                                                                                  (shen/if
                                                                                                                                   (shen/cons\? V3544)
                                                                                                                                   (shen/let V3545
                                                                                                                                             (shen/shen\.lazyderef
                                                                                                                                              (shen/hd V3544)
                                                                                                                                              V3696)
                                                                                                                                             (shen/if
                                                                                                                                              (shen/= '@p V3545)
                                                                                                                                              (shen/let V3546
                                                                                                                                                        (shen/shen\.lazyderef
                                                                                                                                                         (nthcdr 1 V3544)
                                                                                                                                                         V3696)
                                                                                                                                                        (shen/if
                                                                                                                                                         (shen/cons\? V3546)
                                                                                                                                                         (shen/let X
                                                                                                                                                                   (shen/hd V3546)
                                                                                                                                                                   (shen/let V3547
                                                                                                                                                                             (shen/shen\.lazyderef
                                                                                                                                                                              (nthcdr 1 V3546)
                                                                                                                                                                              V3696)
                                                                                                                                                                             (shen/if
                                                                                                                                                                              (shen/cons\? V3547)
                                                                                                                                                                              (shen/let Y
                                                                                                                                                                                        (shen/hd V3547)
                                                                                                                                                                                        (shen/let V3548
                                                                                                                                                                                                  (shen/shen\.lazyderef
                                                                                                                                                                                                   (nthcdr 1 V3547)
                                                                                                                                                                                                   V3696)
                                                                                                                                                                                                  (shen/if
                                                                                                                                                                                                   (shen/internal/predicate->shen
                                                                                                                                                                                                    (null V3548))
                                                                                                                                                                                                   (shen/let V3549
                                                                                                                                                                                                             (shen/shen\.lazyderef V3694 V3696)
                                                                                                                                                                                                             (shen/if
                                                                                                                                                                                                              (shen/cons\? V3549)
                                                                                                                                                                                                              (shen/let A
                                                                                                                                                                                                                        (shen/hd V3549)
                                                                                                                                                                                                                        (shen/let V3550
                                                                                                                                                                                                                                  (shen/shen\.lazyderef
                                                                                                                                                                                                                                   (nthcdr 1 V3549)
                                                                                                                                                                                                                                   V3696)
                                                                                                                                                                                                                                  (shen/if
                                                                                                                                                                                                                                   (shen/cons\? V3550)
                                                                                                                                                                                                                                   (shen/let V3551
                                                                                                                                                                                                                                             (shen/shen\.lazyderef
                                                                                                                                                                                                                                              (shen/hd V3550)
                                                                                                                                                                                                                                              V3696)
                                                                                                                                                                                                                                             (shen/if
                                                                                                                                                                                                                                              (shen/= '* V3551)
                                                                                                                                                                                                                                              (shen/let V3552
                                                                                                                                                                                                                                                        (shen/shen\.lazyderef
                                                                                                                                                                                                                                                         (nthcdr 1 V3550)
                                                                                                                                                                                                                                                         V3696)
                                                                                                                                                                                                                                                        (shen/if
                                                                                                                                                                                                                                                         (shen/cons\? V3552)
                                                                                                                                                                                                                                                         (shen/let B
                                                                                                                                                                                                                                                                   (shen/hd V3552)
                                                                                                                                                                                                                                                                   (shen/let V3553
                                                                                                                                                                                                                                                                             (shen/shen\.lazyderef
                                                                                                                                                                                                                                                                              (nthcdr 1 V3552)
                                                                                                                                                                                                                                                                              V3696)
                                                                                                                                                                                                                                                                             (shen/if
                                                                                                                                                                                                                                                                              (shen/internal/predicate->shen
                                                                                                                                                                                                                                                                               (null V3553))
                                                                                                                                                                                                                                                                              (shen/do
                                                                                                                                                                                                                                                                               (shen/shen\.incinfs)
                                                                                                                                                                                                                                                                               (shen/shen\.th* X A V3695 V3696
                                                                                                                                                                                                                                                                                               (shen/freeze
                                                                                                                                                                                                                                                                                                (shen/shen\.th* Y B V3695 V3696 V3697))))
                                                                                                                                                                                                                                                                              (shen/if
                                                                                                                                                                                                                                                                               (shen/shen\.pvar\? V3553)
                                                                                                                                                                                                                                                                               (shen/do
                                                                                                                                                                                                                                                                                (shen/shen\.bindv V3553 nil V3696)
                                                                                                                                                                                                                                                                                (shen/let Result
                                                                                                                                                                                                                                                                                          (shen/do
                                                                                                                                                                                                                                                                                           (shen/shen\.incinfs)
                                                                                                                                                                                                                                                                                           (shen/shen\.th* X A V3695 V3696
                                                                                                                                                                                                                                                                                                           (shen/freeze
                                                                                                                                                                                                                                                                                                            (shen/shen\.th* Y B V3695 V3696 V3697))))
                                                                                                                                                                                                                                                                                          (shen/do
                                                                                                                                                                                                                                                                                           (shen/shen\.unbindv V3553 V3696)
                                                                                                                                                                                                                                                                                           Result)))
                                                                                                                                                                                                                                                                               'false))))
                                                                                                                                                                                                                                                         (shen/if
                                                                                                                                                                                                                                                          (shen/shen\.pvar\? V3552)
                                                                                                                                                                                                                                                          (shen/let B
                                                                                                                                                                                                                                                                    (shen/shen\.newpv V3696)
                                                                                                                                                                                                                                                                    (shen/do
                                                                                                                                                                                                                                                                     (shen/shen\.bindv V3552
                                                                                                                                                                                                                                                                                       (list B)
                                                                                                                                                                                                                                                                                       V3696)
                                                                                                                                                                                                                                                                     (shen/let Result
                                                                                                                                                                                                                                                                               (shen/do
                                                                                                                                                                                                                                                                                (shen/shen\.incinfs)
                                                                                                                                                                                                                                                                                (shen/shen\.th* X A V3695 V3696
                                                                                                                                                                                                                                                                                                (shen/freeze
                                                                                                                                                                                                                                                                                                 (shen/shen\.th* Y B V3695 V3696 V3697))))
                                                                                                                                                                                                                                                                               (shen/do
                                                                                                                                                                                                                                                                                (shen/shen\.unbindv V3552 V3696)
                                                                                                                                                                                                                                                                                Result))))
                                                                                                                                                                                                                                                          'false)))
                                                                                                                                                                                                                                              (shen/if
                                                                                                                                                                                                                                               (shen/shen\.pvar\? V3551)
                                                                                                                                                                                                                                               (shen/do
                                                                                                                                                                                                                                                (shen/shen\.bindv V3551 '* V3696)
                                                                                                                                                                                                                                                (shen/let Result
                                                                                                                                                                                                                                                          (shen/let V3554
                                                                                                                                                                                                                                                                    (shen/shen\.lazyderef
                                                                                                                                                                                                                                                                     (nthcdr 1 V3550)
                                                                                                                                                                                                                                                                     V3696)
                                                                                                                                                                                                                                                                    (shen/if
                                                                                                                                                                                                                                                                     (shen/cons\? V3554)
                                                                                                                                                                                                                                                                     (shen/let B
                                                                                                                                                                                                                                                                               (shen/hd V3554)
                                                                                                                                                                                                                                                                               (shen/let V3555
                                                                                                                                                                                                                                                                                         (shen/shen\.lazyderef
                                                                                                                                                                                                                                                                                          (nthcdr 1 V3554)
                                                                                                                                                                                                                                                                                          V3696)
                                                                                                                                                                                                                                                                                         (shen/if
                                                                                                                                                                                                                                                                                          (shen/internal/predicate->shen
                                                                                                                                                                                                                                                                                           (null V3555))
                                                                                                                                                                                                                                                                                          (shen/do
                                                                                                                                                                                                                                                                                           (shen/shen\.incinfs)
                                                                                                                                                                                                                                                                                           (shen/shen\.th* X A V3695 V3696
                                                                                                                                                                                                                                                                                                           (shen/freeze
                                                                                                                                                                                                                                                                                                            (shen/shen\.th* Y B V3695 V3696 V3697))))
                                                                                                                                                                                                                                                                                          (shen/if
                                                                                                                                                                                                                                                                                           (shen/shen\.pvar\? V3555)
                                                                                                                                                                                                                                                                                           (shen/do
                                                                                                                                                                                                                                                                                            (shen/shen\.bindv V3555 nil V3696)
                                                                                                                                                                                                                                                                                            (shen/let Result
                                                                                                                                                                                                                                                                                                      (shen/do
                                                                                                                                                                                                                                                                                                       (shen/shen\.incinfs)
                                                                                                                                                                                                                                                                                                       (shen/shen\.th* X A V3695 V3696
                                                                                                                                                                                                                                                                                                                       (shen/freeze
                                                                                                                                                                                                                                                                                                                        (shen/shen\.th* Y B V3695 V3696 V3697))))
                                                                                                                                                                                                                                                                                                      (shen/do
                                                                                                                                                                                                                                                                                                       (shen/shen\.unbindv V3555 V3696)
                                                                                                                                                                                                                                                                                                       Result)))
                                                                                                                                                                                                                                                                                           'false))))
                                                                                                                                                                                                                                                                     (shen/if
                                                                                                                                                                                                                                                                      (shen/shen\.pvar\? V3554)
                                                                                                                                                                                                                                                                      (shen/let B
                                                                                                                                                                                                                                                                                (shen/shen\.newpv V3696)
                                                                                                                                                                                                                                                                                (shen/do
                                                                                                                                                                                                                                                                                 (shen/shen\.bindv V3554
                                                                                                                                                                                                                                                                                                   (list B)
                                                                                                                                                                                                                                                                                                   V3696)
                                                                                                                                                                                                                                                                                 (shen/let Result
                                                                                                                                                                                                                                                                                           (shen/do
                                                                                                                                                                                                                                                                                            (shen/shen\.incinfs)
                                                                                                                                                                                                                                                                                            (shen/shen\.th* X A V3695 V3696
                                                                                                                                                                                                                                                                                                            (shen/freeze
                                                                                                                                                                                                                                                                                                             (shen/shen\.th* Y B V3695 V3696 V3697))))
                                                                                                                                                                                                                                                                                           (shen/do
                                                                                                                                                                                                                                                                                            (shen/shen\.unbindv V3554 V3696)
                                                                                                                                                                                                                                                                                            Result))))
                                                                                                                                                                                                                                                                      'false)))
                                                                                                                                                                                                                                                          (shen/do
                                                                                                                                                                                                                                                           (shen/shen\.unbindv V3551 V3696)
                                                                                                                                                                                                                                                           Result)))
                                                                                                                                                                                                                                               'false)))
                                                                                                                                                                                                                                   (shen/if
                                                                                                                                                                                                                                    (shen/shen\.pvar\? V3550)
                                                                                                                                                                                                                                    (shen/let B
                                                                                                                                                                                                                                              (shen/shen\.newpv V3696)
                                                                                                                                                                                                                                              (shen/do
                                                                                                                                                                                                                                               (shen/shen\.bindv V3550
                                                                                                                                                                                                                                                                 (list '* B)
                                                                                                                                                                                                                                                                 V3696)
                                                                                                                                                                                                                                               (shen/let Result
                                                                                                                                                                                                                                                         (shen/do
                                                                                                                                                                                                                                                          (shen/shen\.incinfs)
                                                                                                                                                                                                                                                          (shen/shen\.th* X A V3695 V3696
                                                                                                                                                                                                                                                                          (shen/freeze
                                                                                                                                                                                                                                                                           (shen/shen\.th* Y B V3695 V3696 V3697))))
                                                                                                                                                                                                                                                         (shen/do
                                                                                                                                                                                                                                                          (shen/shen\.unbindv V3550 V3696)
                                                                                                                                                                                                                                                          Result))))
                                                                                                                                                                                                                                    'false))))
                                                                                                                                                                                                              (shen/if
                                                                                                                                                                                                               (shen/shen\.pvar\? V3549)
                                                                                                                                                                                                               (shen/let A
                                                                                                                                                                                                                         (shen/shen\.newpv V3696)
                                                                                                                                                                                                                         (shen/let B
                                                                                                                                                                                                                                   (shen/shen\.newpv V3696)
                                                                                                                                                                                                                                   (shen/do
                                                                                                                                                                                                                                    (shen/shen\.bindv V3549
                                                                                                                                                                                                                                                      (list A '* B)
                                                                                                                                                                                                                                                      V3696)
                                                                                                                                                                                                                                    (shen/let Result
                                                                                                                                                                                                                                              (shen/do
                                                                                                                                                                                                                                               (shen/shen\.incinfs)
                                                                                                                                                                                                                                               (shen/shen\.th* X A V3695 V3696
                                                                                                                                                                                                                                                               (shen/freeze
                                                                                                                                                                                                                                                                (shen/shen\.th* Y B V3695 V3696 V3697))))
                                                                                                                                                                                                                                              (shen/do
                                                                                                                                                                                                                                               (shen/shen\.unbindv V3549 V3696)
                                                                                                                                                                                                                                               Result)))))
                                                                                                                                                                                                               'false)))
                                                                                                                                                                                                   'false)))
                                                                                                                                                                              'false)))
                                                                                                                                                         'false))
                                                                                                                                              'false))
                                                                                                                                   'false))
                                                                                                                        (shen/if
                                                                                                                         (shen/= Case 'false)
                                                                                                                         (shen/let Case
                                                                                                                                   (shen/let V3556
                                                                                                                                             (shen/shen\.lazyderef V3693 V3696)
                                                                                                                                             (shen/if
                                                                                                                                              (shen/cons\? V3556)
                                                                                                                                              (shen/let V3557
                                                                                                                                                        (shen/shen\.lazyderef
                                                                                                                                                         (shen/hd V3556)
                                                                                                                                                         V3696)
                                                                                                                                                        (shen/if
                                                                                                                                                         (shen/= '@v V3557)
                                                                                                                                                         (shen/let V3558
                                                                                                                                                                   (shen/shen\.lazyderef
                                                                                                                                                                    (nthcdr 1 V3556)
                                                                                                                                                                    V3696)
                                                                                                                                                                   (shen/if
                                                                                                                                                                    (shen/cons\? V3558)
                                                                                                                                                                    (shen/let X
                                                                                                                                                                              (shen/hd V3558)
                                                                                                                                                                              (shen/let V3559
                                                                                                                                                                                        (shen/shen\.lazyderef
                                                                                                                                                                                         (nthcdr 1 V3558)
                                                                                                                                                                                         V3696)
                                                                                                                                                                                        (shen/if
                                                                                                                                                                                         (shen/cons\? V3559)
                                                                                                                                                                                         (shen/let Y
                                                                                                                                                                                                   (shen/hd V3559)
                                                                                                                                                                                                   (shen/let V3560
                                                                                                                                                                                                             (shen/shen\.lazyderef
                                                                                                                                                                                                              (nthcdr 1 V3559)
                                                                                                                                                                                                              V3696)
                                                                                                                                                                                                             (shen/if
                                                                                                                                                                                                              (shen/internal/predicate->shen
                                                                                                                                                                                                               (null V3560))
                                                                                                                                                                                                              (shen/let V3561
                                                                                                                                                                                                                        (shen/shen\.lazyderef V3694 V3696)
                                                                                                                                                                                                                        (shen/if
                                                                                                                                                                                                                         (shen/cons\? V3561)
                                                                                                                                                                                                                         (shen/let V3562
                                                                                                                                                                                                                                   (shen/shen\.lazyderef
                                                                                                                                                                                                                                    (shen/hd V3561)
                                                                                                                                                                                                                                    V3696)
                                                                                                                                                                                                                                   (shen/if
                                                                                                                                                                                                                                    (shen/= 'vector V3562)
                                                                                                                                                                                                                                    (shen/let V3563
                                                                                                                                                                                                                                              (shen/shen\.lazyderef
                                                                                                                                                                                                                                               (nthcdr 1 V3561)
                                                                                                                                                                                                                                               V3696)
                                                                                                                                                                                                                                              (shen/if
                                                                                                                                                                                                                                               (shen/cons\? V3563)
                                                                                                                                                                                                                                               (shen/let A
                                                                                                                                                                                                                                                         (shen/hd V3563)
                                                                                                                                                                                                                                                         (shen/let V3564
                                                                                                                                                                                                                                                                   (shen/shen\.lazyderef
                                                                                                                                                                                                                                                                    (nthcdr 1 V3563)
                                                                                                                                                                                                                                                                    V3696)
                                                                                                                                                                                                                                                                   (shen/if
                                                                                                                                                                                                                                                                    (shen/internal/predicate->shen
                                                                                                                                                                                                                                                                     (null V3564))
                                                                                                                                                                                                                                                                    (shen/do
                                                                                                                                                                                                                                                                     (shen/shen\.incinfs)
                                                                                                                                                                                                                                                                     (shen/shen\.th* X A V3695 V3696
                                                                                                                                                                                                                                                                                     (shen/freeze
                                                                                                                                                                                                                                                                                      (shen/shen\.th* Y
                                                                                                                                                                                                                                                                                                      (list 'vector A)
                                                                                                                                                                                                                                                                                                      V3695 V3696 V3697))))
                                                                                                                                                                                                                                                                    (shen/if
                                                                                                                                                                                                                                                                     (shen/shen\.pvar\? V3564)
                                                                                                                                                                                                                                                                     (shen/do
                                                                                                                                                                                                                                                                      (shen/shen\.bindv V3564 nil V3696)
                                                                                                                                                                                                                                                                      (shen/let Result
                                                                                                                                                                                                                                                                                (shen/do
                                                                                                                                                                                                                                                                                 (shen/shen\.incinfs)
                                                                                                                                                                                                                                                                                 (shen/shen\.th* X A V3695 V3696
                                                                                                                                                                                                                                                                                                 (shen/freeze
                                                                                                                                                                                                                                                                                                  (shen/shen\.th* Y
                                                                                                                                                                                                                                                                                                                  (list 'vector A)
                                                                                                                                                                                                                                                                                                                  V3695 V3696 V3697))))
                                                                                                                                                                                                                                                                                (shen/do
                                                                                                                                                                                                                                                                                 (shen/shen\.unbindv V3564 V3696)
                                                                                                                                                                                                                                                                                 Result)))
                                                                                                                                                                                                                                                                     'false))))
                                                                                                                                                                                                                                               (shen/if
                                                                                                                                                                                                                                                (shen/shen\.pvar\? V3563)
                                                                                                                                                                                                                                                (shen/let A
                                                                                                                                                                                                                                                          (shen/shen\.newpv V3696)
                                                                                                                                                                                                                                                          (shen/do
                                                                                                                                                                                                                                                           (shen/shen\.bindv V3563
                                                                                                                                                                                                                                                                             (list A)
                                                                                                                                                                                                                                                                             V3696)
                                                                                                                                                                                                                                                           (shen/let Result
                                                                                                                                                                                                                                                                     (shen/do
                                                                                                                                                                                                                                                                      (shen/shen\.incinfs)
                                                                                                                                                                                                                                                                      (shen/shen\.th* X A V3695 V3696
                                                                                                                                                                                                                                                                                      (shen/freeze
                                                                                                                                                                                                                                                                                       (shen/shen\.th* Y
                                                                                                                                                                                                                                                                                                       (list 'vector A)
                                                                                                                                                                                                                                                                                                       V3695 V3696 V3697))))
                                                                                                                                                                                                                                                                     (shen/do
                                                                                                                                                                                                                                                                      (shen/shen\.unbindv V3563 V3696)
                                                                                                                                                                                                                                                                      Result))))
                                                                                                                                                                                                                                                'false)))
                                                                                                                                                                                                                                    (shen/if
                                                                                                                                                                                                                                     (shen/shen\.pvar\? V3562)
                                                                                                                                                                                                                                     (shen/do
                                                                                                                                                                                                                                      (shen/shen\.bindv V3562 'vector V3696)
                                                                                                                                                                                                                                      (shen/let Result
                                                                                                                                                                                                                                                (shen/let V3565
                                                                                                                                                                                                                                                          (shen/shen\.lazyderef
                                                                                                                                                                                                                                                           (nthcdr 1 V3561)
                                                                                                                                                                                                                                                           V3696)
                                                                                                                                                                                                                                                          (shen/if
                                                                                                                                                                                                                                                           (shen/cons\? V3565)
                                                                                                                                                                                                                                                           (shen/let A
                                                                                                                                                                                                                                                                     (shen/hd V3565)
                                                                                                                                                                                                                                                                     (shen/let V3566
                                                                                                                                                                                                                                                                               (shen/shen\.lazyderef
                                                                                                                                                                                                                                                                                (nthcdr 1 V3565)
                                                                                                                                                                                                                                                                                V3696)
                                                                                                                                                                                                                                                                               (shen/if
                                                                                                                                                                                                                                                                                (shen/internal/predicate->shen
                                                                                                                                                                                                                                                                                 (null V3566))
                                                                                                                                                                                                                                                                                (shen/do
                                                                                                                                                                                                                                                                                 (shen/shen\.incinfs)
                                                                                                                                                                                                                                                                                 (shen/shen\.th* X A V3695 V3696
                                                                                                                                                                                                                                                                                                 (shen/freeze
                                                                                                                                                                                                                                                                                                  (shen/shen\.th* Y
                                                                                                                                                                                                                                                                                                                  (list 'vector A)
                                                                                                                                                                                                                                                                                                                  V3695 V3696 V3697))))
                                                                                                                                                                                                                                                                                (shen/if
                                                                                                                                                                                                                                                                                 (shen/shen\.pvar\? V3566)
                                                                                                                                                                                                                                                                                 (shen/do
                                                                                                                                                                                                                                                                                  (shen/shen\.bindv V3566 nil V3696)
                                                                                                                                                                                                                                                                                  (shen/let Result
                                                                                                                                                                                                                                                                                            (shen/do
                                                                                                                                                                                                                                                                                             (shen/shen\.incinfs)
                                                                                                                                                                                                                                                                                             (shen/shen\.th* X A V3695 V3696
                                                                                                                                                                                                                                                                                                             (shen/freeze
                                                                                                                                                                                                                                                                                                              (shen/shen\.th* Y
                                                                                                                                                                                                                                                                                                                              (list 'vector A)
                                                                                                                                                                                                                                                                                                                              V3695 V3696 V3697))))
                                                                                                                                                                                                                                                                                            (shen/do
                                                                                                                                                                                                                                                                                             (shen/shen\.unbindv V3566 V3696)
                                                                                                                                                                                                                                                                                             Result)))
                                                                                                                                                                                                                                                                                 'false))))
                                                                                                                                                                                                                                                           (shen/if
                                                                                                                                                                                                                                                            (shen/shen\.pvar\? V3565)
                                                                                                                                                                                                                                                            (shen/let A
                                                                                                                                                                                                                                                                      (shen/shen\.newpv V3696)
                                                                                                                                                                                                                                                                      (shen/do
                                                                                                                                                                                                                                                                       (shen/shen\.bindv V3565
                                                                                                                                                                                                                                                                                         (list A)
                                                                                                                                                                                                                                                                                         V3696)
                                                                                                                                                                                                                                                                       (shen/let Result
                                                                                                                                                                                                                                                                                 (shen/do
                                                                                                                                                                                                                                                                                  (shen/shen\.incinfs)
                                                                                                                                                                                                                                                                                  (shen/shen\.th* X A V3695 V3696
                                                                                                                                                                                                                                                                                                  (shen/freeze
                                                                                                                                                                                                                                                                                                   (shen/shen\.th* Y
                                                                                                                                                                                                                                                                                                                   (list 'vector A)
                                                                                                                                                                                                                                                                                                                   V3695 V3696 V3697))))
                                                                                                                                                                                                                                                                                 (shen/do
                                                                                                                                                                                                                                                                                  (shen/shen\.unbindv V3565 V3696)
                                                                                                                                                                                                                                                                                  Result))))
                                                                                                                                                                                                                                                            'false)))
                                                                                                                                                                                                                                                (shen/do
                                                                                                                                                                                                                                                 (shen/shen\.unbindv V3562 V3696)
                                                                                                                                                                                                                                                 Result)))
                                                                                                                                                                                                                                     'false)))
                                                                                                                                                                                                                         (shen/if
                                                                                                                                                                                                                          (shen/shen\.pvar\? V3561)
                                                                                                                                                                                                                          (shen/let A
                                                                                                                                                                                                                                    (shen/shen\.newpv V3696)
                                                                                                                                                                                                                                    (shen/do
                                                                                                                                                                                                                                     (shen/shen\.bindv V3561
                                                                                                                                                                                                                                                       (list 'vector A)
                                                                                                                                                                                                                                                       V3696)
                                                                                                                                                                                                                                     (shen/let Result
                                                                                                                                                                                                                                               (shen/do
                                                                                                                                                                                                                                                (shen/shen\.incinfs)
                                                                                                                                                                                                                                                (shen/shen\.th* X A V3695 V3696
                                                                                                                                                                                                                                                                (shen/freeze
                                                                                                                                                                                                                                                                 (shen/shen\.th* Y
                                                                                                                                                                                                                                                                                 (list 'vector A)
                                                                                                                                                                                                                                                                                 V3695 V3696 V3697))))
                                                                                                                                                                                                                                               (shen/do
                                                                                                                                                                                                                                                (shen/shen\.unbindv V3561 V3696)
                                                                                                                                                                                                                                                Result))))
                                                                                                                                                                                                                          'false)))
                                                                                                                                                                                                              'false)))
                                                                                                                                                                                         'false)))
                                                                                                                                                                    'false))
                                                                                                                                                         'false))
                                                                                                                                              'false))
                                                                                                                                   (shen/if
                                                                                                                                    (shen/= Case 'false)
                                                                                                                                    (shen/let Case
                                                                                                                                              (shen/let V3567
                                                                                                                                                        (shen/shen\.lazyderef V3693 V3696)
                                                                                                                                                        (shen/if
                                                                                                                                                         (shen/cons\? V3567)
                                                                                                                                                         (shen/let V3568
                                                                                                                                                                   (shen/shen\.lazyderef
                                                                                                                                                                    (shen/hd V3567)
                                                                                                                                                                    V3696)
                                                                                                                                                                   (shen/if
                                                                                                                                                                    (shen/= '@s V3568)
                                                                                                                                                                    (shen/let V3569
                                                                                                                                                                              (shen/shen\.lazyderef
                                                                                                                                                                               (nthcdr 1 V3567)
                                                                                                                                                                               V3696)
                                                                                                                                                                              (shen/if
                                                                                                                                                                               (shen/cons\? V3569)
                                                                                                                                                                               (shen/let X
                                                                                                                                                                                         (shen/hd V3569)
                                                                                                                                                                                         (shen/let V3570
                                                                                                                                                                                                   (shen/shen\.lazyderef
                                                                                                                                                                                                    (nthcdr 1 V3569)
                                                                                                                                                                                                    V3696)
                                                                                                                                                                                                   (shen/if
                                                                                                                                                                                                    (shen/cons\? V3570)
                                                                                                                                                                                                    (shen/let Y
                                                                                                                                                                                                              (shen/hd V3570)
                                                                                                                                                                                                              (shen/let V3571
                                                                                                                                                                                                                        (shen/shen\.lazyderef
                                                                                                                                                                                                                         (nthcdr 1 V3570)
                                                                                                                                                                                                                         V3696)
                                                                                                                                                                                                                        (shen/if
                                                                                                                                                                                                                         (shen/internal/predicate->shen
                                                                                                                                                                                                                          (null V3571))
                                                                                                                                                                                                                         (shen/let V3572
                                                                                                                                                                                                                                   (shen/shen\.lazyderef V3694 V3696)
                                                                                                                                                                                                                                   (shen/if
                                                                                                                                                                                                                                    (shen/= 'string V3572)
                                                                                                                                                                                                                                    (shen/do
                                                                                                                                                                                                                                     (shen/shen\.incinfs)
                                                                                                                                                                                                                                     (shen/shen\.th* X 'string V3695 V3696
                                                                                                                                                                                                                                                     (shen/freeze
                                                                                                                                                                                                                                                      (shen/shen\.th* Y 'string V3695 V3696 V3697))))
                                                                                                                                                                                                                                    (shen/if
                                                                                                                                                                                                                                     (shen/shen\.pvar\? V3572)
                                                                                                                                                                                                                                     (shen/do
                                                                                                                                                                                                                                      (shen/shen\.bindv V3572 'string V3696)
                                                                                                                                                                                                                                      (shen/let Result
                                                                                                                                                                                                                                                (shen/do
                                                                                                                                                                                                                                                 (shen/shen\.incinfs)
                                                                                                                                                                                                                                                 (shen/shen\.th* X 'string V3695 V3696
                                                                                                                                                                                                                                                                 (shen/freeze
                                                                                                                                                                                                                                                                  (shen/shen\.th* Y 'string V3695 V3696 V3697))))
                                                                                                                                                                                                                                                (shen/do
                                                                                                                                                                                                                                                 (shen/shen\.unbindv V3572 V3696)
                                                                                                                                                                                                                                                 Result)))
                                                                                                                                                                                                                                     'false)))
                                                                                                                                                                                                                         'false)))
                                                                                                                                                                                                    'false)))
                                                                                                                                                                               'false))
                                                                                                                                                                    'false))
                                                                                                                                                         'false))
                                                                                                                                              (shen/if
                                                                                                                                               (shen/= Case 'false)
                                                                                                                                               (shen/let Case
                                                                                                                                                         (shen/let V3573
                                                                                                                                                                   (shen/shen\.lazyderef V3693 V3696)
                                                                                                                                                                   (shen/if
                                                                                                                                                                    (shen/cons\? V3573)
                                                                                                                                                                    (shen/let V3574
                                                                                                                                                                              (shen/shen\.lazyderef
                                                                                                                                                                               (shen/hd V3573)
                                                                                                                                                                               V3696)
                                                                                                                                                                              (shen/if
                                                                                                                                                                               (shen/= 'lambda V3574)
                                                                                                                                                                               (shen/let V3575
                                                                                                                                                                                         (shen/shen\.lazyderef
                                                                                                                                                                                          (nthcdr 1 V3573)
                                                                                                                                                                                          V3696)
                                                                                                                                                                                         (shen/if
                                                                                                                                                                                          (shen/cons\? V3575)
                                                                                                                                                                                          (shen/let X
                                                                                                                                                                                                    (shen/hd V3575)
                                                                                                                                                                                                    (shen/let V3576
                                                                                                                                                                                                              (shen/shen\.lazyderef
                                                                                                                                                                                                               (nthcdr 1 V3575)
                                                                                                                                                                                                               V3696)
                                                                                                                                                                                                              (shen/if
                                                                                                                                                                                                               (shen/cons\? V3576)
                                                                                                                                                                                                               (shen/let Y
                                                                                                                                                                                                                         (shen/hd V3576)
                                                                                                                                                                                                                         (shen/let V3577
                                                                                                                                                                                                                                   (shen/shen\.lazyderef
                                                                                                                                                                                                                                    (nthcdr 1 V3576)
                                                                                                                                                                                                                                    V3696)
                                                                                                                                                                                                                                   (shen/if
                                                                                                                                                                                                                                    (shen/internal/predicate->shen
                                                                                                                                                                                                                                     (null V3577))
                                                                                                                                                                                                                                    (shen/let V3578
                                                                                                                                                                                                                                              (shen/shen\.lazyderef V3694 V3696)
                                                                                                                                                                                                                                              (shen/if
                                                                                                                                                                                                                                               (shen/cons\? V3578)
                                                                                                                                                                                                                                               (shen/let A
                                                                                                                                                                                                                                                         (shen/hd V3578)
                                                                                                                                                                                                                                                         (shen/let V3579
                                                                                                                                                                                                                                                                   (shen/shen\.lazyderef
                                                                                                                                                                                                                                                                    (nthcdr 1 V3578)
                                                                                                                                                                                                                                                                    V3696)
                                                                                                                                                                                                                                                                   (shen/if
                                                                                                                                                                                                                                                                    (shen/cons\? V3579)
                                                                                                                                                                                                                                                                    (shen/let V3580
                                                                                                                                                                                                                                                                              (shen/shen\.lazyderef
                                                                                                                                                                                                                                                                               (shen/hd V3579)
                                                                                                                                                                                                                                                                               V3696)
                                                                                                                                                                                                                                                                              (shen/if
                                                                                                                                                                                                                                                                               (shen/= '--> V3580)
                                                                                                                                                                                                                                                                               (shen/let V3581
                                                                                                                                                                                                                                                                                         (shen/shen\.lazyderef
                                                                                                                                                                                                                                                                                          (nthcdr 1 V3579)
                                                                                                                                                                                                                                                                                          V3696)
                                                                                                                                                                                                                                                                                         (shen/if
                                                                                                                                                                                                                                                                                          (shen/cons\? V3581)
                                                                                                                                                                                                                                                                                          (shen/let B
                                                                                                                                                                                                                                                                                                    (shen/hd V3581)
                                                                                                                                                                                                                                                                                                    (shen/let V3582
                                                                                                                                                                                                                                                                                                              (shen/shen\.lazyderef
                                                                                                                                                                                                                                                                                                               (nthcdr 1 V3581)
                                                                                                                                                                                                                                                                                                               V3696)
                                                                                                                                                                                                                                                                                                              (shen/if
                                                                                                                                                                                                                                                                                                               (shen/internal/predicate->shen
                                                                                                                                                                                                                                                                                                                (null V3582))
                                                                                                                                                                                                                                                                                                               (shen/let Z
                                                                                                                                                                                                                                                                                                                         (shen/shen\.newpv V3696)
                                                                                                                                                                                                                                                                                                                         (shen/let X&&
                                                                                                                                                                                                                                                                                                                                   (shen/shen\.newpv V3696)
                                                                                                                                                                                                                                                                                                                                   (shen/do
                                                                                                                                                                                                                                                                                                                                    (shen/shen\.incinfs)
                                                                                                                                                                                                                                                                                                                                    (shen/cut Throwcontrol V3696
                                                                                                                                                                                                                                                                                                                                              (shen/freeze
                                                                                                                                                                                                                                                                                                                                               (shen/bind X&&
                                                                                                                                                                                                                                                                                                                                                          (shen/shen\.placeholder)
                                                                                                                                                                                                                                                                                                                                                          V3696
                                                                                                                                                                                                                                                                                                                                                          (shen/freeze
                                                                                                                                                                                                                                                                                                                                                           (shen/bind Z
                                                                                                                                                                                                                                                                                                                                                                      (shen/shen\.ebr
                                                                                                                                                                                                                                                                                                                                                                       (shen/shen\.lazyderef X&& V3696)
                                                                                                                                                                                                                                                                                                                                                                       (shen/shen\.lazyderef X V3696)
                                                                                                                                                                                                                                                                                                                                                                       (shen/shen\.lazyderef Y V3696))
                                                                                                                                                                                                                                                                                                                                                                      V3696
                                                                                                                                                                                                                                                                                                                                                                      (shen/freeze
                                                                                                                                                                                                                                                                                                                                                                       (shen/shen\.th* Z B
                                                                                                                                                                                                                                                                                                                                                                                       (append
                                                                                                                                                                                                                                                                                                                                                                                        (list
                                                                                                                                                                                                                                                                                                                                                                                         (list X&& ': A))
                                                                                                                                                                                                                                                                                                                                                                                        V3695)
                                                                                                                                                                                                                                                                                                                                                                                       V3696 V3697))))))))))
                                                                                                                                                                                                                                                                                                               (shen/if
                                                                                                                                                                                                                                                                                                                (shen/shen\.pvar\? V3582)
                                                                                                                                                                                                                                                                                                                (shen/do
                                                                                                                                                                                                                                                                                                                 (shen/shen\.bindv V3582 nil V3696)
                                                                                                                                                                                                                                                                                                                 (shen/let Result
                                                                                                                                                                                                                                                                                                                           (shen/let Z
                                                                                                                                                                                                                                                                                                                                     (shen/shen\.newpv V3696)
                                                                                                                                                                                                                                                                                                                                     (shen/let X&&
                                                                                                                                                                                                                                                                                                                                               (shen/shen\.newpv V3696)
                                                                                                                                                                                                                                                                                                                                               (shen/do
                                                                                                                                                                                                                                                                                                                                                (shen/shen\.incinfs)
                                                                                                                                                                                                                                                                                                                                                (shen/cut Throwcontrol V3696
                                                                                                                                                                                                                                                                                                                                                          (shen/freeze
                                                                                                                                                                                                                                                                                                                                                           (shen/bind X&&
                                                                                                                                                                                                                                                                                                                                                                      (shen/shen\.placeholder)
                                                                                                                                                                                                                                                                                                                                                                      V3696
                                                                                                                                                                                                                                                                                                                                                                      (shen/freeze
                                                                                                                                                                                                                                                                                                                                                                       (shen/bind Z
                                                                                                                                                                                                                                                                                                                                                                                  (shen/shen\.ebr
                                                                                                                                                                                                                                                                                                                                                                                   (shen/shen\.lazyderef X&& V3696)
                                                                                                                                                                                                                                                                                                                                                                                   (shen/shen\.lazyderef X V3696)
                                                                                                                                                                                                                                                                                                                                                                                   (shen/shen\.lazyderef Y V3696))
                                                                                                                                                                                                                                                                                                                                                                                  V3696
                                                                                                                                                                                                                                                                                                                                                                                  (shen/freeze
                                                                                                                                                                                                                                                                                                                                                                                   (shen/shen\.th* Z B
                                                                                                                                                                                                                                                                                                                                                                                                   (append
                                                                                                                                                                                                                                                                                                                                                                                                    (list
                                                                                                                                                                                                                                                                                                                                                                                                     (list X&& ': A))
                                                                                                                                                                                                                                                                                                                                                                                                    V3695)
                                                                                                                                                                                                                                                                                                                                                                                                   V3696 V3697))))))))))
                                                                                                                                                                                                                                                                                                                           (shen/do
                                                                                                                                                                                                                                                                                                                            (shen/shen\.unbindv V3582 V3696)
                                                                                                                                                                                                                                                                                                                            Result)))
                                                                                                                                                                                                                                                                                                                'false))))
                                                                                                                                                                                                                                                                                          (shen/if
                                                                                                                                                                                                                                                                                           (shen/shen\.pvar\? V3581)
                                                                                                                                                                                                                                                                                           (shen/let B
                                                                                                                                                                                                                                                                                                     (shen/shen\.newpv V3696)
                                                                                                                                                                                                                                                                                                     (shen/do
                                                                                                                                                                                                                                                                                                      (shen/shen\.bindv V3581
                                                                                                                                                                                                                                                                                                                        (list B)
                                                                                                                                                                                                                                                                                                                        V3696)
                                                                                                                                                                                                                                                                                                      (shen/let Result
                                                                                                                                                                                                                                                                                                                (shen/let Z
                                                                                                                                                                                                                                                                                                                          (shen/shen\.newpv V3696)
                                                                                                                                                                                                                                                                                                                          (shen/let X&&
                                                                                                                                                                                                                                                                                                                                    (shen/shen\.newpv V3696)
                                                                                                                                                                                                                                                                                                                                    (shen/do
                                                                                                                                                                                                                                                                                                                                     (shen/shen\.incinfs)
                                                                                                                                                                                                                                                                                                                                     (shen/cut Throwcontrol V3696
                                                                                                                                                                                                                                                                                                                                               (shen/freeze
                                                                                                                                                                                                                                                                                                                                                (shen/bind X&&
                                                                                                                                                                                                                                                                                                                                                           (shen/shen\.placeholder)
                                                                                                                                                                                                                                                                                                                                                           V3696
                                                                                                                                                                                                                                                                                                                                                           (shen/freeze
                                                                                                                                                                                                                                                                                                                                                            (shen/bind Z
                                                                                                                                                                                                                                                                                                                                                                       (shen/shen\.ebr
                                                                                                                                                                                                                                                                                                                                                                        (shen/shen\.lazyderef X&& V3696)
                                                                                                                                                                                                                                                                                                                                                                        (shen/shen\.lazyderef X V3696)
                                                                                                                                                                                                                                                                                                                                                                        (shen/shen\.lazyderef Y V3696))
                                                                                                                                                                                                                                                                                                                                                                       V3696
                                                                                                                                                                                                                                                                                                                                                                       (shen/freeze
                                                                                                                                                                                                                                                                                                                                                                        (shen/shen\.th* Z B
                                                                                                                                                                                                                                                                                                                                                                                        (append
                                                                                                                                                                                                                                                                                                                                                                                         (list
                                                                                                                                                                                                                                                                                                                                                                                          (list X&& ': A))
                                                                                                                                                                                                                                                                                                                                                                                         V3695)
                                                                                                                                                                                                                                                                                                                                                                                        V3696 V3697))))))))))
                                                                                                                                                                                                                                                                                                                (shen/do
                                                                                                                                                                                                                                                                                                                 (shen/shen\.unbindv V3581 V3696)
                                                                                                                                                                                                                                                                                                                 Result))))
                                                                                                                                                                                                                                                                                           'false)))
                                                                                                                                                                                                                                                                               (shen/if
                                                                                                                                                                                                                                                                                (shen/shen\.pvar\? V3580)
                                                                                                                                                                                                                                                                                (shen/do
                                                                                                                                                                                                                                                                                 (shen/shen\.bindv V3580 '--> V3696)
                                                                                                                                                                                                                                                                                 (shen/let Result
                                                                                                                                                                                                                                                                                           (shen/let V3583
                                                                                                                                                                                                                                                                                                     (shen/shen\.lazyderef
                                                                                                                                                                                                                                                                                                      (nthcdr 1 V3579)
                                                                                                                                                                                                                                                                                                      V3696)
                                                                                                                                                                                                                                                                                                     (shen/if
                                                                                                                                                                                                                                                                                                      (shen/cons\? V3583)
                                                                                                                                                                                                                                                                                                      (shen/let B
                                                                                                                                                                                                                                                                                                                (shen/hd V3583)
                                                                                                                                                                                                                                                                                                                (shen/let V3584
                                                                                                                                                                                                                                                                                                                          (shen/shen\.lazyderef
                                                                                                                                                                                                                                                                                                                           (nthcdr 1 V3583)
                                                                                                                                                                                                                                                                                                                           V3696)
                                                                                                                                                                                                                                                                                                                          (shen/if
                                                                                                                                                                                                                                                                                                                           (shen/internal/predicate->shen
                                                                                                                                                                                                                                                                                                                            (null V3584))
                                                                                                                                                                                                                                                                                                                           (shen/let Z
                                                                                                                                                                                                                                                                                                                                     (shen/shen\.newpv V3696)
                                                                                                                                                                                                                                                                                                                                     (shen/let X&&
                                                                                                                                                                                                                                                                                                                                               (shen/shen\.newpv V3696)
                                                                                                                                                                                                                                                                                                                                               (shen/do
                                                                                                                                                                                                                                                                                                                                                (shen/shen\.incinfs)
                                                                                                                                                                                                                                                                                                                                                (shen/cut Throwcontrol V3696
                                                                                                                                                                                                                                                                                                                                                          (shen/freeze
                                                                                                                                                                                                                                                                                                                                                           (shen/bind X&&
                                                                                                                                                                                                                                                                                                                                                                      (shen/shen\.placeholder)
                                                                                                                                                                                                                                                                                                                                                                      V3696
                                                                                                                                                                                                                                                                                                                                                                      (shen/freeze
                                                                                                                                                                                                                                                                                                                                                                       (shen/bind Z
                                                                                                                                                                                                                                                                                                                                                                                  (shen/shen\.ebr
                                                                                                                                                                                                                                                                                                                                                                                   (shen/shen\.lazyderef X&& V3696)
                                                                                                                                                                                                                                                                                                                                                                                   (shen/shen\.lazyderef X V3696)
                                                                                                                                                                                                                                                                                                                                                                                   (shen/shen\.lazyderef Y V3696))
                                                                                                                                                                                                                                                                                                                                                                                  V3696
                                                                                                                                                                                                                                                                                                                                                                                  (shen/freeze
                                                                                                                                                                                                                                                                                                                                                                                   (shen/shen\.th* Z B
                                                                                                                                                                                                                                                                                                                                                                                                   (append
                                                                                                                                                                                                                                                                                                                                                                                                    (list
                                                                                                                                                                                                                                                                                                                                                                                                     (list X&& ': A))
                                                                                                                                                                                                                                                                                                                                                                                                    V3695)
                                                                                                                                                                                                                                                                                                                                                                                                   V3696 V3697))))))))))
                                                                                                                                                                                                                                                                                                                           (shen/if
                                                                                                                                                                                                                                                                                                                            (shen/shen\.pvar\? V3584)
                                                                                                                                                                                                                                                                                                                            (shen/do
                                                                                                                                                                                                                                                                                                                             (shen/shen\.bindv V3584 nil V3696)
                                                                                                                                                                                                                                                                                                                             (shen/let Result
                                                                                                                                                                                                                                                                                                                                       (shen/let Z
                                                                                                                                                                                                                                                                                                                                                 (shen/shen\.newpv V3696)
                                                                                                                                                                                                                                                                                                                                                 (shen/let X&&
                                                                                                                                                                                                                                                                                                                                                           (shen/shen\.newpv V3696)
                                                                                                                                                                                                                                                                                                                                                           (shen/do
                                                                                                                                                                                                                                                                                                                                                            (shen/shen\.incinfs)
                                                                                                                                                                                                                                                                                                                                                            (shen/cut Throwcontrol V3696
                                                                                                                                                                                                                                                                                                                                                                      (shen/freeze
                                                                                                                                                                                                                                                                                                                                                                       (shen/bind X&&
                                                                                                                                                                                                                                                                                                                                                                                  (shen/shen\.placeholder)
                                                                                                                                                                                                                                                                                                                                                                                  V3696
                                                                                                                                                                                                                                                                                                                                                                                  (shen/freeze
                                                                                                                                                                                                                                                                                                                                                                                   (shen/bind Z
                                                                                                                                                                                                                                                                                                                                                                                              (shen/shen\.ebr
                                                                                                                                                                                                                                                                                                                                                                                               (shen/shen\.lazyderef X&& V3696)
                                                                                                                                                                                                                                                                                                                                                                                               (shen/shen\.lazyderef X V3696)
                                                                                                                                                                                                                                                                                                                                                                                               (shen/shen\.lazyderef Y V3696))
                                                                                                                                                                                                                                                                                                                                                                                              V3696
                                                                                                                                                                                                                                                                                                                                                                                              (shen/freeze
                                                                                                                                                                                                                                                                                                                                                                                               (shen/shen\.th* Z B
                                                                                                                                                                                                                                                                                                                                                                                                               (append
                                                                                                                                                                                                                                                                                                                                                                                                                (list
                                                                                                                                                                                                                                                                                                                                                                                                                 (list X&& ': A))
                                                                                                                                                                                                                                                                                                                                                                                                                V3695)
                                                                                                                                                                                                                                                                                                                                                                                                               V3696 V3697))))))))))
                                                                                                                                                                                                                                                                                                                                       (shen/do
                                                                                                                                                                                                                                                                                                                                        (shen/shen\.unbindv V3584 V3696)
                                                                                                                                                                                                                                                                                                                                        Result)))
                                                                                                                                                                                                                                                                                                                            'false))))
                                                                                                                                                                                                                                                                                                      (shen/if
                                                                                                                                                                                                                                                                                                       (shen/shen\.pvar\? V3583)
                                                                                                                                                                                                                                                                                                       (shen/let B
                                                                                                                                                                                                                                                                                                                 (shen/shen\.newpv V3696)
                                                                                                                                                                                                                                                                                                                 (shen/do
                                                                                                                                                                                                                                                                                                                  (shen/shen\.bindv V3583
                                                                                                                                                                                                                                                                                                                                    (list B)
                                                                                                                                                                                                                                                                                                                                    V3696)
                                                                                                                                                                                                                                                                                                                  (shen/let Result
                                                                                                                                                                                                                                                                                                                            (shen/let Z
                                                                                                                                                                                                                                                                                                                                      (shen/shen\.newpv V3696)
                                                                                                                                                                                                                                                                                                                                      (shen/let X&&
                                                                                                                                                                                                                                                                                                                                                (shen/shen\.newpv V3696)
                                                                                                                                                                                                                                                                                                                                                (shen/do
                                                                                                                                                                                                                                                                                                                                                 (shen/shen\.incinfs)
                                                                                                                                                                                                                                                                                                                                                 (shen/cut Throwcontrol V3696
                                                                                                                                                                                                                                                                                                                                                           (shen/freeze
                                                                                                                                                                                                                                                                                                                                                            (shen/bind X&&
                                                                                                                                                                                                                                                                                                                                                                       (shen/shen\.placeholder)
                                                                                                                                                                                                                                                                                                                                                                       V3696
                                                                                                                                                                                                                                                                                                                                                                       (shen/freeze
                                                                                                                                                                                                                                                                                                                                                                        (shen/bind Z
                                                                                                                                                                                                                                                                                                                                                                                   (shen/shen\.ebr
                                                                                                                                                                                                                                                                                                                                                                                    (shen/shen\.lazyderef X&& V3696)
                                                                                                                                                                                                                                                                                                                                                                                    (shen/shen\.lazyderef X V3696)
                                                                                                                                                                                                                                                                                                                                                                                    (shen/shen\.lazyderef Y V3696))
                                                                                                                                                                                                                                                                                                                                                                                   V3696
                                                                                                                                                                                                                                                                                                                                                                                   (shen/freeze
                                                                                                                                                                                                                                                                                                                                                                                    (shen/shen\.th* Z B
                                                                                                                                                                                                                                                                                                                                                                                                    (append
                                                                                                                                                                                                                                                                                                                                                                                                     (list
                                                                                                                                                                                                                                                                                                                                                                                                      (list X&& ': A))
                                                                                                                                                                                                                                                                                                                                                                                                     V3695)
                                                                                                                                                                                                                                                                                                                                                                                                    V3696 V3697))))))))))
                                                                                                                                                                                                                                                                                                                            (shen/do
                                                                                                                                                                                                                                                                                                                             (shen/shen\.unbindv V3583 V3696)
                                                                                                                                                                                                                                                                                                                             Result))))
                                                                                                                                                                                                                                                                                                       'false)))
                                                                                                                                                                                                                                                                                           (shen/do
                                                                                                                                                                                                                                                                                            (shen/shen\.unbindv V3580 V3696)
                                                                                                                                                                                                                                                                                            Result)))
                                                                                                                                                                                                                                                                                'false)))
                                                                                                                                                                                                                                                                    (shen/if
                                                                                                                                                                                                                                                                     (shen/shen\.pvar\? V3579)
                                                                                                                                                                                                                                                                     (shen/let B
                                                                                                                                                                                                                                                                               (shen/shen\.newpv V3696)
                                                                                                                                                                                                                                                                               (shen/do
                                                                                                                                                                                                                                                                                (shen/shen\.bindv V3579
                                                                                                                                                                                                                                                                                                  (list '--> B)
                                                                                                                                                                                                                                                                                                  V3696)
                                                                                                                                                                                                                                                                                (shen/let Result
                                                                                                                                                                                                                                                                                          (shen/let Z
                                                                                                                                                                                                                                                                                                    (shen/shen\.newpv V3696)
                                                                                                                                                                                                                                                                                                    (shen/let X&&
                                                                                                                                                                                                                                                                                                              (shen/shen\.newpv V3696)
                                                                                                                                                                                                                                                                                                              (shen/do
                                                                                                                                                                                                                                                                                                               (shen/shen\.incinfs)
                                                                                                                                                                                                                                                                                                               (shen/cut Throwcontrol V3696
                                                                                                                                                                                                                                                                                                                         (shen/freeze
                                                                                                                                                                                                                                                                                                                          (shen/bind X&&
                                                                                                                                                                                                                                                                                                                                     (shen/shen\.placeholder)
                                                                                                                                                                                                                                                                                                                                     V3696
                                                                                                                                                                                                                                                                                                                                     (shen/freeze
                                                                                                                                                                                                                                                                                                                                      (shen/bind Z
                                                                                                                                                                                                                                                                                                                                                 (shen/shen\.ebr
                                                                                                                                                                                                                                                                                                                                                  (shen/shen\.lazyderef X&& V3696)
                                                                                                                                                                                                                                                                                                                                                  (shen/shen\.lazyderef X V3696)
                                                                                                                                                                                                                                                                                                                                                  (shen/shen\.lazyderef Y V3696))
                                                                                                                                                                                                                                                                                                                                                 V3696
                                                                                                                                                                                                                                                                                                                                                 (shen/freeze
                                                                                                                                                                                                                                                                                                                                                  (shen/shen\.th* Z B
                                                                                                                                                                                                                                                                                                                                                                  (append
                                                                                                                                                                                                                                                                                                                                                                   (list
                                                                                                                                                                                                                                                                                                                                                                    (list X&& ': A))
                                                                                                                                                                                                                                                                                                                                                                   V3695)
                                                                                                                                                                                                                                                                                                                                                                  V3696 V3697))))))))))
                                                                                                                                                                                                                                                                                          (shen/do
                                                                                                                                                                                                                                                                                           (shen/shen\.unbindv V3579 V3696)
                                                                                                                                                                                                                                                                                           Result))))
                                                                                                                                                                                                                                                                     'false))))
                                                                                                                                                                                                                                               (shen/if
                                                                                                                                                                                                                                                (shen/shen\.pvar\? V3578)
                                                                                                                                                                                                                                                (shen/let A
                                                                                                                                                                                                                                                          (shen/shen\.newpv V3696)
                                                                                                                                                                                                                                                          (shen/let B
                                                                                                                                                                                                                                                                    (shen/shen\.newpv V3696)
                                                                                                                                                                                                                                                                    (shen/do
                                                                                                                                                                                                                                                                     (shen/shen\.bindv V3578
                                                                                                                                                                                                                                                                                       (list A '--> B)
                                                                                                                                                                                                                                                                                       V3696)
                                                                                                                                                                                                                                                                     (shen/let Result
                                                                                                                                                                                                                                                                               (shen/let Z
                                                                                                                                                                                                                                                                                         (shen/shen\.newpv V3696)
                                                                                                                                                                                                                                                                                         (shen/let X&&
                                                                                                                                                                                                                                                                                                   (shen/shen\.newpv V3696)
                                                                                                                                                                                                                                                                                                   (shen/do
                                                                                                                                                                                                                                                                                                    (shen/shen\.incinfs)
                                                                                                                                                                                                                                                                                                    (shen/cut Throwcontrol V3696
                                                                                                                                                                                                                                                                                                              (shen/freeze
                                                                                                                                                                                                                                                                                                               (shen/bind X&&
                                                                                                                                                                                                                                                                                                                          (shen/shen\.placeholder)
                                                                                                                                                                                                                                                                                                                          V3696
                                                                                                                                                                                                                                                                                                                          (shen/freeze
                                                                                                                                                                                                                                                                                                                           (shen/bind Z
                                                                                                                                                                                                                                                                                                                                      (shen/shen\.ebr
                                                                                                                                                                                                                                                                                                                                       (shen/shen\.lazyderef X&& V3696)
                                                                                                                                                                                                                                                                                                                                       (shen/shen\.lazyderef X V3696)
                                                                                                                                                                                                                                                                                                                                       (shen/shen\.lazyderef Y V3696))
                                                                                                                                                                                                                                                                                                                                      V3696
                                                                                                                                                                                                                                                                                                                                      (shen/freeze
                                                                                                                                                                                                                                                                                                                                       (shen/shen\.th* Z B
                                                                                                                                                                                                                                                                                                                                                       (append
                                                                                                                                                                                                                                                                                                                                                        (list
                                                                                                                                                                                                                                                                                                                                                         (list X&& ': A))
                                                                                                                                                                                                                                                                                                                                                        V3695)
                                                                                                                                                                                                                                                                                                                                                       V3696 V3697))))))))))
                                                                                                                                                                                                                                                                               (shen/do
                                                                                                                                                                                                                                                                                (shen/shen\.unbindv V3578 V3696)
                                                                                                                                                                                                                                                                                Result)))))
                                                                                                                                                                                                                                                'false)))
                                                                                                                                                                                                                                    'false)))
                                                                                                                                                                                                               'false)))
                                                                                                                                                                                          'false))
                                                                                                                                                                               'false))
                                                                                                                                                                    'false))
                                                                                                                                                         (shen/if
                                                                                                                                                          (shen/= Case 'false)
                                                                                                                                                          (shen/let Case
                                                                                                                                                                    (shen/let V3585
                                                                                                                                                                              (shen/shen\.lazyderef V3693 V3696)
                                                                                                                                                                              (shen/if
                                                                                                                                                                               (shen/cons\? V3585)
                                                                                                                                                                               (shen/let V3586
                                                                                                                                                                                         (shen/shen\.lazyderef
                                                                                                                                                                                          (shen/hd V3585)
                                                                                                                                                                                          V3696)
                                                                                                                                                                                         (shen/if
                                                                                                                                                                                          (shen/= 'let V3586)
                                                                                                                                                                                          (shen/let V3587
                                                                                                                                                                                                    (shen/shen\.lazyderef
                                                                                                                                                                                                     (nthcdr 1 V3585)
                                                                                                                                                                                                     V3696)
                                                                                                                                                                                                    (shen/if
                                                                                                                                                                                                     (shen/cons\? V3587)
                                                                                                                                                                                                     (shen/let X
                                                                                                                                                                                                               (shen/hd V3587)
                                                                                                                                                                                                               (shen/let V3588
                                                                                                                                                                                                                         (shen/shen\.lazyderef
                                                                                                                                                                                                                          (nthcdr 1 V3587)
                                                                                                                                                                                                                          V3696)
                                                                                                                                                                                                                         (shen/if
                                                                                                                                                                                                                          (shen/cons\? V3588)
                                                                                                                                                                                                                          (shen/let Y
                                                                                                                                                                                                                                    (shen/hd V3588)
                                                                                                                                                                                                                                    (shen/let V3589
                                                                                                                                                                                                                                              (shen/shen\.lazyderef
                                                                                                                                                                                                                                               (nthcdr 1 V3588)
                                                                                                                                                                                                                                               V3696)
                                                                                                                                                                                                                                              (shen/if
                                                                                                                                                                                                                                               (shen/cons\? V3589)
                                                                                                                                                                                                                                               (shen/let Z
                                                                                                                                                                                                                                                         (shen/hd V3589)
                                                                                                                                                                                                                                                         (shen/let V3590
                                                                                                                                                                                                                                                                   (shen/shen\.lazyderef
                                                                                                                                                                                                                                                                    (nthcdr 1 V3589)
                                                                                                                                                                                                                                                                    V3696)
                                                                                                                                                                                                                                                                   (shen/if
                                                                                                                                                                                                                                                                    (shen/internal/predicate->shen
                                                                                                                                                                                                                                                                     (null V3590))
                                                                                                                                                                                                                                                                    (shen/let W
                                                                                                                                                                                                                                                                              (shen/shen\.newpv V3696)
                                                                                                                                                                                                                                                                              (shen/let X&&
                                                                                                                                                                                                                                                                                        (shen/shen\.newpv V3696)
                                                                                                                                                                                                                                                                                        (shen/let B
                                                                                                                                                                                                                                                                                                  (shen/shen\.newpv V3696)
                                                                                                                                                                                                                                                                                                  (shen/do
                                                                                                                                                                                                                                                                                                   (shen/shen\.incinfs)
                                                                                                                                                                                                                                                                                                   (shen/shen\.th* Y B V3695 V3696
                                                                                                                                                                                                                                                                                                                   (shen/freeze
                                                                                                                                                                                                                                                                                                                    (shen/bind X&&
                                                                                                                                                                                                                                                                                                                               (shen/shen\.placeholder)
                                                                                                                                                                                                                                                                                                                               V3696
                                                                                                                                                                                                                                                                                                                               (shen/freeze
                                                                                                                                                                                                                                                                                                                                (shen/bind W
                                                                                                                                                                                                                                                                                                                                           (shen/shen\.ebr
                                                                                                                                                                                                                                                                                                                                            (shen/shen\.lazyderef X&& V3696)
                                                                                                                                                                                                                                                                                                                                            (shen/shen\.lazyderef X V3696)
                                                                                                                                                                                                                                                                                                                                            (shen/shen\.lazyderef Z V3696))
                                                                                                                                                                                                                                                                                                                                           V3696
                                                                                                                                                                                                                                                                                                                                           (shen/freeze
                                                                                                                                                                                                                                                                                                                                            (shen/shen\.th* W V3694
                                                                                                                                                                                                                                                                                                                                                            (append
                                                                                                                                                                                                                                                                                                                                                             (list
                                                                                                                                                                                                                                                                                                                                                              (list X&& ': B))
                                                                                                                                                                                                                                                                                                                                                             V3695)
                                                                                                                                                                                                                                                                                                                                                            V3696 V3697)))))))))))
                                                                                                                                                                                                                                                                    'false)))
                                                                                                                                                                                                                                               'false)))
                                                                                                                                                                                                                          'false)))
                                                                                                                                                                                                     'false))
                                                                                                                                                                                          'false))
                                                                                                                                                                               'false))
                                                                                                                                                                    (shen/if
                                                                                                                                                                     (shen/= Case 'false)
                                                                                                                                                                     (shen/let Case
                                                                                                                                                                               (shen/let V3591
                                                                                                                                                                                         (shen/shen\.lazyderef V3693 V3696)
                                                                                                                                                                                         (shen/if
                                                                                                                                                                                          (shen/cons\? V3591)
                                                                                                                                                                                          (shen/let V3592
                                                                                                                                                                                                    (shen/shen\.lazyderef
                                                                                                                                                                                                     (shen/hd V3591)
                                                                                                                                                                                                     V3696)
                                                                                                                                                                                                    (shen/if
                                                                                                                                                                                                     (shen/= 'open V3592)
                                                                                                                                                                                                     (shen/let V3593
                                                                                                                                                                                                               (shen/shen\.lazyderef
                                                                                                                                                                                                                (nthcdr 1 V3591)
                                                                                                                                                                                                                V3696)
                                                                                                                                                                                                               (shen/if
                                                                                                                                                                                                                (shen/cons\? V3593)
                                                                                                                                                                                                                (shen/let FileName
                                                                                                                                                                                                                          (shen/hd V3593)
                                                                                                                                                                                                                          (shen/let V3594
                                                                                                                                                                                                                                    (shen/shen\.lazyderef
                                                                                                                                                                                                                                     (nthcdr 1 V3593)
                                                                                                                                                                                                                                     V3696)
                                                                                                                                                                                                                                    (shen/if
                                                                                                                                                                                                                                     (shen/cons\? V3594)
                                                                                                                                                                                                                                     (shen/let Direction3524
                                                                                                                                                                                                                                               (shen/hd V3594)
                                                                                                                                                                                                                                               (shen/let V3595
                                                                                                                                                                                                                                                         (shen/shen\.lazyderef
                                                                                                                                                                                                                                                          (nthcdr 1 V3594)
                                                                                                                                                                                                                                                          V3696)
                                                                                                                                                                                                                                                         (shen/if
                                                                                                                                                                                                                                                          (shen/internal/predicate->shen
                                                                                                                                                                                                                                                           (null V3595))
                                                                                                                                                                                                                                                          (shen/let V3596
                                                                                                                                                                                                                                                                    (shen/shen\.lazyderef V3694 V3696)
                                                                                                                                                                                                                                                                    (shen/if
                                                                                                                                                                                                                                                                     (shen/cons\? V3596)
                                                                                                                                                                                                                                                                     (shen/let V3597
                                                                                                                                                                                                                                                                               (shen/shen\.lazyderef
                                                                                                                                                                                                                                                                                (shen/hd V3596)
                                                                                                                                                                                                                                                                                V3696)
                                                                                                                                                                                                                                                                               (shen/if
                                                                                                                                                                                                                                                                                (shen/= 'stream V3597)
                                                                                                                                                                                                                                                                                (shen/let V3598
                                                                                                                                                                                                                                                                                          (shen/shen\.lazyderef
                                                                                                                                                                                                                                                                                           (nthcdr 1 V3596)
                                                                                                                                                                                                                                                                                           V3696)
                                                                                                                                                                                                                                                                                          (shen/if
                                                                                                                                                                                                                                                                                           (shen/cons\? V3598)
                                                                                                                                                                                                                                                                                           (shen/let Direction
                                                                                                                                                                                                                                                                                                     (shen/hd V3598)
                                                                                                                                                                                                                                                                                                     (shen/let V3599
                                                                                                                                                                                                                                                                                                               (shen/shen\.lazyderef
                                                                                                                                                                                                                                                                                                                (nthcdr 1 V3598)
                                                                                                                                                                                                                                                                                                                V3696)
                                                                                                                                                                                                                                                                                                               (shen/if
                                                                                                                                                                                                                                                                                                                (shen/internal/predicate->shen
                                                                                                                                                                                                                                                                                                                 (null V3599))
                                                                                                                                                                                                                                                                                                                (shen/do
                                                                                                                                                                                                                                                                                                                 (shen/shen\.incinfs)
                                                                                                                                                                                                                                                                                                                 (shen/unify! Direction Direction3524 V3696
                                                                                                                                                                                                                                                                                                                              (shen/freeze
                                                                                                                                                                                                                                                                                                                               (shen/cut Throwcontrol V3696
                                                                                                                                                                                                                                                                                                                                         (shen/freeze
                                                                                                                                                                                                                                                                                                                                          (shen/fwhen
                                                                                                                                                                                                                                                                                                                                           (shen/element\?
                                                                                                                                                                                                                                                                                                                                            (shen/shen\.lazyderef Direction V3696)
                                                                                                                                                                                                                                                                                                                                            (list 'in 'out))
                                                                                                                                                                                                                                                                                                                                           V3696
                                                                                                                                                                                                                                                                                                                                           (shen/freeze
                                                                                                                                                                                                                                                                                                                                            (shen/shen\.th* FileName 'string V3695 V3696 V3697))))))))
                                                                                                                                                                                                                                                                                                                (shen/if
                                                                                                                                                                                                                                                                                                                 (shen/shen\.pvar\? V3599)
                                                                                                                                                                                                                                                                                                                 (shen/do
                                                                                                                                                                                                                                                                                                                  (shen/shen\.bindv V3599 nil V3696)
                                                                                                                                                                                                                                                                                                                  (shen/let Result
                                                                                                                                                                                                                                                                                                                            (shen/do
                                                                                                                                                                                                                                                                                                                             (shen/shen\.incinfs)
                                                                                                                                                                                                                                                                                                                             (shen/unify! Direction Direction3524 V3696
                                                                                                                                                                                                                                                                                                                                          (shen/freeze
                                                                                                                                                                                                                                                                                                                                           (shen/cut Throwcontrol V3696
                                                                                                                                                                                                                                                                                                                                                     (shen/freeze
                                                                                                                                                                                                                                                                                                                                                      (shen/fwhen
                                                                                                                                                                                                                                                                                                                                                       (shen/element\?
                                                                                                                                                                                                                                                                                                                                                        (shen/shen\.lazyderef Direction V3696)
                                                                                                                                                                                                                                                                                                                                                        (list 'in 'out))
                                                                                                                                                                                                                                                                                                                                                       V3696
                                                                                                                                                                                                                                                                                                                                                       (shen/freeze
                                                                                                                                                                                                                                                                                                                                                        (shen/shen\.th* FileName 'string V3695 V3696 V3697))))))))
                                                                                                                                                                                                                                                                                                                            (shen/do
                                                                                                                                                                                                                                                                                                                             (shen/shen\.unbindv V3599 V3696)
                                                                                                                                                                                                                                                                                                                             Result)))
                                                                                                                                                                                                                                                                                                                 'false))))
                                                                                                                                                                                                                                                                                           (shen/if
                                                                                                                                                                                                                                                                                            (shen/shen\.pvar\? V3598)
                                                                                                                                                                                                                                                                                            (shen/let Direction
                                                                                                                                                                                                                                                                                                      (shen/shen\.newpv V3696)
                                                                                                                                                                                                                                                                                                      (shen/do
                                                                                                                                                                                                                                                                                                       (shen/shen\.bindv V3598
                                                                                                                                                                                                                                                                                                                         (list Direction)
                                                                                                                                                                                                                                                                                                                         V3696)
                                                                                                                                                                                                                                                                                                       (shen/let Result
                                                                                                                                                                                                                                                                                                                 (shen/do
                                                                                                                                                                                                                                                                                                                  (shen/shen\.incinfs)
                                                                                                                                                                                                                                                                                                                  (shen/unify! Direction Direction3524 V3696
                                                                                                                                                                                                                                                                                                                               (shen/freeze
                                                                                                                                                                                                                                                                                                                                (shen/cut Throwcontrol V3696
                                                                                                                                                                                                                                                                                                                                          (shen/freeze
                                                                                                                                                                                                                                                                                                                                           (shen/fwhen
                                                                                                                                                                                                                                                                                                                                            (shen/element\?
                                                                                                                                                                                                                                                                                                                                             (shen/shen\.lazyderef Direction V3696)
                                                                                                                                                                                                                                                                                                                                             (list 'in 'out))
                                                                                                                                                                                                                                                                                                                                            V3696
                                                                                                                                                                                                                                                                                                                                            (shen/freeze
                                                                                                                                                                                                                                                                                                                                             (shen/shen\.th* FileName 'string V3695 V3696 V3697))))))))
                                                                                                                                                                                                                                                                                                                 (shen/do
                                                                                                                                                                                                                                                                                                                  (shen/shen\.unbindv V3598 V3696)
                                                                                                                                                                                                                                                                                                                  Result))))
                                                                                                                                                                                                                                                                                            'false)))
                                                                                                                                                                                                                                                                                (shen/if
                                                                                                                                                                                                                                                                                 (shen/shen\.pvar\? V3597)
                                                                                                                                                                                                                                                                                 (shen/do
                                                                                                                                                                                                                                                                                  (shen/shen\.bindv V3597 'stream V3696)
                                                                                                                                                                                                                                                                                  (shen/let Result
                                                                                                                                                                                                                                                                                            (shen/let V3600
                                                                                                                                                                                                                                                                                                      (shen/shen\.lazyderef
                                                                                                                                                                                                                                                                                                       (nthcdr 1 V3596)
                                                                                                                                                                                                                                                                                                       V3696)
                                                                                                                                                                                                                                                                                                      (shen/if
                                                                                                                                                                                                                                                                                                       (shen/cons\? V3600)
                                                                                                                                                                                                                                                                                                       (shen/let Direction
                                                                                                                                                                                                                                                                                                                 (shen/hd V3600)
                                                                                                                                                                                                                                                                                                                 (shen/let V3601
                                                                                                                                                                                                                                                                                                                           (shen/shen\.lazyderef
                                                                                                                                                                                                                                                                                                                            (nthcdr 1 V3600)
                                                                                                                                                                                                                                                                                                                            V3696)
                                                                                                                                                                                                                                                                                                                           (shen/if
                                                                                                                                                                                                                                                                                                                            (shen/internal/predicate->shen
                                                                                                                                                                                                                                                                                                                             (null V3601))
                                                                                                                                                                                                                                                                                                                            (shen/do
                                                                                                                                                                                                                                                                                                                             (shen/shen\.incinfs)
                                                                                                                                                                                                                                                                                                                             (shen/unify! Direction Direction3524 V3696
                                                                                                                                                                                                                                                                                                                                          (shen/freeze
                                                                                                                                                                                                                                                                                                                                           (shen/cut Throwcontrol V3696
                                                                                                                                                                                                                                                                                                                                                     (shen/freeze
                                                                                                                                                                                                                                                                                                                                                      (shen/fwhen
                                                                                                                                                                                                                                                                                                                                                       (shen/element\?
                                                                                                                                                                                                                                                                                                                                                        (shen/shen\.lazyderef Direction V3696)
                                                                                                                                                                                                                                                                                                                                                        (list 'in 'out))
                                                                                                                                                                                                                                                                                                                                                       V3696
                                                                                                                                                                                                                                                                                                                                                       (shen/freeze
                                                                                                                                                                                                                                                                                                                                                        (shen/shen\.th* FileName 'string V3695 V3696 V3697))))))))
                                                                                                                                                                                                                                                                                                                            (shen/if
                                                                                                                                                                                                                                                                                                                             (shen/shen\.pvar\? V3601)
                                                                                                                                                                                                                                                                                                                             (shen/do
                                                                                                                                                                                                                                                                                                                              (shen/shen\.bindv V3601 nil V3696)
                                                                                                                                                                                                                                                                                                                              (shen/let Result
                                                                                                                                                                                                                                                                                                                                        (shen/do
                                                                                                                                                                                                                                                                                                                                         (shen/shen\.incinfs)
                                                                                                                                                                                                                                                                                                                                         (shen/unify! Direction Direction3524 V3696
                                                                                                                                                                                                                                                                                                                                                      (shen/freeze
                                                                                                                                                                                                                                                                                                                                                       (shen/cut Throwcontrol V3696
                                                                                                                                                                                                                                                                                                                                                                 (shen/freeze
                                                                                                                                                                                                                                                                                                                                                                  (shen/fwhen
                                                                                                                                                                                                                                                                                                                                                                   (shen/element\?
                                                                                                                                                                                                                                                                                                                                                                    (shen/shen\.lazyderef Direction V3696)
                                                                                                                                                                                                                                                                                                                                                                    (list 'in 'out))
                                                                                                                                                                                                                                                                                                                                                                   V3696
                                                                                                                                                                                                                                                                                                                                                                   (shen/freeze
                                                                                                                                                                                                                                                                                                                                                                    (shen/shen\.th* FileName 'string V3695 V3696 V3697))))))))
                                                                                                                                                                                                                                                                                                                                        (shen/do
                                                                                                                                                                                                                                                                                                                                         (shen/shen\.unbindv V3601 V3696)
                                                                                                                                                                                                                                                                                                                                         Result)))
                                                                                                                                                                                                                                                                                                                             'false))))
                                                                                                                                                                                                                                                                                                       (shen/if
                                                                                                                                                                                                                                                                                                        (shen/shen\.pvar\? V3600)
                                                                                                                                                                                                                                                                                                        (shen/let Direction
                                                                                                                                                                                                                                                                                                                  (shen/shen\.newpv V3696)
                                                                                                                                                                                                                                                                                                                  (shen/do
                                                                                                                                                                                                                                                                                                                   (shen/shen\.bindv V3600
                                                                                                                                                                                                                                                                                                                                     (list Direction)
                                                                                                                                                                                                                                                                                                                                     V3696)
                                                                                                                                                                                                                                                                                                                   (shen/let Result
                                                                                                                                                                                                                                                                                                                             (shen/do
                                                                                                                                                                                                                                                                                                                              (shen/shen\.incinfs)
                                                                                                                                                                                                                                                                                                                              (shen/unify! Direction Direction3524 V3696
                                                                                                                                                                                                                                                                                                                                           (shen/freeze
                                                                                                                                                                                                                                                                                                                                            (shen/cut Throwcontrol V3696
                                                                                                                                                                                                                                                                                                                                                      (shen/freeze
                                                                                                                                                                                                                                                                                                                                                       (shen/fwhen
                                                                                                                                                                                                                                                                                                                                                        (shen/element\?
                                                                                                                                                                                                                                                                                                                                                         (shen/shen\.lazyderef Direction V3696)
                                                                                                                                                                                                                                                                                                                                                         (list 'in 'out))
                                                                                                                                                                                                                                                                                                                                                        V3696
                                                                                                                                                                                                                                                                                                                                                        (shen/freeze
                                                                                                                                                                                                                                                                                                                                                         (shen/shen\.th* FileName 'string V3695 V3696 V3697))))))))
                                                                                                                                                                                                                                                                                                                             (shen/do
                                                                                                                                                                                                                                                                                                                              (shen/shen\.unbindv V3600 V3696)
                                                                                                                                                                                                                                                                                                                              Result))))
                                                                                                                                                                                                                                                                                                        'false)))
                                                                                                                                                                                                                                                                                            (shen/do
                                                                                                                                                                                                                                                                                             (shen/shen\.unbindv V3597 V3696)
                                                                                                                                                                                                                                                                                             Result)))
                                                                                                                                                                                                                                                                                 'false)))
                                                                                                                                                                                                                                                                     (shen/if
                                                                                                                                                                                                                                                                      (shen/shen\.pvar\? V3596)
                                                                                                                                                                                                                                                                      (shen/let Direction
                                                                                                                                                                                                                                                                                (shen/shen\.newpv V3696)
                                                                                                                                                                                                                                                                                (shen/do
                                                                                                                                                                                                                                                                                 (shen/shen\.bindv V3596
                                                                                                                                                                                                                                                                                                   (list 'stream Direction)
                                                                                                                                                                                                                                                                                                   V3696)
                                                                                                                                                                                                                                                                                 (shen/let Result
                                                                                                                                                                                                                                                                                           (shen/do
                                                                                                                                                                                                                                                                                            (shen/shen\.incinfs)
                                                                                                                                                                                                                                                                                            (shen/unify! Direction Direction3524 V3696
                                                                                                                                                                                                                                                                                                         (shen/freeze
                                                                                                                                                                                                                                                                                                          (shen/cut Throwcontrol V3696
                                                                                                                                                                                                                                                                                                                    (shen/freeze
                                                                                                                                                                                                                                                                                                                     (shen/fwhen
                                                                                                                                                                                                                                                                                                                      (shen/element\?
                                                                                                                                                                                                                                                                                                                       (shen/shen\.lazyderef Direction V3696)
                                                                                                                                                                                                                                                                                                                       (list 'in 'out))
                                                                                                                                                                                                                                                                                                                      V3696
                                                                                                                                                                                                                                                                                                                      (shen/freeze
                                                                                                                                                                                                                                                                                                                       (shen/shen\.th* FileName 'string V3695 V3696 V3697))))))))
                                                                                                                                                                                                                                                                                           (shen/do
                                                                                                                                                                                                                                                                                            (shen/shen\.unbindv V3596 V3696)
                                                                                                                                                                                                                                                                                            Result))))
                                                                                                                                                                                                                                                                      'false)))
                                                                                                                                                                                                                                                          'false)))
                                                                                                                                                                                                                                     'false)))
                                                                                                                                                                                                                'false))
                                                                                                                                                                                                     'false))
                                                                                                                                                                                          'false))
                                                                                                                                                                               (shen/if
                                                                                                                                                                                (shen/= Case 'false)
                                                                                                                                                                                (shen/let Case
                                                                                                                                                                                          (shen/let V3602
                                                                                                                                                                                                    (shen/shen\.lazyderef V3693 V3696)
                                                                                                                                                                                                    (shen/if
                                                                                                                                                                                                     (shen/cons\? V3602)
                                                                                                                                                                                                     (shen/let V3603
                                                                                                                                                                                                               (shen/shen\.lazyderef
                                                                                                                                                                                                                (shen/hd V3602)
                                                                                                                                                                                                                V3696)
                                                                                                                                                                                                               (shen/if
                                                                                                                                                                                                                (shen/= 'type V3603)
                                                                                                                                                                                                                (shen/let V3604
                                                                                                                                                                                                                          (shen/shen\.lazyderef
                                                                                                                                                                                                                           (nthcdr 1 V3602)
                                                                                                                                                                                                                           V3696)
                                                                                                                                                                                                                          (shen/if
                                                                                                                                                                                                                           (shen/cons\? V3604)
                                                                                                                                                                                                                           (shen/let X
                                                                                                                                                                                                                                     (shen/hd V3604)
                                                                                                                                                                                                                                     (shen/let V3605
                                                                                                                                                                                                                                               (shen/shen\.lazyderef
                                                                                                                                                                                                                                                (nthcdr 1 V3604)
                                                                                                                                                                                                                                                V3696)
                                                                                                                                                                                                                                               (shen/if
                                                                                                                                                                                                                                                (shen/cons\? V3605)
                                                                                                                                                                                                                                                (shen/let A
                                                                                                                                                                                                                                                          (shen/hd V3605)
                                                                                                                                                                                                                                                          (shen/let V3606
                                                                                                                                                                                                                                                                    (shen/shen\.lazyderef
                                                                                                                                                                                                                                                                     (nthcdr 1 V3605)
                                                                                                                                                                                                                                                                     V3696)
                                                                                                                                                                                                                                                                    (shen/if
                                                                                                                                                                                                                                                                     (shen/internal/predicate->shen
                                                                                                                                                                                                                                                                      (null V3606))
                                                                                                                                                                                                                                                                     (shen/do
                                                                                                                                                                                                                                                                      (shen/shen\.incinfs)
                                                                                                                                                                                                                                                                      (shen/cut Throwcontrol V3696
                                                                                                                                                                                                                                                                                (shen/freeze
                                                                                                                                                                                                                                                                                 (shen/unify A V3694 V3696
                                                                                                                                                                                                                                                                                             (shen/freeze
                                                                                                                                                                                                                                                                                              (shen/shen\.th* X A V3695 V3696 V3697))))))
                                                                                                                                                                                                                                                                     'false)))
                                                                                                                                                                                                                                                'false)))
                                                                                                                                                                                                                           'false))
                                                                                                                                                                                                                'false))
                                                                                                                                                                                                     'false))
                                                                                                                                                                                          (shen/if
                                                                                                                                                                                           (shen/= Case 'false)
                                                                                                                                                                                           (shen/let Case
                                                                                                                                                                                                     (shen/let V3607
                                                                                                                                                                                                               (shen/shen\.lazyderef V3693 V3696)
                                                                                                                                                                                                               (shen/if
                                                                                                                                                                                                                (shen/cons\? V3607)
                                                                                                                                                                                                                (shen/let V3608
                                                                                                                                                                                                                          (shen/shen\.lazyderef
                                                                                                                                                                                                                           (shen/hd V3607)
                                                                                                                                                                                                                           V3696)
                                                                                                                                                                                                                          (shen/if
                                                                                                                                                                                                                           (shen/= 'input+ V3608)
                                                                                                                                                                                                                           (shen/let V3609
                                                                                                                                                                                                                                     (shen/shen\.lazyderef
                                                                                                                                                                                                                                      (nthcdr 1 V3607)
                                                                                                                                                                                                                                      V3696)
                                                                                                                                                                                                                                     (shen/if
                                                                                                                                                                                                                                      (shen/cons\? V3609)
                                                                                                                                                                                                                                      (shen/let A
                                                                                                                                                                                                                                                (shen/hd V3609)
                                                                                                                                                                                                                                                (shen/let V3610
                                                                                                                                                                                                                                                          (shen/shen\.lazyderef
                                                                                                                                                                                                                                                           (nthcdr 1 V3609)
                                                                                                                                                                                                                                                           V3696)
                                                                                                                                                                                                                                                          (shen/if
                                                                                                                                                                                                                                                           (shen/cons\? V3610)
                                                                                                                                                                                                                                                           (shen/let Stream
                                                                                                                                                                                                                                                                     (shen/hd V3610)
                                                                                                                                                                                                                                                                     (shen/let V3611
                                                                                                                                                                                                                                                                               (shen/shen\.lazyderef
                                                                                                                                                                                                                                                                                (nthcdr 1 V3610)
                                                                                                                                                                                                                                                                                V3696)
                                                                                                                                                                                                                                                                               (shen/if
                                                                                                                                                                                                                                                                                (shen/internal/predicate->shen
                                                                                                                                                                                                                                                                                 (null V3611))
                                                                                                                                                                                                                                                                                (shen/let C
                                                                                                                                                                                                                                                                                          (shen/shen\.newpv V3696)
                                                                                                                                                                                                                                                                                          (shen/do
                                                                                                                                                                                                                                                                                           (shen/shen\.incinfs)
                                                                                                                                                                                                                                                                                           (shen/bind C
                                                                                                                                                                                                                                                                                                      (shen/shen\.demodulate
                                                                                                                                                                                                                                                                                                       (shen/shen\.lazyderef A V3696))
                                                                                                                                                                                                                                                                                                      V3696
                                                                                                                                                                                                                                                                                                      (shen/freeze
                                                                                                                                                                                                                                                                                                       (shen/unify V3694 C V3696
                                                                                                                                                                                                                                                                                                                   (shen/freeze
                                                                                                                                                                                                                                                                                                                    (shen/shen\.th* Stream
                                                                                                                                                                                                                                                                                                                                    (list 'stream 'in)
                                                                                                                                                                                                                                                                                                                                    V3695 V3696 V3697)))))))
                                                                                                                                                                                                                                                                                'false)))
                                                                                                                                                                                                                                                           'false)))
                                                                                                                                                                                                                                      'false))
                                                                                                                                                                                                                           'false))
                                                                                                                                                                                                                'false))
                                                                                                                                                                                                     (shen/if
                                                                                                                                                                                                      (shen/= Case 'false)
                                                                                                                                                                                                      (shen/let Case
                                                                                                                                                                                                                (shen/let V3612
                                                                                                                                                                                                                          (shen/shen\.lazyderef V3693 V3696)
                                                                                                                                                                                                                          (shen/if
                                                                                                                                                                                                                           (shen/cons\? V3612)
                                                                                                                                                                                                                           (shen/let V3613
                                                                                                                                                                                                                                     (shen/shen\.lazyderef
                                                                                                                                                                                                                                      (shen/hd V3612)
                                                                                                                                                                                                                                      V3696)
                                                                                                                                                                                                                                     (shen/if
                                                                                                                                                                                                                                      (shen/= 'set V3613)
                                                                                                                                                                                                                                      (shen/let V3614
                                                                                                                                                                                                                                                (shen/shen\.lazyderef
                                                                                                                                                                                                                                                 (nthcdr 1 V3612)
                                                                                                                                                                                                                                                 V3696)
                                                                                                                                                                                                                                                (shen/if
                                                                                                                                                                                                                                                 (shen/cons\? V3614)
                                                                                                                                                                                                                                                 (shen/let Var
                                                                                                                                                                                                                                                           (shen/hd V3614)
                                                                                                                                                                                                                                                           (shen/let V3615
                                                                                                                                                                                                                                                                     (shen/shen\.lazyderef
                                                                                                                                                                                                                                                                      (nthcdr 1 V3614)
                                                                                                                                                                                                                                                                      V3696)
                                                                                                                                                                                                                                                                     (shen/if
                                                                                                                                                                                                                                                                      (shen/cons\? V3615)
                                                                                                                                                                                                                                                                      (shen/let Val
                                                                                                                                                                                                                                                                                (shen/hd V3615)
                                                                                                                                                                                                                                                                                (shen/let V3616
                                                                                                                                                                                                                                                                                          (shen/shen\.lazyderef
                                                                                                                                                                                                                                                                                           (nthcdr 1 V3615)
                                                                                                                                                                                                                                                                                           V3696)
                                                                                                                                                                                                                                                                                          (shen/if
                                                                                                                                                                                                                                                                                           (shen/internal/predicate->shen
                                                                                                                                                                                                                                                                                            (null V3616))
                                                                                                                                                                                                                                                                                           (shen/do
                                                                                                                                                                                                                                                                                            (shen/shen\.incinfs)
                                                                                                                                                                                                                                                                                            (shen/cut Throwcontrol V3696
                                                                                                                                                                                                                                                                                                      (shen/freeze
                                                                                                                                                                                                                                                                                                       (shen/shen\.th* Var 'symbol V3695 V3696
                                                                                                                                                                                                                                                                                                                       (shen/freeze
                                                                                                                                                                                                                                                                                                                        (shen/cut Throwcontrol V3696
                                                                                                                                                                                                                                                                                                                                  (shen/freeze
                                                                                                                                                                                                                                                                                                                                   (shen/shen\.th*
                                                                                                                                                                                                                                                                                                                                    (list 'value Var)
                                                                                                                                                                                                                                                                                                                                    V3694 V3695 V3696
                                                                                                                                                                                                                                                                                                                                    (shen/freeze
                                                                                                                                                                                                                                                                                                                                     (shen/shen\.th* Val V3694 V3695 V3696 V3697))))))))))
                                                                                                                                                                                                                                                                                           'false)))
                                                                                                                                                                                                                                                                      'false)))
                                                                                                                                                                                                                                                 'false))
                                                                                                                                                                                                                                      'false))
                                                                                                                                                                                                                           'false))
                                                                                                                                                                                                                (shen/if
                                                                                                                                                                                                                 (shen/= Case 'false)
                                                                                                                                                                                                                 (shen/let Case
                                                                                                                                                                                                                           (shen/let NewHyp
                                                                                                                                                                                                                                     (shen/shen\.newpv V3696)
                                                                                                                                                                                                                                     (shen/do
                                                                                                                                                                                                                                      (shen/shen\.incinfs)
                                                                                                                                                                                                                                      (shen/shen\.t*-hyps V3695 NewHyp V3696
                                                                                                                                                                                                                                                          (shen/freeze
                                                                                                                                                                                                                                                           (shen/shen\.th* V3693 V3694 NewHyp V3696 V3697)))))
                                                                                                                                                                                                                           (shen/if
                                                                                                                                                                                                                            (shen/= Case 'false)
                                                                                                                                                                                                                            (shen/let Case
                                                                                                                                                                                                                                      (shen/let V3617
                                                                                                                                                                                                                                                (shen/shen\.lazyderef V3693 V3696)
                                                                                                                                                                                                                                                (shen/if
                                                                                                                                                                                                                                                 (shen/cons\? V3617)
                                                                                                                                                                                                                                                 (shen/let V3618
                                                                                                                                                                                                                                                           (shen/shen\.lazyderef
                                                                                                                                                                                                                                                            (shen/hd V3617)
                                                                                                                                                                                                                                                            V3696)
                                                                                                                                                                                                                                                           (shen/if
                                                                                                                                                                                                                                                            (shen/= 'define V3618)
                                                                                                                                                                                                                                                            (shen/let V3619
                                                                                                                                                                                                                                                                      (shen/shen\.lazyderef
                                                                                                                                                                                                                                                                       (nthcdr 1 V3617)
                                                                                                                                                                                                                                                                       V3696)
                                                                                                                                                                                                                                                                      (shen/if
                                                                                                                                                                                                                                                                       (shen/cons\? V3619)
                                                                                                                                                                                                                                                                       (shen/let F
                                                                                                                                                                                                                                                                                 (shen/hd V3619)
                                                                                                                                                                                                                                                                                 (shen/let X
                                                                                                                                                                                                                                                                                           (nthcdr 1 V3619)
                                                                                                                                                                                                                                                                                           (shen/do
                                                                                                                                                                                                                                                                                            (shen/shen\.incinfs)
                                                                                                                                                                                                                                                                                            (shen/cut Throwcontrol V3696
                                                                                                                                                                                                                                                                                                      (shen/freeze
                                                                                                                                                                                                                                                                                                       (shen/shen\.t*-def
                                                                                                                                                                                                                                                                                                        (append
                                                                                                                                                                                                                                                                                                         (list 'define F)
                                                                                                                                                                                                                                                                                                         X)
                                                                                                                                                                                                                                                                                                        V3694 V3695 V3696 V3697))))))
                                                                                                                                                                                                                                                                       'false))
                                                                                                                                                                                                                                                            'false))
                                                                                                                                                                                                                                                 'false))
                                                                                                                                                                                                                                      (shen/if
                                                                                                                                                                                                                                       (shen/= Case 'false)
                                                                                                                                                                                                                                       (shen/let Case
                                                                                                                                                                                                                                                 (shen/let V3620
                                                                                                                                                                                                                                                           (shen/shen\.lazyderef V3693 V3696)
                                                                                                                                                                                                                                                           (shen/if
                                                                                                                                                                                                                                                            (shen/cons\? V3620)
                                                                                                                                                                                                                                                            (shen/let V3621
                                                                                                                                                                                                                                                                      (shen/shen\.lazyderef
                                                                                                                                                                                                                                                                       (shen/hd V3620)
                                                                                                                                                                                                                                                                       V3696)
                                                                                                                                                                                                                                                                      (shen/if
                                                                                                                                                                                                                                                                       (shen/= 'defmacro V3621)
                                                                                                                                                                                                                                                                       (shen/let V3622
                                                                                                                                                                                                                                                                                 (shen/shen\.lazyderef V3694 V3696)
                                                                                                                                                                                                                                                                                 (shen/if
                                                                                                                                                                                                                                                                                  (shen/= 'unit V3622)
                                                                                                                                                                                                                                                                                  (shen/do
                                                                                                                                                                                                                                                                                   (shen/shen\.incinfs)
                                                                                                                                                                                                                                                                                   (shen/cut Throwcontrol V3696 V3697))
                                                                                                                                                                                                                                                                                  (shen/if
                                                                                                                                                                                                                                                                                   (shen/shen\.pvar\? V3622)
                                                                                                                                                                                                                                                                                   (shen/do
                                                                                                                                                                                                                                                                                    (shen/shen\.bindv V3622 'unit V3696)
                                                                                                                                                                                                                                                                                    (shen/let Result
                                                                                                                                                                                                                                                                                              (shen/do
                                                                                                                                                                                                                                                                                               (shen/shen\.incinfs)
                                                                                                                                                                                                                                                                                               (shen/cut Throwcontrol V3696 V3697))
                                                                                                                                                                                                                                                                                              (shen/do
                                                                                                                                                                                                                                                                                               (shen/shen\.unbindv V3622 V3696)
                                                                                                                                                                                                                                                                                               Result)))
                                                                                                                                                                                                                                                                                   'false)))
                                                                                                                                                                                                                                                                       'false))
                                                                                                                                                                                                                                                            'false))
                                                                                                                                                                                                                                                 (shen/if
                                                                                                                                                                                                                                                  (shen/= Case 'false)
                                                                                                                                                                                                                                                  (shen/let Case
                                                                                                                                                                                                                                                            (shen/let V3623
                                                                                                                                                                                                                                                                      (shen/shen\.lazyderef V3693 V3696)
                                                                                                                                                                                                                                                                      (shen/if
                                                                                                                                                                                                                                                                       (shen/cons\? V3623)
                                                                                                                                                                                                                                                                       (shen/let V3624
                                                                                                                                                                                                                                                                                 (shen/shen\.lazyderef
                                                                                                                                                                                                                                                                                  (shen/hd V3623)
                                                                                                                                                                                                                                                                                  V3696)
                                                                                                                                                                                                                                                                                 (shen/if
                                                                                                                                                                                                                                                                                  (shen/= 'shen\.process-datatype V3624)
                                                                                                                                                                                                                                                                                  (shen/let V3625
                                                                                                                                                                                                                                                                                            (shen/shen\.lazyderef V3694 V3696)
                                                                                                                                                                                                                                                                                            (shen/if
                                                                                                                                                                                                                                                                                             (shen/= 'symbol V3625)
                                                                                                                                                                                                                                                                                             (shen/do
                                                                                                                                                                                                                                                                                              (shen/shen\.incinfs)
                                                                                                                                                                                                                                                                                              (shen/thaw V3697))
                                                                                                                                                                                                                                                                                             (shen/if
                                                                                                                                                                                                                                                                                              (shen/shen\.pvar\? V3625)
                                                                                                                                                                                                                                                                                              (shen/do
                                                                                                                                                                                                                                                                                               (shen/shen\.bindv V3625 'symbol V3696)
                                                                                                                                                                                                                                                                                               (shen/let Result
                                                                                                                                                                                                                                                                                                         (shen/do
                                                                                                                                                                                                                                                                                                          (shen/shen\.incinfs)
                                                                                                                                                                                                                                                                                                          (shen/thaw V3697))
                                                                                                                                                                                                                                                                                                         (shen/do
                                                                                                                                                                                                                                                                                                          (shen/shen\.unbindv V3625 V3696)
                                                                                                                                                                                                                                                                                                          Result)))
                                                                                                                                                                                                                                                                                              'false)))
                                                                                                                                                                                                                                                                                  'false))
                                                                                                                                                                                                                                                                       'false))
                                                                                                                                                                                                                                                            (shen/if
                                                                                                                                                                                                                                                             (shen/= Case 'false)
                                                                                                                                                                                                                                                             (shen/let Case
                                                                                                                                                                                                                                                                       (shen/let V3626
                                                                                                                                                                                                                                                                                 (shen/shen\.lazyderef V3693 V3696)
                                                                                                                                                                                                                                                                                 (shen/if
                                                                                                                                                                                                                                                                                  (shen/cons\? V3626)
                                                                                                                                                                                                                                                                                  (shen/let V3627
                                                                                                                                                                                                                                                                                            (shen/shen\.lazyderef
                                                                                                                                                                                                                                                                                             (shen/hd V3626)
                                                                                                                                                                                                                                                                                             V3696)
                                                                                                                                                                                                                                                                                            (shen/if
                                                                                                                                                                                                                                                                                             (shen/= 'shen\.synonyms-help V3627)
                                                                                                                                                                                                                                                                                             (shen/let V3628
                                                                                                                                                                                                                                                                                                       (shen/shen\.lazyderef V3694 V3696)
                                                                                                                                                                                                                                                                                                       (shen/if
                                                                                                                                                                                                                                                                                                        (shen/= 'symbol V3628)
                                                                                                                                                                                                                                                                                                        (shen/do
                                                                                                                                                                                                                                                                                                         (shen/shen\.incinfs)
                                                                                                                                                                                                                                                                                                         (shen/thaw V3697))
                                                                                                                                                                                                                                                                                                        (shen/if
                                                                                                                                                                                                                                                                                                         (shen/shen\.pvar\? V3628)
                                                                                                                                                                                                                                                                                                         (shen/do
                                                                                                                                                                                                                                                                                                          (shen/shen\.bindv V3628 'symbol V3696)
                                                                                                                                                                                                                                                                                                          (shen/let Result
                                                                                                                                                                                                                                                                                                                    (shen/do
                                                                                                                                                                                                                                                                                                                     (shen/shen\.incinfs)
                                                                                                                                                                                                                                                                                                                     (shen/thaw V3697))
                                                                                                                                                                                                                                                                                                                    (shen/do
                                                                                                                                                                                                                                                                                                                     (shen/shen\.unbindv V3628 V3696)
                                                                                                                                                                                                                                                                                                                     Result)))
                                                                                                                                                                                                                                                                                                         'false)))
                                                                                                                                                                                                                                                                                             'false))
                                                                                                                                                                                                                                                                                  'false))
                                                                                                                                                                                                                                                                       (shen/if
                                                                                                                                                                                                                                                                        (shen/= Case 'false)
                                                                                                                                                                                                                                                                        (shen/let Datatypes
                                                                                                                                                                                                                                                                                  (shen/shen\.newpv V3696)
                                                                                                                                                                                                                                                                                  (shen/do
                                                                                                                                                                                                                                                                                   (shen/shen\.incinfs)
                                                                                                                                                                                                                                                                                   (shen/bind Datatypes
                                                                                                                                                                                                                                                                                              (shen/value 'shen\.*datatypes*)
                                                                                                                                                                                                                                                                                              V3696
                                                                                                                                                                                                                                                                                              (shen/freeze
                                                                                                                                                                                                                                                                                               (shen/shen\.udefs*
                                                                                                                                                                                                                                                                                                (list V3693 ': V3694)
                                                                                                                                                                                                                                                                                                V3695 Datatypes V3696 V3697)))))
                                                                                                                                                                                                                                                                        Case))
                                                                                                                                                                                                                                                             Case))
                                                                                                                                                                                                                                                  Case))
                                                                                                                                                                                                                                       Case))
                                                                                                                                                                                                                            Case))
                                                                                                                                                                                                                 Case))
                                                                                                                                                                                                      Case))
                                                                                                                                                                                           Case))
                                                                                                                                                                                Case))
                                                                                                                                                                     Case))
                                                                                                                                                          Case))
                                                                                                                                               Case))
                                                                                                                                    Case))
                                                                                                                         Case))
                                                                                                              Case))
                                                                                                   Case))
                                                                                        Case))
                                                                             Case))
                                                                  Case))
                                                       Case))
                                            Case)))))
(defun shen/shen\.t*-hyps
    (V3702 V3703 V3704 V3705)
  (shen/let Case
            (shen/let V3439
                      (shen/shen\.lazyderef V3702 V3704)
                      (shen/if
                       (shen/cons\? V3439)
                       (shen/let V3440
                                 (shen/shen\.lazyderef
                                  (shen/hd V3439)
                                  V3704)
                                 (shen/if
                                  (shen/cons\? V3440)
                                  (shen/let V3441
                                            (shen/shen\.lazyderef
                                             (shen/hd V3440)
                                             V3704)
                                            (shen/if
                                             (shen/cons\? V3441)
                                             (shen/let V3442
                                                       (shen/shen\.lazyderef
                                                        (shen/hd V3441)
                                                        V3704)
                                                       (shen/if
                                                        (shen/= 'cons V3442)
                                                        (shen/let V3443
                                                                  (shen/shen\.lazyderef
                                                                   (nthcdr 1 V3441)
                                                                   V3704)
                                                                  (shen/if
                                                                   (shen/cons\? V3443)
                                                                   (shen/let X
                                                                             (shen/hd V3443)
                                                                             (shen/let V3444
                                                                                       (shen/shen\.lazyderef
                                                                                        (nthcdr 1 V3443)
                                                                                        V3704)
                                                                                       (shen/if
                                                                                        (shen/cons\? V3444)
                                                                                        (shen/let Y
                                                                                                  (shen/hd V3444)
                                                                                                  (shen/let V3445
                                                                                                            (shen/shen\.lazyderef
                                                                                                             (nthcdr 1 V3444)
                                                                                                             V3704)
                                                                                                            (shen/if
                                                                                                             (shen/internal/predicate->shen
                                                                                                              (null V3445))
                                                                                                             (shen/let V3446
                                                                                                                       (shen/shen\.lazyderef
                                                                                                                        (nthcdr 1 V3440)
                                                                                                                        V3704)
                                                                                                                       (shen/if
                                                                                                                        (shen/cons\? V3446)
                                                                                                                        (shen/let V3447
                                                                                                                                  (shen/shen\.lazyderef
                                                                                                                                   (shen/hd V3446)
                                                                                                                                   V3704)
                                                                                                                                  (shen/if
                                                                                                                                   (shen/= ': V3447)
                                                                                                                                   (shen/let V3448
                                                                                                                                             (shen/shen\.lazyderef
                                                                                                                                              (nthcdr 1 V3446)
                                                                                                                                              V3704)
                                                                                                                                             (shen/if
                                                                                                                                              (shen/cons\? V3448)
                                                                                                                                              (shen/let V3449
                                                                                                                                                        (shen/shen\.lazyderef
                                                                                                                                                         (shen/hd V3448)
                                                                                                                                                         V3704)
                                                                                                                                                        (shen/if
                                                                                                                                                         (shen/cons\? V3449)
                                                                                                                                                         (shen/let V3450
                                                                                                                                                                   (shen/shen\.lazyderef
                                                                                                                                                                    (shen/hd V3449)
                                                                                                                                                                    V3704)
                                                                                                                                                                   (shen/if
                                                                                                                                                                    (shen/= 'list V3450)
                                                                                                                                                                    (shen/let V3451
                                                                                                                                                                              (shen/shen\.lazyderef
                                                                                                                                                                               (nthcdr 1 V3449)
                                                                                                                                                                               V3704)
                                                                                                                                                                              (shen/if
                                                                                                                                                                               (shen/cons\? V3451)
                                                                                                                                                                               (shen/let A
                                                                                                                                                                                         (shen/hd V3451)
                                                                                                                                                                                         (shen/let V3452
                                                                                                                                                                                                   (shen/shen\.lazyderef
                                                                                                                                                                                                    (nthcdr 1 V3451)
                                                                                                                                                                                                    V3704)
                                                                                                                                                                                                   (shen/if
                                                                                                                                                                                                    (shen/internal/predicate->shen
                                                                                                                                                                                                     (null V3452))
                                                                                                                                                                                                    (shen/let V3453
                                                                                                                                                                                                              (shen/shen\.lazyderef
                                                                                                                                                                                                               (nthcdr 1 V3448)
                                                                                                                                                                                                               V3704)
                                                                                                                                                                                                              (shen/if
                                                                                                                                                                                                               (shen/internal/predicate->shen
                                                                                                                                                                                                                (null V3453))
                                                                                                                                                                                                               (shen/let Hyp
                                                                                                                                                                                                                         (nthcdr 1 V3439)
                                                                                                                                                                                                                         (shen/do
                                                                                                                                                                                                                          (shen/shen\.incinfs)
                                                                                                                                                                                                                          (shen/bind V3703
                                                                                                                                                                                                                                     (append
                                                                                                                                                                                                                                      (list
                                                                                                                                                                                                                                       (list
                                                                                                                                                                                                                                        (shen/shen\.lazyderef X V3704)
                                                                                                                                                                                                                                        ':
                                                                                                                                                                                                                                        (shen/shen\.lazyderef A V3704))
                                                                                                                                                                                                                                       (list
                                                                                                                                                                                                                                        (shen/shen\.lazyderef Y V3704)
                                                                                                                                                                                                                                        ':
                                                                                                                                                                                                                                        (list 'list
                                                                                                                                                                                                                                              (shen/shen\.lazyderef A V3704))))
                                                                                                                                                                                                                                      (shen/shen\.lazyderef Hyp V3704))
                                                                                                                                                                                                                                     V3704 V3705)))
                                                                                                                                                                                                               (shen/if
                                                                                                                                                                                                                (shen/shen\.pvar\? V3453)
                                                                                                                                                                                                                (shen/do
                                                                                                                                                                                                                 (shen/shen\.bindv V3453 nil V3704)
                                                                                                                                                                                                                 (shen/let Result
                                                                                                                                                                                                                           (shen/let Hyp
                                                                                                                                                                                                                                     (nthcdr 1 V3439)
                                                                                                                                                                                                                                     (shen/do
                                                                                                                                                                                                                                      (shen/shen\.incinfs)
                                                                                                                                                                                                                                      (shen/bind V3703
                                                                                                                                                                                                                                                 (append
                                                                                                                                                                                                                                                  (list
                                                                                                                                                                                                                                                   (list
                                                                                                                                                                                                                                                    (shen/shen\.lazyderef X V3704)
                                                                                                                                                                                                                                                    ':
                                                                                                                                                                                                                                                    (shen/shen\.lazyderef A V3704))
                                                                                                                                                                                                                                                   (list
                                                                                                                                                                                                                                                    (shen/shen\.lazyderef Y V3704)
                                                                                                                                                                                                                                                    ':
                                                                                                                                                                                                                                                    (list 'list
                                                                                                                                                                                                                                                          (shen/shen\.lazyderef A V3704))))
                                                                                                                                                                                                                                                  (shen/shen\.lazyderef Hyp V3704))
                                                                                                                                                                                                                                                 V3704 V3705)))
                                                                                                                                                                                                                           (shen/do
                                                                                                                                                                                                                            (shen/shen\.unbindv V3453 V3704)
                                                                                                                                                                                                                            Result)))
                                                                                                                                                                                                                'false)))
                                                                                                                                                                                                    (shen/if
                                                                                                                                                                                                     (shen/shen\.pvar\? V3452)
                                                                                                                                                                                                     (shen/do
                                                                                                                                                                                                      (shen/shen\.bindv V3452 nil V3704)
                                                                                                                                                                                                      (shen/let Result
                                                                                                                                                                                                                (shen/let V3454
                                                                                                                                                                                                                          (shen/shen\.lazyderef
                                                                                                                                                                                                                           (nthcdr 1 V3448)
                                                                                                                                                                                                                           V3704)
                                                                                                                                                                                                                          (shen/if
                                                                                                                                                                                                                           (shen/internal/predicate->shen
                                                                                                                                                                                                                            (null V3454))
                                                                                                                                                                                                                           (shen/let Hyp
                                                                                                                                                                                                                                     (nthcdr 1 V3439)
                                                                                                                                                                                                                                     (shen/do
                                                                                                                                                                                                                                      (shen/shen\.incinfs)
                                                                                                                                                                                                                                      (shen/bind V3703
                                                                                                                                                                                                                                                 (append
                                                                                                                                                                                                                                                  (list
                                                                                                                                                                                                                                                   (list
                                                                                                                                                                                                                                                    (shen/shen\.lazyderef X V3704)
                                                                                                                                                                                                                                                    ':
                                                                                                                                                                                                                                                    (shen/shen\.lazyderef A V3704))
                                                                                                                                                                                                                                                   (list
                                                                                                                                                                                                                                                    (shen/shen\.lazyderef Y V3704)
                                                                                                                                                                                                                                                    ':
                                                                                                                                                                                                                                                    (list 'list
                                                                                                                                                                                                                                                          (shen/shen\.lazyderef A V3704))))
                                                                                                                                                                                                                                                  (shen/shen\.lazyderef Hyp V3704))
                                                                                                                                                                                                                                                 V3704 V3705)))
                                                                                                                                                                                                                           (shen/if
                                                                                                                                                                                                                            (shen/shen\.pvar\? V3454)
                                                                                                                                                                                                                            (shen/do
                                                                                                                                                                                                                             (shen/shen\.bindv V3454 nil V3704)
                                                                                                                                                                                                                             (shen/let Result
                                                                                                                                                                                                                                       (shen/let Hyp
                                                                                                                                                                                                                                                 (nthcdr 1 V3439)
                                                                                                                                                                                                                                                 (shen/do
                                                                                                                                                                                                                                                  (shen/shen\.incinfs)
                                                                                                                                                                                                                                                  (shen/bind V3703
                                                                                                                                                                                                                                                             (append
                                                                                                                                                                                                                                                              (list
                                                                                                                                                                                                                                                               (list
                                                                                                                                                                                                                                                                (shen/shen\.lazyderef X V3704)
                                                                                                                                                                                                                                                                ':
                                                                                                                                                                                                                                                                (shen/shen\.lazyderef A V3704))
                                                                                                                                                                                                                                                               (list
                                                                                                                                                                                                                                                                (shen/shen\.lazyderef Y V3704)
                                                                                                                                                                                                                                                                ':
                                                                                                                                                                                                                                                                (list 'list
                                                                                                                                                                                                                                                                      (shen/shen\.lazyderef A V3704))))
                                                                                                                                                                                                                                                              (shen/shen\.lazyderef Hyp V3704))
                                                                                                                                                                                                                                                             V3704 V3705)))
                                                                                                                                                                                                                                       (shen/do
                                                                                                                                                                                                                                        (shen/shen\.unbindv V3454 V3704)
                                                                                                                                                                                                                                        Result)))
                                                                                                                                                                                                                            'false)))
                                                                                                                                                                                                                (shen/do
                                                                                                                                                                                                                 (shen/shen\.unbindv V3452 V3704)
                                                                                                                                                                                                                 Result)))
                                                                                                                                                                                                     'false))))
                                                                                                                                                                               (shen/if
                                                                                                                                                                                (shen/shen\.pvar\? V3451)
                                                                                                                                                                                (shen/let A
                                                                                                                                                                                          (shen/shen\.newpv V3704)
                                                                                                                                                                                          (shen/do
                                                                                                                                                                                           (shen/shen\.bindv V3451
                                                                                                                                                                                                             (list A)
                                                                                                                                                                                                             V3704)
                                                                                                                                                                                           (shen/let Result
                                                                                                                                                                                                     (shen/let V3455
                                                                                                                                                                                                               (shen/shen\.lazyderef
                                                                                                                                                                                                                (nthcdr 1 V3448)
                                                                                                                                                                                                                V3704)
                                                                                                                                                                                                               (shen/if
                                                                                                                                                                                                                (shen/internal/predicate->shen
                                                                                                                                                                                                                 (null V3455))
                                                                                                                                                                                                                (shen/let Hyp
                                                                                                                                                                                                                          (nthcdr 1 V3439)
                                                                                                                                                                                                                          (shen/do
                                                                                                                                                                                                                           (shen/shen\.incinfs)
                                                                                                                                                                                                                           (shen/bind V3703
                                                                                                                                                                                                                                      (append
                                                                                                                                                                                                                                       (list
                                                                                                                                                                                                                                        (list
                                                                                                                                                                                                                                         (shen/shen\.lazyderef X V3704)
                                                                                                                                                                                                                                         ':
                                                                                                                                                                                                                                         (shen/shen\.lazyderef A V3704))
                                                                                                                                                                                                                                        (list
                                                                                                                                                                                                                                         (shen/shen\.lazyderef Y V3704)
                                                                                                                                                                                                                                         ':
                                                                                                                                                                                                                                         (list 'list
                                                                                                                                                                                                                                               (shen/shen\.lazyderef A V3704))))
                                                                                                                                                                                                                                       (shen/shen\.lazyderef Hyp V3704))
                                                                                                                                                                                                                                      V3704 V3705)))
                                                                                                                                                                                                                (shen/if
                                                                                                                                                                                                                 (shen/shen\.pvar\? V3455)
                                                                                                                                                                                                                 (shen/do
                                                                                                                                                                                                                  (shen/shen\.bindv V3455 nil V3704)
                                                                                                                                                                                                                  (shen/let Result
                                                                                                                                                                                                                            (shen/let Hyp
                                                                                                                                                                                                                                      (nthcdr 1 V3439)
                                                                                                                                                                                                                                      (shen/do
                                                                                                                                                                                                                                       (shen/shen\.incinfs)
                                                                                                                                                                                                                                       (shen/bind V3703
                                                                                                                                                                                                                                                  (append
                                                                                                                                                                                                                                                   (list
                                                                                                                                                                                                                                                    (list
                                                                                                                                                                                                                                                     (shen/shen\.lazyderef X V3704)
                                                                                                                                                                                                                                                     ':
                                                                                                                                                                                                                                                     (shen/shen\.lazyderef A V3704))
                                                                                                                                                                                                                                                    (list
                                                                                                                                                                                                                                                     (shen/shen\.lazyderef Y V3704)
                                                                                                                                                                                                                                                     ':
                                                                                                                                                                                                                                                     (list 'list
                                                                                                                                                                                                                                                           (shen/shen\.lazyderef A V3704))))
                                                                                                                                                                                                                                                   (shen/shen\.lazyderef Hyp V3704))
                                                                                                                                                                                                                                                  V3704 V3705)))
                                                                                                                                                                                                                            (shen/do
                                                                                                                                                                                                                             (shen/shen\.unbindv V3455 V3704)
                                                                                                                                                                                                                             Result)))
                                                                                                                                                                                                                 'false)))
                                                                                                                                                                                                     (shen/do
                                                                                                                                                                                                      (shen/shen\.unbindv V3451 V3704)
                                                                                                                                                                                                      Result))))
                                                                                                                                                                                'false)))
                                                                                                                                                                    (shen/if
                                                                                                                                                                     (shen/shen\.pvar\? V3450)
                                                                                                                                                                     (shen/do
                                                                                                                                                                      (shen/shen\.bindv V3450 'list V3704)
                                                                                                                                                                      (shen/let Result
                                                                                                                                                                                (shen/let V3456
                                                                                                                                                                                          (shen/shen\.lazyderef
                                                                                                                                                                                           (nthcdr 1 V3449)
                                                                                                                                                                                           V3704)
                                                                                                                                                                                          (shen/if
                                                                                                                                                                                           (shen/cons\? V3456)
                                                                                                                                                                                           (shen/let A
                                                                                                                                                                                                     (shen/hd V3456)
                                                                                                                                                                                                     (shen/let V3457
                                                                                                                                                                                                               (shen/shen\.lazyderef
                                                                                                                                                                                                                (nthcdr 1 V3456)
                                                                                                                                                                                                                V3704)
                                                                                                                                                                                                               (shen/if
                                                                                                                                                                                                                (shen/internal/predicate->shen
                                                                                                                                                                                                                 (null V3457))
                                                                                                                                                                                                                (shen/let V3458
                                                                                                                                                                                                                          (shen/shen\.lazyderef
                                                                                                                                                                                                                           (nthcdr 1 V3448)
                                                                                                                                                                                                                           V3704)
                                                                                                                                                                                                                          (shen/if
                                                                                                                                                                                                                           (shen/internal/predicate->shen
                                                                                                                                                                                                                            (null V3458))
                                                                                                                                                                                                                           (shen/let Hyp
                                                                                                                                                                                                                                     (nthcdr 1 V3439)
                                                                                                                                                                                                                                     (shen/do
                                                                                                                                                                                                                                      (shen/shen\.incinfs)
                                                                                                                                                                                                                                      (shen/bind V3703
                                                                                                                                                                                                                                                 (append
                                                                                                                                                                                                                                                  (list
                                                                                                                                                                                                                                                   (list
                                                                                                                                                                                                                                                    (shen/shen\.lazyderef X V3704)
                                                                                                                                                                                                                                                    ':
                                                                                                                                                                                                                                                    (shen/shen\.lazyderef A V3704))
                                                                                                                                                                                                                                                   (list
                                                                                                                                                                                                                                                    (shen/shen\.lazyderef Y V3704)
                                                                                                                                                                                                                                                    ':
                                                                                                                                                                                                                                                    (list 'list
                                                                                                                                                                                                                                                          (shen/shen\.lazyderef A V3704))))
                                                                                                                                                                                                                                                  (shen/shen\.lazyderef Hyp V3704))
                                                                                                                                                                                                                                                 V3704 V3705)))
                                                                                                                                                                                                                           (shen/if
                                                                                                                                                                                                                            (shen/shen\.pvar\? V3458)
                                                                                                                                                                                                                            (shen/do
                                                                                                                                                                                                                             (shen/shen\.bindv V3458 nil V3704)
                                                                                                                                                                                                                             (shen/let Result
                                                                                                                                                                                                                                       (shen/let Hyp
                                                                                                                                                                                                                                                 (nthcdr 1 V3439)
                                                                                                                                                                                                                                                 (shen/do
                                                                                                                                                                                                                                                  (shen/shen\.incinfs)
                                                                                                                                                                                                                                                  (shen/bind V3703
                                                                                                                                                                                                                                                             (append
                                                                                                                                                                                                                                                              (list
                                                                                                                                                                                                                                                               (list
                                                                                                                                                                                                                                                                (shen/shen\.lazyderef X V3704)
                                                                                                                                                                                                                                                                ':
                                                                                                                                                                                                                                                                (shen/shen\.lazyderef A V3704))
                                                                                                                                                                                                                                                               (list
                                                                                                                                                                                                                                                                (shen/shen\.lazyderef Y V3704)
                                                                                                                                                                                                                                                                ':
                                                                                                                                                                                                                                                                (list 'list
                                                                                                                                                                                                                                                                      (shen/shen\.lazyderef A V3704))))
                                                                                                                                                                                                                                                              (shen/shen\.lazyderef Hyp V3704))
                                                                                                                                                                                                                                                             V3704 V3705)))
                                                                                                                                                                                                                                       (shen/do
                                                                                                                                                                                                                                        (shen/shen\.unbindv V3458 V3704)
                                                                                                                                                                                                                                        Result)))
                                                                                                                                                                                                                            'false)))
                                                                                                                                                                                                                (shen/if
                                                                                                                                                                                                                 (shen/shen\.pvar\? V3457)
                                                                                                                                                                                                                 (shen/do
                                                                                                                                                                                                                  (shen/shen\.bindv V3457 nil V3704)
                                                                                                                                                                                                                  (shen/let Result
                                                                                                                                                                                                                            (shen/let V3459
                                                                                                                                                                                                                                      (shen/shen\.lazyderef
                                                                                                                                                                                                                                       (nthcdr 1 V3448)
                                                                                                                                                                                                                                       V3704)
                                                                                                                                                                                                                                      (shen/if
                                                                                                                                                                                                                                       (shen/internal/predicate->shen
                                                                                                                                                                                                                                        (null V3459))
                                                                                                                                                                                                                                       (shen/let Hyp
                                                                                                                                                                                                                                                 (nthcdr 1 V3439)
                                                                                                                                                                                                                                                 (shen/do
                                                                                                                                                                                                                                                  (shen/shen\.incinfs)
                                                                                                                                                                                                                                                  (shen/bind V3703
                                                                                                                                                                                                                                                             (append
                                                                                                                                                                                                                                                              (list
                                                                                                                                                                                                                                                               (list
                                                                                                                                                                                                                                                                (shen/shen\.lazyderef X V3704)
                                                                                                                                                                                                                                                                ':
                                                                                                                                                                                                                                                                (shen/shen\.lazyderef A V3704))
                                                                                                                                                                                                                                                               (list
                                                                                                                                                                                                                                                                (shen/shen\.lazyderef Y V3704)
                                                                                                                                                                                                                                                                ':
                                                                                                                                                                                                                                                                (list 'list
                                                                                                                                                                                                                                                                      (shen/shen\.lazyderef A V3704))))
                                                                                                                                                                                                                                                              (shen/shen\.lazyderef Hyp V3704))
                                                                                                                                                                                                                                                             V3704 V3705)))
                                                                                                                                                                                                                                       (shen/if
                                                                                                                                                                                                                                        (shen/shen\.pvar\? V3459)
                                                                                                                                                                                                                                        (shen/do
                                                                                                                                                                                                                                         (shen/shen\.bindv V3459 nil V3704)
                                                                                                                                                                                                                                         (shen/let Result
                                                                                                                                                                                                                                                   (shen/let Hyp
                                                                                                                                                                                                                                                             (nthcdr 1 V3439)
                                                                                                                                                                                                                                                             (shen/do
                                                                                                                                                                                                                                                              (shen/shen\.incinfs)
                                                                                                                                                                                                                                                              (shen/bind V3703
                                                                                                                                                                                                                                                                         (append
                                                                                                                                                                                                                                                                          (list
                                                                                                                                                                                                                                                                           (list
                                                                                                                                                                                                                                                                            (shen/shen\.lazyderef X V3704)
                                                                                                                                                                                                                                                                            ':
                                                                                                                                                                                                                                                                            (shen/shen\.lazyderef A V3704))
                                                                                                                                                                                                                                                                           (list
                                                                                                                                                                                                                                                                            (shen/shen\.lazyderef Y V3704)
                                                                                                                                                                                                                                                                            ':
                                                                                                                                                                                                                                                                            (list 'list
                                                                                                                                                                                                                                                                                  (shen/shen\.lazyderef A V3704))))
                                                                                                                                                                                                                                                                          (shen/shen\.lazyderef Hyp V3704))
                                                                                                                                                                                                                                                                         V3704 V3705)))
                                                                                                                                                                                                                                                   (shen/do
                                                                                                                                                                                                                                                    (shen/shen\.unbindv V3459 V3704)
                                                                                                                                                                                                                                                    Result)))
                                                                                                                                                                                                                                        'false)))
                                                                                                                                                                                                                            (shen/do
                                                                                                                                                                                                                             (shen/shen\.unbindv V3457 V3704)
                                                                                                                                                                                                                             Result)))
                                                                                                                                                                                                                 'false))))
                                                                                                                                                                                           (shen/if
                                                                                                                                                                                            (shen/shen\.pvar\? V3456)
                                                                                                                                                                                            (shen/let A
                                                                                                                                                                                                      (shen/shen\.newpv V3704)
                                                                                                                                                                                                      (shen/do
                                                                                                                                                                                                       (shen/shen\.bindv V3456
                                                                                                                                                                                                                         (list A)
                                                                                                                                                                                                                         V3704)
                                                                                                                                                                                                       (shen/let Result
                                                                                                                                                                                                                 (shen/let V3460
                                                                                                                                                                                                                           (shen/shen\.lazyderef
                                                                                                                                                                                                                            (nthcdr 1 V3448)
                                                                                                                                                                                                                            V3704)
                                                                                                                                                                                                                           (shen/if
                                                                                                                                                                                                                            (shen/internal/predicate->shen
                                                                                                                                                                                                                             (null V3460))
                                                                                                                                                                                                                            (shen/let Hyp
                                                                                                                                                                                                                                      (nthcdr 1 V3439)
                                                                                                                                                                                                                                      (shen/do
                                                                                                                                                                                                                                       (shen/shen\.incinfs)
                                                                                                                                                                                                                                       (shen/bind V3703
                                                                                                                                                                                                                                                  (append
                                                                                                                                                                                                                                                   (list
                                                                                                                                                                                                                                                    (list
                                                                                                                                                                                                                                                     (shen/shen\.lazyderef X V3704)
                                                                                                                                                                                                                                                     ':
                                                                                                                                                                                                                                                     (shen/shen\.lazyderef A V3704))
                                                                                                                                                                                                                                                    (list
                                                                                                                                                                                                                                                     (shen/shen\.lazyderef Y V3704)
                                                                                                                                                                                                                                                     ':
                                                                                                                                                                                                                                                     (list 'list
                                                                                                                                                                                                                                                           (shen/shen\.lazyderef A V3704))))
                                                                                                                                                                                                                                                   (shen/shen\.lazyderef Hyp V3704))
                                                                                                                                                                                                                                                  V3704 V3705)))
                                                                                                                                                                                                                            (shen/if
                                                                                                                                                                                                                             (shen/shen\.pvar\? V3460)
                                                                                                                                                                                                                             (shen/do
                                                                                                                                                                                                                              (shen/shen\.bindv V3460 nil V3704)
                                                                                                                                                                                                                              (shen/let Result
                                                                                                                                                                                                                                        (shen/let Hyp
                                                                                                                                                                                                                                                  (nthcdr 1 V3439)
                                                                                                                                                                                                                                                  (shen/do
                                                                                                                                                                                                                                                   (shen/shen\.incinfs)
                                                                                                                                                                                                                                                   (shen/bind V3703
                                                                                                                                                                                                                                                              (append
                                                                                                                                                                                                                                                               (list
                                                                                                                                                                                                                                                                (list
                                                                                                                                                                                                                                                                 (shen/shen\.lazyderef X V3704)
                                                                                                                                                                                                                                                                 ':
                                                                                                                                                                                                                                                                 (shen/shen\.lazyderef A V3704))
                                                                                                                                                                                                                                                                (list
                                                                                                                                                                                                                                                                 (shen/shen\.lazyderef Y V3704)
                                                                                                                                                                                                                                                                 ':
                                                                                                                                                                                                                                                                 (list 'list
                                                                                                                                                                                                                                                                       (shen/shen\.lazyderef A V3704))))
                                                                                                                                                                                                                                                               (shen/shen\.lazyderef Hyp V3704))
                                                                                                                                                                                                                                                              V3704 V3705)))
                                                                                                                                                                                                                                        (shen/do
                                                                                                                                                                                                                                         (shen/shen\.unbindv V3460 V3704)
                                                                                                                                                                                                                                         Result)))
                                                                                                                                                                                                                             'false)))
                                                                                                                                                                                                                 (shen/do
                                                                                                                                                                                                                  (shen/shen\.unbindv V3456 V3704)
                                                                                                                                                                                                                  Result))))
                                                                                                                                                                                            'false)))
                                                                                                                                                                                (shen/do
                                                                                                                                                                                 (shen/shen\.unbindv V3450 V3704)
                                                                                                                                                                                 Result)))
                                                                                                                                                                     'false)))
                                                                                                                                                         (shen/if
                                                                                                                                                          (shen/shen\.pvar\? V3449)
                                                                                                                                                          (shen/let A
                                                                                                                                                                    (shen/shen\.newpv V3704)
                                                                                                                                                                    (shen/do
                                                                                                                                                                     (shen/shen\.bindv V3449
                                                                                                                                                                                       (list 'list A)
                                                                                                                                                                                       V3704)
                                                                                                                                                                     (shen/let Result
                                                                                                                                                                               (shen/let V3461
                                                                                                                                                                                         (shen/shen\.lazyderef
                                                                                                                                                                                          (nthcdr 1 V3448)
                                                                                                                                                                                          V3704)
                                                                                                                                                                                         (shen/if
                                                                                                                                                                                          (shen/internal/predicate->shen
                                                                                                                                                                                           (null V3461))
                                                                                                                                                                                          (shen/let Hyp
                                                                                                                                                                                                    (nthcdr 1 V3439)
                                                                                                                                                                                                    (shen/do
                                                                                                                                                                                                     (shen/shen\.incinfs)
                                                                                                                                                                                                     (shen/bind V3703
                                                                                                                                                                                                                (append
                                                                                                                                                                                                                 (list
                                                                                                                                                                                                                  (list
                                                                                                                                                                                                                   (shen/shen\.lazyderef X V3704)
                                                                                                                                                                                                                   ':
                                                                                                                                                                                                                   (shen/shen\.lazyderef A V3704))
                                                                                                                                                                                                                  (list
                                                                                                                                                                                                                   (shen/shen\.lazyderef Y V3704)
                                                                                                                                                                                                                   ':
                                                                                                                                                                                                                   (list 'list
                                                                                                                                                                                                                         (shen/shen\.lazyderef A V3704))))
                                                                                                                                                                                                                 (shen/shen\.lazyderef Hyp V3704))
                                                                                                                                                                                                                V3704 V3705)))
                                                                                                                                                                                          (shen/if
                                                                                                                                                                                           (shen/shen\.pvar\? V3461)
                                                                                                                                                                                           (shen/do
                                                                                                                                                                                            (shen/shen\.bindv V3461 nil V3704)
                                                                                                                                                                                            (shen/let Result
                                                                                                                                                                                                      (shen/let Hyp
                                                                                                                                                                                                                (nthcdr 1 V3439)
                                                                                                                                                                                                                (shen/do
                                                                                                                                                                                                                 (shen/shen\.incinfs)
                                                                                                                                                                                                                 (shen/bind V3703
                                                                                                                                                                                                                            (append
                                                                                                                                                                                                                             (list
                                                                                                                                                                                                                              (list
                                                                                                                                                                                                                               (shen/shen\.lazyderef X V3704)
                                                                                                                                                                                                                               ':
                                                                                                                                                                                                                               (shen/shen\.lazyderef A V3704))
                                                                                                                                                                                                                              (list
                                                                                                                                                                                                                               (shen/shen\.lazyderef Y V3704)
                                                                                                                                                                                                                               ':
                                                                                                                                                                                                                               (list 'list
                                                                                                                                                                                                                                     (shen/shen\.lazyderef A V3704))))
                                                                                                                                                                                                                             (shen/shen\.lazyderef Hyp V3704))
                                                                                                                                                                                                                            V3704 V3705)))
                                                                                                                                                                                                      (shen/do
                                                                                                                                                                                                       (shen/shen\.unbindv V3461 V3704)
                                                                                                                                                                                                       Result)))
                                                                                                                                                                                           'false)))
                                                                                                                                                                               (shen/do
                                                                                                                                                                                (shen/shen\.unbindv V3449 V3704)
                                                                                                                                                                                Result))))
                                                                                                                                                          'false)))
                                                                                                                                              'false))
                                                                                                                                   'false))
                                                                                                                        'false))
                                                                                                             'false)))
                                                                                        'false)))
                                                                   'false))
                                                        'false))
                                             'false))
                                  'false))
                       'false))
            (shen/if
             (shen/= Case 'false)
             (shen/let Case
                       (shen/let V3462
                                 (shen/shen\.lazyderef V3702 V3704)
                                 (shen/if
                                  (shen/cons\? V3462)
                                  (shen/let V3463
                                            (shen/shen\.lazyderef
                                             (shen/hd V3462)
                                             V3704)
                                            (shen/if
                                             (shen/cons\? V3463)
                                             (shen/let V3464
                                                       (shen/shen\.lazyderef
                                                        (shen/hd V3463)
                                                        V3704)
                                                       (shen/if
                                                        (shen/cons\? V3464)
                                                        (shen/let V3465
                                                                  (shen/shen\.lazyderef
                                                                   (shen/hd V3464)
                                                                   V3704)
                                                                  (shen/if
                                                                   (shen/= '@p V3465)
                                                                   (shen/let V3466
                                                                             (shen/shen\.lazyderef
                                                                              (nthcdr 1 V3464)
                                                                              V3704)
                                                                             (shen/if
                                                                              (shen/cons\? V3466)
                                                                              (shen/let X
                                                                                        (shen/hd V3466)
                                                                                        (shen/let V3467
                                                                                                  (shen/shen\.lazyderef
                                                                                                   (nthcdr 1 V3466)
                                                                                                   V3704)
                                                                                                  (shen/if
                                                                                                   (shen/cons\? V3467)
                                                                                                   (shen/let Y
                                                                                                             (shen/hd V3467)
                                                                                                             (shen/let V3468
                                                                                                                       (shen/shen\.lazyderef
                                                                                                                        (nthcdr 1 V3467)
                                                                                                                        V3704)
                                                                                                                       (shen/if
                                                                                                                        (shen/internal/predicate->shen
                                                                                                                         (null V3468))
                                                                                                                        (shen/let V3469
                                                                                                                                  (shen/shen\.lazyderef
                                                                                                                                   (nthcdr 1 V3463)
                                                                                                                                   V3704)
                                                                                                                                  (shen/if
                                                                                                                                   (shen/cons\? V3469)
                                                                                                                                   (shen/let V3470
                                                                                                                                             (shen/shen\.lazyderef
                                                                                                                                              (shen/hd V3469)
                                                                                                                                              V3704)
                                                                                                                                             (shen/if
                                                                                                                                              (shen/= ': V3470)
                                                                                                                                              (shen/let V3471
                                                                                                                                                        (shen/shen\.lazyderef
                                                                                                                                                         (nthcdr 1 V3469)
                                                                                                                                                         V3704)
                                                                                                                                                        (shen/if
                                                                                                                                                         (shen/cons\? V3471)
                                                                                                                                                         (shen/let V3472
                                                                                                                                                                   (shen/shen\.lazyderef
                                                                                                                                                                    (shen/hd V3471)
                                                                                                                                                                    V3704)
                                                                                                                                                                   (shen/if
                                                                                                                                                                    (shen/cons\? V3472)
                                                                                                                                                                    (shen/let A
                                                                                                                                                                              (shen/hd V3472)
                                                                                                                                                                              (shen/let V3473
                                                                                                                                                                                        (shen/shen\.lazyderef
                                                                                                                                                                                         (nthcdr 1 V3472)
                                                                                                                                                                                         V3704)
                                                                                                                                                                                        (shen/if
                                                                                                                                                                                         (shen/cons\? V3473)
                                                                                                                                                                                         (shen/let V3474
                                                                                                                                                                                                   (shen/shen\.lazyderef
                                                                                                                                                                                                    (shen/hd V3473)
                                                                                                                                                                                                    V3704)
                                                                                                                                                                                                   (shen/if
                                                                                                                                                                                                    (shen/= '* V3474)
                                                                                                                                                                                                    (shen/let V3475
                                                                                                                                                                                                              (shen/shen\.lazyderef
                                                                                                                                                                                                               (nthcdr 1 V3473)
                                                                                                                                                                                                               V3704)
                                                                                                                                                                                                              (shen/if
                                                                                                                                                                                                               (shen/cons\? V3475)
                                                                                                                                                                                                               (shen/let B
                                                                                                                                                                                                                         (shen/hd V3475)
                                                                                                                                                                                                                         (shen/let V3476
                                                                                                                                                                                                                                   (shen/shen\.lazyderef
                                                                                                                                                                                                                                    (nthcdr 1 V3475)
                                                                                                                                                                                                                                    V3704)
                                                                                                                                                                                                                                   (shen/if
                                                                                                                                                                                                                                    (shen/internal/predicate->shen
                                                                                                                                                                                                                                     (null V3476))
                                                                                                                                                                                                                                    (shen/let V3477
                                                                                                                                                                                                                                              (shen/shen\.lazyderef
                                                                                                                                                                                                                                               (nthcdr 1 V3471)
                                                                                                                                                                                                                                               V3704)
                                                                                                                                                                                                                                              (shen/if
                                                                                                                                                                                                                                               (shen/internal/predicate->shen
                                                                                                                                                                                                                                                (null V3477))
                                                                                                                                                                                                                                               (shen/let Hyp
                                                                                                                                                                                                                                                         (nthcdr 1 V3462)
                                                                                                                                                                                                                                                         (shen/do
                                                                                                                                                                                                                                                          (shen/shen\.incinfs)
                                                                                                                                                                                                                                                          (shen/bind V3703
                                                                                                                                                                                                                                                                     (append
                                                                                                                                                                                                                                                                      (list
                                                                                                                                                                                                                                                                       (list
                                                                                                                                                                                                                                                                        (shen/shen\.lazyderef X V3704)
                                                                                                                                                                                                                                                                        ':
                                                                                                                                                                                                                                                                        (shen/shen\.lazyderef A V3704))
                                                                                                                                                                                                                                                                       (list
                                                                                                                                                                                                                                                                        (shen/shen\.lazyderef Y V3704)
                                                                                                                                                                                                                                                                        ':
                                                                                                                                                                                                                                                                        (shen/shen\.lazyderef B V3704)))
                                                                                                                                                                                                                                                                      (shen/shen\.lazyderef Hyp V3704))
                                                                                                                                                                                                                                                                     V3704 V3705)))
                                                                                                                                                                                                                                               (shen/if
                                                                                                                                                                                                                                                (shen/shen\.pvar\? V3477)
                                                                                                                                                                                                                                                (shen/do
                                                                                                                                                                                                                                                 (shen/shen\.bindv V3477 nil V3704)
                                                                                                                                                                                                                                                 (shen/let Result
                                                                                                                                                                                                                                                           (shen/let Hyp
                                                                                                                                                                                                                                                                     (nthcdr 1 V3462)
                                                                                                                                                                                                                                                                     (shen/do
                                                                                                                                                                                                                                                                      (shen/shen\.incinfs)
                                                                                                                                                                                                                                                                      (shen/bind V3703
                                                                                                                                                                                                                                                                                 (append
                                                                                                                                                                                                                                                                                  (list
                                                                                                                                                                                                                                                                                   (list
                                                                                                                                                                                                                                                                                    (shen/shen\.lazyderef X V3704)
                                                                                                                                                                                                                                                                                    ':
                                                                                                                                                                                                                                                                                    (shen/shen\.lazyderef A V3704))
                                                                                                                                                                                                                                                                                   (list
                                                                                                                                                                                                                                                                                    (shen/shen\.lazyderef Y V3704)
                                                                                                                                                                                                                                                                                    ':
                                                                                                                                                                                                                                                                                    (shen/shen\.lazyderef B V3704)))
                                                                                                                                                                                                                                                                                  (shen/shen\.lazyderef Hyp V3704))
                                                                                                                                                                                                                                                                                 V3704 V3705)))
                                                                                                                                                                                                                                                           (shen/do
                                                                                                                                                                                                                                                            (shen/shen\.unbindv V3477 V3704)
                                                                                                                                                                                                                                                            Result)))
                                                                                                                                                                                                                                                'false)))
                                                                                                                                                                                                                                    (shen/if
                                                                                                                                                                                                                                     (shen/shen\.pvar\? V3476)
                                                                                                                                                                                                                                     (shen/do
                                                                                                                                                                                                                                      (shen/shen\.bindv V3476 nil V3704)
                                                                                                                                                                                                                                      (shen/let Result
                                                                                                                                                                                                                                                (shen/let V3478
                                                                                                                                                                                                                                                          (shen/shen\.lazyderef
                                                                                                                                                                                                                                                           (nthcdr 1 V3471)
                                                                                                                                                                                                                                                           V3704)
                                                                                                                                                                                                                                                          (shen/if
                                                                                                                                                                                                                                                           (shen/internal/predicate->shen
                                                                                                                                                                                                                                                            (null V3478))
                                                                                                                                                                                                                                                           (shen/let Hyp
                                                                                                                                                                                                                                                                     (nthcdr 1 V3462)
                                                                                                                                                                                                                                                                     (shen/do
                                                                                                                                                                                                                                                                      (shen/shen\.incinfs)
                                                                                                                                                                                                                                                                      (shen/bind V3703
                                                                                                                                                                                                                                                                                 (append
                                                                                                                                                                                                                                                                                  (list
                                                                                                                                                                                                                                                                                   (list
                                                                                                                                                                                                                                                                                    (shen/shen\.lazyderef X V3704)
                                                                                                                                                                                                                                                                                    ':
                                                                                                                                                                                                                                                                                    (shen/shen\.lazyderef A V3704))
                                                                                                                                                                                                                                                                                   (list
                                                                                                                                                                                                                                                                                    (shen/shen\.lazyderef Y V3704)
                                                                                                                                                                                                                                                                                    ':
                                                                                                                                                                                                                                                                                    (shen/shen\.lazyderef B V3704)))
                                                                                                                                                                                                                                                                                  (shen/shen\.lazyderef Hyp V3704))
                                                                                                                                                                                                                                                                                 V3704 V3705)))
                                                                                                                                                                                                                                                           (shen/if
                                                                                                                                                                                                                                                            (shen/shen\.pvar\? V3478)
                                                                                                                                                                                                                                                            (shen/do
                                                                                                                                                                                                                                                             (shen/shen\.bindv V3478 nil V3704)
                                                                                                                                                                                                                                                             (shen/let Result
                                                                                                                                                                                                                                                                       (shen/let Hyp
                                                                                                                                                                                                                                                                                 (nthcdr 1 V3462)
                                                                                                                                                                                                                                                                                 (shen/do
                                                                                                                                                                                                                                                                                  (shen/shen\.incinfs)
                                                                                                                                                                                                                                                                                  (shen/bind V3703
                                                                                                                                                                                                                                                                                             (append
                                                                                                                                                                                                                                                                                              (list
                                                                                                                                                                                                                                                                                               (list
                                                                                                                                                                                                                                                                                                (shen/shen\.lazyderef X V3704)
                                                                                                                                                                                                                                                                                                ':
                                                                                                                                                                                                                                                                                                (shen/shen\.lazyderef A V3704))
                                                                                                                                                                                                                                                                                               (list
                                                                                                                                                                                                                                                                                                (shen/shen\.lazyderef Y V3704)
                                                                                                                                                                                                                                                                                                ':
                                                                                                                                                                                                                                                                                                (shen/shen\.lazyderef B V3704)))
                                                                                                                                                                                                                                                                                              (shen/shen\.lazyderef Hyp V3704))
                                                                                                                                                                                                                                                                                             V3704 V3705)))
                                                                                                                                                                                                                                                                       (shen/do
                                                                                                                                                                                                                                                                        (shen/shen\.unbindv V3478 V3704)
                                                                                                                                                                                                                                                                        Result)))
                                                                                                                                                                                                                                                            'false)))
                                                                                                                                                                                                                                                (shen/do
                                                                                                                                                                                                                                                 (shen/shen\.unbindv V3476 V3704)
                                                                                                                                                                                                                                                 Result)))
                                                                                                                                                                                                                                     'false))))
                                                                                                                                                                                                               (shen/if
                                                                                                                                                                                                                (shen/shen\.pvar\? V3475)
                                                                                                                                                                                                                (shen/let B
                                                                                                                                                                                                                          (shen/shen\.newpv V3704)
                                                                                                                                                                                                                          (shen/do
                                                                                                                                                                                                                           (shen/shen\.bindv V3475
                                                                                                                                                                                                                                             (list B)
                                                                                                                                                                                                                                             V3704)
                                                                                                                                                                                                                           (shen/let Result
                                                                                                                                                                                                                                     (shen/let V3479
                                                                                                                                                                                                                                               (shen/shen\.lazyderef
                                                                                                                                                                                                                                                (nthcdr 1 V3471)
                                                                                                                                                                                                                                                V3704)
                                                                                                                                                                                                                                               (shen/if
                                                                                                                                                                                                                                                (shen/internal/predicate->shen
                                                                                                                                                                                                                                                 (null V3479))
                                                                                                                                                                                                                                                (shen/let Hyp
                                                                                                                                                                                                                                                          (nthcdr 1 V3462)
                                                                                                                                                                                                                                                          (shen/do
                                                                                                                                                                                                                                                           (shen/shen\.incinfs)
                                                                                                                                                                                                                                                           (shen/bind V3703
                                                                                                                                                                                                                                                                      (append
                                                                                                                                                                                                                                                                       (list
                                                                                                                                                                                                                                                                        (list
                                                                                                                                                                                                                                                                         (shen/shen\.lazyderef X V3704)
                                                                                                                                                                                                                                                                         ':
                                                                                                                                                                                                                                                                         (shen/shen\.lazyderef A V3704))
                                                                                                                                                                                                                                                                        (list
                                                                                                                                                                                                                                                                         (shen/shen\.lazyderef Y V3704)
                                                                                                                                                                                                                                                                         ':
                                                                                                                                                                                                                                                                         (shen/shen\.lazyderef B V3704)))
                                                                                                                                                                                                                                                                       (shen/shen\.lazyderef Hyp V3704))
                                                                                                                                                                                                                                                                      V3704 V3705)))
                                                                                                                                                                                                                                                (shen/if
                                                                                                                                                                                                                                                 (shen/shen\.pvar\? V3479)
                                                                                                                                                                                                                                                 (shen/do
                                                                                                                                                                                                                                                  (shen/shen\.bindv V3479 nil V3704)
                                                                                                                                                                                                                                                  (shen/let Result
                                                                                                                                                                                                                                                            (shen/let Hyp
                                                                                                                                                                                                                                                                      (nthcdr 1 V3462)
                                                                                                                                                                                                                                                                      (shen/do
                                                                                                                                                                                                                                                                       (shen/shen\.incinfs)
                                                                                                                                                                                                                                                                       (shen/bind V3703
                                                                                                                                                                                                                                                                                  (append
                                                                                                                                                                                                                                                                                   (list
                                                                                                                                                                                                                                                                                    (list
                                                                                                                                                                                                                                                                                     (shen/shen\.lazyderef X V3704)
                                                                                                                                                                                                                                                                                     ':
                                                                                                                                                                                                                                                                                     (shen/shen\.lazyderef A V3704))
                                                                                                                                                                                                                                                                                    (list
                                                                                                                                                                                                                                                                                     (shen/shen\.lazyderef Y V3704)
                                                                                                                                                                                                                                                                                     ':
                                                                                                                                                                                                                                                                                     (shen/shen\.lazyderef B V3704)))
                                                                                                                                                                                                                                                                                   (shen/shen\.lazyderef Hyp V3704))
                                                                                                                                                                                                                                                                                  V3704 V3705)))
                                                                                                                                                                                                                                                            (shen/do
                                                                                                                                                                                                                                                             (shen/shen\.unbindv V3479 V3704)
                                                                                                                                                                                                                                                             Result)))
                                                                                                                                                                                                                                                 'false)))
                                                                                                                                                                                                                                     (shen/do
                                                                                                                                                                                                                                      (shen/shen\.unbindv V3475 V3704)
                                                                                                                                                                                                                                      Result))))
                                                                                                                                                                                                                'false)))
                                                                                                                                                                                                    (shen/if
                                                                                                                                                                                                     (shen/shen\.pvar\? V3474)
                                                                                                                                                                                                     (shen/do
                                                                                                                                                                                                      (shen/shen\.bindv V3474 '* V3704)
                                                                                                                                                                                                      (shen/let Result
                                                                                                                                                                                                                (shen/let V3480
                                                                                                                                                                                                                          (shen/shen\.lazyderef
                                                                                                                                                                                                                           (nthcdr 1 V3473)
                                                                                                                                                                                                                           V3704)
                                                                                                                                                                                                                          (shen/if
                                                                                                                                                                                                                           (shen/cons\? V3480)
                                                                                                                                                                                                                           (shen/let B
                                                                                                                                                                                                                                     (shen/hd V3480)
                                                                                                                                                                                                                                     (shen/let V3481
                                                                                                                                                                                                                                               (shen/shen\.lazyderef
                                                                                                                                                                                                                                                (nthcdr 1 V3480)
                                                                                                                                                                                                                                                V3704)
                                                                                                                                                                                                                                               (shen/if
                                                                                                                                                                                                                                                (shen/internal/predicate->shen
                                                                                                                                                                                                                                                 (null V3481))
                                                                                                                                                                                                                                                (shen/let V3482
                                                                                                                                                                                                                                                          (shen/shen\.lazyderef
                                                                                                                                                                                                                                                           (nthcdr 1 V3471)
                                                                                                                                                                                                                                                           V3704)
                                                                                                                                                                                                                                                          (shen/if
                                                                                                                                                                                                                                                           (shen/internal/predicate->shen
                                                                                                                                                                                                                                                            (null V3482))
                                                                                                                                                                                                                                                           (shen/let Hyp
                                                                                                                                                                                                                                                                     (nthcdr 1 V3462)
                                                                                                                                                                                                                                                                     (shen/do
                                                                                                                                                                                                                                                                      (shen/shen\.incinfs)
                                                                                                                                                                                                                                                                      (shen/bind V3703
                                                                                                                                                                                                                                                                                 (append
                                                                                                                                                                                                                                                                                  (list
                                                                                                                                                                                                                                                                                   (list
                                                                                                                                                                                                                                                                                    (shen/shen\.lazyderef X V3704)
                                                                                                                                                                                                                                                                                    ':
                                                                                                                                                                                                                                                                                    (shen/shen\.lazyderef A V3704))
                                                                                                                                                                                                                                                                                   (list
                                                                                                                                                                                                                                                                                    (shen/shen\.lazyderef Y V3704)
                                                                                                                                                                                                                                                                                    ':
                                                                                                                                                                                                                                                                                    (shen/shen\.lazyderef B V3704)))
                                                                                                                                                                                                                                                                                  (shen/shen\.lazyderef Hyp V3704))
                                                                                                                                                                                                                                                                                 V3704 V3705)))
                                                                                                                                                                                                                                                           (shen/if
                                                                                                                                                                                                                                                            (shen/shen\.pvar\? V3482)
                                                                                                                                                                                                                                                            (shen/do
                                                                                                                                                                                                                                                             (shen/shen\.bindv V3482 nil V3704)
                                                                                                                                                                                                                                                             (shen/let Result
                                                                                                                                                                                                                                                                       (shen/let Hyp
                                                                                                                                                                                                                                                                                 (nthcdr 1 V3462)
                                                                                                                                                                                                                                                                                 (shen/do
                                                                                                                                                                                                                                                                                  (shen/shen\.incinfs)
                                                                                                                                                                                                                                                                                  (shen/bind V3703
                                                                                                                                                                                                                                                                                             (append
                                                                                                                                                                                                                                                                                              (list
                                                                                                                                                                                                                                                                                               (list
                                                                                                                                                                                                                                                                                                (shen/shen\.lazyderef X V3704)
                                                                                                                                                                                                                                                                                                ':
                                                                                                                                                                                                                                                                                                (shen/shen\.lazyderef A V3704))
                                                                                                                                                                                                                                                                                               (list
                                                                                                                                                                                                                                                                                                (shen/shen\.lazyderef Y V3704)
                                                                                                                                                                                                                                                                                                ':
                                                                                                                                                                                                                                                                                                (shen/shen\.lazyderef B V3704)))
                                                                                                                                                                                                                                                                                              (shen/shen\.lazyderef Hyp V3704))
                                                                                                                                                                                                                                                                                             V3704 V3705)))
                                                                                                                                                                                                                                                                       (shen/do
                                                                                                                                                                                                                                                                        (shen/shen\.unbindv V3482 V3704)
                                                                                                                                                                                                                                                                        Result)))
                                                                                                                                                                                                                                                            'false)))
                                                                                                                                                                                                                                                (shen/if
                                                                                                                                                                                                                                                 (shen/shen\.pvar\? V3481)
                                                                                                                                                                                                                                                 (shen/do
                                                                                                                                                                                                                                                  (shen/shen\.bindv V3481 nil V3704)
                                                                                                                                                                                                                                                  (shen/let Result
                                                                                                                                                                                                                                                            (shen/let V3483
                                                                                                                                                                                                                                                                      (shen/shen\.lazyderef
                                                                                                                                                                                                                                                                       (nthcdr 1 V3471)
                                                                                                                                                                                                                                                                       V3704)
                                                                                                                                                                                                                                                                      (shen/if
                                                                                                                                                                                                                                                                       (shen/internal/predicate->shen
                                                                                                                                                                                                                                                                        (null V3483))
                                                                                                                                                                                                                                                                       (shen/let Hyp
                                                                                                                                                                                                                                                                                 (nthcdr 1 V3462)
                                                                                                                                                                                                                                                                                 (shen/do
                                                                                                                                                                                                                                                                                  (shen/shen\.incinfs)
                                                                                                                                                                                                                                                                                  (shen/bind V3703
                                                                                                                                                                                                                                                                                             (append
                                                                                                                                                                                                                                                                                              (list
                                                                                                                                                                                                                                                                                               (list
                                                                                                                                                                                                                                                                                                (shen/shen\.lazyderef X V3704)
                                                                                                                                                                                                                                                                                                ':
                                                                                                                                                                                                                                                                                                (shen/shen\.lazyderef A V3704))
                                                                                                                                                                                                                                                                                               (list
                                                                                                                                                                                                                                                                                                (shen/shen\.lazyderef Y V3704)
                                                                                                                                                                                                                                                                                                ':
                                                                                                                                                                                                                                                                                                (shen/shen\.lazyderef B V3704)))
                                                                                                                                                                                                                                                                                              (shen/shen\.lazyderef Hyp V3704))
                                                                                                                                                                                                                                                                                             V3704 V3705)))
                                                                                                                                                                                                                                                                       (shen/if
                                                                                                                                                                                                                                                                        (shen/shen\.pvar\? V3483)
                                                                                                                                                                                                                                                                        (shen/do
                                                                                                                                                                                                                                                                         (shen/shen\.bindv V3483 nil V3704)
                                                                                                                                                                                                                                                                         (shen/let Result
                                                                                                                                                                                                                                                                                   (shen/let Hyp
                                                                                                                                                                                                                                                                                             (nthcdr 1 V3462)
                                                                                                                                                                                                                                                                                             (shen/do
                                                                                                                                                                                                                                                                                              (shen/shen\.incinfs)
                                                                                                                                                                                                                                                                                              (shen/bind V3703
                                                                                                                                                                                                                                                                                                         (append
                                                                                                                                                                                                                                                                                                          (list
                                                                                                                                                                                                                                                                                                           (list
                                                                                                                                                                                                                                                                                                            (shen/shen\.lazyderef X V3704)
                                                                                                                                                                                                                                                                                                            ':
                                                                                                                                                                                                                                                                                                            (shen/shen\.lazyderef A V3704))
                                                                                                                                                                                                                                                                                                           (list
                                                                                                                                                                                                                                                                                                            (shen/shen\.lazyderef Y V3704)
                                                                                                                                                                                                                                                                                                            ':
                                                                                                                                                                                                                                                                                                            (shen/shen\.lazyderef B V3704)))
                                                                                                                                                                                                                                                                                                          (shen/shen\.lazyderef Hyp V3704))
                                                                                                                                                                                                                                                                                                         V3704 V3705)))
                                                                                                                                                                                                                                                                                   (shen/do
                                                                                                                                                                                                                                                                                    (shen/shen\.unbindv V3483 V3704)
                                                                                                                                                                                                                                                                                    Result)))
                                                                                                                                                                                                                                                                        'false)))
                                                                                                                                                                                                                                                            (shen/do
                                                                                                                                                                                                                                                             (shen/shen\.unbindv V3481 V3704)
                                                                                                                                                                                                                                                             Result)))
                                                                                                                                                                                                                                                 'false))))
                                                                                                                                                                                                                           (shen/if
                                                                                                                                                                                                                            (shen/shen\.pvar\? V3480)
                                                                                                                                                                                                                            (shen/let B
                                                                                                                                                                                                                                      (shen/shen\.newpv V3704)
                                                                                                                                                                                                                                      (shen/do
                                                                                                                                                                                                                                       (shen/shen\.bindv V3480
                                                                                                                                                                                                                                                         (list B)
                                                                                                                                                                                                                                                         V3704)
                                                                                                                                                                                                                                       (shen/let Result
                                                                                                                                                                                                                                                 (shen/let V3484
                                                                                                                                                                                                                                                           (shen/shen\.lazyderef
                                                                                                                                                                                                                                                            (nthcdr 1 V3471)
                                                                                                                                                                                                                                                            V3704)
                                                                                                                                                                                                                                                           (shen/if
                                                                                                                                                                                                                                                            (shen/internal/predicate->shen
                                                                                                                                                                                                                                                             (null V3484))
                                                                                                                                                                                                                                                            (shen/let Hyp
                                                                                                                                                                                                                                                                      (nthcdr 1 V3462)
                                                                                                                                                                                                                                                                      (shen/do
                                                                                                                                                                                                                                                                       (shen/shen\.incinfs)
                                                                                                                                                                                                                                                                       (shen/bind V3703
                                                                                                                                                                                                                                                                                  (append
                                                                                                                                                                                                                                                                                   (list
                                                                                                                                                                                                                                                                                    (list
                                                                                                                                                                                                                                                                                     (shen/shen\.lazyderef X V3704)
                                                                                                                                                                                                                                                                                     ':
                                                                                                                                                                                                                                                                                     (shen/shen\.lazyderef A V3704))
                                                                                                                                                                                                                                                                                    (list
                                                                                                                                                                                                                                                                                     (shen/shen\.lazyderef Y V3704)
                                                                                                                                                                                                                                                                                     ':
                                                                                                                                                                                                                                                                                     (shen/shen\.lazyderef B V3704)))
                                                                                                                                                                                                                                                                                   (shen/shen\.lazyderef Hyp V3704))
                                                                                                                                                                                                                                                                                  V3704 V3705)))
                                                                                                                                                                                                                                                            (shen/if
                                                                                                                                                                                                                                                             (shen/shen\.pvar\? V3484)
                                                                                                                                                                                                                                                             (shen/do
                                                                                                                                                                                                                                                              (shen/shen\.bindv V3484 nil V3704)
                                                                                                                                                                                                                                                              (shen/let Result
                                                                                                                                                                                                                                                                        (shen/let Hyp
                                                                                                                                                                                                                                                                                  (nthcdr 1 V3462)
                                                                                                                                                                                                                                                                                  (shen/do
                                                                                                                                                                                                                                                                                   (shen/shen\.incinfs)
                                                                                                                                                                                                                                                                                   (shen/bind V3703
                                                                                                                                                                                                                                                                                              (append
                                                                                                                                                                                                                                                                                               (list
                                                                                                                                                                                                                                                                                                (list
                                                                                                                                                                                                                                                                                                 (shen/shen\.lazyderef X V3704)
                                                                                                                                                                                                                                                                                                 ':
                                                                                                                                                                                                                                                                                                 (shen/shen\.lazyderef A V3704))
                                                                                                                                                                                                                                                                                                (list
                                                                                                                                                                                                                                                                                                 (shen/shen\.lazyderef Y V3704)
                                                                                                                                                                                                                                                                                                 ':
                                                                                                                                                                                                                                                                                                 (shen/shen\.lazyderef B V3704)))
                                                                                                                                                                                                                                                                                               (shen/shen\.lazyderef Hyp V3704))
                                                                                                                                                                                                                                                                                              V3704 V3705)))
                                                                                                                                                                                                                                                                        (shen/do
                                                                                                                                                                                                                                                                         (shen/shen\.unbindv V3484 V3704)
                                                                                                                                                                                                                                                                         Result)))
                                                                                                                                                                                                                                                             'false)))
                                                                                                                                                                                                                                                 (shen/do
                                                                                                                                                                                                                                                  (shen/shen\.unbindv V3480 V3704)
                                                                                                                                                                                                                                                  Result))))
                                                                                                                                                                                                                            'false)))
                                                                                                                                                                                                                (shen/do
                                                                                                                                                                                                                 (shen/shen\.unbindv V3474 V3704)
                                                                                                                                                                                                                 Result)))
                                                                                                                                                                                                     'false)))
                                                                                                                                                                                         (shen/if
                                                                                                                                                                                          (shen/shen\.pvar\? V3473)
                                                                                                                                                                                          (shen/let B
                                                                                                                                                                                                    (shen/shen\.newpv V3704)
                                                                                                                                                                                                    (shen/do
                                                                                                                                                                                                     (shen/shen\.bindv V3473
                                                                                                                                                                                                                       (list '* B)
                                                                                                                                                                                                                       V3704)
                                                                                                                                                                                                     (shen/let Result
                                                                                                                                                                                                               (shen/let V3485
                                                                                                                                                                                                                         (shen/shen\.lazyderef
                                                                                                                                                                                                                          (nthcdr 1 V3471)
                                                                                                                                                                                                                          V3704)
                                                                                                                                                                                                                         (shen/if
                                                                                                                                                                                                                          (shen/internal/predicate->shen
                                                                                                                                                                                                                           (null V3485))
                                                                                                                                                                                                                          (shen/let Hyp
                                                                                                                                                                                                                                    (nthcdr 1 V3462)
                                                                                                                                                                                                                                    (shen/do
                                                                                                                                                                                                                                     (shen/shen\.incinfs)
                                                                                                                                                                                                                                     (shen/bind V3703
                                                                                                                                                                                                                                                (append
                                                                                                                                                                                                                                                 (list
                                                                                                                                                                                                                                                  (list
                                                                                                                                                                                                                                                   (shen/shen\.lazyderef X V3704)
                                                                                                                                                                                                                                                   ':
                                                                                                                                                                                                                                                   (shen/shen\.lazyderef A V3704))
                                                                                                                                                                                                                                                  (list
                                                                                                                                                                                                                                                   (shen/shen\.lazyderef Y V3704)
                                                                                                                                                                                                                                                   ':
                                                                                                                                                                                                                                                   (shen/shen\.lazyderef B V3704)))
                                                                                                                                                                                                                                                 (shen/shen\.lazyderef Hyp V3704))
                                                                                                                                                                                                                                                V3704 V3705)))
                                                                                                                                                                                                                          (shen/if
                                                                                                                                                                                                                           (shen/shen\.pvar\? V3485)
                                                                                                                                                                                                                           (shen/do
                                                                                                                                                                                                                            (shen/shen\.bindv V3485 nil V3704)
                                                                                                                                                                                                                            (shen/let Result
                                                                                                                                                                                                                                      (shen/let Hyp
                                                                                                                                                                                                                                                (nthcdr 1 V3462)
                                                                                                                                                                                                                                                (shen/do
                                                                                                                                                                                                                                                 (shen/shen\.incinfs)
                                                                                                                                                                                                                                                 (shen/bind V3703
                                                                                                                                                                                                                                                            (append
                                                                                                                                                                                                                                                             (list
                                                                                                                                                                                                                                                              (list
                                                                                                                                                                                                                                                               (shen/shen\.lazyderef X V3704)
                                                                                                                                                                                                                                                               ':
                                                                                                                                                                                                                                                               (shen/shen\.lazyderef A V3704))
                                                                                                                                                                                                                                                              (list
                                                                                                                                                                                                                                                               (shen/shen\.lazyderef Y V3704)
                                                                                                                                                                                                                                                               ':
                                                                                                                                                                                                                                                               (shen/shen\.lazyderef B V3704)))
                                                                                                                                                                                                                                                             (shen/shen\.lazyderef Hyp V3704))
                                                                                                                                                                                                                                                            V3704 V3705)))
                                                                                                                                                                                                                                      (shen/do
                                                                                                                                                                                                                                       (shen/shen\.unbindv V3485 V3704)
                                                                                                                                                                                                                                       Result)))
                                                                                                                                                                                                                           'false)))
                                                                                                                                                                                                               (shen/do
                                                                                                                                                                                                                (shen/shen\.unbindv V3473 V3704)
                                                                                                                                                                                                                Result))))
                                                                                                                                                                                          'false))))
                                                                                                                                                                    (shen/if
                                                                                                                                                                     (shen/shen\.pvar\? V3472)
                                                                                                                                                                     (shen/let A
                                                                                                                                                                               (shen/shen\.newpv V3704)
                                                                                                                                                                               (shen/let B
                                                                                                                                                                                         (shen/shen\.newpv V3704)
                                                                                                                                                                                         (shen/do
                                                                                                                                                                                          (shen/shen\.bindv V3472
                                                                                                                                                                                                            (list A '* B)
                                                                                                                                                                                                            V3704)
                                                                                                                                                                                          (shen/let Result
                                                                                                                                                                                                    (shen/let V3486
                                                                                                                                                                                                              (shen/shen\.lazyderef
                                                                                                                                                                                                               (nthcdr 1 V3471)
                                                                                                                                                                                                               V3704)
                                                                                                                                                                                                              (shen/if
                                                                                                                                                                                                               (shen/internal/predicate->shen
                                                                                                                                                                                                                (null V3486))
                                                                                                                                                                                                               (shen/let Hyp
                                                                                                                                                                                                                         (nthcdr 1 V3462)
                                                                                                                                                                                                                         (shen/do
                                                                                                                                                                                                                          (shen/shen\.incinfs)
                                                                                                                                                                                                                          (shen/bind V3703
                                                                                                                                                                                                                                     (append
                                                                                                                                                                                                                                      (list
                                                                                                                                                                                                                                       (list
                                                                                                                                                                                                                                        (shen/shen\.lazyderef X V3704)
                                                                                                                                                                                                                                        ':
                                                                                                                                                                                                                                        (shen/shen\.lazyderef A V3704))
                                                                                                                                                                                                                                       (list
                                                                                                                                                                                                                                        (shen/shen\.lazyderef Y V3704)
                                                                                                                                                                                                                                        ':
                                                                                                                                                                                                                                        (shen/shen\.lazyderef B V3704)))
                                                                                                                                                                                                                                      (shen/shen\.lazyderef Hyp V3704))
                                                                                                                                                                                                                                     V3704 V3705)))
                                                                                                                                                                                                               (shen/if
                                                                                                                                                                                                                (shen/shen\.pvar\? V3486)
                                                                                                                                                                                                                (shen/do
                                                                                                                                                                                                                 (shen/shen\.bindv V3486 nil V3704)
                                                                                                                                                                                                                 (shen/let Result
                                                                                                                                                                                                                           (shen/let Hyp
                                                                                                                                                                                                                                     (nthcdr 1 V3462)
                                                                                                                                                                                                                                     (shen/do
                                                                                                                                                                                                                                      (shen/shen\.incinfs)
                                                                                                                                                                                                                                      (shen/bind V3703
                                                                                                                                                                                                                                                 (append
                                                                                                                                                                                                                                                  (list
                                                                                                                                                                                                                                                   (list
                                                                                                                                                                                                                                                    (shen/shen\.lazyderef X V3704)
                                                                                                                                                                                                                                                    ':
                                                                                                                                                                                                                                                    (shen/shen\.lazyderef A V3704))
                                                                                                                                                                                                                                                   (list
                                                                                                                                                                                                                                                    (shen/shen\.lazyderef Y V3704)
                                                                                                                                                                                                                                                    ':
                                                                                                                                                                                                                                                    (shen/shen\.lazyderef B V3704)))
                                                                                                                                                                                                                                                  (shen/shen\.lazyderef Hyp V3704))
                                                                                                                                                                                                                                                 V3704 V3705)))
                                                                                                                                                                                                                           (shen/do
                                                                                                                                                                                                                            (shen/shen\.unbindv V3486 V3704)
                                                                                                                                                                                                                            Result)))
                                                                                                                                                                                                                'false)))
                                                                                                                                                                                                    (shen/do
                                                                                                                                                                                                     (shen/shen\.unbindv V3472 V3704)
                                                                                                                                                                                                     Result)))))
                                                                                                                                                                     'false)))
                                                                                                                                                         'false))
                                                                                                                                              'false))
                                                                                                                                   'false))
                                                                                                                        'false)))
                                                                                                   'false)))
                                                                              'false))
                                                                   'false))
                                                        'false))
                                             'false))
                                  'false))
                       (shen/if
                        (shen/= Case 'false)
                        (shen/let Case
                                  (shen/let V3487
                                            (shen/shen\.lazyderef V3702 V3704)
                                            (shen/if
                                             (shen/cons\? V3487)
                                             (shen/let V3488
                                                       (shen/shen\.lazyderef
                                                        (shen/hd V3487)
                                                        V3704)
                                                       (shen/if
                                                        (shen/cons\? V3488)
                                                        (shen/let V3489
                                                                  (shen/shen\.lazyderef
                                                                   (shen/hd V3488)
                                                                   V3704)
                                                                  (shen/if
                                                                   (shen/cons\? V3489)
                                                                   (shen/let V3490
                                                                             (shen/shen\.lazyderef
                                                                              (shen/hd V3489)
                                                                              V3704)
                                                                             (shen/if
                                                                              (shen/= '@v V3490)
                                                                              (shen/let V3491
                                                                                        (shen/shen\.lazyderef
                                                                                         (nthcdr 1 V3489)
                                                                                         V3704)
                                                                                        (shen/if
                                                                                         (shen/cons\? V3491)
                                                                                         (shen/let X
                                                                                                   (shen/hd V3491)
                                                                                                   (shen/let V3492
                                                                                                             (shen/shen\.lazyderef
                                                                                                              (nthcdr 1 V3491)
                                                                                                              V3704)
                                                                                                             (shen/if
                                                                                                              (shen/cons\? V3492)
                                                                                                              (shen/let Y
                                                                                                                        (shen/hd V3492)
                                                                                                                        (shen/let V3493
                                                                                                                                  (shen/shen\.lazyderef
                                                                                                                                   (nthcdr 1 V3492)
                                                                                                                                   V3704)
                                                                                                                                  (shen/if
                                                                                                                                   (shen/internal/predicate->shen
                                                                                                                                    (null V3493))
                                                                                                                                   (shen/let V3494
                                                                                                                                             (shen/shen\.lazyderef
                                                                                                                                              (nthcdr 1 V3488)
                                                                                                                                              V3704)
                                                                                                                                             (shen/if
                                                                                                                                              (shen/cons\? V3494)
                                                                                                                                              (shen/let V3495
                                                                                                                                                        (shen/shen\.lazyderef
                                                                                                                                                         (shen/hd V3494)
                                                                                                                                                         V3704)
                                                                                                                                                        (shen/if
                                                                                                                                                         (shen/= ': V3495)
                                                                                                                                                         (shen/let V3496
                                                                                                                                                                   (shen/shen\.lazyderef
                                                                                                                                                                    (nthcdr 1 V3494)
                                                                                                                                                                    V3704)
                                                                                                                                                                   (shen/if
                                                                                                                                                                    (shen/cons\? V3496)
                                                                                                                                                                    (shen/let V3497
                                                                                                                                                                              (shen/shen\.lazyderef
                                                                                                                                                                               (shen/hd V3496)
                                                                                                                                                                               V3704)
                                                                                                                                                                              (shen/if
                                                                                                                                                                               (shen/cons\? V3497)
                                                                                                                                                                               (shen/let V3498
                                                                                                                                                                                         (shen/shen\.lazyderef
                                                                                                                                                                                          (shen/hd V3497)
                                                                                                                                                                                          V3704)
                                                                                                                                                                                         (shen/if
                                                                                                                                                                                          (shen/= 'vector V3498)
                                                                                                                                                                                          (shen/let V3499
                                                                                                                                                                                                    (shen/shen\.lazyderef
                                                                                                                                                                                                     (nthcdr 1 V3497)
                                                                                                                                                                                                     V3704)
                                                                                                                                                                                                    (shen/if
                                                                                                                                                                                                     (shen/cons\? V3499)
                                                                                                                                                                                                     (shen/let A
                                                                                                                                                                                                               (shen/hd V3499)
                                                                                                                                                                                                               (shen/let V3500
                                                                                                                                                                                                                         (shen/shen\.lazyderef
                                                                                                                                                                                                                          (nthcdr 1 V3499)
                                                                                                                                                                                                                          V3704)
                                                                                                                                                                                                                         (shen/if
                                                                                                                                                                                                                          (shen/internal/predicate->shen
                                                                                                                                                                                                                           (null V3500))
                                                                                                                                                                                                                          (shen/let V3501
                                                                                                                                                                                                                                    (shen/shen\.lazyderef
                                                                                                                                                                                                                                     (nthcdr 1 V3496)
                                                                                                                                                                                                                                     V3704)
                                                                                                                                                                                                                                    (shen/if
                                                                                                                                                                                                                                     (shen/internal/predicate->shen
                                                                                                                                                                                                                                      (null V3501))
                                                                                                                                                                                                                                     (shen/let Hyp
                                                                                                                                                                                                                                               (nthcdr 1 V3487)
                                                                                                                                                                                                                                               (shen/do
                                                                                                                                                                                                                                                (shen/shen\.incinfs)
                                                                                                                                                                                                                                                (shen/bind V3703
                                                                                                                                                                                                                                                           (append
                                                                                                                                                                                                                                                            (list
                                                                                                                                                                                                                                                             (list
                                                                                                                                                                                                                                                              (shen/shen\.lazyderef X V3704)
                                                                                                                                                                                                                                                              ':
                                                                                                                                                                                                                                                              (shen/shen\.lazyderef A V3704))
                                                                                                                                                                                                                                                             (list
                                                                                                                                                                                                                                                              (shen/shen\.lazyderef Y V3704)
                                                                                                                                                                                                                                                              ':
                                                                                                                                                                                                                                                              (list 'vector
                                                                                                                                                                                                                                                                    (shen/shen\.lazyderef A V3704))))
                                                                                                                                                                                                                                                            (shen/shen\.lazyderef Hyp V3704))
                                                                                                                                                                                                                                                           V3704 V3705)))
                                                                                                                                                                                                                                     (shen/if
                                                                                                                                                                                                                                      (shen/shen\.pvar\? V3501)
                                                                                                                                                                                                                                      (shen/do
                                                                                                                                                                                                                                       (shen/shen\.bindv V3501 nil V3704)
                                                                                                                                                                                                                                       (shen/let Result
                                                                                                                                                                                                                                                 (shen/let Hyp
                                                                                                                                                                                                                                                           (nthcdr 1 V3487)
                                                                                                                                                                                                                                                           (shen/do
                                                                                                                                                                                                                                                            (shen/shen\.incinfs)
                                                                                                                                                                                                                                                            (shen/bind V3703
                                                                                                                                                                                                                                                                       (append
                                                                                                                                                                                                                                                                        (list
                                                                                                                                                                                                                                                                         (list
                                                                                                                                                                                                                                                                          (shen/shen\.lazyderef X V3704)
                                                                                                                                                                                                                                                                          ':
                                                                                                                                                                                                                                                                          (shen/shen\.lazyderef A V3704))
                                                                                                                                                                                                                                                                         (list
                                                                                                                                                                                                                                                                          (shen/shen\.lazyderef Y V3704)
                                                                                                                                                                                                                                                                          ':
                                                                                                                                                                                                                                                                          (list 'vector
                                                                                                                                                                                                                                                                                (shen/shen\.lazyderef A V3704))))
                                                                                                                                                                                                                                                                        (shen/shen\.lazyderef Hyp V3704))
                                                                                                                                                                                                                                                                       V3704 V3705)))
                                                                                                                                                                                                                                                 (shen/do
                                                                                                                                                                                                                                                  (shen/shen\.unbindv V3501 V3704)
                                                                                                                                                                                                                                                  Result)))
                                                                                                                                                                                                                                      'false)))
                                                                                                                                                                                                                          (shen/if
                                                                                                                                                                                                                           (shen/shen\.pvar\? V3500)
                                                                                                                                                                                                                           (shen/do
                                                                                                                                                                                                                            (shen/shen\.bindv V3500 nil V3704)
                                                                                                                                                                                                                            (shen/let Result
                                                                                                                                                                                                                                      (shen/let V3502
                                                                                                                                                                                                                                                (shen/shen\.lazyderef
                                                                                                                                                                                                                                                 (nthcdr 1 V3496)
                                                                                                                                                                                                                                                 V3704)
                                                                                                                                                                                                                                                (shen/if
                                                                                                                                                                                                                                                 (shen/internal/predicate->shen
                                                                                                                                                                                                                                                  (null V3502))
                                                                                                                                                                                                                                                 (shen/let Hyp
                                                                                                                                                                                                                                                           (nthcdr 1 V3487)
                                                                                                                                                                                                                                                           (shen/do
                                                                                                                                                                                                                                                            (shen/shen\.incinfs)
                                                                                                                                                                                                                                                            (shen/bind V3703
                                                                                                                                                                                                                                                                       (append
                                                                                                                                                                                                                                                                        (list
                                                                                                                                                                                                                                                                         (list
                                                                                                                                                                                                                                                                          (shen/shen\.lazyderef X V3704)
                                                                                                                                                                                                                                                                          ':
                                                                                                                                                                                                                                                                          (shen/shen\.lazyderef A V3704))
                                                                                                                                                                                                                                                                         (list
                                                                                                                                                                                                                                                                          (shen/shen\.lazyderef Y V3704)
                                                                                                                                                                                                                                                                          ':
                                                                                                                                                                                                                                                                          (list 'vector
                                                                                                                                                                                                                                                                                (shen/shen\.lazyderef A V3704))))
                                                                                                                                                                                                                                                                        (shen/shen\.lazyderef Hyp V3704))
                                                                                                                                                                                                                                                                       V3704 V3705)))
                                                                                                                                                                                                                                                 (shen/if
                                                                                                                                                                                                                                                  (shen/shen\.pvar\? V3502)
                                                                                                                                                                                                                                                  (shen/do
                                                                                                                                                                                                                                                   (shen/shen\.bindv V3502 nil V3704)
                                                                                                                                                                                                                                                   (shen/let Result
                                                                                                                                                                                                                                                             (shen/let Hyp
                                                                                                                                                                                                                                                                       (nthcdr 1 V3487)
                                                                                                                                                                                                                                                                       (shen/do
                                                                                                                                                                                                                                                                        (shen/shen\.incinfs)
                                                                                                                                                                                                                                                                        (shen/bind V3703
                                                                                                                                                                                                                                                                                   (append
                                                                                                                                                                                                                                                                                    (list
                                                                                                                                                                                                                                                                                     (list
                                                                                                                                                                                                                                                                                      (shen/shen\.lazyderef X V3704)
                                                                                                                                                                                                                                                                                      ':
                                                                                                                                                                                                                                                                                      (shen/shen\.lazyderef A V3704))
                                                                                                                                                                                                                                                                                     (list
                                                                                                                                                                                                                                                                                      (shen/shen\.lazyderef Y V3704)
                                                                                                                                                                                                                                                                                      ':
                                                                                                                                                                                                                                                                                      (list 'vector
                                                                                                                                                                                                                                                                                            (shen/shen\.lazyderef A V3704))))
                                                                                                                                                                                                                                                                                    (shen/shen\.lazyderef Hyp V3704))
                                                                                                                                                                                                                                                                                   V3704 V3705)))
                                                                                                                                                                                                                                                             (shen/do
                                                                                                                                                                                                                                                              (shen/shen\.unbindv V3502 V3704)
                                                                                                                                                                                                                                                              Result)))
                                                                                                                                                                                                                                                  'false)))
                                                                                                                                                                                                                                      (shen/do
                                                                                                                                                                                                                                       (shen/shen\.unbindv V3500 V3704)
                                                                                                                                                                                                                                       Result)))
                                                                                                                                                                                                                           'false))))
                                                                                                                                                                                                     (shen/if
                                                                                                                                                                                                      (shen/shen\.pvar\? V3499)
                                                                                                                                                                                                      (shen/let A
                                                                                                                                                                                                                (shen/shen\.newpv V3704)
                                                                                                                                                                                                                (shen/do
                                                                                                                                                                                                                 (shen/shen\.bindv V3499
                                                                                                                                                                                                                                   (list A)
                                                                                                                                                                                                                                   V3704)
                                                                                                                                                                                                                 (shen/let Result
                                                                                                                                                                                                                           (shen/let V3503
                                                                                                                                                                                                                                     (shen/shen\.lazyderef
                                                                                                                                                                                                                                      (nthcdr 1 V3496)
                                                                                                                                                                                                                                      V3704)
                                                                                                                                                                                                                                     (shen/if
                                                                                                                                                                                                                                      (shen/internal/predicate->shen
                                                                                                                                                                                                                                       (null V3503))
                                                                                                                                                                                                                                      (shen/let Hyp
                                                                                                                                                                                                                                                (nthcdr 1 V3487)
                                                                                                                                                                                                                                                (shen/do
                                                                                                                                                                                                                                                 (shen/shen\.incinfs)
                                                                                                                                                                                                                                                 (shen/bind V3703
                                                                                                                                                                                                                                                            (append
                                                                                                                                                                                                                                                             (list
                                                                                                                                                                                                                                                              (list
                                                                                                                                                                                                                                                               (shen/shen\.lazyderef X V3704)
                                                                                                                                                                                                                                                               ':
                                                                                                                                                                                                                                                               (shen/shen\.lazyderef A V3704))
                                                                                                                                                                                                                                                              (list
                                                                                                                                                                                                                                                               (shen/shen\.lazyderef Y V3704)
                                                                                                                                                                                                                                                               ':
                                                                                                                                                                                                                                                               (list 'vector
                                                                                                                                                                                                                                                                     (shen/shen\.lazyderef A V3704))))
                                                                                                                                                                                                                                                             (shen/shen\.lazyderef Hyp V3704))
                                                                                                                                                                                                                                                            V3704 V3705)))
                                                                                                                                                                                                                                      (shen/if
                                                                                                                                                                                                                                       (shen/shen\.pvar\? V3503)
                                                                                                                                                                                                                                       (shen/do
                                                                                                                                                                                                                                        (shen/shen\.bindv V3503 nil V3704)
                                                                                                                                                                                                                                        (shen/let Result
                                                                                                                                                                                                                                                  (shen/let Hyp
                                                                                                                                                                                                                                                            (nthcdr 1 V3487)
                                                                                                                                                                                                                                                            (shen/do
                                                                                                                                                                                                                                                             (shen/shen\.incinfs)
                                                                                                                                                                                                                                                             (shen/bind V3703
                                                                                                                                                                                                                                                                        (append
                                                                                                                                                                                                                                                                         (list
                                                                                                                                                                                                                                                                          (list
                                                                                                                                                                                                                                                                           (shen/shen\.lazyderef X V3704)
                                                                                                                                                                                                                                                                           ':
                                                                                                                                                                                                                                                                           (shen/shen\.lazyderef A V3704))
                                                                                                                                                                                                                                                                          (list
                                                                                                                                                                                                                                                                           (shen/shen\.lazyderef Y V3704)
                                                                                                                                                                                                                                                                           ':
                                                                                                                                                                                                                                                                           (list 'vector
                                                                                                                                                                                                                                                                                 (shen/shen\.lazyderef A V3704))))
                                                                                                                                                                                                                                                                         (shen/shen\.lazyderef Hyp V3704))
                                                                                                                                                                                                                                                                        V3704 V3705)))
                                                                                                                                                                                                                                                  (shen/do
                                                                                                                                                                                                                                                   (shen/shen\.unbindv V3503 V3704)
                                                                                                                                                                                                                                                   Result)))
                                                                                                                                                                                                                                       'false)))
                                                                                                                                                                                                                           (shen/do
                                                                                                                                                                                                                            (shen/shen\.unbindv V3499 V3704)
                                                                                                                                                                                                                            Result))))
                                                                                                                                                                                                      'false)))
                                                                                                                                                                                          (shen/if
                                                                                                                                                                                           (shen/shen\.pvar\? V3498)
                                                                                                                                                                                           (shen/do
                                                                                                                                                                                            (shen/shen\.bindv V3498 'vector V3704)
                                                                                                                                                                                            (shen/let Result
                                                                                                                                                                                                      (shen/let V3504
                                                                                                                                                                                                                (shen/shen\.lazyderef
                                                                                                                                                                                                                 (nthcdr 1 V3497)
                                                                                                                                                                                                                 V3704)
                                                                                                                                                                                                                (shen/if
                                                                                                                                                                                                                 (shen/cons\? V3504)
                                                                                                                                                                                                                 (shen/let A
                                                                                                                                                                                                                           (shen/hd V3504)
                                                                                                                                                                                                                           (shen/let V3505
                                                                                                                                                                                                                                     (shen/shen\.lazyderef
                                                                                                                                                                                                                                      (nthcdr 1 V3504)
                                                                                                                                                                                                                                      V3704)
                                                                                                                                                                                                                                     (shen/if
                                                                                                                                                                                                                                      (shen/internal/predicate->shen
                                                                                                                                                                                                                                       (null V3505))
                                                                                                                                                                                                                                      (shen/let V3506
                                                                                                                                                                                                                                                (shen/shen\.lazyderef
                                                                                                                                                                                                                                                 (nthcdr 1 V3496)
                                                                                                                                                                                                                                                 V3704)
                                                                                                                                                                                                                                                (shen/if
                                                                                                                                                                                                                                                 (shen/internal/predicate->shen
                                                                                                                                                                                                                                                  (null V3506))
                                                                                                                                                                                                                                                 (shen/let Hyp
                                                                                                                                                                                                                                                           (nthcdr 1 V3487)
                                                                                                                                                                                                                                                           (shen/do
                                                                                                                                                                                                                                                            (shen/shen\.incinfs)
                                                                                                                                                                                                                                                            (shen/bind V3703
                                                                                                                                                                                                                                                                       (append
                                                                                                                                                                                                                                                                        (list
                                                                                                                                                                                                                                                                         (list
                                                                                                                                                                                                                                                                          (shen/shen\.lazyderef X V3704)
                                                                                                                                                                                                                                                                          ':
                                                                                                                                                                                                                                                                          (shen/shen\.lazyderef A V3704))
                                                                                                                                                                                                                                                                         (list
                                                                                                                                                                                                                                                                          (shen/shen\.lazyderef Y V3704)
                                                                                                                                                                                                                                                                          ':
                                                                                                                                                                                                                                                                          (list 'vector
                                                                                                                                                                                                                                                                                (shen/shen\.lazyderef A V3704))))
                                                                                                                                                                                                                                                                        (shen/shen\.lazyderef Hyp V3704))
                                                                                                                                                                                                                                                                       V3704 V3705)))
                                                                                                                                                                                                                                                 (shen/if
                                                                                                                                                                                                                                                  (shen/shen\.pvar\? V3506)
                                                                                                                                                                                                                                                  (shen/do
                                                                                                                                                                                                                                                   (shen/shen\.bindv V3506 nil V3704)
                                                                                                                                                                                                                                                   (shen/let Result
                                                                                                                                                                                                                                                             (shen/let Hyp
                                                                                                                                                                                                                                                                       (nthcdr 1 V3487)
                                                                                                                                                                                                                                                                       (shen/do
                                                                                                                                                                                                                                                                        (shen/shen\.incinfs)
                                                                                                                                                                                                                                                                        (shen/bind V3703
                                                                                                                                                                                                                                                                                   (append
                                                                                                                                                                                                                                                                                    (list
                                                                                                                                                                                                                                                                                     (list
                                                                                                                                                                                                                                                                                      (shen/shen\.lazyderef X V3704)
                                                                                                                                                                                                                                                                                      ':
                                                                                                                                                                                                                                                                                      (shen/shen\.lazyderef A V3704))
                                                                                                                                                                                                                                                                                     (list
                                                                                                                                                                                                                                                                                      (shen/shen\.lazyderef Y V3704)
                                                                                                                                                                                                                                                                                      ':
                                                                                                                                                                                                                                                                                      (list 'vector
                                                                                                                                                                                                                                                                                            (shen/shen\.lazyderef A V3704))))
                                                                                                                                                                                                                                                                                    (shen/shen\.lazyderef Hyp V3704))
                                                                                                                                                                                                                                                                                   V3704 V3705)))
                                                                                                                                                                                                                                                             (shen/do
                                                                                                                                                                                                                                                              (shen/shen\.unbindv V3506 V3704)
                                                                                                                                                                                                                                                              Result)))
                                                                                                                                                                                                                                                  'false)))
                                                                                                                                                                                                                                      (shen/if
                                                                                                                                                                                                                                       (shen/shen\.pvar\? V3505)
                                                                                                                                                                                                                                       (shen/do
                                                                                                                                                                                                                                        (shen/shen\.bindv V3505 nil V3704)
                                                                                                                                                                                                                                        (shen/let Result
                                                                                                                                                                                                                                                  (shen/let V3507
                                                                                                                                                                                                                                                            (shen/shen\.lazyderef
                                                                                                                                                                                                                                                             (nthcdr 1 V3496)
                                                                                                                                                                                                                                                             V3704)
                                                                                                                                                                                                                                                            (shen/if
                                                                                                                                                                                                                                                             (shen/internal/predicate->shen
                                                                                                                                                                                                                                                              (null V3507))
                                                                                                                                                                                                                                                             (shen/let Hyp
                                                                                                                                                                                                                                                                       (nthcdr 1 V3487)
                                                                                                                                                                                                                                                                       (shen/do
                                                                                                                                                                                                                                                                        (shen/shen\.incinfs)
                                                                                                                                                                                                                                                                        (shen/bind V3703
                                                                                                                                                                                                                                                                                   (append
                                                                                                                                                                                                                                                                                    (list
                                                                                                                                                                                                                                                                                     (list
                                                                                                                                                                                                                                                                                      (shen/shen\.lazyderef X V3704)
                                                                                                                                                                                                                                                                                      ':
                                                                                                                                                                                                                                                                                      (shen/shen\.lazyderef A V3704))
                                                                                                                                                                                                                                                                                     (list
                                                                                                                                                                                                                                                                                      (shen/shen\.lazyderef Y V3704)
                                                                                                                                                                                                                                                                                      ':
                                                                                                                                                                                                                                                                                      (list 'vector
                                                                                                                                                                                                                                                                                            (shen/shen\.lazyderef A V3704))))
                                                                                                                                                                                                                                                                                    (shen/shen\.lazyderef Hyp V3704))
                                                                                                                                                                                                                                                                                   V3704 V3705)))
                                                                                                                                                                                                                                                             (shen/if
                                                                                                                                                                                                                                                              (shen/shen\.pvar\? V3507)
                                                                                                                                                                                                                                                              (shen/do
                                                                                                                                                                                                                                                               (shen/shen\.bindv V3507 nil V3704)
                                                                                                                                                                                                                                                               (shen/let Result
                                                                                                                                                                                                                                                                         (shen/let Hyp
                                                                                                                                                                                                                                                                                   (nthcdr 1 V3487)
                                                                                                                                                                                                                                                                                   (shen/do
                                                                                                                                                                                                                                                                                    (shen/shen\.incinfs)
                                                                                                                                                                                                                                                                                    (shen/bind V3703
                                                                                                                                                                                                                                                                                               (append
                                                                                                                                                                                                                                                                                                (list
                                                                                                                                                                                                                                                                                                 (list
                                                                                                                                                                                                                                                                                                  (shen/shen\.lazyderef X V3704)
                                                                                                                                                                                                                                                                                                  ':
                                                                                                                                                                                                                                                                                                  (shen/shen\.lazyderef A V3704))
                                                                                                                                                                                                                                                                                                 (list
                                                                                                                                                                                                                                                                                                  (shen/shen\.lazyderef Y V3704)
                                                                                                                                                                                                                                                                                                  ':
                                                                                                                                                                                                                                                                                                  (list 'vector
                                                                                                                                                                                                                                                                                                        (shen/shen\.lazyderef A V3704))))
                                                                                                                                                                                                                                                                                                (shen/shen\.lazyderef Hyp V3704))
                                                                                                                                                                                                                                                                                               V3704 V3705)))
                                                                                                                                                                                                                                                                         (shen/do
                                                                                                                                                                                                                                                                          (shen/shen\.unbindv V3507 V3704)
                                                                                                                                                                                                                                                                          Result)))
                                                                                                                                                                                                                                                              'false)))
                                                                                                                                                                                                                                                  (shen/do
                                                                                                                                                                                                                                                   (shen/shen\.unbindv V3505 V3704)
                                                                                                                                                                                                                                                   Result)))
                                                                                                                                                                                                                                       'false))))
                                                                                                                                                                                                                 (shen/if
                                                                                                                                                                                                                  (shen/shen\.pvar\? V3504)
                                                                                                                                                                                                                  (shen/let A
                                                                                                                                                                                                                            (shen/shen\.newpv V3704)
                                                                                                                                                                                                                            (shen/do
                                                                                                                                                                                                                             (shen/shen\.bindv V3504
                                                                                                                                                                                                                                               (list A)
                                                                                                                                                                                                                                               V3704)
                                                                                                                                                                                                                             (shen/let Result
                                                                                                                                                                                                                                       (shen/let V3508
                                                                                                                                                                                                                                                 (shen/shen\.lazyderef
                                                                                                                                                                                                                                                  (nthcdr 1 V3496)
                                                                                                                                                                                                                                                  V3704)
                                                                                                                                                                                                                                                 (shen/if
                                                                                                                                                                                                                                                  (shen/internal/predicate->shen
                                                                                                                                                                                                                                                   (null V3508))
                                                                                                                                                                                                                                                  (shen/let Hyp
                                                                                                                                                                                                                                                            (nthcdr 1 V3487)
                                                                                                                                                                                                                                                            (shen/do
                                                                                                                                                                                                                                                             (shen/shen\.incinfs)
                                                                                                                                                                                                                                                             (shen/bind V3703
                                                                                                                                                                                                                                                                        (append
                                                                                                                                                                                                                                                                         (list
                                                                                                                                                                                                                                                                          (list
                                                                                                                                                                                                                                                                           (shen/shen\.lazyderef X V3704)
                                                                                                                                                                                                                                                                           ':
                                                                                                                                                                                                                                                                           (shen/shen\.lazyderef A V3704))
                                                                                                                                                                                                                                                                          (list
                                                                                                                                                                                                                                                                           (shen/shen\.lazyderef Y V3704)
                                                                                                                                                                                                                                                                           ':
                                                                                                                                                                                                                                                                           (list 'vector
                                                                                                                                                                                                                                                                                 (shen/shen\.lazyderef A V3704))))
                                                                                                                                                                                                                                                                         (shen/shen\.lazyderef Hyp V3704))
                                                                                                                                                                                                                                                                        V3704 V3705)))
                                                                                                                                                                                                                                                  (shen/if
                                                                                                                                                                                                                                                   (shen/shen\.pvar\? V3508)
                                                                                                                                                                                                                                                   (shen/do
                                                                                                                                                                                                                                                    (shen/shen\.bindv V3508 nil V3704)
                                                                                                                                                                                                                                                    (shen/let Result
                                                                                                                                                                                                                                                              (shen/let Hyp
                                                                                                                                                                                                                                                                        (nthcdr 1 V3487)
                                                                                                                                                                                                                                                                        (shen/do
                                                                                                                                                                                                                                                                         (shen/shen\.incinfs)
                                                                                                                                                                                                                                                                         (shen/bind V3703
                                                                                                                                                                                                                                                                                    (append
                                                                                                                                                                                                                                                                                     (list
                                                                                                                                                                                                                                                                                      (list
                                                                                                                                                                                                                                                                                       (shen/shen\.lazyderef X V3704)
                                                                                                                                                                                                                                                                                       ':
                                                                                                                                                                                                                                                                                       (shen/shen\.lazyderef A V3704))
                                                                                                                                                                                                                                                                                      (list
                                                                                                                                                                                                                                                                                       (shen/shen\.lazyderef Y V3704)
                                                                                                                                                                                                                                                                                       ':
                                                                                                                                                                                                                                                                                       (list 'vector
                                                                                                                                                                                                                                                                                             (shen/shen\.lazyderef A V3704))))
                                                                                                                                                                                                                                                                                     (shen/shen\.lazyderef Hyp V3704))
                                                                                                                                                                                                                                                                                    V3704 V3705)))
                                                                                                                                                                                                                                                              (shen/do
                                                                                                                                                                                                                                                               (shen/shen\.unbindv V3508 V3704)
                                                                                                                                                                                                                                                               Result)))
                                                                                                                                                                                                                                                   'false)))
                                                                                                                                                                                                                                       (shen/do
                                                                                                                                                                                                                                        (shen/shen\.unbindv V3504 V3704)
                                                                                                                                                                                                                                        Result))))
                                                                                                                                                                                                                  'false)))
                                                                                                                                                                                                      (shen/do
                                                                                                                                                                                                       (shen/shen\.unbindv V3498 V3704)
                                                                                                                                                                                                       Result)))
                                                                                                                                                                                           'false)))
                                                                                                                                                                               (shen/if
                                                                                                                                                                                (shen/shen\.pvar\? V3497)
                                                                                                                                                                                (shen/let A
                                                                                                                                                                                          (shen/shen\.newpv V3704)
                                                                                                                                                                                          (shen/do
                                                                                                                                                                                           (shen/shen\.bindv V3497
                                                                                                                                                                                                             (list 'vector A)
                                                                                                                                                                                                             V3704)
                                                                                                                                                                                           (shen/let Result
                                                                                                                                                                                                     (shen/let V3509
                                                                                                                                                                                                               (shen/shen\.lazyderef
                                                                                                                                                                                                                (nthcdr 1 V3496)
                                                                                                                                                                                                                V3704)
                                                                                                                                                                                                               (shen/if
                                                                                                                                                                                                                (shen/internal/predicate->shen
                                                                                                                                                                                                                 (null V3509))
                                                                                                                                                                                                                (shen/let Hyp
                                                                                                                                                                                                                          (nthcdr 1 V3487)
                                                                                                                                                                                                                          (shen/do
                                                                                                                                                                                                                           (shen/shen\.incinfs)
                                                                                                                                                                                                                           (shen/bind V3703
                                                                                                                                                                                                                                      (append
                                                                                                                                                                                                                                       (list
                                                                                                                                                                                                                                        (list
                                                                                                                                                                                                                                         (shen/shen\.lazyderef X V3704)
                                                                                                                                                                                                                                         ':
                                                                                                                                                                                                                                         (shen/shen\.lazyderef A V3704))
                                                                                                                                                                                                                                        (list
                                                                                                                                                                                                                                         (shen/shen\.lazyderef Y V3704)
                                                                                                                                                                                                                                         ':
                                                                                                                                                                                                                                         (list 'vector
                                                                                                                                                                                                                                               (shen/shen\.lazyderef A V3704))))
                                                                                                                                                                                                                                       (shen/shen\.lazyderef Hyp V3704))
                                                                                                                                                                                                                                      V3704 V3705)))
                                                                                                                                                                                                                (shen/if
                                                                                                                                                                                                                 (shen/shen\.pvar\? V3509)
                                                                                                                                                                                                                 (shen/do
                                                                                                                                                                                                                  (shen/shen\.bindv V3509 nil V3704)
                                                                                                                                                                                                                  (shen/let Result
                                                                                                                                                                                                                            (shen/let Hyp
                                                                                                                                                                                                                                      (nthcdr 1 V3487)
                                                                                                                                                                                                                                      (shen/do
                                                                                                                                                                                                                                       (shen/shen\.incinfs)
                                                                                                                                                                                                                                       (shen/bind V3703
                                                                                                                                                                                                                                                  (append
                                                                                                                                                                                                                                                   (list
                                                                                                                                                                                                                                                    (list
                                                                                                                                                                                                                                                     (shen/shen\.lazyderef X V3704)
                                                                                                                                                                                                                                                     ':
                                                                                                                                                                                                                                                     (shen/shen\.lazyderef A V3704))
                                                                                                                                                                                                                                                    (list
                                                                                                                                                                                                                                                     (shen/shen\.lazyderef Y V3704)
                                                                                                                                                                                                                                                     ':
                                                                                                                                                                                                                                                     (list 'vector
                                                                                                                                                                                                                                                           (shen/shen\.lazyderef A V3704))))
                                                                                                                                                                                                                                                   (shen/shen\.lazyderef Hyp V3704))
                                                                                                                                                                                                                                                  V3704 V3705)))
                                                                                                                                                                                                                            (shen/do
                                                                                                                                                                                                                             (shen/shen\.unbindv V3509 V3704)
                                                                                                                                                                                                                             Result)))
                                                                                                                                                                                                                 'false)))
                                                                                                                                                                                                     (shen/do
                                                                                                                                                                                                      (shen/shen\.unbindv V3497 V3704)
                                                                                                                                                                                                      Result))))
                                                                                                                                                                                'false)))
                                                                                                                                                                    'false))
                                                                                                                                                         'false))
                                                                                                                                              'false))
                                                                                                                                   'false)))
                                                                                                              'false)))
                                                                                         'false))
                                                                              'false))
                                                                   'false))
                                                        'false))
                                             'false))
                                  (shen/if
                                   (shen/= Case 'false)
                                   (shen/let Case
                                             (shen/let V3510
                                                       (shen/shen\.lazyderef V3702 V3704)
                                                       (shen/if
                                                        (shen/cons\? V3510)
                                                        (shen/let V3511
                                                                  (shen/shen\.lazyderef
                                                                   (shen/hd V3510)
                                                                   V3704)
                                                                  (shen/if
                                                                   (shen/cons\? V3511)
                                                                   (shen/let V3512
                                                                             (shen/shen\.lazyderef
                                                                              (shen/hd V3511)
                                                                              V3704)
                                                                             (shen/if
                                                                              (shen/cons\? V3512)
                                                                              (shen/let V3513
                                                                                        (shen/shen\.lazyderef
                                                                                         (shen/hd V3512)
                                                                                         V3704)
                                                                                        (shen/if
                                                                                         (shen/= '@s V3513)
                                                                                         (shen/let V3514
                                                                                                   (shen/shen\.lazyderef
                                                                                                    (nthcdr 1 V3512)
                                                                                                    V3704)
                                                                                                   (shen/if
                                                                                                    (shen/cons\? V3514)
                                                                                                    (shen/let X
                                                                                                              (shen/hd V3514)
                                                                                                              (shen/let V3515
                                                                                                                        (shen/shen\.lazyderef
                                                                                                                         (nthcdr 1 V3514)
                                                                                                                         V3704)
                                                                                                                        (shen/if
                                                                                                                         (shen/cons\? V3515)
                                                                                                                         (shen/let Y
                                                                                                                                   (shen/hd V3515)
                                                                                                                                   (shen/let V3516
                                                                                                                                             (shen/shen\.lazyderef
                                                                                                                                              (nthcdr 1 V3515)
                                                                                                                                              V3704)
                                                                                                                                             (shen/if
                                                                                                                                              (shen/internal/predicate->shen
                                                                                                                                               (null V3516))
                                                                                                                                              (shen/let V3517
                                                                                                                                                        (shen/shen\.lazyderef
                                                                                                                                                         (nthcdr 1 V3511)
                                                                                                                                                         V3704)
                                                                                                                                                        (shen/if
                                                                                                                                                         (shen/cons\? V3517)
                                                                                                                                                         (shen/let V3518
                                                                                                                                                                   (shen/shen\.lazyderef
                                                                                                                                                                    (shen/hd V3517)
                                                                                                                                                                    V3704)
                                                                                                                                                                   (shen/if
                                                                                                                                                                    (shen/= ': V3518)
                                                                                                                                                                    (shen/let V3519
                                                                                                                                                                              (shen/shen\.lazyderef
                                                                                                                                                                               (nthcdr 1 V3517)
                                                                                                                                                                               V3704)
                                                                                                                                                                              (shen/if
                                                                                                                                                                               (shen/cons\? V3519)
                                                                                                                                                                               (shen/let V3520
                                                                                                                                                                                         (shen/shen\.lazyderef
                                                                                                                                                                                          (shen/hd V3519)
                                                                                                                                                                                          V3704)
                                                                                                                                                                                         (shen/if
                                                                                                                                                                                          (shen/= 'string V3520)
                                                                                                                                                                                          (shen/let V3521
                                                                                                                                                                                                    (shen/shen\.lazyderef
                                                                                                                                                                                                     (nthcdr 1 V3519)
                                                                                                                                                                                                     V3704)
                                                                                                                                                                                                    (shen/if
                                                                                                                                                                                                     (shen/internal/predicate->shen
                                                                                                                                                                                                      (null V3521))
                                                                                                                                                                                                     (shen/let Hyp
                                                                                                                                                                                                               (nthcdr 1 V3510)
                                                                                                                                                                                                               (shen/do
                                                                                                                                                                                                                (shen/shen\.incinfs)
                                                                                                                                                                                                                (shen/bind V3703
                                                                                                                                                                                                                           (append
                                                                                                                                                                                                                            (list
                                                                                                                                                                                                                             (list
                                                                                                                                                                                                                              (shen/shen\.lazyderef X V3704)
                                                                                                                                                                                                                              ': 'string)
                                                                                                                                                                                                                             (list
                                                                                                                                                                                                                              (shen/shen\.lazyderef Y V3704)
                                                                                                                                                                                                                              ': 'string))
                                                                                                                                                                                                                            (shen/shen\.lazyderef Hyp V3704))
                                                                                                                                                                                                                           V3704 V3705)))
                                                                                                                                                                                                     (shen/if
                                                                                                                                                                                                      (shen/shen\.pvar\? V3521)
                                                                                                                                                                                                      (shen/do
                                                                                                                                                                                                       (shen/shen\.bindv V3521 nil V3704)
                                                                                                                                                                                                       (shen/let Result
                                                                                                                                                                                                                 (shen/let Hyp
                                                                                                                                                                                                                           (nthcdr 1 V3510)
                                                                                                                                                                                                                           (shen/do
                                                                                                                                                                                                                            (shen/shen\.incinfs)
                                                                                                                                                                                                                            (shen/bind V3703
                                                                                                                                                                                                                                       (append
                                                                                                                                                                                                                                        (list
                                                                                                                                                                                                                                         (list
                                                                                                                                                                                                                                          (shen/shen\.lazyderef X V3704)
                                                                                                                                                                                                                                          ': 'string)
                                                                                                                                                                                                                                         (list
                                                                                                                                                                                                                                          (shen/shen\.lazyderef Y V3704)
                                                                                                                                                                                                                                          ': 'string))
                                                                                                                                                                                                                                        (shen/shen\.lazyderef Hyp V3704))
                                                                                                                                                                                                                                       V3704 V3705)))
                                                                                                                                                                                                                 (shen/do
                                                                                                                                                                                                                  (shen/shen\.unbindv V3521 V3704)
                                                                                                                                                                                                                  Result)))
                                                                                                                                                                                                      'false)))
                                                                                                                                                                                          (shen/if
                                                                                                                                                                                           (shen/shen\.pvar\? V3520)
                                                                                                                                                                                           (shen/do
                                                                                                                                                                                            (shen/shen\.bindv V3520 'string V3704)
                                                                                                                                                                                            (shen/let Result
                                                                                                                                                                                                      (shen/let V3522
                                                                                                                                                                                                                (shen/shen\.lazyderef
                                                                                                                                                                                                                 (nthcdr 1 V3519)
                                                                                                                                                                                                                 V3704)
                                                                                                                                                                                                                (shen/if
                                                                                                                                                                                                                 (shen/internal/predicate->shen
                                                                                                                                                                                                                  (null V3522))
                                                                                                                                                                                                                 (shen/let Hyp
                                                                                                                                                                                                                           (nthcdr 1 V3510)
                                                                                                                                                                                                                           (shen/do
                                                                                                                                                                                                                            (shen/shen\.incinfs)
                                                                                                                                                                                                                            (shen/bind V3703
                                                                                                                                                                                                                                       (append
                                                                                                                                                                                                                                        (list
                                                                                                                                                                                                                                         (list
                                                                                                                                                                                                                                          (shen/shen\.lazyderef X V3704)
                                                                                                                                                                                                                                          ': 'string)
                                                                                                                                                                                                                                         (list
                                                                                                                                                                                                                                          (shen/shen\.lazyderef Y V3704)
                                                                                                                                                                                                                                          ': 'string))
                                                                                                                                                                                                                                        (shen/shen\.lazyderef Hyp V3704))
                                                                                                                                                                                                                                       V3704 V3705)))
                                                                                                                                                                                                                 (shen/if
                                                                                                                                                                                                                  (shen/shen\.pvar\? V3522)
                                                                                                                                                                                                                  (shen/do
                                                                                                                                                                                                                   (shen/shen\.bindv V3522 nil V3704)
                                                                                                                                                                                                                   (shen/let Result
                                                                                                                                                                                                                             (shen/let Hyp
                                                                                                                                                                                                                                       (nthcdr 1 V3510)
                                                                                                                                                                                                                                       (shen/do
                                                                                                                                                                                                                                        (shen/shen\.incinfs)
                                                                                                                                                                                                                                        (shen/bind V3703
                                                                                                                                                                                                                                                   (append
                                                                                                                                                                                                                                                    (list
                                                                                                                                                                                                                                                     (list
                                                                                                                                                                                                                                                      (shen/shen\.lazyderef X V3704)
                                                                                                                                                                                                                                                      ': 'string)
                                                                                                                                                                                                                                                     (list
                                                                                                                                                                                                                                                      (shen/shen\.lazyderef Y V3704)
                                                                                                                                                                                                                                                      ': 'string))
                                                                                                                                                                                                                                                    (shen/shen\.lazyderef Hyp V3704))
                                                                                                                                                                                                                                                   V3704 V3705)))
                                                                                                                                                                                                                             (shen/do
                                                                                                                                                                                                                              (shen/shen\.unbindv V3522 V3704)
                                                                                                                                                                                                                              Result)))
                                                                                                                                                                                                                  'false)))
                                                                                                                                                                                                      (shen/do
                                                                                                                                                                                                       (shen/shen\.unbindv V3520 V3704)
                                                                                                                                                                                                       Result)))
                                                                                                                                                                                           'false)))
                                                                                                                                                                               'false))
                                                                                                                                                                    'false))
                                                                                                                                                         'false))
                                                                                                                                              'false)))
                                                                                                                         'false)))
                                                                                                    'false))
                                                                                         'false))
                                                                              'false))
                                                                   'false))
                                                        'false))
                                             (shen/if
                                              (shen/= Case 'false)
                                              (shen/let V3523
                                                        (shen/shen\.lazyderef V3702 V3704)
                                                        (shen/if
                                                         (shen/cons\? V3523)
                                                         (shen/let X
                                                                   (shen/hd V3523)
                                                                   (shen/let Hyp
                                                                             (nthcdr 1 V3523)
                                                                             (shen/let NewHyps
                                                                                       (shen/shen\.newpv V3704)
                                                                                       (shen/do
                                                                                        (shen/shen\.incinfs)
                                                                                        (shen/bind V3703
                                                                                                   (append
                                                                                                    (list
                                                                                                     (shen/shen\.lazyderef X V3704))
                                                                                                    (shen/shen\.lazyderef NewHyps V3704))
                                                                                                   V3704
                                                                                                   (shen/freeze
                                                                                                    (shen/shen\.t*-hyps Hyp NewHyps V3704 V3705)))))))
                                                         'false))
                                              Case))
                                   Case))
                        Case))
             Case)))
(defun shen/shen\.show
    (V3722 V3723 V3724 V3725)
  (shen/cond
   ((shen/value 'shen\.*spy*)
    (shen/do
     (shen/shen\.line)
     (shen/do
      (shen/shen\.show-p
       (shen/shen\.deref V3722 V3724))
      (shen/do
       (shen/nl 1)
       (shen/do
        (shen/nl 1)
        (shen/do
         (shen/shen\.show-assumptions
          (shen/shen\.deref V3723 V3724)
          1)
         (shen/do
          (shen/shen\.prhush "\n> "
                             (shen/stoutput))
          (shen/do
           (shen/shen\.pause-for-user)
           (shen/thaw V3725)))))))))
   (shen/true
    (shen/thaw V3725))))
(defun shen/shen\.line nil
  (shen/let Infs
            (shen/inferences)
            (shen/shen\.prhush
             (shen/cn "____________________________________________________________ "
                      (shen/shen\.app Infs
                                      (shen/cn " inference"
                                               (shen/shen\.app
                                                (shen/if
                                                 (shen/= 1 Infs)
                                                 "" "s")
                                                " \n?- " 'shen\.a))
                                      'shen\.a))
             (shen/stoutput))))
(defun shen/shen\.show-p
    (V3727)
  (shen/cond
   ((shen/and
     (shen/cons\? V3727)
     (shen/and
      (shen/cons\?
       (nthcdr 1 V3727))
      (shen/and
       (shen/= ':
               (shen/hd
                (nthcdr 1 V3727)))
       (shen/and
        (shen/cons\?
         (nthcdr 2 V3727))
        (shen/internal/predicate->shen
         (null
          (nthcdr 3 V3727)))))))
    (shen/shen\.prhush
     (shen/shen\.app
      (shen/hd V3727)
      (shen/cn " : "
               (shen/shen\.app
                (shen/hd
                 (nthcdr 2 V3727))
                "" 'shen\.r))
      'shen\.r)
     (shen/stoutput)))
   (shen/true
    (shen/shen\.prhush
     (shen/shen\.app V3727 "" 'shen\.r)
     (shen/stoutput)))))
(defun shen/shen\.show-assumptions
    (V3732 V3733)
  (cl-flet
      ((tail-trampoline
        (V3732 V3733)
        (shen/cond
         ((shen/internal/predicate->shen
           (null V3732))
          'shen\.skip)
         ((shen/cons\? V3732)
          (shen/do
           (shen/shen\.prhush
            (shen/shen\.app V3733 ". " 'shen\.a)
            (shen/stoutput))
           (shen/do
            (shen/shen\.show-p
             (shen/hd V3732))
            (shen/do
             (shen/nl 1)
             (vector
              (list
               (nthcdr 1 V3732)
               (1+ V3733)))))))
         (shen/true
          (shen/shen\.f_error 'shen\.show-assumptions)))))
    (let
        ((result
          (funcall #'tail-trampoline V3732 V3733)))
      (while
          (vectorp result)
        (setq result
              (apply #'tail-trampoline
                     (aref result 0))))
      result)))
(defun shen/shen\.pause-for-user nil
  (shen/let Byte
            (shen/read-byte
             (shen/stinput))
            (shen/if
             (shen/= Byte 94)
             (shen/simple-error "input aborted\n")
             (shen/nl 1))))
(defun shen/shen\.typedf\?
    (V3735)
  (shen/cons\?
   (shen/assoc V3735
               (shen/value 'shen\.*signedfuncs*))))
(defun shen/shen\.sigf
    (V3737)
  (shen/concat 'shen\.type-signature-of- V3737))
(defun shen/shen\.placeholder nil
  (shen/gensym '&&))
(defun shen/shen\.base
    (V3742 V3743 V3744 V3745)
  (shen/let Case
            (shen/let V3426
                      (shen/shen\.lazyderef V3743 V3744)
                      (shen/if
                       (shen/= 'number V3426)
                       (shen/do
                        (shen/shen\.incinfs)
                        (shen/fwhen
                         (shen/number\?
                          (shen/shen\.lazyderef V3742 V3744))
                         V3744 V3745))
                       (shen/if
                        (shen/shen\.pvar\? V3426)
                        (shen/do
                         (shen/shen\.bindv V3426 'number V3744)
                         (shen/let Result
                                   (shen/do
                                    (shen/shen\.incinfs)
                                    (shen/fwhen
                                     (shen/number\?
                                      (shen/shen\.lazyderef V3742 V3744))
                                     V3744 V3745))
                                   (shen/do
                                    (shen/shen\.unbindv V3426 V3744)
                                    Result)))
                        'false)))
            (shen/if
             (shen/= Case 'false)
             (shen/let Case
                       (shen/let V3427
                                 (shen/shen\.lazyderef V3743 V3744)
                                 (shen/if
                                  (shen/= 'boolean V3427)
                                  (shen/do
                                   (shen/shen\.incinfs)
                                   (shen/fwhen
                                    (shen/boolean\?
                                     (shen/shen\.lazyderef V3742 V3744))
                                    V3744 V3745))
                                  (shen/if
                                   (shen/shen\.pvar\? V3427)
                                   (shen/do
                                    (shen/shen\.bindv V3427 'boolean V3744)
                                    (shen/let Result
                                              (shen/do
                                               (shen/shen\.incinfs)
                                               (shen/fwhen
                                                (shen/boolean\?
                                                 (shen/shen\.lazyderef V3742 V3744))
                                                V3744 V3745))
                                              (shen/do
                                               (shen/shen\.unbindv V3427 V3744)
                                               Result)))
                                   'false)))
                       (shen/if
                        (shen/= Case 'false)
                        (shen/let Case
                                  (shen/let V3428
                                            (shen/shen\.lazyderef V3743 V3744)
                                            (shen/if
                                             (shen/= 'string V3428)
                                             (shen/do
                                              (shen/shen\.incinfs)
                                              (shen/fwhen
                                               (shen/string\?
                                                (shen/shen\.lazyderef V3742 V3744))
                                               V3744 V3745))
                                             (shen/if
                                              (shen/shen\.pvar\? V3428)
                                              (shen/do
                                               (shen/shen\.bindv V3428 'string V3744)
                                               (shen/let Result
                                                         (shen/do
                                                          (shen/shen\.incinfs)
                                                          (shen/fwhen
                                                           (shen/string\?
                                                            (shen/shen\.lazyderef V3742 V3744))
                                                           V3744 V3745))
                                                         (shen/do
                                                          (shen/shen\.unbindv V3428 V3744)
                                                          Result)))
                                              'false)))
                                  (shen/if
                                   (shen/= Case 'false)
                                   (shen/let Case
                                             (shen/let V3429
                                                       (shen/shen\.lazyderef V3743 V3744)
                                                       (shen/if
                                                        (shen/= 'symbol V3429)
                                                        (shen/do
                                                         (shen/shen\.incinfs)
                                                         (shen/fwhen
                                                          (shen/symbol\?
                                                           (shen/shen\.lazyderef V3742 V3744))
                                                          V3744
                                                          (shen/freeze
                                                           (shen/fwhen
                                                            (shen/not
                                                             (shen/shen\.ue\?
                                                              (shen/shen\.lazyderef V3742 V3744)))
                                                            V3744 V3745))))
                                                        (shen/if
                                                         (shen/shen\.pvar\? V3429)
                                                         (shen/do
                                                          (shen/shen\.bindv V3429 'symbol V3744)
                                                          (shen/let Result
                                                                    (shen/do
                                                                     (shen/shen\.incinfs)
                                                                     (shen/fwhen
                                                                      (shen/symbol\?
                                                                       (shen/shen\.lazyderef V3742 V3744))
                                                                      V3744
                                                                      (shen/freeze
                                                                       (shen/fwhen
                                                                        (shen/not
                                                                         (shen/shen\.ue\?
                                                                          (shen/shen\.lazyderef V3742 V3744)))
                                                                        V3744 V3745))))
                                                                    (shen/do
                                                                     (shen/shen\.unbindv V3429 V3744)
                                                                     Result)))
                                                         'false)))
                                             (shen/if
                                              (shen/= Case 'false)
                                              (shen/let V3430
                                                        (shen/shen\.lazyderef V3742 V3744)
                                                        (shen/if
                                                         (shen/internal/predicate->shen
                                                          (null V3430))
                                                         (shen/let V3431
                                                                   (shen/shen\.lazyderef V3743 V3744)
                                                                   (shen/if
                                                                    (shen/cons\? V3431)
                                                                    (shen/let V3432
                                                                              (shen/shen\.lazyderef
                                                                               (shen/hd V3431)
                                                                               V3744)
                                                                              (shen/if
                                                                               (shen/= 'list V3432)
                                                                               (shen/let V3433
                                                                                         (shen/shen\.lazyderef
                                                                                          (nthcdr 1 V3431)
                                                                                          V3744)
                                                                                         (shen/if
                                                                                          (shen/cons\? V3433)
                                                                                          (shen/let A
                                                                                                    (shen/hd V3433)
                                                                                                    (shen/let V3434
                                                                                                              (shen/shen\.lazyderef
                                                                                                               (nthcdr 1 V3433)
                                                                                                               V3744)
                                                                                                              (shen/if
                                                                                                               (shen/internal/predicate->shen
                                                                                                                (null V3434))
                                                                                                               (shen/do
                                                                                                                (shen/shen\.incinfs)
                                                                                                                (shen/thaw V3745))
                                                                                                               (shen/if
                                                                                                                (shen/shen\.pvar\? V3434)
                                                                                                                (shen/do
                                                                                                                 (shen/shen\.bindv V3434 nil V3744)
                                                                                                                 (shen/let Result
                                                                                                                           (shen/do
                                                                                                                            (shen/shen\.incinfs)
                                                                                                                            (shen/thaw V3745))
                                                                                                                           (shen/do
                                                                                                                            (shen/shen\.unbindv V3434 V3744)
                                                                                                                            Result)))
                                                                                                                'false))))
                                                                                          (shen/if
                                                                                           (shen/shen\.pvar\? V3433)
                                                                                           (shen/let A
                                                                                                     (shen/shen\.newpv V3744)
                                                                                                     (shen/do
                                                                                                      (shen/shen\.bindv V3433
                                                                                                                        (list A)
                                                                                                                        V3744)
                                                                                                      (shen/let Result
                                                                                                                (shen/do
                                                                                                                 (shen/shen\.incinfs)
                                                                                                                 (shen/thaw V3745))
                                                                                                                (shen/do
                                                                                                                 (shen/shen\.unbindv V3433 V3744)
                                                                                                                 Result))))
                                                                                           'false)))
                                                                               (shen/if
                                                                                (shen/shen\.pvar\? V3432)
                                                                                (shen/do
                                                                                 (shen/shen\.bindv V3432 'list V3744)
                                                                                 (shen/let Result
                                                                                           (shen/let V3435
                                                                                                     (shen/shen\.lazyderef
                                                                                                      (nthcdr 1 V3431)
                                                                                                      V3744)
                                                                                                     (shen/if
                                                                                                      (shen/cons\? V3435)
                                                                                                      (shen/let A
                                                                                                                (shen/hd V3435)
                                                                                                                (shen/let V3436
                                                                                                                          (shen/shen\.lazyderef
                                                                                                                           (nthcdr 1 V3435)
                                                                                                                           V3744)
                                                                                                                          (shen/if
                                                                                                                           (shen/internal/predicate->shen
                                                                                                                            (null V3436))
                                                                                                                           (shen/do
                                                                                                                            (shen/shen\.incinfs)
                                                                                                                            (shen/thaw V3745))
                                                                                                                           (shen/if
                                                                                                                            (shen/shen\.pvar\? V3436)
                                                                                                                            (shen/do
                                                                                                                             (shen/shen\.bindv V3436 nil V3744)
                                                                                                                             (shen/let Result
                                                                                                                                       (shen/do
                                                                                                                                        (shen/shen\.incinfs)
                                                                                                                                        (shen/thaw V3745))
                                                                                                                                       (shen/do
                                                                                                                                        (shen/shen\.unbindv V3436 V3744)
                                                                                                                                        Result)))
                                                                                                                            'false))))
                                                                                                      (shen/if
                                                                                                       (shen/shen\.pvar\? V3435)
                                                                                                       (shen/let A
                                                                                                                 (shen/shen\.newpv V3744)
                                                                                                                 (shen/do
                                                                                                                  (shen/shen\.bindv V3435
                                                                                                                                    (list A)
                                                                                                                                    V3744)
                                                                                                                  (shen/let Result
                                                                                                                            (shen/do
                                                                                                                             (shen/shen\.incinfs)
                                                                                                                             (shen/thaw V3745))
                                                                                                                            (shen/do
                                                                                                                             (shen/shen\.unbindv V3435 V3744)
                                                                                                                             Result))))
                                                                                                       'false)))
                                                                                           (shen/do
                                                                                            (shen/shen\.unbindv V3432 V3744)
                                                                                            Result)))
                                                                                'false)))
                                                                    (shen/if
                                                                     (shen/shen\.pvar\? V3431)
                                                                     (shen/let A
                                                                               (shen/shen\.newpv V3744)
                                                                               (shen/do
                                                                                (shen/shen\.bindv V3431
                                                                                                  (list 'list A)
                                                                                                  V3744)
                                                                                (shen/let Result
                                                                                          (shen/do
                                                                                           (shen/shen\.incinfs)
                                                                                           (shen/thaw V3745))
                                                                                          (shen/do
                                                                                           (shen/shen\.unbindv V3431 V3744)
                                                                                           Result))))
                                                                     'false)))
                                                         'false))
                                              Case))
                                   Case))
                        Case))
             Case)))
(defun shen/shen\.by_hypothesis
    (V3751 V3752 V3753 V3754 V3755)
  (cl-flet
      ((tail-trampoline
        (V3751 V3752 V3753 V3754 V3755)
        (shen/let Case
                  (shen/let V3417
                            (shen/shen\.lazyderef V3753 V3754)
                            (shen/if
                             (shen/cons\? V3417)
                             (shen/let V3418
                                       (shen/shen\.lazyderef
                                        (shen/hd V3417)
                                        V3754)
                                       (shen/if
                                        (shen/cons\? V3418)
                                        (shen/let Y
                                                  (shen/hd V3418)
                                                  (shen/let V3419
                                                            (shen/shen\.lazyderef
                                                             (nthcdr 1 V3418)
                                                             V3754)
                                                            (shen/if
                                                             (shen/cons\? V3419)
                                                             (shen/let V3420
                                                                       (shen/shen\.lazyderef
                                                                        (shen/hd V3419)
                                                                        V3754)
                                                                       (shen/if
                                                                        (shen/= ': V3420)
                                                                        (shen/let V3421
                                                                                  (shen/shen\.lazyderef
                                                                                   (nthcdr 1 V3419)
                                                                                   V3754)
                                                                                  (shen/if
                                                                                   (shen/cons\? V3421)
                                                                                   (shen/let B
                                                                                             (shen/hd V3421)
                                                                                             (shen/let V3422
                                                                                                       (shen/shen\.lazyderef
                                                                                                        (nthcdr 1 V3421)
                                                                                                        V3754)
                                                                                                       (shen/if
                                                                                                        (shen/internal/predicate->shen
                                                                                                         (null V3422))
                                                                                                        (shen/do
                                                                                                         (shen/shen\.incinfs)
                                                                                                         (shen/identical V3751 Y V3754
                                                                                                                         (shen/freeze
                                                                                                                          (shen/unify! V3752 B V3754 V3755))))
                                                                                                        'false)))
                                                                                   'false))
                                                                        'false))
                                                             'false)))
                                        'false))
                             'false))
                  (shen/if
                   (shen/= Case 'false)
                   (shen/let V3423
                             (shen/shen\.lazyderef V3753 V3754)
                             (shen/if
                              (shen/cons\? V3423)
                              (shen/let Hyp
                                        (nthcdr 1 V3423)
                                        (shen/do
                                         (shen/shen\.incinfs)
                                         (vector
                                          (list V3751 V3752 Hyp V3754 V3755))))
                              'false))
                   Case))))
    (let
        ((result
          (funcall #'tail-trampoline V3751 V3752 V3753 V3754 V3755)))
      (while
          (vectorp result)
        (setq result
              (apply #'tail-trampoline
                     (aref result 0))))
      result)))
(defun shen/shen\.t*-def
    (V3761 V3762 V3763 V3764 V3765)
  (shen/let V3411
            (shen/shen\.lazyderef V3761 V3764)
            (shen/if
             (shen/cons\? V3411)
             (shen/let V3412
                       (shen/shen\.lazyderef
                        (shen/hd V3411)
                        V3764)
                       (shen/if
                        (shen/= 'define V3412)
                        (shen/let V3413
                                  (shen/shen\.lazyderef
                                   (nthcdr 1 V3411)
                                   V3764)
                                  (shen/if
                                   (shen/cons\? V3413)
                                   (shen/let F
                                             (shen/hd V3413)
                                             (shen/let X
                                                       (nthcdr 1 V3413)
                                                       (shen/let Y
                                                                 (shen/shen\.newpv V3764)
                                                                 (shen/let E
                                                                           (shen/shen\.newpv V3764)
                                                                           (shen/do
                                                                            (shen/shen\.incinfs)
                                                                            (shen/shen\.t*-defh
                                                                             (shen/compile
                                                                              (shen/lambda Y
                                                                                           (shen/shen\.<sig+rules> Y))
                                                                              X
                                                                              (shen/lambda E
                                                                                           (shen/if
                                                                                            (shen/cons\? E)
                                                                                            (shen/simple-error
                                                                                             (shen/cn "parse error here: "
                                                                                                      (shen/shen\.app E "\n" 'shen\.s)))
                                                                                            (shen/simple-error "parse error\n"))))
                                                                             F V3762 V3763 V3764 V3765))))))
                                   'false))
                        'false))
             'false)))
(defun shen/shen\.t*-defh
    (V3772 V3773 V3774 V3775 V3776 V3777)
  (shen/let V3407
            (shen/shen\.lazyderef V3772 V3776)
            (shen/if
             (shen/cons\? V3407)
             (shen/let Sig
                       (shen/hd V3407)
                       (shen/let Rules
                                 (nthcdr 1 V3407)
                                 (shen/do
                                  (shen/shen\.incinfs)
                                  (shen/shen\.t*-defhh Sig
                                                       (shen/shen\.ue-sig Sig)
                                                       V3773 V3774 V3775 Rules V3776 V3777))))
             'false)))
(defun shen/shen\.t*-defhh
    (V3786 V3787 V3788 V3789 V3790 V3791 V3792 V3793)
  (shen/do
   (shen/shen\.incinfs)
   (shen/shen\.t*-rules V3791 V3787 1 V3788
                        (append
                         (list
                          (list V3788 ': V3787))
                         V3790)
                        V3792
                        (shen/freeze
                         (shen/shen\.memo V3788 V3786 V3789 V3792 V3793)))))
(defun shen/shen\.memo
    (V3799 V3800 V3801 V3802 V3803)
  (shen/let Jnk
            (shen/shen\.newpv V3802)
            (shen/do
             (shen/shen\.incinfs)
             (shen/unify! V3801 V3800 V3802
                          (shen/freeze
                           (shen/bind Jnk
                                      (shen/declare
                                       (shen/shen\.lazyderef V3799 V3802)
                                       (shen/shen\.lazyderef V3801 V3802))
                                      V3802 V3803))))))
(defun shen/shen\.<sig+rules>
    (V3805)
  (shen/let Parse_shen\.<signature>
            (shen/shen\.<signature> V3805)
            (shen/if
             (shen/not
              (shen/=
               (shen/fail)
               Parse_shen\.<signature>))
             (shen/let Parse_shen\.<non-ll-rules>
                       (shen/shen\.<non-ll-rules> Parse_shen\.<signature>)
                       (shen/if
                        (shen/not
                         (shen/=
                          (shen/fail)
                          Parse_shen\.<non-ll-rules>))
                        (shen/shen\.pair
                         (shen/hd Parse_shen\.<non-ll-rules>)
                         (append
                          (list
                           (shen/shen\.hdtl Parse_shen\.<signature>))
                          (shen/shen\.hdtl Parse_shen\.<non-ll-rules>)))
                        (shen/fail)))
             (shen/fail))))
(defun shen/shen\.<non-ll-rules>
    (V3807)
  (shen/let YaccParse
            (shen/let Parse_shen\.<rule>
                      (shen/shen\.<rule> V3807)
                      (shen/if
                       (shen/not
                        (shen/=
                         (shen/fail)
                         Parse_shen\.<rule>))
                       (shen/let Parse_shen\.<non-ll-rules>
                                 (shen/shen\.<non-ll-rules> Parse_shen\.<rule>)
                                 (shen/if
                                  (shen/not
                                   (shen/=
                                    (shen/fail)
                                    Parse_shen\.<non-ll-rules>))
                                  (shen/shen\.pair
                                   (shen/hd Parse_shen\.<non-ll-rules>)
                                   (append
                                    (list
                                     (shen/shen\.hdtl Parse_shen\.<rule>))
                                    (shen/shen\.hdtl Parse_shen\.<non-ll-rules>)))
                                  (shen/fail)))
                       (shen/fail)))
            (shen/if
             (shen/= YaccParse
                     (shen/fail))
             (shen/let Parse_shen\.<rule>
                       (shen/shen\.<rule> V3807)
                       (shen/if
                        (shen/not
                         (shen/=
                          (shen/fail)
                          Parse_shen\.<rule>))
                        (shen/shen\.pair
                         (shen/hd Parse_shen\.<rule>)
                         (list
                          (shen/shen\.hdtl Parse_shen\.<rule>)))
                        (shen/fail)))
             YaccParse)))
(defun shen/shen\.ue
    (V3809)
  (shen/cond
   ((shen/and
     (shen/cons\? V3809)
     (shen/and
      (shen/cons\?
       (nthcdr 1 V3809))
      (shen/and
       (shen/internal/predicate->shen
        (null
         (nthcdr 2 V3809)))
       (shen/=
        (shen/hd V3809)
        'protect))))
    V3809)
   ((shen/cons\? V3809)
    (shen/map
     (shen/lambda Z
                  (shen/shen\.ue Z))
     V3809))
   ((shen/variable\? V3809)
    (shen/concat '&& V3809))
   (shen/true V3809)))
(defun shen/shen\.ue-sig
    (V3811)
  (shen/cond
   ((shen/cons\? V3811)
    (shen/map
     (shen/lambda Z
                  (shen/shen\.ue-sig Z))
     V3811))
   ((shen/variable\? V3811)
    (shen/concat '&&& V3811))
   (shen/true V3811)))
(defun shen/shen\.ues
    (V3817)
  (shen/cond
   ((shen/shen\.ue\? V3817)
    (list V3817))
   ((shen/cons\? V3817)
    (shen/union
     (shen/shen\.ues
      (shen/hd V3817))
     (shen/shen\.ues
      (nthcdr 1 V3817))))
   (shen/true nil)))
(defun shen/shen\.ue\?
    (V3819)
  (shen/and
   (shen/symbol\? V3819)
   (shen/shen\.ue-h\?
    (shen/str V3819))))
(defun shen/shen\.ue-h\?
    (V3827)
  (shen/cond
   ((shen/and
     (shen/shen\.+string\? V3827)
     (shen/and
      (shen/= "&"
              (shen/pos V3827 0))
      (shen/and
       (shen/shen\.+string\?
        (shen/tlstr V3827))
       (shen/= "&"
               (shen/pos
                (shen/tlstr V3827)
                0)))))
    'true)
   (shen/true 'false)))
(defun shen/shen\.t*-rules
    (V3835 V3836 V3837 V3838 V3839 V3840 V3841)
  (shen/let Throwcontrol
            (shen/shen\.catchpoint)
            (shen/shen\.cutpoint Throwcontrol
                                 (shen/let Case
                                           (shen/let V3391
                                                     (shen/shen\.lazyderef V3835 V3840)
                                                     (shen/if
                                                      (shen/internal/predicate->shen
                                                       (null V3391))
                                                      (shen/do
                                                       (shen/shen\.incinfs)
                                                       (shen/thaw V3841))
                                                      'false))
                                           (shen/if
                                            (shen/= Case 'false)
                                            (shen/let Case
                                                      (shen/let V3392
                                                                (shen/shen\.lazyderef V3835 V3840)
                                                                (shen/if
                                                                 (shen/cons\? V3392)
                                                                 (shen/let Rule
                                                                           (shen/hd V3392)
                                                                           (shen/let Rules
                                                                                     (nthcdr 1 V3392)
                                                                                     (shen/do
                                                                                      (shen/shen\.incinfs)
                                                                                      (shen/shen\.t*-rule
                                                                                       (shen/shen\.ue Rule)
                                                                                       V3836 V3839 V3840
                                                                                       (shen/freeze
                                                                                        (shen/cut Throwcontrol V3840
                                                                                                  (shen/freeze
                                                                                                   (shen/shen\.t*-rules Rules V3836
                                                                                                                        (1+ V3837)
                                                                                                                        V3838 V3839 V3840 V3841))))))))
                                                                 'false))
                                                      (shen/if
                                                       (shen/= Case 'false)
                                                       (shen/let Err
                                                                 (shen/shen\.newpv V3840)
                                                                 (shen/do
                                                                  (shen/shen\.incinfs)
                                                                  (shen/bind Err
                                                                             (shen/simple-error
                                                                              (shen/cn "type error in rule "
                                                                                       (shen/shen\.app
                                                                                        (shen/shen\.lazyderef V3837 V3840)
                                                                                        (shen/cn " of "
                                                                                                 (shen/shen\.app
                                                                                                  (shen/shen\.lazyderef V3838 V3840)
                                                                                                  "" 'shen\.a))
                                                                                        'shen\.a)))
                                                                             V3840 V3841)))
                                                       Case))
                                            Case)))))
(defun shen/shen\.t*-rule
    (V3847 V3848 V3849 V3850 V3851)
  (shen/let Throwcontrol
            (shen/shen\.catchpoint)
            (shen/shen\.cutpoint Throwcontrol
                                 (shen/let V3383
                                           (shen/shen\.lazyderef V3847 V3850)
                                           (shen/if
                                            (shen/cons\? V3383)
                                            (shen/let Patterns
                                                      (shen/hd V3383)
                                                      (shen/let V3384
                                                                (shen/shen\.lazyderef
                                                                 (nthcdr 1 V3383)
                                                                 V3850)
                                                                (shen/if
                                                                 (shen/cons\? V3384)
                                                                 (shen/let Action
                                                                           (shen/hd V3384)
                                                                           (shen/let V3385
                                                                                     (shen/shen\.lazyderef
                                                                                      (nthcdr 1 V3384)
                                                                                      V3850)
                                                                                     (shen/if
                                                                                      (shen/internal/predicate->shen
                                                                                       (null V3385))
                                                                                      (shen/let NewHyps
                                                                                                (shen/shen\.newpv V3850)
                                                                                                (shen/do
                                                                                                 (shen/shen\.incinfs)
                                                                                                 (shen/shen\.newhyps
                                                                                                  (shen/shen\.placeholders Patterns)
                                                                                                  V3849 NewHyps V3850
                                                                                                  (shen/freeze
                                                                                                   (shen/shen\.t*-patterns Patterns V3848 NewHyps V3850
                                                                                                                           (shen/freeze
                                                                                                                            (shen/cut Throwcontrol V3850
                                                                                                                                      (shen/freeze
                                                                                                                                       (shen/shen\.t*-action
                                                                                                                                        (shen/shen\.curry
                                                                                                                                         (shen/shen\.ue Action))
                                                                                                                                        (shen/shen\.result-type Patterns V3848)
                                                                                                                                        (shen/shen\.patthyps Patterns V3848 V3849)
                                                                                                                                        V3850 V3851)))))))))
                                                                                      'false)))
                                                                 'false)))
                                            'false)))))
(defun shen/shen\.placeholders
    (V3857)
  (shen/cond
   ((shen/shen\.ue\? V3857)
    (list V3857))
   ((shen/cons\? V3857)
    (shen/union
     (shen/shen\.placeholders
      (shen/hd V3857))
     (shen/shen\.placeholders
      (nthcdr 1 V3857))))
   (shen/true nil)))
(defun shen/shen\.newhyps
    (V3863 V3864 V3865 V3866 V3867)
  (shen/let Case
            (shen/let V3370
                      (shen/shen\.lazyderef V3863 V3866)
                      (shen/if
                       (shen/internal/predicate->shen
                        (null V3370))
                       (shen/do
                        (shen/shen\.incinfs)
                        (shen/unify! V3865 V3864 V3866 V3867))
                       'false))
            (shen/if
             (shen/= Case 'false)
             (shen/let V3371
                       (shen/shen\.lazyderef V3863 V3866)
                       (shen/if
                        (shen/cons\? V3371)
                        (shen/let V3366
                                  (shen/hd V3371)
                                  (shen/let Vs
                                            (nthcdr 1 V3371)
                                            (shen/let V3372
                                                      (shen/shen\.lazyderef V3865 V3866)
                                                      (shen/if
                                                       (shen/cons\? V3372)
                                                       (shen/let V3373
                                                                 (shen/shen\.lazyderef
                                                                  (shen/hd V3372)
                                                                  V3866)
                                                                 (shen/if
                                                                  (shen/cons\? V3373)
                                                                  (shen/let V
                                                                            (shen/hd V3373)
                                                                            (shen/let V3374
                                                                                      (shen/shen\.lazyderef
                                                                                       (nthcdr 1 V3373)
                                                                                       V3866)
                                                                                      (shen/if
                                                                                       (shen/cons\? V3374)
                                                                                       (shen/let V3375
                                                                                                 (shen/shen\.lazyderef
                                                                                                  (shen/hd V3374)
                                                                                                  V3866)
                                                                                                 (shen/if
                                                                                                  (shen/= ': V3375)
                                                                                                  (shen/let V3376
                                                                                                            (shen/shen\.lazyderef
                                                                                                             (nthcdr 1 V3374)
                                                                                                             V3866)
                                                                                                            (shen/if
                                                                                                             (shen/cons\? V3376)
                                                                                                             (shen/let A
                                                                                                                       (shen/hd V3376)
                                                                                                                       (shen/let V3377
                                                                                                                                 (shen/shen\.lazyderef
                                                                                                                                  (nthcdr 1 V3376)
                                                                                                                                  V3866)
                                                                                                                                 (shen/if
                                                                                                                                  (shen/internal/predicate->shen
                                                                                                                                   (null V3377))
                                                                                                                                  (shen/let NewHyp
                                                                                                                                            (nthcdr 1 V3372)
                                                                                                                                            (shen/do
                                                                                                                                             (shen/shen\.incinfs)
                                                                                                                                             (shen/unify! V V3366 V3866
                                                                                                                                                          (shen/freeze
                                                                                                                                                           (shen/shen\.newhyps Vs V3864 NewHyp V3866 V3867)))))
                                                                                                                                  (shen/if
                                                                                                                                   (shen/shen\.pvar\? V3377)
                                                                                                                                   (shen/do
                                                                                                                                    (shen/shen\.bindv V3377 nil V3866)
                                                                                                                                    (shen/let Result
                                                                                                                                              (shen/let NewHyp
                                                                                                                                                        (nthcdr 1 V3372)
                                                                                                                                                        (shen/do
                                                                                                                                                         (shen/shen\.incinfs)
                                                                                                                                                         (shen/unify! V V3366 V3866
                                                                                                                                                                      (shen/freeze
                                                                                                                                                                       (shen/shen\.newhyps Vs V3864 NewHyp V3866 V3867)))))
                                                                                                                                              (shen/do
                                                                                                                                               (shen/shen\.unbindv V3377 V3866)
                                                                                                                                               Result)))
                                                                                                                                   'false))))
                                                                                                             (shen/if
                                                                                                              (shen/shen\.pvar\? V3376)
                                                                                                              (shen/let A
                                                                                                                        (shen/shen\.newpv V3866)
                                                                                                                        (shen/do
                                                                                                                         (shen/shen\.bindv V3376
                                                                                                                                           (list A)
                                                                                                                                           V3866)
                                                                                                                         (shen/let Result
                                                                                                                                   (shen/let NewHyp
                                                                                                                                             (nthcdr 1 V3372)
                                                                                                                                             (shen/do
                                                                                                                                              (shen/shen\.incinfs)
                                                                                                                                              (shen/unify! V V3366 V3866
                                                                                                                                                           (shen/freeze
                                                                                                                                                            (shen/shen\.newhyps Vs V3864 NewHyp V3866 V3867)))))
                                                                                                                                   (shen/do
                                                                                                                                    (shen/shen\.unbindv V3376 V3866)
                                                                                                                                    Result))))
                                                                                                              'false)))
                                                                                                  (shen/if
                                                                                                   (shen/shen\.pvar\? V3375)
                                                                                                   (shen/do
                                                                                                    (shen/shen\.bindv V3375 ': V3866)
                                                                                                    (shen/let Result
                                                                                                              (shen/let V3378
                                                                                                                        (shen/shen\.lazyderef
                                                                                                                         (nthcdr 1 V3374)
                                                                                                                         V3866)
                                                                                                                        (shen/if
                                                                                                                         (shen/cons\? V3378)
                                                                                                                         (shen/let A
                                                                                                                                   (shen/hd V3378)
                                                                                                                                   (shen/let V3379
                                                                                                                                             (shen/shen\.lazyderef
                                                                                                                                              (nthcdr 1 V3378)
                                                                                                                                              V3866)
                                                                                                                                             (shen/if
                                                                                                                                              (shen/internal/predicate->shen
                                                                                                                                               (null V3379))
                                                                                                                                              (shen/let NewHyp
                                                                                                                                                        (nthcdr 1 V3372)
                                                                                                                                                        (shen/do
                                                                                                                                                         (shen/shen\.incinfs)
                                                                                                                                                         (shen/unify! V V3366 V3866
                                                                                                                                                                      (shen/freeze
                                                                                                                                                                       (shen/shen\.newhyps Vs V3864 NewHyp V3866 V3867)))))
                                                                                                                                              (shen/if
                                                                                                                                               (shen/shen\.pvar\? V3379)
                                                                                                                                               (shen/do
                                                                                                                                                (shen/shen\.bindv V3379 nil V3866)
                                                                                                                                                (shen/let Result
                                                                                                                                                          (shen/let NewHyp
                                                                                                                                                                    (nthcdr 1 V3372)
                                                                                                                                                                    (shen/do
                                                                                                                                                                     (shen/shen\.incinfs)
                                                                                                                                                                     (shen/unify! V V3366 V3866
                                                                                                                                                                                  (shen/freeze
                                                                                                                                                                                   (shen/shen\.newhyps Vs V3864 NewHyp V3866 V3867)))))
                                                                                                                                                          (shen/do
                                                                                                                                                           (shen/shen\.unbindv V3379 V3866)
                                                                                                                                                           Result)))
                                                                                                                                               'false))))
                                                                                                                         (shen/if
                                                                                                                          (shen/shen\.pvar\? V3378)
                                                                                                                          (shen/let A
                                                                                                                                    (shen/shen\.newpv V3866)
                                                                                                                                    (shen/do
                                                                                                                                     (shen/shen\.bindv V3378
                                                                                                                                                       (list A)
                                                                                                                                                       V3866)
                                                                                                                                     (shen/let Result
                                                                                                                                               (shen/let NewHyp
                                                                                                                                                         (nthcdr 1 V3372)
                                                                                                                                                         (shen/do
                                                                                                                                                          (shen/shen\.incinfs)
                                                                                                                                                          (shen/unify! V V3366 V3866
                                                                                                                                                                       (shen/freeze
                                                                                                                                                                        (shen/shen\.newhyps Vs V3864 NewHyp V3866 V3867)))))
                                                                                                                                               (shen/do
                                                                                                                                                (shen/shen\.unbindv V3378 V3866)
                                                                                                                                                Result))))
                                                                                                                          'false)))
                                                                                                              (shen/do
                                                                                                               (shen/shen\.unbindv V3375 V3866)
                                                                                                               Result)))
                                                                                                   'false)))
                                                                                       (shen/if
                                                                                        (shen/shen\.pvar\? V3374)
                                                                                        (shen/let A
                                                                                                  (shen/shen\.newpv V3866)
                                                                                                  (shen/do
                                                                                                   (shen/shen\.bindv V3374
                                                                                                                     (list ': A)
                                                                                                                     V3866)
                                                                                                   (shen/let Result
                                                                                                             (shen/let NewHyp
                                                                                                                       (nthcdr 1 V3372)
                                                                                                                       (shen/do
                                                                                                                        (shen/shen\.incinfs)
                                                                                                                        (shen/unify! V V3366 V3866
                                                                                                                                     (shen/freeze
                                                                                                                                      (shen/shen\.newhyps Vs V3864 NewHyp V3866 V3867)))))
                                                                                                             (shen/do
                                                                                                              (shen/shen\.unbindv V3374 V3866)
                                                                                                              Result))))
                                                                                        'false))))
                                                                  (shen/if
                                                                   (shen/shen\.pvar\? V3373)
                                                                   (shen/let V
                                                                             (shen/shen\.newpv V3866)
                                                                             (shen/let A
                                                                                       (shen/shen\.newpv V3866)
                                                                                       (shen/do
                                                                                        (shen/shen\.bindv V3373
                                                                                                          (list V ': A)
                                                                                                          V3866)
                                                                                        (shen/let Result
                                                                                                  (shen/let NewHyp
                                                                                                            (nthcdr 1 V3372)
                                                                                                            (shen/do
                                                                                                             (shen/shen\.incinfs)
                                                                                                             (shen/unify! V V3366 V3866
                                                                                                                          (shen/freeze
                                                                                                                           (shen/shen\.newhyps Vs V3864 NewHyp V3866 V3867)))))
                                                                                                  (shen/do
                                                                                                   (shen/shen\.unbindv V3373 V3866)
                                                                                                   Result)))))
                                                                   'false)))
                                                       (shen/if
                                                        (shen/shen\.pvar\? V3372)
                                                        (shen/let V
                                                                  (shen/shen\.newpv V3866)
                                                                  (shen/let A
                                                                            (shen/shen\.newpv V3866)
                                                                            (shen/let NewHyp
                                                                                      (shen/shen\.newpv V3866)
                                                                                      (shen/do
                                                                                       (shen/shen\.bindv V3372
                                                                                                         (append
                                                                                                          (list
                                                                                                           (list V ': A))
                                                                                                          NewHyp)
                                                                                                         V3866)
                                                                                       (shen/let Result
                                                                                                 (shen/do
                                                                                                  (shen/shen\.incinfs)
                                                                                                  (shen/unify! V V3366 V3866
                                                                                                               (shen/freeze
                                                                                                                (shen/shen\.newhyps Vs V3864 NewHyp V3866 V3867))))
                                                                                                 (shen/do
                                                                                                  (shen/shen\.unbindv V3372 V3866)
                                                                                                  Result))))))
                                                        'false)))))
                        'false))
             Case)))
(defun shen/shen\.patthyps
    (V3873 V3874 V3875)
  (shen/cond
   ((shen/internal/predicate->shen
     (null V3873))
    V3875)
   ((shen/and
     (shen/cons\? V3873)
     (shen/and
      (shen/cons\? V3874)
      (shen/and
       (shen/cons\?
        (nthcdr 1 V3874))
       (shen/and
        (shen/= '-->
                (shen/hd
                 (nthcdr 1 V3874)))
        (shen/and
         (shen/cons\?
          (nthcdr 2 V3874))
         (shen/internal/predicate->shen
          (null
           (nthcdr 3 V3874))))))))
    (shen/adjoin
     (list
      (shen/hd V3873)
      ':
      (shen/hd V3874))
     (shen/shen\.patthyps
      (nthcdr 1 V3873)
      (shen/hd
       (nthcdr 2 V3874))
      V3875)))
   (shen/true
    (shen/shen\.f_error 'shen\.patthyps))))
(defun shen/shen\.result-type
    (V3882 V3883)
  (cl-flet
      ((tail-trampoline
        (V3882 V3883)
        (shen/cond
         ((shen/and
           (shen/internal/predicate->shen
            (null V3882))
           (shen/and
            (shen/cons\? V3883)
            (shen/and
             (shen/= '-->
                     (shen/hd V3883))
             (shen/and
              (shen/cons\?
               (nthcdr 1 V3883))
              (shen/internal/predicate->shen
               (null
                (nthcdr 2 V3883)))))))
          (shen/hd
           (nthcdr 1 V3883)))
         ((shen/internal/predicate->shen
           (null V3882))
          V3883)
         ((shen/and
           (shen/cons\? V3882)
           (shen/and
            (shen/cons\? V3883)
            (shen/and
             (shen/cons\?
              (nthcdr 1 V3883))
             (shen/and
              (shen/= '-->
                      (shen/hd
                       (nthcdr 1 V3883)))
              (shen/and
               (shen/cons\?
                (nthcdr 2 V3883))
               (shen/internal/predicate->shen
                (null
                 (nthcdr 3 V3883))))))))
          (vector
           (list
            (nthcdr 1 V3882)
            (shen/hd
             (nthcdr 2 V3883)))))
         (shen/true
          (shen/shen\.f_error 'shen\.result-type)))))
    (let
        ((result
          (funcall #'tail-trampoline V3882 V3883)))
      (while
          (vectorp result)
        (setq result
              (apply #'tail-trampoline
                     (aref result 0))))
      result)))
(defun shen/shen\.t*-patterns
    (V3889 V3890 V3891 V3892 V3893)
  (shen/let Case
            (shen/let V3358
                      (shen/shen\.lazyderef V3889 V3892)
                      (shen/if
                       (shen/internal/predicate->shen
                        (null V3358))
                       (shen/do
                        (shen/shen\.incinfs)
                        (shen/thaw V3893))
                       'false))
            (shen/if
             (shen/= Case 'false)
             (shen/let V3359
                       (shen/shen\.lazyderef V3889 V3892)
                       (shen/if
                        (shen/cons\? V3359)
                        (shen/let Pattern
                                  (shen/hd V3359)
                                  (shen/let Patterns
                                            (nthcdr 1 V3359)
                                            (shen/let V3360
                                                      (shen/shen\.lazyderef V3890 V3892)
                                                      (shen/if
                                                       (shen/cons\? V3360)
                                                       (shen/let A
                                                                 (shen/hd V3360)
                                                                 (shen/let V3361
                                                                           (shen/shen\.lazyderef
                                                                            (nthcdr 1 V3360)
                                                                            V3892)
                                                                           (shen/if
                                                                            (shen/cons\? V3361)
                                                                            (shen/let V3362
                                                                                      (shen/shen\.lazyderef
                                                                                       (shen/hd V3361)
                                                                                       V3892)
                                                                                      (shen/if
                                                                                       (shen/= '--> V3362)
                                                                                       (shen/let V3363
                                                                                                 (shen/shen\.lazyderef
                                                                                                  (nthcdr 1 V3361)
                                                                                                  V3892)
                                                                                                 (shen/if
                                                                                                  (shen/cons\? V3363)
                                                                                                  (shen/let B
                                                                                                            (shen/hd V3363)
                                                                                                            (shen/let V3364
                                                                                                                      (shen/shen\.lazyderef
                                                                                                                       (nthcdr 1 V3363)
                                                                                                                       V3892)
                                                                                                                      (shen/if
                                                                                                                       (shen/internal/predicate->shen
                                                                                                                        (null V3364))
                                                                                                                       (shen/do
                                                                                                                        (shen/shen\.incinfs)
                                                                                                                        (shen/shen\.t*
                                                                                                                         (list Pattern ': A)
                                                                                                                         V3891 V3892
                                                                                                                         (shen/freeze
                                                                                                                          (shen/shen\.t*-patterns Patterns B V3891 V3892 V3893))))
                                                                                                                       'false)))
                                                                                                  'false))
                                                                                       'false))
                                                                            'false)))
                                                       'false))))
                        'false))
             Case)))
(defun shen/shen\.t*-action
    (V3899 V3900 V3901 V3902 V3903)
  (shen/let Throwcontrol
            (shen/shen\.catchpoint)
            (shen/shen\.cutpoint Throwcontrol
                                 (shen/let Case
                                           (shen/let V3335
                                                     (shen/shen\.lazyderef V3899 V3902)
                                                     (shen/if
                                                      (shen/cons\? V3335)
                                                      (shen/let V3336
                                                                (shen/shen\.lazyderef
                                                                 (shen/hd V3335)
                                                                 V3902)
                                                                (shen/if
                                                                 (shen/= 'where V3336)
                                                                 (shen/let V3337
                                                                           (shen/shen\.lazyderef
                                                                            (nthcdr 1 V3335)
                                                                            V3902)
                                                                           (shen/if
                                                                            (shen/cons\? V3337)
                                                                            (shen/let P
                                                                                      (shen/hd V3337)
                                                                                      (shen/let V3338
                                                                                                (shen/shen\.lazyderef
                                                                                                 (nthcdr 1 V3337)
                                                                                                 V3902)
                                                                                                (shen/if
                                                                                                 (shen/cons\? V3338)
                                                                                                 (shen/let Action
                                                                                                           (shen/hd V3338)
                                                                                                           (shen/let V3339
                                                                                                                     (shen/shen\.lazyderef
                                                                                                                      (nthcdr 1 V3338)
                                                                                                                      V3902)
                                                                                                                     (shen/if
                                                                                                                      (shen/internal/predicate->shen
                                                                                                                       (null V3339))
                                                                                                                      (shen/do
                                                                                                                       (shen/shen\.incinfs)
                                                                                                                       (shen/cut Throwcontrol V3902
                                                                                                                                 (shen/freeze
                                                                                                                                  (shen/shen\.t*
                                                                                                                                   (list P ': 'boolean)
                                                                                                                                   V3901 V3902
                                                                                                                                   (shen/freeze
                                                                                                                                    (shen/cut Throwcontrol V3902
                                                                                                                                              (shen/freeze
                                                                                                                                               (shen/shen\.t*-action Action V3900
                                                                                                                                                                     (append
                                                                                                                                                                      (list
                                                                                                                                                                       (list P ': 'verified))
                                                                                                                                                                      V3901)
                                                                                                                                                                     V3902 V3903))))))))
                                                                                                                      'false)))
                                                                                                 'false)))
                                                                            'false))
                                                                 'false))
                                                      'false))
                                           (shen/if
                                            (shen/= Case 'false)
                                            (shen/let Case
                                                      (shen/let V3340
                                                                (shen/shen\.lazyderef V3899 V3902)
                                                                (shen/if
                                                                 (shen/cons\? V3340)
                                                                 (shen/let V3341
                                                                           (shen/shen\.lazyderef
                                                                            (shen/hd V3340)
                                                                            V3902)
                                                                           (shen/if
                                                                            (shen/= 'shen\.choicepoint! V3341)
                                                                            (shen/let V3342
                                                                                      (shen/shen\.lazyderef
                                                                                       (nthcdr 1 V3340)
                                                                                       V3902)
                                                                                      (shen/if
                                                                                       (shen/cons\? V3342)
                                                                                       (shen/let V3343
                                                                                                 (shen/shen\.lazyderef
                                                                                                  (shen/hd V3342)
                                                                                                  V3902)
                                                                                                 (shen/if
                                                                                                  (shen/cons\? V3343)
                                                                                                  (shen/let V3344
                                                                                                            (shen/shen\.lazyderef
                                                                                                             (shen/hd V3343)
                                                                                                             V3902)
                                                                                                            (shen/if
                                                                                                             (shen/cons\? V3344)
                                                                                                             (shen/let V3345
                                                                                                                       (shen/shen\.lazyderef
                                                                                                                        (shen/hd V3344)
                                                                                                                        V3902)
                                                                                                                       (shen/if
                                                                                                                        (shen/= 'fail-if V3345)
                                                                                                                        (shen/let V3346
                                                                                                                                  (shen/shen\.lazyderef
                                                                                                                                   (nthcdr 1 V3344)
                                                                                                                                   V3902)
                                                                                                                                  (shen/if
                                                                                                                                   (shen/cons\? V3346)
                                                                                                                                   (shen/let F
                                                                                                                                             (shen/hd V3346)
                                                                                                                                             (shen/let V3347
                                                                                                                                                       (shen/shen\.lazyderef
                                                                                                                                                        (nthcdr 1 V3346)
                                                                                                                                                        V3902)
                                                                                                                                                       (shen/if
                                                                                                                                                        (shen/internal/predicate->shen
                                                                                                                                                         (null V3347))
                                                                                                                                                        (shen/let V3348
                                                                                                                                                                  (shen/shen\.lazyderef
                                                                                                                                                                   (nthcdr 1 V3343)
                                                                                                                                                                   V3902)
                                                                                                                                                                  (shen/if
                                                                                                                                                                   (shen/cons\? V3348)
                                                                                                                                                                   (shen/let Action
                                                                                                                                                                             (shen/hd V3348)
                                                                                                                                                                             (shen/let V3349
                                                                                                                                                                                       (shen/shen\.lazyderef
                                                                                                                                                                                        (nthcdr 1 V3348)
                                                                                                                                                                                        V3902)
                                                                                                                                                                                       (shen/if
                                                                                                                                                                                        (shen/internal/predicate->shen
                                                                                                                                                                                         (null V3349))
                                                                                                                                                                                        (shen/let V3350
                                                                                                                                                                                                  (shen/shen\.lazyderef
                                                                                                                                                                                                   (nthcdr 1 V3342)
                                                                                                                                                                                                   V3902)
                                                                                                                                                                                                  (shen/if
                                                                                                                                                                                                   (shen/internal/predicate->shen
                                                                                                                                                                                                    (null V3350))
                                                                                                                                                                                                   (shen/do
                                                                                                                                                                                                    (shen/shen\.incinfs)
                                                                                                                                                                                                    (shen/cut Throwcontrol V3902
                                                                                                                                                                                                              (shen/freeze
                                                                                                                                                                                                               (shen/shen\.t*-action
                                                                                                                                                                                                                (list 'where
                                                                                                                                                                                                                      (list 'not
                                                                                                                                                                                                                            (list F Action))
                                                                                                                                                                                                                      Action)
                                                                                                                                                                                                                V3900 V3901 V3902 V3903))))
                                                                                                                                                                                                   'false))
                                                                                                                                                                                        'false)))
                                                                                                                                                                   'false))
                                                                                                                                                        'false)))
                                                                                                                                   'false))
                                                                                                                        'false))
                                                                                                             'false))
                                                                                                  'false))
                                                                                       'false))
                                                                            'false))
                                                                 'false))
                                                      (shen/if
                                                       (shen/= Case 'false)
                                                       (shen/let Case
                                                                 (shen/let V3351
                                                                           (shen/shen\.lazyderef V3899 V3902)
                                                                           (shen/if
                                                                            (shen/cons\? V3351)
                                                                            (shen/let V3352
                                                                                      (shen/shen\.lazyderef
                                                                                       (shen/hd V3351)
                                                                                       V3902)
                                                                                      (shen/if
                                                                                       (shen/= 'shen\.choicepoint! V3352)
                                                                                       (shen/let V3353
                                                                                                 (shen/shen\.lazyderef
                                                                                                  (nthcdr 1 V3351)
                                                                                                  V3902)
                                                                                                 (shen/if
                                                                                                  (shen/cons\? V3353)
                                                                                                  (shen/let Action
                                                                                                            (shen/hd V3353)
                                                                                                            (shen/let V3354
                                                                                                                      (shen/shen\.lazyderef
                                                                                                                       (nthcdr 1 V3353)
                                                                                                                       V3902)
                                                                                                                      (shen/if
                                                                                                                       (shen/internal/predicate->shen
                                                                                                                        (null V3354))
                                                                                                                       (shen/do
                                                                                                                        (shen/shen\.incinfs)
                                                                                                                        (shen/cut Throwcontrol V3902
                                                                                                                                  (shen/freeze
                                                                                                                                   (shen/shen\.t*-action
                                                                                                                                    (list 'where
                                                                                                                                          (list 'not
                                                                                                                                                (list
                                                                                                                                                 (list '= Action)
                                                                                                                                                 (list 'fail)))
                                                                                                                                          Action)
                                                                                                                                    V3900 V3901 V3902 V3903))))
                                                                                                                       'false)))
                                                                                                  'false))
                                                                                       'false))
                                                                            'false))
                                                                 (shen/if
                                                                  (shen/= Case 'false)
                                                                  (shen/do
                                                                   (shen/shen\.incinfs)
                                                                   (shen/shen\.t*
                                                                    (list V3899 ': V3900)
                                                                    V3901 V3902 V3903))
                                                                  Case))
                                                       Case))
                                            Case)))))
(defun shen/findall
    (V3909 V3910 V3911 V3912 V3913)
  (shen/let B
            (shen/shen\.newpv V3912)
            (shen/let A
                      (shen/shen\.newpv V3912)
                      (shen/do
                       (shen/shen\.incinfs)
                       (shen/bind A
                                  (shen/gensym 'shen\.a)
                                  V3912
                                  (shen/freeze
                                   (shen/bind B
                                              (shen/set
                                               (shen/shen\.lazyderef A V3912)
                                               nil)
                                              V3912
                                              (shen/freeze
                                               (shen/shen\.findallhelp V3909 V3910 V3911 A V3912 V3913)))))))))
(defun shen/shen\.findallhelp
    (V3920 V3921 V3922 V3923 V3924 V3925)
  (shen/let Case
            (shen/do
             (shen/shen\.incinfs)
             (shen/call V3921 V3924
                        (shen/freeze
                         (shen/shen\.remember V3923 V3920 V3924
                                              (shen/freeze
                                               (shen/fwhen 'false V3924 V3925))))))
            (shen/if
             (shen/= Case 'false)
             (shen/do
              (shen/shen\.incinfs)
              (shen/bind V3922
                         (shen/value
                          (shen/shen\.lazyderef V3923 V3924))
                         V3924 V3925))
             Case)))
(defun shen/shen\.remember
    (V3930 V3931 V3932 V3933)
  (shen/let B
            (shen/shen\.newpv V3932)
            (shen/do
             (shen/shen\.incinfs)
             (shen/bind B
                        (shen/set
                         (shen/shen\.deref V3930 V3932)
                         (append
                          (list
                           (shen/shen\.deref V3931 V3932))
                          (shen/value
                           (shen/shen\.deref V3930 V3932))))
                        V3932 V3933))))
(defun shen/declare
    (V4123 V4124)
  (shen/let Record
            (shen/set 'shen\.*signedfuncs*
                      (append
                       (list
                        (append
                         (list V4123)
                         V4124))
                       (shen/value 'shen\.*signedfuncs*)))
            (shen/let Variancy
                      (shen/trap-error
                       (shen/shen\.variancy-test V4123 V4124)
                       (shen/lambda E 'shen\.skip))
                      (shen/let Type
                                (shen/shen\.rcons_form
                                 (shen/shen\.demodulate V4124))
                                (shen/let F*
                                          (shen/concat 'shen\.type-signature-of- V4123)
                                          (shen/let Parameters
                                                    (shen/shen\.parameters 1)
                                                    (shen/let Clause
                                                              (list
                                                               (list F* 'X)
                                                               ':-
                                                               (list
                                                                (list 'unify! 'X Type)))
                                                              (shen/let AUM_instruction
                                                                        (shen/shen\.aum Clause Parameters)
                                                                        (shen/let Code
                                                                                  (shen/shen\.aum_to_shen AUM_instruction)
                                                                                  (shen/let ShenDef
                                                                                            (append
                                                                                             (list 'define F*)
                                                                                             (shen/append Parameters
                                                                                                          (shen/append
                                                                                                           (list 'ProcessN 'Continuation)
                                                                                                           (list '-> Code))))
                                                                                            (shen/let Eval
                                                                                                      (shen/shen\.eval-without-macros ShenDef)
                                                                                                      V4123)))))))))))
(defun shen/shen\.demodulate
    (V4126)
  (cl-flet
      ((tail-trampoline
        (V4126)
        (shen/let Demod
                  (shen/shen\.walk
                   (shen/value 'shen\.*demodulation-function*)
                   V4126)
                  (shen/if
                   (shen/= Demod V4126)
                   V4126
                   (vector
                    (list Demod))))))
    (let
        ((result
          (funcall #'tail-trampoline V4126)))
      (while
          (vectorp result)
        (setq result
              (apply #'tail-trampoline
                     (aref result 0))))
      result)))
(defun shen/shen\.variancy-test
    (V4129 V4130)
  (shen/let TypeF
            (shen/shen\.typecheck V4129 'B)
            (shen/let Check
                      (shen/if
                       (shen/= 'symbol TypeF)
                       'shen\.skip
                       (shen/if
                        (shen/shen\.variant\? TypeF V4130)
                        'shen\.skip
                        (shen/shen\.prhush
                         (shen/cn "warning: changing the type of "
                                  (shen/shen\.app V4129 " may create errors\n" 'shen\.a))
                         (shen/stoutput))))
                      'shen\.skip)))
(defun shen/shen\.variant\?
    (V4143 V4144)
  (cl-flet
      ((tail-trampoline
        (V4143 V4144)
        (shen/cond
         ((shen/= V4144 V4143)
          'true)
         ((shen/and
           (shen/cons\? V4143)
           (shen/and
            (shen/cons\? V4144)
            (shen/=
             (shen/hd V4144)
             (shen/hd V4143))))
          (vector
           (list
            (nthcdr 1 V4143)
            (nthcdr 1 V4144))))
         ((shen/and
           (shen/cons\? V4143)
           (shen/and
            (shen/cons\? V4144)
            (shen/and
             (shen/shen\.pvar\?
              (shen/hd V4143))
             (shen/variable\?
              (shen/hd V4144)))))
          (vector
           (list
            (shen/subst 'shen\.a
                        (shen/hd V4143)
                        (nthcdr 1 V4143))
            (shen/subst 'shen\.a
                        (shen/hd V4144)
                        (nthcdr 1 V4144)))))
         ((shen/and
           (shen/cons\? V4143)
           (shen/and
            (shen/cons\?
             (shen/hd V4143))
            (shen/and
             (shen/cons\? V4144)
             (shen/cons\?
              (shen/hd V4144)))))
          (vector
           (list
            (shen/append
             (shen/hd V4143)
             (nthcdr 1 V4143))
            (shen/append
             (shen/hd V4144)
             (nthcdr 1 V4144)))))
         (shen/true 'false))))
    (let
        ((result
          (funcall #'tail-trampoline V4143 V4144)))
      (while
          (vectorp result)
        (setq result
              (apply #'tail-trampoline
                     (aref result 0))))
      result)))
(shen/declare 'absvector\?
              (list 'A '--> 'boolean))
(shen/declare 'adjoin
              (list 'A '-->
                    (list
                     (list 'list 'A)
                     '-->
                     (list 'list 'A))))
(shen/declare 'and
              (list 'boolean '-->
                    (list 'boolean '--> 'boolean)))
(shen/declare 'shen\.app
              (list 'A '-->
                    (list 'string '-->
                          (list 'symbol '--> 'string))))
(shen/declare 'append
              (list
               (list 'list 'A)
               '-->
               (list
                (list 'list 'A)
                '-->
                (list 'list 'A))))
(shen/declare 'arity
              (list 'A '--> 'number))
(shen/declare 'assoc
              (list 'A '-->
                    (list
                     (list 'list
                           (list 'list 'A))
                     '-->
                     (list 'list 'A))))
(shen/declare 'boolean\?
              (list 'A '--> 'boolean))
(shen/declare 'bound\?
              (list 'symbol '--> 'boolean))
(shen/declare 'cd
              (list 'string '--> 'string))
(shen/declare 'close
              (list
               (list 'stream 'A)
               '-->
               (list 'list 'B)))
(shen/declare 'cn
              (list 'string '-->
                    (list 'string '--> 'string)))
(shen/declare 'compile
              (list
               (list 'A 'shen\.==> 'B)
               '-->
               (list 'A '-->
                     (list
                      (list 'A '--> 'B)
                      '--> 'B))))
(shen/declare 'cons\?
              (list 'A '--> 'boolean))
(shen/declare 'destroy
              (list
               (list 'A '--> 'B)
               '--> 'symbol))
(shen/declare 'difference
              (list
               (list 'list 'A)
               '-->
               (list
                (list 'list 'A)
                '-->
                (list 'list 'A))))
(shen/declare 'do
              (list 'A '-->
                    (list 'B '--> 'B)))
(shen/declare '<e>
              (list
               (list 'list 'A)
               'shen\.==>
               (list 'list 'B)))
(shen/declare '<!>
              (list
               (list 'list 'A)
               'shen\.==>
               (list 'list 'A)))
(shen/declare 'element\?
              (list 'A '-->
                    (list
                     (list 'list 'A)
                     '--> 'boolean)))
(shen/declare 'empty\?
              (list 'A '--> 'boolean))
(shen/declare 'enable-type-theory
              (list 'symbol '--> 'boolean))
(shen/declare 'external
              (list 'symbol '-->
                    (list 'list 'symbol)))
(shen/declare 'error-to-string
              (list 'exception '--> 'string))
(shen/declare 'explode
              (list 'A '-->
                    (list 'list 'string)))
(shen/declare 'fail
              (list '--> 'symbol))
(shen/declare 'fail-if
              (list
               (list 'symbol '--> 'boolean)
               '-->
               (list 'symbol '--> 'symbol)))
(shen/declare 'fix
              (list
               (list 'A '--> 'A)
               '-->
               (list 'A '--> 'A)))
(shen/declare 'freeze
              (list 'A '-->
                    (list 'lazy 'A)))
(shen/declare 'fst
              (list
               (list 'A '* 'B)
               '--> 'A))
(shen/declare 'function
              (list
               (list 'A '--> 'B)
               '-->
               (list 'A '--> 'B)))
(shen/declare 'gensym
              (list 'symbol '--> 'symbol))
(shen/declare '<-vector
              (list
               (list 'vector 'A)
               '-->
               (list 'number '--> 'A)))
(shen/declare 'vector->
              (list
               (list 'vector 'A)
               '-->
               (list 'number '-->
                     (list 'A '-->
                           (list 'vector 'A)))))
(shen/declare 'vector
              (list 'number '-->
                    (list 'vector 'A)))
(shen/declare 'get-time
              (list 'symbol '--> 'number))
(shen/declare 'hash
              (list 'A '-->
                    (list 'number '--> 'number)))
(shen/declare 'head
              (list
               (list 'list 'A)
               '--> 'A))
(shen/declare 'hdv
              (list
               (list 'vector 'A)
               '--> 'A))
(shen/declare 'hdstr
              (list 'string '--> 'string))
(shen/declare 'if
              (list 'boolean '-->
                    (list 'A '-->
                          (list 'A '--> 'A))))
(shen/declare 'it
              (list '--> 'string))
(shen/declare 'implementation
              (list '--> 'string))
(shen/declare 'include
              (list
               (list 'list 'symbol)
               '-->
               (list 'list 'symbol)))
(shen/declare 'include-all-but
              (list
               (list 'list 'symbol)
               '-->
               (list 'list 'symbol)))
(shen/declare 'inferences
              (list '--> 'number))
(shen/declare 'shen\.insert
              (list 'A '-->
                    (list 'string '--> 'string)))
(shen/declare 'integer\?
              (list 'A '--> 'boolean))
(shen/declare 'internal
              (list 'symbol '-->
                    (list 'list 'symbol)))
(shen/declare 'intersection
              (list
               (list 'list 'A)
               '-->
               (list
                (list 'list 'A)
                '-->
                (list 'list 'A))))
(shen/declare 'kill
              (list '--> 'A))
(shen/declare 'language
              (list '--> 'string))
(shen/declare 'length
              (list
               (list 'list 'A)
               '--> 'number))
(shen/declare 'limit
              (list
               (list 'vector 'A)
               '--> 'number))
(shen/declare 'load
              (list 'string '--> 'symbol))
(shen/declare 'map
              (list
               (list 'A '--> 'B)
               '-->
               (list
                (list 'list 'A)
                '-->
                (list 'list 'B))))
(shen/declare 'mapcan
              (list
               (list 'A '-->
                     (list 'list 'B))
               '-->
               (list
                (list 'list 'A)
                '-->
                (list 'list 'B))))
(shen/declare 'maxinferences
              (list 'number '--> 'number))
(shen/declare 'n->string
              (list 'number '--> 'string))
(shen/declare 'nl
              (list 'number '--> 'number))
(shen/declare 'not
              (list 'boolean '--> 'boolean))
(shen/declare 'nth
              (list 'number '-->
                    (list
                     (list 'list 'A)
                     '--> 'A)))
(shen/declare 'number\?
              (list 'A '--> 'boolean))
(shen/declare 'occurrences
              (list 'A '-->
                    (list 'B '--> 'number)))
(shen/declare 'occurs-check
              (list 'symbol '--> 'boolean))
(shen/declare 'optimise
              (list 'symbol '--> 'boolean))
(shen/declare 'or
              (list 'boolean '-->
                    (list 'boolean '--> 'boolean)))
(shen/declare 'os
              (list '--> 'string))
(shen/declare 'package\?
              (list 'symbol '--> 'boolean))
(shen/declare 'port
              (list '--> 'string))
(shen/declare 'porters
              (list '--> 'string))
(shen/declare 'pos
              (list 'string '-->
                    (list 'number '--> 'string)))
(shen/declare 'pr
              (list 'string '-->
                    (list
                     (list 'stream 'out)
                     '--> 'string)))
(shen/declare 'print
              (list 'A '--> 'A))
(shen/declare 'profile
              (list
               (list 'A '--> 'B)
               '-->
               (list 'A '--> 'B)))
(shen/declare 'preclude
              (list
               (list 'list 'symbol)
               '-->
               (list 'list 'symbol)))
(shen/declare 'shen\.proc-nl
              (list 'string '--> 'string))
(shen/declare 'profile-results
              (list
               (list 'A '--> 'B)
               '-->
               (list
                (list 'A '--> 'B)
                '* 'number)))
(shen/declare 'protect
              (list 'symbol '--> 'symbol))
(shen/declare 'preclude-all-but
              (list
               (list 'list 'symbol)
               '-->
               (list 'list 'symbol)))
(shen/declare 'shen\.prhush
              (list 'string '-->
                    (list
                     (list 'stream 'out)
                     '--> 'string)))
(shen/declare 'ps
              (list 'symbol '-->
                    (list 'list 'unit)))
(shen/declare 'read
              (list
               (list 'stream 'in)
               '--> 'unit))
(shen/declare 'read-byte
              (list
               (list 'stream 'in)
               '--> 'number))
(shen/declare 'read-file-as-bytelist
              (list 'string '-->
                    (list 'list 'number)))
(shen/declare 'read-file-as-string
              (list 'string '--> 'string))
(shen/declare 'read-file
              (list 'string '-->
                    (list 'list 'unit)))
(shen/declare 'read-from-string
              (list 'string '-->
                    (list 'list 'unit)))
(shen/declare 'release
              (list '--> 'string))
(shen/declare 'remove
              (list 'A '-->
                    (list
                     (list 'list 'A)
                     '-->
                     (list 'list 'A))))
(shen/declare 'reverse
              (list
               (list 'list 'A)
               '-->
               (list 'list 'A)))
(shen/declare 'simple-error
              (list 'string '--> 'A))
(shen/declare 'snd
              (list
               (list 'A '* 'B)
               '--> 'B))
(shen/declare 'specialise
              (list 'symbol '--> 'symbol))
(shen/declare 'spy
              (list 'symbol '--> 'boolean))
(shen/declare 'step
              (list 'symbol '--> 'boolean))
(shen/declare 'stinput
              (list '-->
                    (list 'stream 'in)))
(shen/declare 'sterror
              (list '-->
                    (list 'stream 'out)))
(shen/declare 'stoutput
              (list '-->
                    (list 'stream 'out)))
(shen/declare 'string\?
              (list 'A '--> 'boolean))
(shen/declare 'str
              (list 'A '--> 'string))
(shen/declare 'string->n
              (list 'string '--> 'number))
(shen/declare 'string->symbol
              (list 'string '--> 'symbol))
(shen/declare 'sum
              (list
               (list 'list 'number)
               '--> 'number))
(shen/declare 'symbol\?
              (list 'A '--> 'boolean))
(shen/declare 'systemf
              (list 'symbol '--> 'symbol))
(shen/declare 'tail
              (list
               (list 'list 'A)
               '-->
               (list 'list 'A)))
(shen/declare 'tlstr
              (list 'string '--> 'string))
(shen/declare 'tlv
              (list
               (list 'vector 'A)
               '-->
               (list 'vector 'A)))
(shen/declare 'tc
              (list 'symbol '--> 'boolean))
(shen/declare 'tc\?
              (list '--> 'boolean))
(shen/declare 'thaw
              (list
               (list 'lazy 'A)
               '--> 'A))
(shen/declare 'track
              (list 'symbol '--> 'symbol))
(shen/declare 'trap-error
              (list 'A '-->
                    (list
                     (list 'exception '--> 'A)
                     '--> 'A)))
(shen/declare 'tuple\?
              (list 'A '--> 'boolean))
(shen/declare 'undefmacro
              (list 'symbol '--> 'symbol))
(shen/declare 'union
              (list
               (list 'list 'A)
               '-->
               (list
                (list 'list 'A)
                '-->
                (list 'list 'A))))
(shen/declare 'unprofile
              (list
               (list 'A '--> 'B)
               '-->
               (list 'A '--> 'B)))
(shen/declare 'untrack
              (list 'symbol '--> 'symbol))
(shen/declare 'unspecialise
              (list 'symbol '--> 'symbol))
(shen/declare 'variable\?
              (list 'A '--> 'boolean))
(shen/declare 'vector\?
              (list 'A '--> 'boolean))
(shen/declare 'version
              (list '--> 'string))
(shen/declare 'write-to-file
              (list 'string '-->
                    (list 'A '--> 'A)))
(shen/declare 'write-byte
              (list 'number '-->
                    (list
                     (list 'stream 'out)
                     '--> 'number)))
(shen/declare 'y-or-n\?
              (list 'string '--> 'boolean))
(shen/declare '>
              (list 'number '-->
                    (list 'number '--> 'boolean)))
(shen/declare '<
              (list 'number '-->
                    (list 'number '--> 'boolean)))
(shen/declare '>=
              (list 'number '-->
                    (list 'number '--> 'boolean)))
(shen/declare '<=
              (list 'number '-->
                    (list 'number '--> 'boolean)))
(shen/declare '=
              (list 'A '-->
                    (list 'A '--> 'boolean)))
(shen/declare '+
              (list 'number '-->
                    (list 'number '--> 'number)))
(shen/declare '/
              (list 'number '-->
                    (list 'number '--> 'number)))
(shen/declare '-
              (list 'number '-->
                    (list 'number '--> 'number)))
(shen/declare '*
              (list 'number '-->
                    (list 'number '--> 'number)))
(shen/declare '==
              (list 'A '-->
                    (list 'B '--> 'boolean)))
(provide 'shen-elisp)
