(def-translation monoids-to-groups (source monoid-theory) (target groups) (fixed-theories h-o-real-arithmetic) (sort-pairs (uu gg)) (constant-pairs (e e) (** mul)))
(def-constant minus "lambda(x,y:gg,inv(y) mul x)" (theory groups) (usages rewrite))
(def-transported-symbols (monoid%prod) (translation monoids-to-groups) (renamer monoid-to-groups-renamer) )
(def-translation groups-to-additive-rr (source groups) (target h-o-real-arithmetic) (fixed-theories h-o-real-arithmetic) (sort-pairs (gg rr)) (constant-pairs (e 0) (mul +) (inv -) (minus sub) (group%prod sum)) (theory-interpretation-check using-simplification))
(def-constant delta "lambda(f:[zz,gg],lambda(n:zz,minus(f(n+1),f(n))))" (theory groups) (usages rewrite))
(def-theorem telescoping-prod-formula "forall(f:[zz,gg],m,n:zz,m<=n and forall(j:zz,(m<=j and j<=n+1) implies #(f(j))) implies group%prod(m,n,delta(f))=minus(f(n+1),f(m)))" (theory groups) (usages transportable-macete) (proof ( (induction integer-inductor ()) (prove-by-logic-and-simplification 3) (backchain "with(f:[zz,gg],t,m:zz, forall(j:zz,m<=j and j<=1+t implies #(f(j))) implies group%prod(m,t,lambda(n:zz,inv(f(n)) mul f(1+n))) =inv(f(m)) mul f(1+t));") direct-and-antecedent-inference-strategy simplify simplify )))
(def-transported-symbols (delta) (translation groups-to-additive-rr) (renamer groups-to-additive-rr-renamer) )
(def-overloading delta (groups delta) (h-o-real-arithmetic rr%delta))