natseg

 よって今度は

find_theorems "setprod ?f ?A * setprod ?f ?B"

とすれば使えそうな定理

Big_Operators.setprod_Un_disjoint:
finite ?A ⟹
finite ?B ⟹
?A ∩ ?B = {} ⟹ setprod ?g (?A ∪ ?B) = setprod ?g ?A * setprod ?g ?B

が見付かりますので,これを用いる為に定義域を直和に分割する補題

  have natseg [simp]:
  "{Suc m..m + 2 * 2 ^ N} = union {Suc m..m + 2 ^ N} {Suc (m + 2 ^ N)..m + 2 ^ N + 2 ^ N}"
    by auto

をhave "GM a m (2 ^ Suc N... に先立って作っておきます.またこのように [simp],つまり,simpやautoが自動参照する属性を与えておくと

proof (simp add: real_root_mult_exp real_root_mult)

のOutputが

goal (1 subgoal):
1. setprod a ({Suc m..m + 2 ^ N} ∪ {Suc (m + 2 ^ N)..m + 2 ^ N + 2 ^ N}) =
setprod a {Suc m..m + 2 ^ N} *
setprod a {Suc (m + 2 ^ N)..m + 2 ^ N + 2 ^ N}

となるので,上の定理が直ちに使えて

by (simp add: real_root_mult_exp real_root_mult setprod_Un_disjoint)

で証明完了です.