• Top
    • Documentation
    • Books
    • Boolean-reasoning
    • Projects
    • Debugging
    • Std
    • Proof-automation
    • Macro-libraries
    • ACL2
    • Interfacing-tools
    • Hardware-verification
      • Gl
        • Term-level-reasoning
          • G-call
          • Def-gl-boolean-constraint
          • Gl-set-uninterpreted
            • Def-glcp-ctrex-rewrite
            • Def-gl-rewrite
            • Def-gl-branch-merge
          • Glmc
          • Other-resources
          • Optimization
            • Term-level-reasoning
              • G-call
              • Def-gl-boolean-constraint
              • Gl-set-uninterpreted
                • Def-glcp-ctrex-rewrite
                • Def-gl-rewrite
                • Def-gl-branch-merge
              • Def-gl-param-thm
              • Case-splitting
              • Modes
              • Memory-management
              • Preferred-definitions
              • Custom-symbolic-counterparts
              • Redundant-recursion
              • Alternate-definitions
              • Gl-param-thm
            • Reference
            • Debugging
            • Basic-tutorial
          • Esim
          • Vl2014
          • Sv
          • Fgl
          • Vwsim
          • Vl
          • X86isa
          • Svl
          • Rtl
        • Software-verification
        • Math
        • Testing-utilities
      • Reference
      • Term-level-reasoning

      Gl-set-uninterpreted

      Prevent GL from interpreting a function's definition or concretely executing it.

      Usage:

      ;; disallow definition expansion and concrete execution
      (gl::gl-set-uninterpreted fnname)
      (gl::gl-set-uninterpreted fnname t) ;; same as above
      
      ;; disallow definition expansion but allow concrete execution
      (gl::gl-set-uninterpreted fnname :concrete-only)
      
      ;; disallow concrete execution but allow definition expansion
      (gl::gl-set-uninterpreted fnname :no-concrete)
      
      ;; remove restrictions
      (gl::gl-set-uninterpreted fnname nil)
      (gl::gl-unset-uninterpreted fnname) ;; same

      prevents GL from opening the definition of fnname and/or concretely executing it. GL will still apply rewrite rules to a call of fnname. If the call is not rewritten away, symbolic execution of a fnname call will simply produce an object (of the :g-apply type) representing a call of fnname on the given arguments.

      gl::gl-unset-uninterpreted undoes the effect of gl::gl-set-uninterpreted.

      Note that gl::gl-set-uninterpreted has virtually no effect when applied to a GL primitive: a function that has its ``symbolic counterpart'' built into the GL clause processor you're using. (It actually does do a little — it can prevent the function from being applied to concrete values before rewrite rules are applied. But that could change in the future.) But what is a GL primitive? That depends on the current GL clause processor, and can only be determined reliably by looking at the definition of the following function symbol:

      (cdr (assoc-eq 'gl::run-gified
                     (table-alist 'gl::latest-greatest-gl-clause-proc (w state))))

      For example, this function symbol is 'gl::glcp-run-gified immediately after including the community-book "centaur/gl/gl". Now use :pe on this function symbol. The body of that definition should be of the form (case fn ...), which matches fn against all the GL primitives for the current GL clause processor.