(in-package "ACL2")
(defun m (x)
x)
(defun s (x)
x)
(defthm m+m
(equal (+ (m x) (m y))
(m (+ x y))))
(defthm s+s
(equal (+ (s x) (s y))
(s (+ x y))))
(defun m/s (x)
x)
(defthm m/s+m/s
(equal (+ (m/s x) (m/s y))
(m/s (+ x y))))
(defthm m/s*s
(equal (* (m/s x) (s y))
(m (* x y))))
(defthm m*/s
(equal (* (m x) (/ (s y)))
(m/s (* x (/ y)))))
(defthm m*/m/s
(equal (* (m x) (/ (m/s y)))
(m (* x (/ y)))))
(in-theory (disable m s m/s))
(defthm test
(equal (/ (m x) (/ (m y) (s z)))
(m (/ x (/ y z))))
:rule-classes nil)