I made the following proof but got an error message on the last lines finally show ?thesis .qed
theory MWE
imports Main
begin
lemma power_mod_nat:
fixes a m n :: nat
shows "(a ^ n) mod m = ((a mod m) ^ n) mod m"
proof (induction n)
case 0
show ?case by simp
next
case (Suc n)
have "(a ^ Suc n) mod m = (a * a ^ n) mod m" by simp
also have "... = (((a mod m) * a ^ n) mod m)"
by (simp add: mod_mult_left_eq)
also have "... = (((a mod m) * ((a ^ n) mod m)) mod m)"
by (simp add: mod_mult_right_eq)
also have "... = (((a mod m) * (((a mod m) ^ n) mod m)) mod m)"
by (simp add: Suc.IH)
also have "... = (((a mod m) * ((a mod m) ^ n)) mod m)"
by (simp add: mod_mult_right_eq)
also have "... = ((a mod m) ^ Suc n) mod m" by simp
finally show ?case .
qed
lemma power_mult_nat:
fixes a :: nat
shows "a ^ (m * n) = (a ^ m) ^ n"
proof (induction n)
case 0
show ?case by simp
next
case (Suc n)
have "a ^ (m * Suc n) = a ^ (m*n + m)" by (simp add: add.commute)
also have "... = a ^ (m*n) * a ^ m" by (simp add: power_add)
also have "... = (a ^ m) ^ n * a ^ m" by (simp add: Suc.IH)
also have "... = (a ^ m) ^ Suc n" by simp
finally show ?case .
qed
lemma pow4_mod3: "((4::nat) ^ m) mod 3 = 1"
by (simp add: power_mod_nat)
(* 2. Even exponent: 2^(2m) = (2^2)^m = 4^m *)
lemma pow2_mod3_even:
assumes "even l"
shows "2 ^ l mod 3 = 1"
proof -
obtain m where L: "l = 2*m" using assms by (erule evenE)
have "2 ^ l mod 3 = (2 ^ (2*m)) mod 3" by (simp add: L)
also have "... = (((2::nat) ^ 2) ^ m) mod 3" by (simp add: power_mult_nat)
also have "... = (4 ^ m) mod 3" by simp
also have "... = 1" by (rule pow4_mod3)
finally show ?thesis .
qed
end
Any ideas why?
You need to specify that the numbers in your last proof are naturals. Switching the show line to
shows "(2 :: nat) ^ l mod 3 = 1" works.
indeed it did work, thank you
Last updated: Sep 04 2025 at 16:26 UTC