anchor.diff:  
   (defmethod substitute ((obj <formula>) &key var term)
     (match <formula> obj
  -    ((<bin> op f1 f2)
  +     ((<bin> op f1 f2)
        (<bin> op
   	    (substitute f1 :var var :term term)
   	    (substitute f2 :var var :term term)))
  
positive.code: (defun axiom-eq-refl (term)
    (add-proof-step :formula ($eq term term)
  		  :rule-text "axiom 3.1"))
  
    
  
  (defun construct-leibniz-fun ( fun-name binding-list )
    (let ((prop ($eq (<fun> fun-name (mapcar #'car binding-list))
  
negative.code:      (<eq> (substitute t1 :var var :term term)
  	   (substitute t2 :var var :term term)))))
  
  (defun substitution (i term)
    (aif (get-proof-step i)
         (let ((formula (proof-step-formula it)))
  	 (match <formula> formula
  		((<all> v f)
  		 (if (substitutablep f :var v :term term)
  		     (add-proof-step
  		      :formula (substitute f :var v :term term)
  		      :rule-text (format nil "from ~@R by Substitution" i))
  		     (format t "~a is not substitutable by ~a in ~a"
  			     (to-string v)
  			     (to-string term)
  			     (to-string f))))
  		(_ (format t "~a is not a universal formula"
  			   (to-string formula)))))
         (format t "No such step ~@R" i)))
  		
  (defun axiom-forall (var f g)
    (if (not (find var (free-variables f) :test #'equalp))
        (add-proof-step :formula ($impl ($all var ($impl f g)) ($impl f ($all var g)))
  