• Top
    • Documentation
    • Books
    • Recursion-and-induction
    • Boolean-reasoning
    • Projects
    • Debugging
    • Std
    • Proof-automation
    • Macro-libraries
    • ACL2
      • Theories
      • Rule-classes
      • Proof-builder
      • Hons-and-memoization
      • Events
      • History
      • Parallelism
        • Set-waterfall-parallelism
        • Parallel-programming
          • Parallelism-tutorial
          • Granularity
          • Pand
          • Deflock
          • Parallelism-at-the-top-level
          • Spec-mv-let
          • Error-triples-and-parallelism
          • Por
            • Pargs
            • Early-termination
            • With-output-lock
            • Plet
            • Parallelism-performance
            • Parallel-execution
          • Set-waterfall-printing
          • Unsupported-parallelism-features
          • Set-total-parallelism-work-limit
          • Set-parallel-execution
          • Set-total-parallelism-work-limit-error
          • Compiling-ACL2p
          • Waterfall-parallelism-for-book-certification
          • Cpu-core-count
          • Set-waterfall-parallelism-hacks-enabled
          • Parallel-proof
          • Non-parallel-book
          • Parallel
          • Without-waterfall-parallelism
          • Set-waterfall-parallelism-hacks-enabled!
          • With-waterfall-parallelism
          • Parallelism-build
        • Programming
        • Start-here
        • Real
        • Debugging
        • Miscellaneous
        • Output-controls
        • Macros
        • Interfacing-tools
      • Interfacing-tools
      • Hardware-verification
      • Software-verification
      • Testing-utilities
      • Math
    • Parallel-programming
    • ACL2-built-ins

    Por

    Parallel, Boolean version of or

    This documentation topic relates to the experimental extension of ACL2 supporting parallel execution and proof; see parallelism, and see parallel-programming, which has a disclaimer.

    Example Forms:
    (por (subsetp-equal x y)
         (subsetp-equal y x))
    
    (por (declare
          (granularity
           (and (> (length x) 500)
                (> (length y) 500))))
          (subsetp-equal x y)
          (subsetp-equal y x))
    General Form:
    (por (declare (granularity expr)) ; optional granularity declaration
         arg1 ... argN)

    where N >= 0 and each argi and expr are arbitrary terms.

    Por evaluates its arguments in parallel. It returns a Boolean result: t if any argument evaluates to non-nil, else nil. Note that while or returns the first non-nil value from evaluating its arguments left-to-right (if any such value is not nil) por always returns a Boolean result, in support of efficiency (see early-termination) in light of the nondeterministic order in which argument values are returned.

    Another difference between por and or is that for a call of por, even if the an argument's value is not nil, a subsequent argument may be evaluated. See pand for a discussion of the analogous property of pand. In particular, guards generated from calls of por may not assume for an argument that the preceding arguments evaluated to nil.

    See parallelism-tutorial for another example. Also see parallelism-at-the-top-level for restrictions on evaluating parallelism primitives from within the ACL2 top-level loop. Finally see early-termination to read how por can offer more efficiency than or by avoiding evaluation of some of its arguments.