• Top
    • Documentation
    • Books
    • Recursion-and-induction
    • Boolean-reasoning
    • Projects
    • Debugging
    • Std
    • Proof-automation
      • Gl
      • Witness-cp
      • Ccg
      • Install-not-normalized
      • Rewrite$
      • Removable-runes
      • Efficiency
      • Rewrite-bounds
      • Bash
      • Def-dag-measure
      • Fgl
      • Bdd
      • Remove-hyps
      • Contextual-rewriting
      • Simp
      • Rewrite$-hyps
      • Bash-term-to-dnf
      • Use-trivial-ancestors-check
      • Minimal-runes
      • Clause-processor-tools
      • Fn-is-body
      • Without-subsumption
        • Rewrite-equiv-hint
        • Def-bounds
        • Rewrite$-context
        • Try-gl-concls
        • Hint-utils
      • Macro-libraries
      • ACL2
      • Interfacing-tools
      • Hardware-verification
      • Software-verification
      • Testing-utilities
      • Math
    • Proof-automation

    Without-subsumption

    Perform proofs without subsumption/replacement to preserve hypotheses that might otherwise be dropped.

    without-subsumption is a simple macro that allows you to perform proofs without subsumption/replacement to preserve hypotheses that might otherwise be dropped during clausification.

    In the course of a proof, ACL2 will sometimes drop hypotheses during subsumption/replacement that would otherwise have allowed it to complete the proof.

    without-subsumption uses both quick-and-dirty-subsumption-replacement-step and case-split-limitations to stop subsumption/replacement in various stages of the ACL2 simplifier. These hints can help preserve hypothesis in a proof that the ACL2 simplifier might otherwise drop. The macro is defined as follows:

    (defmacro without-subsumption(form &key (cases 'nil))
     `(encapsulate
          ()
    
        (local (defun without-subsumption-disable-quick-and-dirty (x y)
                 (declare (ignore x y) (xargs :guard t)) nil))
        (local (defattach-system quick-and-dirty-srs
                 without-subsumption-disable-quick-and-dirty))
        (set-case-split-limitations '(0 ,cases))
        
        ,form
    
        ))

    Usage:

    (include-book "tools/without-subsumption" :dir :system)
    (without-subsumption
      (defthm natp-implies-integerp
        (implies 
          (natp n)
          (integerp n)))
     )