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

    Convert a Java expression from a Java primitive type.

    Signature
    (atj-convert-expr-from-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 calls of Java primitive deconstructors like byte-value->int.

    If the type is boolean, the deconstructor is boolean-value->bool, whose input ATJ type is :jboolean and whose output ATJ type is :aboolean. If :guards is t, ACL2 booleans are represented as Java booleans, and :aboolean is mapped to Java boolean like :jboolean; 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 via a Java conditional expression.

    If the type is char, byte, short, int, or long, we convert it to an Acl2Integer by calling make. The method called is Acl2Integer.make(int) if the type is char, byte, short, or int, while it is Acl2Integer.make(long) if the type is long.

    If the type is float or 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-from-jprim

    (defun atj-convert-expr-from-jprim (expr type guards$)
     (declare (xargs :guard (and (jexprp expr)
                                 (primitive-typep type)
                                 (booleanp guards$))))
     (let ((__function__ 'atj-convert-expr-from-jprim))
      (declare (ignorable __function__))
      (case (primitive-type-kind type)
       (:boolean (if guards$ (jexpr-fix expr)
                   (jexpr-cond expr (atj-gen-symbol t t nil)
                               (atj-gen-symbol nil t nil))))
       ((:char :byte :short :int :long)
        (jexpr-smethod *aij-type-int* "make" (list expr)))
       (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-from-jprim

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

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

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

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

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

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

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

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

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

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

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

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

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