• Top
    • Documentation
    • Books
    • Boolean-reasoning
    • Projects
    • Debugging
    • Std
    • Proof-automation
    • Macro-libraries
    • ACL2
      • Theories
      • Rule-classes
      • Proof-builder
      • Recursion-and-induction
      • Hons-and-memoization
      • Events
        • Defun
          • Xargs
          • Mutual-recursion
            • Defines
            • Make-flag
            • Mutual-recursion-proof-example
            • Def-doublevar-induction
            • Set-bogus-mutual-recursion-ok
            • Defuns
            • Defun-mode
            • Rulers
            • Defun-inline
            • Defun-nx
            • Defund
            • Set-ignore-ok
            • Set-well-founded-relation
            • Set-measure-function
            • Set-irrelevant-formals-ok
            • Defun-notinline
            • Set-bogus-defun-hints-ok
            • Defund-nx
            • Defun$
            • Defund-notinline
            • Defnd
            • Defn
            • Defund-inline
            • Set-bogus-measure-ok
          • Verify-guards
          • Table
          • Mutual-recursion
            • Defines
            • Make-flag
            • Mutual-recursion-proof-example
            • Def-doublevar-induction
            • Set-bogus-mutual-recursion-ok
            • Defuns
            • Memoize
            • Make-event
            • Include-book
            • Encapsulate
            • Defun-sk
            • Defttag
            • Defstobj
            • Defpkg
            • Defattach
            • Defabsstobj
            • Defchoose
            • Progn
            • Verify-termination
            • Redundant-events
            • Defmacro
            • Defconst
            • Skip-proofs
            • In-theory
            • Embedded-event-form
            • Value-triple
            • Comp
            • Local
            • Defthm
            • Progn!
            • Defevaluator
            • Theory-invariant
            • Assert-event
            • Defun-inline
            • Project-dir-alist
            • Partial-encapsulate
            • Define-trusted-clause-processor
            • Defproxy
            • Defexec
            • Defun-nx
            • Defthmg
            • Defpun
            • Defabbrev
            • Set-table-guard
            • Name
            • Defrec
            • Add-custom-keyword-hint
            • Regenerate-tau-database
            • Defcong
            • Deftheory
            • Defaxiom
            • Deftheory-static
            • Defund
            • Evisc-table
            • Verify-guards+
            • Logical-name
            • Profile
            • Defequiv
            • Defmacro-untouchable
            • Add-global-stobj
            • Defthmr
            • Defstub
            • Defrefinement
            • Deflabel
            • In-arithmetic-theory
            • Unmemoize
            • Defabsstobj-missing-events
            • Defthmd
            • Fake-event
            • Set-body
            • Defun-notinline
            • Functions-after
            • Macros-after
            • Dump-events
            • Defund-nx
            • Defun$
            • Remove-global-stobj
            • Remove-custom-keyword-hint
            • Dft
            • Defthy
            • Defund-notinline
            • Defnd
            • Defn
            • Defund-inline
            • Defmacro-last
          • Parallelism
          • History
          • Programming
          • Operational-semantics
          • Real
          • Start-here
          • Debugging
          • Miscellaneous
          • Output-controls
          • Macros
          • Interfacing-tools
        • Interfacing-tools
        • Hardware-verification
        • Software-verification
        • Math
        • Testing-utilities
      • Mutual-recursion

      Defuns

      An alternative to mutual-recursion

      Example:
      (DEFUNS
       (evenlp (x)
         (if (consp x) (oddlp (cdr x)) t))
       (oddlp (x)
         (if (consp x) (evenlp (cdr x)) nil)))
      
      General Form:
      (DEFUNS defuns-tuple1 ... defuns-tuplen)

      is equivalent to

      (MUTUAL-RECURSION
        (DEFUN . defuns-tuple1)
        ...
        (DEFUN . defuns-tuplen))

      In fact, defuns is the more primitive of the two and mutual-recursion is just a macro that expands to a call of defuns after stripping off the defun at the car of each argument to mutual-recursion. We provide and use mutual-recursion rather than defuns because by leaving the defuns in place, mutual-recursion forms can be processed by the Emacs tags program. See mutual-recursion.