在Isar中表达关于指数的简单陈述性证明

时间:2014-12-23 06:08:37

标签: isabelle

我试图在isar中写一个关于整数指数的简单证明。

我已经在评论区写了我想要的论点,但我很难搞清楚如何表达它。我一直在研究src/HOL/Int.thy,但我要么找不到这些方面的示例证据,要么就不明白我在看什么。 :)

theory Exponents
imports Main
begin

lemma rMulComm: "(a*b ::int) = (b*a ::int)"
by (rule Groups.ab_semigroup_mult_class.mult.commute)

lemma rExpMul: "((a^b)^c ::int) = (a^(b*c) ::int)"
by (rule Int.zpower_zpower)

theorem HELP: "((a^b)^c ::int) = ((a^c)^b :: int)"
  (*  0.  (a^b)^c 
      1.  a^(b*c)   by rExpMul
      2.  a^(c*b)   by rMulComm
      3.  (a^c)^b   by rExpMul   *)
end

这不是家庭作业,顺便说一下。我不在学校。 :)

更新:我的最终版本,基于亚历山大的答案,如下:

theorem "((a^b)^c ::int) = ((a^c)^b :: int)"
proof -
  have  "(a^b)^c = a^(b*c)" by (simp only: rExpMul)
  hence "   ...  = a^(c*b)" by (simp only: rMulComm)
  thus  "(a^b)^c = (a^c)^b" by (simp only: rExpMul)
qed

1 个答案:

答案 0 :(得分:3)

问题与定理b以及引理cHELPrExpMul的类型有关:运算符{{}的指数1}}是一个自然数。因此,为整数指定的^不能用于证明该定理。在重新设置自然数后

rMulComm

证据立即进行:

lemma rMulComm: "(a * b :: nat) = (b * a :: nat)"

可以缩短为theorem HELP: "((a^b)^c ::int) = ((a^c)^b :: int)" proof - have "(a ^ b) ^ c = a ^ (b * c)" by (simp only: rExpMul) also have "… = a ^ (c * b)" by (simp only: rMulComm) finally show ?thesis by (simp only: rExpMul) qed