• Top
    • Documentation
    • Books
    • Boolean-reasoning
    • Projects
    • Debugging
    • Std
    • Community
    • Proof-automation
    • ACL2
    • Macro-libraries
    • Interfacing-tools
    • Hardware-verification
    • Software-verification
      • Kestrel-books
        • Crypto-hdwallet
        • Apt
        • Error-checking
        • Fty-extensions
        • Isar
        • Kestrel-utilities
        • Set
        • Soft
        • C
        • Bv
        • Imp-language
        • Event-macros
        • Java
          • Atj
            • Atj-implementation
              • Atj-types
              • Atj-java-primitive-array-model
              • Atj-java-abstract-syntax
              • Atj-input-processing
              • Atj-java-pretty-printer
              • Atj-code-generation
                • Atj-gen-test-method
                • Atj-shallow-code-generation
                • Atj-common-code-generation
                • Atj-shallow-quoted-constant-generation
                • Atj-pre-translation
                • Atj-gen-everything
                • Atj-name-translation
                • Atj-gen-test-cunit
                • Atj-gen-test-class
                • Atj-gen-main-file
                • Atj-post-translation
                • Atj-deep-code-generation
                  • Atj-gen-deep-term-fns
                  • Atj-gen-deep-test-code
                  • Atj-gen-deep-fndef-method
                  • Atj-gen-deep-fnapp
                  • Atj-gen-deep-env-class
                    • Atj-gen-deep-env-cunit
                    • Atj-gen-deep-lambda
                    • Atj-gen-deep-qconst
                    • Atj-gen-deep-main-class
                    • Atj-gen-deep-term
                    • Atj-gen-deep-terms
                    • Atj-gen-deep-build-method
                    • Atj-gen-deep-call-method
                    • Atj-gen-deep-main-cunit
                    • Atj-gen-deep-fndef-method-name
                    • Atj-gen-deep-fndef-methods
                    • Atj-gen-deep-fndefs
                    • Atj-gen-deep-formals
                    • Atj-gen-deep-var
                  • Atj-gen-test-methods
                  • Atj-gen-test-file
                  • Atj-gen-env-file
                  • Atj-gen-output-subdir
                • Atj-java-primitives
                • Atj-java-primitive-arrays
                • Atj-type-macros
                • Atj-java-syntax-operations
                • Atj-fn
                • Atj-library-extensions
                • Atj-java-input-types
                • Atj-test-structures
                • Aij-notions
                • Atj-macro-definition
              • Atj-tutorial
            • Aij
            • Language
          • Bitcoin
          • Ethereum
          • Yul
          • Zcash
          • ACL2-programming-language
          • Prime-fields
          • Json
          • Syntheto
          • File-io-light
          • Cryptography
          • Number-theory
          • Lists-light
          • Axe
          • Builtins
          • Solidity
          • Helpers
          • Htclient
          • Typed-lists-light
          • Arithmetic-light
        • X86isa
        • Axe
        • Execloader
      • Math
      • Testing-utilities
    • Atj-deep-code-generation

    Atj-gen-deep-env-class

    Generate the declaration of the environment Java class, in the deep embedding approach.

    Signature
    (atj-gen-deep-env-class pkgs fns-to-translate 
                            guards$ java-class$ verbose$ wrld) 
     
      → 
    class
    Arguments
    pkgs — Guard (string-listp pkgs).
    fns-to-translate — Guard (symbol-listp fns-to-translate).
    guards$ — Guard (booleanp guards$).
    java-class$ — Guard (stringp java-class$).
    verbose$ — Guard (booleanp verbose$).
    wrld — Guard (plist-worldp wrld).
    Returns
    class — Type (jclassp class).

    This is a package-private class, whose purpose is to build the ACL2 environment. It starts with the build() method, so it is the first thing that shows up when looking at the file. Then there are the private methods to build the ACL2 packages and functions, called by the build() method.

    We remove any natively implemented function from fns-to-translate before calling the code that translated the Java function. This is because we only build representations of the ACL2 functions to be executed by AIJ's interpreter; the natively implemented functions are executed ``directly''.

    Definitions and Theorems

    Function: atj-gen-deep-env-class

    (defun atj-gen-deep-env-class
           (pkgs fns-to-translate
                 guards$ java-class$ verbose$ wrld)
     (declare (xargs :guard (and (string-listp pkgs)
                                 (symbol-listp fns-to-translate)
                                 (booleanp guards$)
                                 (stringp java-class$)
                                 (booleanp verbose$)
                                 (plist-worldp wrld))))
     (let ((__function__ 'atj-gen-deep-env-class))
      (declare (ignorable __function__))
      (b*
       (((run-when verbose$)
         (cw
           "~%Generate the Java methods to build the ACL2 packages:~%"))
        (pkg-methods (atj-gen-pkg-methods pkgs verbose$))
        (pkg-methods (mergesort-jmethods pkg-methods))
        (fns (set-difference-eq fns-to-translate *aij-natives*))
        ((run-when verbose$)
         (cw
          "~%Generate the Java methods to build the ACL2 functions:~%"))
        (fn-methods
             (atj-gen-deep-fndef-methods fns guards$ verbose$ wrld))
        (fn-methods (mergesort-jmethods fn-methods))
        ((run-when verbose$)
         (cw
          "~%Generate the Java class to build the ACL2 environment.~%"))
        (build-method (atj-gen-deep-build-method pkgs fns))
        (body-class
         (append
           (list (jcbody-element-member (jcmember-method build-method)))
           (jmethods-to-jcbody-elements pkg-methods)
           (jmethods-to-jcbody-elements fn-methods))))
       (make-jclass :access (jaccess-default)
                    :abstract? nil
                    :static? nil
                    :final? t
                    :strictfp? nil
                    :name (str::cat java-class$ "Environment")
                    :superclass? nil
                    :superinterfaces nil
                    :body body-class))))

    Theorem: jclassp-of-atj-gen-deep-env-class

    (defthm jclassp-of-atj-gen-deep-env-class
     (b*
      ((class
            (atj-gen-deep-env-class pkgs fns-to-translate
                                    guards$ java-class$ verbose$ wrld)))
      (jclassp class))
     :rule-classes :rewrite)