other
(in-package "ACL2")
rmfunction
(defun rm (e x) (if (consp x) (if (equal e (car x)) (cdr x) (cons (car x) (rm e (cdr x)))) nil))
membfunction
(defun memb (a x) (declare (xargs :guard t)) (if (consp x) (or (equal a (car x)) (memb a (cdr x))) nil))
permfunction
(defun perm (x y) (if (consp x) (and (memb (car x) y) (perm (cdr x) (rm (car x) y))) (not (consp y))))
local
(local (defthm perm-cons (implies (memb a x) (equal (perm x (cons a y)) (perm (rm a x) y))) :hints (("Goal" :induct (perm x y)))))