@@ -37,7 +37,7 @@ lemma ring.inverse_pow (r : M) : ∀ (n : ℕ), ring.inverse r ^ n = ring.invers
37
37
end zero
38
38
39
39
section group_with_zero
40
- variables {G₀ : Type *} [group_with_zero G₀]
40
+ variables {G₀ : Type *} [group_with_zero G₀] {a : G₀} {m n : ℕ}
41
41
42
42
section nat_pow
43
43
@@ -53,9 +53,22 @@ have h1 : m - n + n = m, from tsub_add_cancel_of_le h,
53
53
have h2 : a ^ (m - n) * a ^ n = a ^ m, by rw [←pow_add, h1],
54
54
by simpa only [div_eq_mul_inv] using eq_div_of_mul_eq (pow_ne_zero _ ha) h2
55
55
56
+ lemma pow_sub_of_lt (a : G₀) {m n : ℕ} (h : n < m) : a ^ (m - n) = a ^ m * (a ^ n)⁻¹ :=
57
+ begin
58
+ obtain rfl | ha := eq_or_ne a 0 ,
59
+ { rw [zero_pow (tsub_pos_of_lt h), zero_pow (n.zero_le.trans_lt h), zero_mul] },
60
+ { exact pow_sub₀ _ ha h.le }
61
+ end
62
+
56
63
theorem pow_inv_comm₀ (a : G₀) (m n : ℕ) : (a⁻¹) ^ m * a ^ n = a ^ n * (a⁻¹) ^ m :=
57
64
(commute.refl a).inv_left₀.pow_pow m n
58
65
66
+ lemma inv_pow_sub₀ (ha : a ≠ 0 ) (h : n ≤ m) : a⁻¹ ^ (m - n) = (a ^ m)⁻¹ * a ^ n :=
67
+ by rw [pow_sub₀ _ (inv_ne_zero ha) h, inv_pow₀, inv_pow₀, inv_inv₀]
68
+
69
+ lemma inv_pow_sub_of_lt (a : G₀) (h : n < m) : a⁻¹ ^ (m - n) = (a ^ m)⁻¹ * a ^ n :=
70
+ by rw [pow_sub_of_lt a⁻¹ h, inv_pow₀, inv_pow₀, inv_inv₀]
71
+
59
72
end nat_pow
60
73
61
74
end group_with_zero
@@ -74,7 +87,7 @@ lemma zero_zpow : ∀ z : ℤ, z ≠ 0 → (0 : G₀) ^ z = 0
74
87
| (n : ℕ) h := by { rw [zpow_coe_nat, zero_pow'], simpa using h }
75
88
| -[1 +n] h := by simp
76
89
77
- lemma fzero_pow_eq (n : ℤ) : (0 : G₀) ^ n = if n = 0 then 1 else 0 :=
90
+ lemma zero_zpow_eq (n : ℤ) : (0 : G₀) ^ n = if n = 0 then 1 else 0 :=
78
91
begin
79
92
split_ifs with h,
80
93
{ rw [h, zpow_zero] },
86
99
| 0 := by { change a ^ (0 : ℤ) = (a ^ (0 : ℤ))⁻¹, simp }
87
100
| -[1 + n] := by { rw [zpow_neg_succ_of_nat, inv_inv₀, ← zpow_coe_nat], refl }
88
101
102
+ lemma mul_zpow_neg_one₀ (a b : G₀) : (a * b) ^ (-1 : ℤ) = b ^ (-1 : ℤ) * a ^ (-1 : ℤ) :=
103
+ by simp only [mul_inv_rev₀, zpow_one, zpow_neg₀]
104
+
105
+ lemma zpow_neg_one₀ (x : G₀) : x ^ (-1 : ℤ) = x⁻¹ :=
106
+ by { rw [← congr_arg has_inv.inv (pow_one x), zpow_neg₀, ← zpow_coe_nat], refl }
107
+
89
108
theorem inv_zpow₀ (a : G₀) : ∀n:ℤ, a⁻¹ ^ n = (a ^ n)⁻¹
90
109
| (n : ℕ) := by rw [zpow_coe_nat, zpow_coe_nat, inv_pow₀]
91
110
| -[1 + n] := by rw [zpow_neg_succ_of_nat, zpow_neg_succ_of_nat, inv_pow₀]
@@ -189,10 +208,6 @@ lemma commute.mul_zpow₀ {a b : G₀} (h : commute a b) :
189
208
| (n : ℕ) := by simp [h.mul_pow n]
190
209
| -[1 +n] := by simp [h.mul_pow, (h.pow_pow _ _).eq, mul_inv_rev₀]
191
210
192
- lemma mul_zpow₀ {G₀ : Type *} [comm_group_with_zero G₀] (a b : G₀) (m : ℤ):
193
- (a * b) ^ m = (a ^ m) * (b ^ m) :=
194
- (commute.all a b).mul_zpow₀ m
195
-
196
211
theorem zpow_bit0' (a : G₀) (n : ℤ) : a ^ bit0 n = (a * a) ^ n :=
197
212
(zpow_bit0₀ a n).trans ((commute.refl a).mul_zpow₀ n).symm
198
213
@@ -233,6 +248,9 @@ variables {G₀ : Type*} [comm_group_with_zero G₀]
233
248
(a / b) ^ n = a ^ n / b ^ n :=
234
249
by simp only [div_eq_mul_inv, mul_pow, inv_pow₀]
235
250
251
+ lemma mul_zpow₀ (a b : G₀) (m : ℤ) : (a * b) ^ m = (a ^ m) * (b ^ m) :=
252
+ (commute.all a b).mul_zpow₀ m
253
+
236
254
@[simp] theorem div_zpow₀ (a : G₀) {b : G₀} (n : ℤ) :
237
255
(a / b) ^ n = a ^ n / b ^ n :=
238
256
by simp only [div_eq_mul_inv, mul_zpow₀, inv_zpow₀]
@@ -244,6 +262,13 @@ begin
244
262
rw [sq, mul_assoc, mul_div_cancel_left _ ha]
245
263
end
246
264
265
+ /-- The `n`-th power map (`n` an integer) on a commutative group with zero, considered as a group
266
+ homomorphism. -/
267
+ def zpow_group_hom₀ (n : ℤ) : G₀ →* G₀ :=
268
+ { to_fun := (^ n),
269
+ map_one' := one_zpow₀ n,
270
+ map_mul' := λ a b, mul_zpow₀ a b n }
271
+
247
272
end
248
273
249
274
/-- If a monoid homomorphism `f` between two `group_with_zero`s maps `0` to `0`, then it maps `x^n`,
0 commit comments