Basic constructor macro for congruence-rule structures.
(make-congruence-rule [:equiv-req <equiv-req>] [:fn <fn>] [:arg-contexts <arg-contexts>] [:arity <arity>])
This is the usual way to construct congruence-rule structures. It simply conses together a structure with the specified fields.
This macro generates a new congruence-rule structure from scratch. See also change-congruence-rule, which can "change" an existing structure, instead.
This is an ordinary
Macro:
(defmacro make-congruence-rule (&rest args) (std::make-aggregate 'congruence-rule args '((:equiv-req) (:fn) (:arg-contexts) (:arity)) 'make-congruence-rule nil))
Function:
(defun congruence-rule (equiv-req fn arg-contexts arity) (declare (xargs :guard (and (pseudo-fnsym-p equiv-req) (pseudo-fnsym-p fn) (equiv-contextslist-p arg-contexts) (natp arity)))) (declare (xargs :guard t)) (let ((__function__ 'congruence-rule)) (declare (ignorable __function__)) (b* ((equiv-req (mbe :logic (pseudo-fnsym-fix equiv-req) :exec equiv-req)) (fn (mbe :logic (pseudo-fnsym-fix fn) :exec fn)) (arg-contexts (mbe :logic (equiv-contextslist-fix arg-contexts) :exec arg-contexts)) (arity (mbe :logic (nfix arity) :exec arity))) (list equiv-req fn arg-contexts arity))))