• 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-gen-shallow-not-call

    Generate a shallowly embedded ACL2 not call.

    Signature
    (atj-gen-shallow-not-call arg-block 
                              arg-expr arg-term src-types dst-types) 
     
      → 
    (mv block expr)
    Arguments
    arg-block — Guard (jblockp arg-block).
    arg-expr — Guard (jexprp arg-expr).
    arg-term — Guard (pseudo-termp arg-term).
    src-types — Guard (atj-type-listp src-types).
    dst-types — Guard (atj-type-listp dst-types).
    Returns
    block — Type (jblockp block).
    expr — Type (jexprp expr).

    This is called only if :guards is t. This is called after translating the argument of not to Java. The resulting block and expression are passed as parameters here, along with the original ACL2 term that is the not argument.

    If the argument has type :aboolean, since when :guards is t ACL2 booleans are mapped to Java booleans, we apply Java's logical complement operator. If instead the argument has a different type, which must be an :acl2 type, we convert the resulting expression to a Java boolean by comparing it with nil for equality: the result is a Java boolean, which is appropriate because when :guards is t we map ACL2 booleans to Java booleans.

    In any case, we never generate a call of the Java method for not. That method is still generated for external code to call though.

    Definitions and Theorems

    Function: atj-gen-shallow-not-call

    (defun atj-gen-shallow-not-call
           (arg-block arg-expr arg-term src-types dst-types)
     (declare (xargs :guard (and (jblockp arg-block)
                                 (jexprp arg-expr)
                                 (pseudo-termp arg-term)
                                 (atj-type-listp src-types)
                                 (atj-type-listp dst-types))))
     (declare (xargs :guard (and (consp src-types)
                                 (consp dst-types))))
     (let ((__function__ 'atj-gen-shallow-not-call))
       (declare (ignorable __function__))
       (b* (((mv & & arg-types)
             (atj-type-unwrap-term arg-term))
            (expr (if (equal arg-types
                             (list (atj-type-acl2 (atj-atype-boolean))))
                      (jexpr-unary (junop-logcompl) arg-expr)
                    (jexpr-binary (jbinop-eq)
                                  arg-expr (atj-gen-symbol nil t nil))))
            (src-type (atj-type-list-to-type src-types))
            (dst-type (atj-type-list-to-type dst-types)))
         (mv (jblock-fix arg-block)
             (atj-adapt-expr-to-type expr src-type dst-type t)))))

    Theorem: jblockp-of-atj-gen-shallow-not-call.block

    (defthm jblockp-of-atj-gen-shallow-not-call.block
      (b* (((mv common-lisp::?block ?expr)
            (atj-gen-shallow-not-call
                 arg-block
                 arg-expr arg-term src-types dst-types)))
        (jblockp block))
      :rule-classes :rewrite)

    Theorem: jexprp-of-atj-gen-shallow-not-call.expr

    (defthm jexprp-of-atj-gen-shallow-not-call.expr
      (b* (((mv common-lisp::?block ?expr)
            (atj-gen-shallow-not-call
                 arg-block
                 arg-expr arg-term src-types dst-types)))
        (jexprp expr))
      :rule-classes :rewrite)