在做一些基本代数时,我经常会遇到以下类型的子目标(有时是有限和,有时是有限乘积)。
lemma foo:
fixes N :: nat
fixes a :: "nat ⇒ nat"
shows "(a 0) = (∑x = 0..N. (if x = 0 then 1 else 0) * (a x))"
这对我来说似乎很明显,但既auto
不能也auto cong: sum.cong split: if_splits
不能处理这个问题。更重要的是,sledgehammer
当调用这个引理时也会投降。如何有效地处理一般包含的有限和和乘积if-then-else
,特别是如何处理这种情况?