summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorMasaya Tojo <masaya@tojo.tokyo>2022-07-15 23:28:56 +0900
committerMasaya Tojo <masaya@tojo.tokyo>2022-07-15 23:28:56 +0900
commit6885c9e70e77571fa0c703c8a5a519a663c8c069 (patch)
tree7b1d5ddc103e84e6ef30d57205b5ccc0381a27c1
parent8974e4b43e59ab7fadc803009cc9dff9d283f36d (diff)
perm: New file.
* perm.lisp: New file.
-rw-r--r--perm.lisp65
1 files changed, 65 insertions, 0 deletions
diff --git a/perm.lisp b/perm.lisp
new file mode 100644
index 0000000..01b9271
--- /dev/null
+++ b/perm.lisp
@@ -0,0 +1,65 @@
+(defun perm (x y)
+ (cond
+ ((atom x) (atom y))
+ ((member-equal (car x) y)
+ (perm (cdr x) (remove1-equal (car x) y)))
+ (t nil)))
+
+(local
+ (defthm perm-reflexive
+ (perm x x)))
+
+(local
+ (encapsulate
+ ()
+ (local
+ (defthm perm-member
+ (implies (and (consp y)
+ (perm x y))
+ (member (car y) x))))
+
+ (local
+ (defthm perm-remove1
+ (implies (and (consp y) (perm x y))
+ (perm (remove1 (car y) x)
+ (cdr y)))))
+
+ (defthm perm-symmetric
+ (implies (perm x y)
+ (perm y x))
+ :hints (("Goal" :induct (perm y x))))))
+
+(local
+ (encapsulate
+ ()
+
+ (local
+ (defthm remove1-remove1
+ (equal (remove1 x (remove1 y z))
+ (remove1 y (remove1 x z)))))
+
+ (local
+ (defthm member-remove1
+ (implies (not (equal x y))
+ (iff (member x (remove1 y z))
+ (member x z)))))
+
+ (local
+ (defthm perm-remove1
+ (implies (perm x y)
+ (perm (remove1 e x)
+ (remove1 e y)))))
+
+ (local
+ (defthm perm-not-member
+ (implies (and (member e x)
+ (not (member e y)))
+ (not (perm x y)))
+ :hints (("Subgoal *1/3" :cases ((equal (car x) e))))))
+
+ (defthm perm-transitive
+ (implies (and (perm x y)
+ (perm y z))
+ (perm x z)))))
+
+(defequiv perm)