• 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-to-jprim

    Convert a Java expression to a Java primitive type.

    Signature
    (atj-convert-expr-to-jprim expr type guards$) → new-expr
    Arguments
    expr — Guard (jexprp expr).
    type — Guard (primitive-typep type).
    guards$ — Guard (booleanp guards$).
    Returns
    new-expr — Type (jexprp new-expr).

    This is used to translate some calls of Java primitive constructors like byte-value. (Other calls are translated to Java literals instead.)

    If the type is boolean, the constructor is boolean-value, whose input ATJ type is :aboolean. If :guards is t, ACL2 booleans are represented as Java booleans, and :aboolean is mapped to Java boolean, so the expression must have type boolean already; thus, the conversion is a no-op. If :guards is nil, ACL2 booleans are represented as Acl2Symbols, and :aboolean is mapped to Acl2Symbol; thus, we convert the expression by comparing it with (the Java representation of) nil.

    If the type is char, byte, or short, the input expression must have type Acl2Integer; see the input and output types of char-value, byte-value, and short-value. In this case, we convert the input expression by extracting a Java int from the Acl2Integer and we cast to the appropriate primitive type.

    If the type is int, the input expression must have type Acl2Integer; see the input and output types of int-value. In this case, we convert the input expression by extracting a Java int from the Acl2Integer.

    If the type is long, the input expression must have type Acl2Integer; see the input and output types of long-value. In this case, we convert the input expression by extracting a Java long from the Acl2Integer.

    If the type is float and double, an error occurs. These conversions are not supported yet, because we have only an abstract model of these two types for now.

    Definitions and Theorems

    Function: atj-convert-expr-to-jprim

    (defun atj-convert-expr-to-jprim (expr type guards$)
     (declare (xargs :guard (and (jexprp expr)
                                 (primitive-typep type)
                                 (booleanp guards$))))
     (let ((__function__ 'atj-convert-expr-to-jprim))
      (declare (ignorable __function__))
      (case (primitive-type-kind type)
       (:boolean (if guards$ (jexpr-fix expr)
                   (jexpr-binary (jbinop-ne)
                                 expr (atj-gen-symbol nil t nil))))
       ((:char :byte :short)
        (jexpr-cast (jtype-prim type)
                    (jexpr-imethod (jexpr-cast *aij-type-int* expr)
                                   "getJavaInt" nil)))
       (:int (jexpr-imethod (jexpr-cast *aij-type-int* expr)
                            "getJavaInt" nil))
       (:long (jexpr-imethod (jexpr-cast *aij-type-int* expr)
                             "getJavaLong" nil))
       (t
        (prog2$
         (raise
          "Internal error: ~
                           cannot convert expression ~x0 to type ~x1."
          expr type)
         (ec-call (jexpr-fix :irrelevant)))))))

    Theorem: jexprp-of-atj-convert-expr-to-jprim

    (defthm jexprp-of-atj-convert-expr-to-jprim
      (b* ((new-expr (atj-convert-expr-to-jprim expr type guards$)))
        (jexprp new-expr))
      :rule-classes :rewrite)

    Theorem: atj-convert-expr-to-jprim-of-jexpr-fix-expr

    (defthm atj-convert-expr-to-jprim-of-jexpr-fix-expr
      (equal (atj-convert-expr-to-jprim (jexpr-fix expr)
                                        type guards$)
             (atj-convert-expr-to-jprim expr type guards$)))

    Theorem: atj-convert-expr-to-jprim-jexpr-equiv-congruence-on-expr

    (defthm atj-convert-expr-to-jprim-jexpr-equiv-congruence-on-expr
      (implies
           (jexpr-equiv expr expr-equiv)
           (equal (atj-convert-expr-to-jprim expr type guards$)
                  (atj-convert-expr-to-jprim expr-equiv type guards$)))
      :rule-classes :congruence)

    Theorem: atj-convert-expr-to-jprim-of-primitive-type-fix-type

    (defthm atj-convert-expr-to-jprim-of-primitive-type-fix-type
      (equal (atj-convert-expr-to-jprim expr (primitive-type-fix type)
                                        guards$)
             (atj-convert-expr-to-jprim expr type guards$)))

    Theorem: atj-convert-expr-to-jprim-primitive-type-equiv-congruence-on-type

    (defthm
      atj-convert-expr-to-jprim-primitive-type-equiv-congruence-on-type
      (implies
           (primitive-type-equiv type type-equiv)
           (equal (atj-convert-expr-to-jprim expr type guards$)
                  (atj-convert-expr-to-jprim expr type-equiv guards$)))
      :rule-classes :congruence)

    Theorem: atj-convert-expr-to-jprim-of-bool-fix-guards$

    (defthm atj-convert-expr-to-jprim-of-bool-fix-guards$
     (equal
          (atj-convert-expr-to-jprim expr type (acl2::bool-fix guards$))
          (atj-convert-expr-to-jprim expr type guards$)))

    Theorem: atj-convert-expr-to-jprim-iff-congruence-on-guards$

    (defthm atj-convert-expr-to-jprim-iff-congruence-on-guards$
      (implies
           (iff guards$ guards$-equiv)
           (equal (atj-convert-expr-to-jprim expr type guards$)
                  (atj-convert-expr-to-jprim expr type guards$-equiv)))
      :rule-classes :congruence)