• Top
    • Documentation
    • Books
    • Boolean-reasoning
    • Projects
    • Debugging
    • Community
    • Std
    • Proof-automation
    • Macro-libraries
    • ACL2
    • Interfacing-tools
    • Hardware-verification
    • Software-verification
      • Kestrel-books
        • Crypto-hdwallet
        • Apt
        • Error-checking
        • Fty-extensions
        • Isar
        • Kestrel-utilities
        • Set
        • C
        • Soft
        • Bv
        • Imp-language
        • Ethereum
        • 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-gen-shallow-term-fns
                  • String-jmethodlist-alistp
                  • Atj-gen-shallow-fndef-method
                  • String-jfieldlist-alistp
                  • Atj-gen-shallow-test-code
                  • Atj-adapt-expr-to-type
                  • Atj-gen-shallow-fn-call
                  • Atj-check-marked-annotated-mv-let-call
                  • Atj-gen-shallow-main-class
                  • Atj-gen-shallow-fnnative-method
                  • Atj-gen-shallow-synonym-method
                  • Atj-gen-shallow-if-call
                  • Atj-gen-shallow-and-call
                  • Atj-gen-shallow-pkg-methods
                  • Atj-convert-expr-to-jprim
                  • Atj-gen-shallow-or-call
                  • Atj-convert-expr-from-jprimarr-method
                    • Atj-adapt-expr-to-types
                    • Atj-gen-shallow-all-pkg-methods
                    • Atj-convert-expr-to-jprimarr-method
                    • Atj-gen-shallow-fndef-all-methods
                    • Atj-convert-expr-from-jprim
                    • Atj-gen-shallow-mv-class
                    • Atj-gen-shallow-main-cunit
                    • Atj-gen-shallow-fndef-methods
                    • Atj-gen-shallow-mv-class-name
                    • Atj-shallow-fns-that-may-throw
                    • Atj-gen-shallow-term
                    • Atj-gen-shallow-let-bindings
                    • Atj-gen-shallow-fn-methods
                    • Atj-gen-shallow-jprimarr-new-init-call
                    • Atj-gen-shallow-fnname
                    • Atj-gen-shallow-all-fn-methods
                    • Atj-gen-shallow-not-call
                    • Atj-fnnative-method-name
                    • Atj-gen-shallow-mv-let
                    • Atj-gen-shallow-jprim-constr-call
                    • Atj-gen-shallow-jprimarr-write-call
                    • Atj-gen-shallow-fnnative-all-methods
                    • Atj-gen-shallow-pkg-class
                    • Atj-gen-shallow-jprimarr-length-call
                    • Atj-gen-shallow-pkg-fields
                    • Atj-all-mv-output-types
                    • Atj-gen-shallow-mv-call
                    • Atj-gen-shallow-jprim-binop-call
                    • Atj-gen-shallow-jprim-conv-call
                    • Atj-gen-shallow-primarray-write-method
                    • Atj-gen-shallow-mv-fields
                    • Atj-gen-shallow-jprimarr-read-call
                    • Atj-gen-shallow-jprimarr-new-len-call
                    • Atj-gen-shallow-jprimarr-conv-tolist-call
                    • Atj-gen-shallow-jprimarr-conv-fromlist-call
                    • Atj-gen-shallow-synonym-all-methods
                    • Atj-gen-shallow-jprim-deconstr-call
                    • Atj-gen-shallow-all-pkg-fields
                    • Atj-gen-shallow-test-code-asgs
                    • Atj-gen-shallow-lambda
                    • Atj-gen-shallow-jprim-unop-call
                    • Atj-jprim-binop-fn-to-jbinop
                    • Atj-gen-shallow-mv-asgs
                    • Atj-gen-shallow-env-class
                    • Atj-gen-shallow-mv-params
                    • Atj-gen-shallow-fnnative-methods
                    • Atj-gen-shallow-pkg-classes
                    • Atj-gen-shallow-env-cunit
                    • Atj-gen-shallow-all-synonym-methods
                    • Atj-convert-expr-to-jprimarr
                    • Atj-convert-expr-from-jprimarr
                    • Atj-jprim-constr-fn-of-qconst-to-expr
                    • Atj-gen-shallow-test-code-mv-asgs
                    • Atj-gen-shallow-synonym-methods
                    • Atj-gen-shallow-synonym-method-params
                    • Atj-convert-expr-to-jprimarr-method-name
                    • Atj-convert-expr-from-jprimarr-method-name
                    • Atj-jexpr-list-to-3-jexprs
                    • Atj-jblock-list-to-3-jblocks
                    • Atj-gen-shallow-test-code-comps
                    • Atj-jprim-conv-fn-to-jtype
                    • Atj-gen-shallow-terms
                    • Atj-gen-shallow-mv-field-name
                    • Atj-adapt-exprs-to-types
                    • Atj-jblock-list-to-2-jblocks
                    • Atj-gen-shallow-primarray-write-methods
                    • Atj-gen-shallow-mv-classes
                    • Atj-gen-shallow-jtype
                    • Atj-gen-shallow-build-method
                    • Atj-jexpr-list-to-2-jexprs
                    • Atj-jprimarr-write-to-method-name
                    • Atj-gen-shallow-all-jprimarr-conv-methods
                    • Atj-jprimarr-new-len-fn-to-comp-jtype
                    • Atj-jprimarr-new-init-fn-to-comp-jtype
                    • Atj-jprim-unop-fn-to-junop
                    • *atj-gen-cond-exprs*
                    • Atj-primarray-write-method-name
                    • Atj-gen-shallow-jprimarr-fromlist-methods
                    • Atj-gen-shallow-jprimarr-tolist-methods
                    • Atj-gen-shallow-mv-classes-guard
                    • *atj-mv-singleton-field-name*
                    • *atj-mv-factory-method-name*
                  • 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-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
          • Riscv
          • Bitcoin
          • Zcash
          • Yul
          • ACL2-programming-language
          • Prime-fields
          • Json
          • Syntheto
          • File-io-light
          • Cryptography
          • Number-theory
          • Axe
          • Lists-light
          • Builtins
          • Solidity
          • Helpers
          • Htclient
          • Typed-lists-light
          • Arithmetic-light
        • X86isa
        • Axe
        • Execloader
      • Math
      • Testing-utilities
    • Atj-shallow-code-generation

    Atj-convert-expr-from-jprimarr-method

    Method to convert a Java expression from a Java primitive array type.

    Signature
    (atj-convert-expr-from-jprimarr-method type) → method
    Arguments
    type — Guard (primitive-typep type).
    Returns
    method — Type (jmethodp method).

    This is used to translate calls of Java primitive array conversions like byte-array-to-sbyte8-list.

    We want to convert the array to a corresponding ACL2 list, whose elements are instances of (subtypes of) Acl2Value obtained by converting the components of the array. This should be done with a Java loop, of course. However, we want the conversion code generated from the deconstructors to be a relatively simple ``inline'' expression. Thus, we generate private methods to perform the loop conversion, and translate the deconstructor calls to calls of these methods.

    This function generates these methods, one for each Java primitive type except float and double. These methods are generated directly in the main Java class. The method names are chosen to avoid conflicts with other generated methods in the same class.

    The method has the following form:

    private static Acl2Value <name>(<type>[] array) {
        Acl2Value result = Acl2Symbol.NIL;
        int index = array.length - 1;
        while (index >= 0) {
            result = Acl2ConsPair.make(<conv-type(array[index])>, result);
            --index;
        }
        return result;
    }

    where <type> is a Java primitive type and <conv-type(...)> is the conversion code generated by atj-convert-expr-from-jprim for that primitive type. We pass nil as guards$ argument to that function, even though this array conversion method is only relevant when :guards is t, because, in the case of boolean arrays, we need to actually convert to the Acl2Symbols in the list from Java booleans.

    Note that we generate an expression name for array.length, because grammatically this is not a field access expression in Java: it cannot be generated from the nonterminal field-acces; it can be generated from the nonterminal expression-name.

    Definitions and Theorems

    Function: atj-convert-expr-from-jprimarr-method

    (defun atj-convert-expr-from-jprimarr-method (type)
     (declare (xargs :guard (primitive-typep type)))
     (let ((__function__ 'atj-convert-expr-from-jprimarr-method))
      (declare (ignorable __function__))
      (b*
       ((method-name (atj-convert-expr-from-jprimarr-method-name type))
        (jtype (atj-type-to-jitype (atj-type-jprim type)))
        (array "array")
        (index "index")
        (result "result")
        (array[index] (jexpr-array (jexpr-name array)
                                   (jexpr-name index)))
        (conv-array[index]
             (atj-convert-expr-from-jprim array[index] type nil))
        (method-body
         (append
          (jblock-locvar *aij-type-value*
                         result (atj-gen-symbol nil t nil))
          (jblock-locvar
               (jtype-int)
               index
               (jexpr-binary (jbinop-sub)
                             (jexpr-name (str::cat array "." "length"))
                             (jexpr-literal-1)))
          (jblock-while
           (jexpr-binary (jbinop-ge)
                         (jexpr-name index)
                         (jexpr-literal-0))
           (append
                (jblock-asg
                     (jexpr-name result)
                     (jexpr-smethod
                          *aij-type-cons* "make"
                          (list conv-array[index] (jexpr-name result))))
                (jblock-expr (jexpr-unary (junop-predec)
                                          (jexpr-name index)))))
          (jblock-return (jexpr-name result)))))
       (make-jmethod
            :access (jaccess-private)
            :abstract? nil
            :static? t
            :final? nil
            :synchronized? nil
            :native? nil
            :strictfp? nil
            :result (jresult-type *aij-type-value*)
            :name method-name
            :params (list (jparam nil (jtype-array jtype) array))
            :throws nil
            :body method-body))))

    Theorem: jmethodp-of-atj-convert-expr-from-jprimarr-method

    (defthm jmethodp-of-atj-convert-expr-from-jprimarr-method
      (b* ((method (atj-convert-expr-from-jprimarr-method type)))
        (jmethodp method))
      :rule-classes :rewrite)

    Theorem: atj-convert-expr-from-jprimarr-method-of-primitive-type-fix-type

    (defthm
       atj-convert-expr-from-jprimarr-method-of-primitive-type-fix-type
     (equal
       (atj-convert-expr-from-jprimarr-method (primitive-type-fix type))
       (atj-convert-expr-from-jprimarr-method type)))

    Theorem: atj-convert-expr-from-jprimarr-method-primitive-type-equiv-congruence-on-type

    (defthm
     atj-convert-expr-from-jprimarr-method-primitive-type-equiv-congruence-on-type
     (implies
          (primitive-type-equiv type type-equiv)
          (equal (atj-convert-expr-from-jprimarr-method type)
                 (atj-convert-expr-from-jprimarr-method type-equiv)))
     :rule-classes :congruence)