• 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
          • Syntax-for-tools
          • Atc
            • Atc-implementation
              • Atc-abstract-syntax
              • Atc-pretty-printer
              • Atc-event-and-code-generation
                • Atc-symbolic-computation-states
                • Atc-symbolic-execution-rules
                  • Atc-exec-expr-pure-rules
                  • Atc-exec-expr-when-asg-arrsub-rules-generation
                    • Integer-value-disjoint-rules
                    • Atc-uaconvert-values-rules
                    • Atc-exec-unary-nonpointer-rules-generation
                    • Atc-exec-unary-nonpointer-rules
                    • Atc-exec-expr-when-asg-indir-rules
                    • Atc-exec-expr-when-asg-arrsub-rules
                    • Atc-exec-cast-rules-generation
                    • Atc-exec-cast-rules
                    • Atc-exec-binary-strict-pure-rules-generation
                    • Atc-convert-integer-value-rules
                    • Atc-array-read-rules
                    • Array-value-disjoint-rules
                    • Atc-exec-expr-when-asg-indir-rule-generation
                    • Atc-identifier-rules
                    • Atc-object-designator-rules
                    • Atc-flexible-array-member-rules
                    • Atc-exec-stmt-rules
                    • Atc-exec-indir-rules
                    • Atc-uaconvert-values-rules-generation
                    • Atc-exec-arrsub-rules
                    • Value-bridge-theorems
                    • Atc-test-value-rules
                    • Atc-exec-const-rules
                    • *atc-integer-ops-2-return-rewrite-rules*
                    • *atc-integer-ops-2-type-prescription-rules*
                    • Atc-apconvert-rules
                    • Atc-integer-conv-rules
                    • Atc-adjust-type-rules
                    • Atc-exec-block-item-list-rules
                    • Atc-exec-arrsub-rules-generation
                    • Atc-exec-fun-rules
                    • Atc-static-variable-pointer-rules
                    • Atc-exec-indir-rules-generation
                    • Atc-exec-binary-strict-pure-rules
                    • Atc-array-write-rules
                    • Array-value-rules
                    • Atc-pointed-integer-rules
                    • Atc-array-length-rules
                    • *atc-exec-cast-rules*
                    • Atc-value-array->elemtype-rules
                    • Atc-limit-rules
                    • Type-of-value-under-array-predicates
                    • Atc-value-integer->get-rules
                    • Atc-distributivity-over-if-rewrite-rules
                    • *atc-integer-convs-type-prescription-rules*
                    • Atc-value-array->elements-rules
                    • Atc-syntaxp-hyp-for-expr-pure
                    • *atc-uaconvert-values-rules*
                    • *atc-integer-ops-1-return-rewrite-rules*
                    • *atc-integer-convs-return-rewrite-rules*
                    • Valuepred-when-value-kind
                    • Valuepred-to-type-of-value-equalities
                    • Atc-promote-value-rules
                    • *atc-integer-ops-1-type-prescription-rules*
                    • *atc-all-rules*
                    • Atc-integer-ifix-rules
                    • Atc-exec-expr-when-asg-ident-rules
                    • *atc-type-prescription-rules*
                    • Atc-hide-rules
                    • Type-of-value-when-valuepred
                    • Atc-value-integerp-rules
                    • Atc-not-error-rules
                    • Value-listp-when-valuepred-listp
                    • Value-kind-when-valuepred
                    • Atc-value-arithmeticp-rules
                    • Atc-type-kind-rules
                    • *atc-compound-recognizer-rules*
                    • Atc-value-pointer-rules
                    • Atc-boolean-equality-rules
                    • Atc-tyname-to-type-rules
                    • Atc-integer-size-rules
                    • Atc-init-scope-rules
                    • Atc-boolean-from-sint
                    • Valuep-when-valuepred
                    • Atc-if*-rules
                    • Atc-exec-ident-rules
                    • Atc-integer-const-rules
                    • Atc-sint-get-rules
                    • Atc-exec-expr-when-call-rules
                    • Atc-type-of-value-option-rules
                    • Atc-identifier-other-rules
                    • Atc-boolean-from-integer-return-rules
                    • *atc-exec-unary-nonpointer-rules*
                    • *atc-convert-integer-value-rules*
                    • Atc-lognot-sint-rules
                    • Atc-sint-from-boolean-rules
                    • Atc-value-optionp-rules
                    • Atc-type-of-value-rules
                    • Atc-exec-obj-declon-rules
                    • Atc-compustatep-rules
                    • Value-tau-rules
                    • Atc-valuep-rules
                    • Atc-exec-expr-pure-list-rules
                    • Atc-exec-block-item-rules
                    • Atc-boolean-fron/to-sint-rules
                    • *atc-other-executable-counterpart-rules*
                    • Value-promoted-arithmeticp-alt-def
                    • Atc-exec-initer-rules
                    • *atc-type-of-value-rules*
                    • *atc-identifier-rules*
                    • *atc-flexible-array-member-rules*
                    • *atc-exec-expr-pure-rules*
                    • *atc-boolean-from-integer-return-rules*
                    • *atc-array-read-rules*
                    • Valuep-possibilities
                    • Value-unsigned-integerp-alt-def
                    • Value-signed-integerp-alt-def
                    • Atc-value-listp-rules
                    • *atc-pointed-integers-type-prescription-rules*
                    • *atc-pointed-integer-rules*
                    • *atc-array-write-return-rewrite-rules*
                    • *atc-array-read-return-rewrite-rules*
                    • Atc-exec-expr-when-pure-rules
                    • Array-tau-rules
                    • *atc-not-error-rules*
                    • *atc-integer-conv-rules*
                    • *atc-exec-expr-when-asg-arrsub-rules*
                    • *atc-array-write-type-prescription-rules*
                    • *atc-array-read-type-prescription-rules*
                    • *atc-array-length-rules*
                    • *atc-adjust-type-rules*
                    • Atc-sint-from-boolean
                    • Atc-init-value-to-value-rules
                    • *atc-value-integer->get-rules*
                    • *atc-static-variable-pointer-rules*
                    • *atc-integer-size-rules*
                    • *atc-integer-constructors-return-rules*
                    • *atc-exec-stmt-rules*
                    • *atc-exec-expr-when-asg-indir-rules*
                    • *atc-exec-const-rules*
                    • *atc-distributivity-over-if-rewrite-rules*
                    • Atc-wrapper-rules
                    • Atc-value-result-fix-rules
                    • Atc-value-kind-rules
                    • Atc-array-length-write-rules
                    • *atc-value-kind-rules*
                    • *atc-value-array->elemtype-rules*
                    • *atc-type-kind-rules*
                    • *atc-test-value-rules*
                    • *atc-promote-value-rules*
                    • *atc-integer-ifix-rules*
                    • *atc-integer-fix-rules*
                    • *atc-integer-const-rules*
                    • *atc-exec-indir-rules*
                    • *atc-exec-arrsub-rules*
                    • *atc-computation-state-return-rules*
                    • *atc-array-length-write-rules*
                    • *atc-apconvert-rules*
                    • Atc-misc-rewrite-rules
                    • *atc-valuep-rules*
                    • *atc-tyname-to-type-rules*
                    • *atc-object-designator-rules*
                    • *atc-init-scope-rules*
                    • *atc-exec-expr-when-call-rules*
                    • *atc-exec-expr-when-asg-rules*
                    • *atc-exec-expr-when-asg-ident-rules*
                    • *atc-exec-block-item-rules*
                    • Atc-computation-state-return-rules
                    • *atc-wrapper-rules*
                    • *atc-value-result-fix-rules*
                    • *atc-value-optionp-rules*
                    • *atc-value-listp-rules*
                    • *atc-value-fix-rules*
                    • *atc-type-of-value-option-rules*
                    • *atc-sint-get-rules*
                    • *atc-sint-from-boolean*
                    • *atc-misc-rewrite-rules*
                    • *atc-lognot-sint-rules*
                    • *atc-limit-rules*
                    • *atc-init-value-to-value-rules*
                    • *atc-exec-obj-declon-rules*
                    • *atc-exec-initer-rules*
                    • *atc-exec-ident-rules*
                    • *atc-exec-fun-rules*
                    • *atc-exec-expr-when-pure-rules*
                    • *atc-exec-expr-pure-list-rules*
                    • *atc-exec-block-item-list-rules*
                    • *atc-boolean-from-sint*
                    • Atc-value-fix-rules
                    • Atc-integer-fix-rules
                    • Atc-integer-constructors-return-rules
                    • Atc-exec-expr-when-asg-rules
                  • Atc-gen-ext-declon-lists
                  • Atc-function-and-loop-generation
                  • Atc-statement-generation
                  • Atc-gen-fileset
                  • Atc-gen-everything
                  • Atc-gen-obj-declon
                  • Atc-gen-fileset-event
                  • Atc-tag-tables
                  • Atc-expression-generation
                  • Atc-generation-contexts
                  • Atc-gen-wf-thm
                  • Term-checkers-atc
                  • Atc-variable-tables
                  • Term-checkers-common
                  • Atc-gen-init-fun-env-thm
                  • Atc-gen-appconds
                  • Read-write-variables
                  • Atc-gen-thm-assert-events
                  • Test*
                  • Atc-gen-prog-const
                  • Atc-gen-expr-bool
                  • Atc-theorem-generation
                  • Atc-tag-generation
                  • Atc-gen-expr-pure
                  • Atc-function-tables
                  • Atc-object-tables
                • Fty-pseudo-term-utilities
                • Atc-term-recognizers
                • Atc-input-processing
                • Atc-shallow-embedding
                • Atc-process-inputs-and-gen-everything
                • Atc-table
                • Atc-fn
                • Atc-pretty-printing-options
                • Atc-types
                • Atc-macro-definition
              • Atc-tutorial
              • Pure-expression-execution
            • Transformation-tools
            • Language
            • Representation
            • Insertion-sort
            • Pack
          • Soft
          • Bv
          • Imp-language
          • Ethereum
          • Event-macros
          • Java
          • 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
    • Atc-symbolic-execution-rules

    Atc-exec-expr-when-asg-arrsub-rules-generation

    Code to generate the rules for executing assignments to array subscripting expressions.

    We generate a rule for the large symbolic execution, and also a rule for the modular proofs. The former will be eventually eliminated, once modular proofs cover all the ATC constructs.

    Definitions and Theorems

    Function: atc-exec-expr-when-asg-arrsub-rules-gen

    (defun atc-exec-expr-when-asg-arrsub-rules-gen (atype)
     (declare (xargs :guard (typep atype)))
     (declare (xargs :guard (type-nonchar-integerp atype)))
     (let ((__function__ 'atc-exec-expr-when-asg-arrsub-rules-gen))
      (declare (ignorable __function__))
      (b*
       ((afixtype (integer-type-to-fixtype atype))
        (apred (pack afixtype '-arrayp))
        (epred (pack afixtype 'p))
        (atype-array-index-okp (pack afixtype '-array-index-okp))
        (atype-array-write (pack afixtype '-array-write))
        (value-array->elemtype-when-apred
             (pack 'value-array->elemtype-when-
                   apred))
        (value-array-read-when-apred
             (pack 'value-array-read-when- apred))
        (value-array-write-when-apred
             (pack 'value-array-write-when- apred))
        (name (pack 'exec-expr-when-asg-arrsub-when-
                    apred))
        (formula
         (cons
          'implies
          (cons
           (cons
            'and
            (cons
             '(equal (expr-kind expr) :binary)
             (cons
              '(equal (binop-kind (expr-binary->op expr))
                      :asg)
              (cons
               '(equal left (expr-binary->arg1 expr))
               (cons
                '(equal right (expr-binary->arg2 expr))
                (cons
                 '(equal (expr-kind left) :arrsub)
                 (cons
                  '(equal arr (expr-arrsub->arr left))
                  (cons
                   '(equal sub (expr-arrsub->sub left))
                   (cons
                    '(equal (expr-kind arr) :ident)
                    (cons
                     '(equal var (expr-ident->get arr))
                     (cons
                      '(expr-purep right)
                      (cons
                       '(integerp limit)
                       (cons
                        '(>= limit
                             (1+ (max (1+ (expr-pure-limit sub))
                                      (expr-pure-limit right))))
                        (cons
                         '(expr-purep sub)
                         (cons
                          '(equal arr-val (read-var var compst))
                          (cons
                           '(valuep arr-val)
                           (cons
                            '(equal
                              eptr
                              (apconvert-expr-value
                               (expr-value
                                arr-val (objdesign-of-var var compst))))
                            (cons
                             '(expr-valuep eptr)
                             (cons
                              '(equal ptr (expr-value->value eptr))
                              (cons
                               '(value-case ptr :pointer)
                               (cons
                                '(value-pointer-validp ptr)
                                (cons
                                 (cons
                                  'equal
                                  (cons
                                     '(value-pointer->reftype ptr)
                                     (cons (type-to-maker atype) 'nil)))
                                 (cons
                                  '(equal
                                    array
                                    (read-object
                                         (value-pointer->designator ptr)
                                         compst))
                                  (cons
                                   (cons apred '(array))
                                   (cons
                                    '(equal eindex
                                            (exec-expr-pure sub compst))
                                    (cons
                                     '(expr-valuep eindex)
                                     (cons
                                      '(equal
                                          eindex1
                                          (apconvert-expr-value eindex))
                                      (cons
                                       '(expr-valuep eindex1)
                                       (cons
                                        '(equal
                                            index
                                            (expr-value->value eindex1))
                                        (cons
                                         '(cintegerp index)
                                         (cons
                                          (cons atype-array-index-okp
                                                '(array index))
                                          (cons
                                           '(equal eval
                                                   (exec-expr-pure
                                                        right compst))
                                           (cons
                                            '(expr-valuep eval)
                                            (cons
                                             '(equal eval1
                                                     (apconvert-expr-value
                                                          eval))
                                             (cons
                                              '(expr-valuep eval1)
                                              (cons
                                               '(equal val
                                                       (expr-value->value
                                                            eval1))
                                               (cons
                                                (cons epred '(val))
                                                (cons
                                                 (cons
                                                  'equal
                                                  (cons
                                                   'compst1
                                                   (cons
                                                    (cons
                                                     'write-object
                                                     (cons
                                                      '(value-pointer->designator
                                                            ptr)
                                                      (cons
                                                       (cons
                                                        atype-array-write
                                                        '(array
                                                             index val))
                                                       '(compst))))
                                                    'nil)))
                                                 '((compustatep
                                                    compst1))))))))))))))))))))))))))))))))))))))))
           '((equal (exec-expr expr compst fenv limit)
                    (mv (expr-value val nil) compst1))))))
        (event
         (cons
          'defruled
          (cons
           name
           (cons
            formula
            (cons
             ':expand
             (cons
              '((exec-expr expr compst fenv limit)
                (exec-expr (expr-binary->arg1 expr)
                           compst fenv (1- limit)))
              (cons
               ':enable
               (cons
                (cons
                 'exec-expr-to-exec-expr-pure-when-expr-pure-limit
                 (cons
                  'max
                  (cons
                   'nfix
                   (cons
                    'exec-expr
                    (cons
                     'exec-ident
                     (cons
                      'exec-arrsub
                      (cons
                       'apconvert-expr-value-when-not-value-array-alt
                       (cons
                        'value-kind-not-array-when-cintegerp
                        (cons
                         'read-object-of-objdesign-of-var-to-read-var
                         (cons
                          value-array->elemtype-when-apred
                          (cons
                           'value-integer->get-when-cintegerp
                           (cons
                            atype-array-index-okp
                            (cons
                             'integer-range-p
                             (cons
                              value-array-read-when-apred
                              (cons
                               value-array-write-when-apred
                               '(write-object
                                  expr-purep binop-purep))))))))))))))))
                (cons
                 ':disable
                 (cons
                  '(equal-of-error equal-of-expr-value
                                   equal-of-objdesign-element
                                   cons-equal acl2::subsetp-member)
                  (cons
                   ':prep-lemmas
                   (cons
                    (cons
                     (cons
                      'defrule
                      (cons
                       'lemma
                       (cons
                        (cons
                         'implies
                         (cons
                          (cons
                           'and
                           (cons
                            '(expr-valuep (apconvert-expr-value eval))
                            (cons
                             (cons epred
                                   '((expr-value->value
                                          (apconvert-expr-value eval))))
                             'nil)))
                          (cons (cons epred '((expr-value->value eval)))
                                'nil)))
                        '(:enable apconvert-expr-value))))
                     'nil)
                    'nil))))))))))))
        (name-mod-prf (pack name '-for-modular-proofs))
        (formula-mod-prf
         (cons
          'implies
          (cons
           (cons
            'and
            (cons
             '(equal (expr-kind expr) :binary)
             (cons
              '(equal (binop-kind (expr-binary->op expr))
                      :asg)
              (cons
               '(equal left (expr-binary->arg1 expr))
               (cons
                '(equal right (expr-binary->arg2 expr))
                (cons
                 '(equal (expr-kind left) :arrsub)
                 (cons
                  '(equal arr (expr-arrsub->arr left))
                  (cons
                   '(equal sub (expr-arrsub->sub left))
                   (cons
                    '(equal (expr-kind arr) :ident)
                    (cons
                     '(expr-purep right)
                     (cons
                      '(integerp limit)
                      (cons
                       '(>= limit
                            (1+ (max (1+ (expr-pure-limit sub))
                                     (expr-pure-limit right))))
                       (cons
                        '(expr-purep sub)
                        (cons
                         '(equal arr-eval (exec-expr-pure arr compst))
                         (cons
                          '(expr-valuep arr-eval)
                          (cons
                           '(equal ptr-eval
                                   (apconvert-expr-value arr-eval))
                           (cons
                            '(expr-valuep ptr-eval)
                            (cons
                             '(equal ptr (expr-value->value ptr-eval))
                             (cons
                              '(value-case ptr :pointer)
                              (cons
                               '(value-pointer-validp ptr)
                               (cons
                                (cons
                                 'equal
                                 (cons
                                     '(value-pointer->reftype ptr)
                                     (cons (type-to-maker atype) 'nil)))
                                (cons
                                 '(equal
                                    array
                                    (read-object
                                         (value-pointer->designator ptr)
                                         compst))
                                 (cons
                                  (cons apred '(array))
                                  (cons
                                   '(equal sub-eval
                                           (exec-expr-pure sub compst))
                                   (cons
                                    '(expr-valuep sub-eval)
                                    (cons
                                     '(equal
                                        index-eval
                                        (apconvert-expr-value sub-eval))
                                     (cons
                                      '(expr-valuep index-eval)
                                      (cons
                                       '(equal
                                         index
                                         (expr-value->value index-eval))
                                       (cons
                                        '(cintegerp index)
                                        (cons
                                         (cons atype-array-index-okp
                                               '(array index))
                                         (cons
                                          '(equal right-eval
                                                  (exec-expr-pure
                                                       right compst))
                                          (cons
                                           '(expr-valuep right-eval)
                                           (cons
                                            '(equal eval
                                                    (apconvert-expr-value
                                                         right-eval))
                                            (cons
                                             '(expr-valuep eval)
                                             (cons
                                              '(equal val
                                                      (expr-value->value
                                                           eval))
                                              (cons
                                               (cons epred '(val))
                                               (cons
                                                (cons
                                                 'equal
                                                 (cons
                                                  'compst1
                                                  (cons
                                                   (cons
                                                    'write-object
                                                    (cons
                                                     '(value-pointer->designator
                                                           ptr)
                                                     (cons
                                                      (cons
                                                       atype-array-write
                                                       '(array
                                                             index val))
                                                      '(compst))))
                                                   'nil)))
                                                '((compustatep
                                                   compst1)))))))))))))))))))))))))))))))))))))))
           '((equal (exec-expr expr compst fenv limit)
                    (mv (expr-value val nil) compst1))))))
        (event-mod-prf
         (cons
          'defruled
          (cons
           name-mod-prf
           (cons
            formula-mod-prf
            (cons
             ':enable
             (cons (cons name
                         '(read-var-to-read-object-of-objdesign-of-var
                               valuep-of-read-object-of-objdesign-of-var
                               exec-expr-pure-when-ident-no-syntaxp
                               exec-ident))
                   'nil)))))))
       (mv name (list event event-mod-prf)))))

    Theorem: symbolp-of-atc-exec-expr-when-asg-arrsub-rules-gen.name

    (defthm symbolp-of-atc-exec-expr-when-asg-arrsub-rules-gen.name
      (b* (((mv ?name ?events)
            (atc-exec-expr-when-asg-arrsub-rules-gen atype)))
        (symbolp name))
      :rule-classes :rewrite)

    Theorem: pseudo-event-form-listp-of-atc-exec-expr-when-asg-arrsub-rules-gen.events

    (defthm
     pseudo-event-form-listp-of-atc-exec-expr-when-asg-arrsub-rules-gen.events
     (b* (((mv ?name ?events)
           (atc-exec-expr-when-asg-arrsub-rules-gen atype)))
       (pseudo-event-form-listp events))
     :rule-classes :rewrite)

    Function: atc-exec-expr-when-asg-arrsub-rules-gen-loop

    (defun atc-exec-expr-when-asg-arrsub-rules-gen-loop (atypes)
     (declare (xargs :guard (type-listp atypes)))
     (declare (xargs :guard (type-nonchar-integer-listp atypes)))
     (let ((__function__ 'atc-exec-expr-when-asg-arrsub-rules-gen-loop))
       (declare (ignorable __function__))
       (b*
         (((when (endp atypes)) (mv nil nil))
          ((mv name events)
           (atc-exec-expr-when-asg-arrsub-rules-gen (car atypes)))
          ((mv more-names more-events)
           (atc-exec-expr-when-asg-arrsub-rules-gen-loop (cdr atypes))))
         (mv (cons name more-names)
             (append events more-events)))))

    Theorem: symbol-listp-of-atc-exec-expr-when-asg-arrsub-rules-gen-loop.names

    (defthm
     symbol-listp-of-atc-exec-expr-when-asg-arrsub-rules-gen-loop.names
     (b* (((mv ?names ?events)
           (atc-exec-expr-when-asg-arrsub-rules-gen-loop atypes)))
       (symbol-listp names))
     :rule-classes :rewrite)

    Theorem: pseudo-event-form-listp-of-atc-exec-expr-when-asg-arrsub-rules-gen-loop.events

    (defthm
     pseudo-event-form-listp-of-atc-exec-expr-when-asg-arrsub-rules-gen-loop.events
     (b* (((mv ?names ?events)
           (atc-exec-expr-when-asg-arrsub-rules-gen-loop atypes)))
       (pseudo-event-form-listp events))
     :rule-classes :rewrite)

    Function: atc-exec-expr-when-asg-arrsub-rules-gen-all

    (defun atc-exec-expr-when-asg-arrsub-rules-gen-all nil
     (declare (xargs :guard t))
     (let ((__function__ 'atc-exec-expr-when-asg-arrsub-rules-gen-all))
      (declare (ignorable __function__))
      (b* (((mv names events)
            (atc-exec-expr-when-asg-arrsub-rules-gen-loop
                 *nonchar-integer-types*)))
       (cons
        'progn
        (cons
         (cons
          'defsection
          (cons
           'atc-exec-expr-when-asg-arrsub-rules
           (cons
            ':short
            (cons
             '"Rules for executing assignment expressions to
                       array subscript expressions."
             (append
              events
              (cons
               (cons
                'defval
                (cons '*atc-exec-expr-when-asg-arrsub-rules*
                      (cons (cons 'quote
                                  (cons (append names
                                                '((:e expr-kind)
                                                  (:e expr-arrsub->arr)
                                                  (:e expr-arrsub->sub)
                                                  (:e expr-binary->op)
                                                  (:e expr-binary->arg1)
                                                  (:e expr-binary->arg2)
                                                  (:e expr-ident->get)
                                                  (:e binop-kind)))
                                        'nil))
                            'nil)))
               'nil))))))
         'nil)))))

    Theorem: pseudo-event-formp-of-atc-exec-expr-when-asg-arrsub-rules-gen-all

    (defthm
      pseudo-event-formp-of-atc-exec-expr-when-asg-arrsub-rules-gen-all
      (b* ((event (atc-exec-expr-when-asg-arrsub-rules-gen-all)))
        (pseudo-event-formp event))
      :rule-classes :rewrite)