@@ -279,97 +279,30 @@ lemma prime_ringChar : Nat.Prime (ringChar R) := by
279
279
end Ring
280
280
end CharP
281
281
282
- /-! ### The Frobenius automorphism -/
283
-
284
- section frobenius
285
- section CommSemiring
286
- variable [CommSemiring R] {S : Type *} [CommSemiring S] (f : R →* S) (g : R →+* S) (p m n : ℕ)
287
- [ExpChar R p] [ExpChar S p] (x y : R)
282
+ /-
283
+ Preliminary definitions and results for the Frobenius map.
284
+ Necessary here for simple results about sums of `p`-powers that are used in files forbidding
285
+ to import algebra-related definitions (see `Mathlib.Algebra.CharP.Two.lean`).
286
+ -/
287
+ section Frobenius
288
288
289
- open ExpChar
289
+ variable (R : Type *) [CommSemiring R]
290
+ variable (p n : ℕ) [ExpChar R p]
290
291
291
- variable (R) in
292
- /-- The frobenius map `x ↦ x ^ p`. -/
292
+ /-- The Frobenius map `x ↦ x ^ p`. -/
293
293
def frobenius : R →+* R where
294
294
__ := powMonoidHom p
295
295
map_zero' := zero_pow (expChar_pos R p).ne'
296
296
map_add' _ _ := add_pow_expChar ..
297
297
298
- variable (R) in
299
- /-- The iterated frobenius map `x ↦ x ^ p ^ n`. -/
298
+ /-- The iterated Frobenius map `x ↦ x ^ p ^ n`. -/
300
299
def iterateFrobenius : R →+* R where
301
300
__ := powMonoidHom (p ^ n)
302
301
map_zero' := zero_pow (expChar_pow_pos R p n).ne'
303
302
map_add' _ _ := add_pow_expChar_pow ..
304
303
305
- lemma frobenius_def : frobenius R p x = x ^ p := rfl
306
-
307
- lemma iterateFrobenius_def : iterateFrobenius R p n x = x ^ p ^ n := rfl
308
-
309
- lemma iterate_frobenius : (frobenius R p)^[n] x = x ^ p ^ n := congr_fun (pow_iterate p n) x
310
-
311
- variable (R)
312
-
313
- lemma iterateFrobenius_eq_pow : iterateFrobenius R p n = frobenius R p ^ n := by
314
- ext; simp [iterateFrobenius_def, iterate_frobenius]
315
-
316
- lemma coe_iterateFrobenius : iterateFrobenius R p n = (frobenius R p)^[n] :=
317
- (pow_iterate p n).symm
318
-
319
- lemma iterateFrobenius_one_apply : iterateFrobenius R p 1 x = x ^ p := by
320
- rw [iterateFrobenius_def, pow_one]
321
-
322
- @[simp]
323
- lemma iterateFrobenius_one : iterateFrobenius R p 1 = frobenius R p :=
324
- RingHom.ext (iterateFrobenius_one_apply R p)
325
-
326
- lemma iterateFrobenius_zero_apply : iterateFrobenius R p 0 x = x := by
327
- rw [iterateFrobenius_def, pow_zero, pow_one]
328
-
329
- @[simp]
330
- lemma iterateFrobenius_zero : iterateFrobenius R p 0 = RingHom.id R :=
331
- RingHom.ext (iterateFrobenius_zero_apply R p)
332
-
333
- lemma iterateFrobenius_add_apply :
334
- iterateFrobenius R p (m + n) x = iterateFrobenius R p m (iterateFrobenius R p n x) := by
335
- simp_rw [iterateFrobenius_def, add_comm m n, pow_add, pow_mul]
336
-
337
- lemma iterateFrobenius_add :
338
- iterateFrobenius R p (m + n) = (iterateFrobenius R p m).comp (iterateFrobenius R p n) :=
339
- RingHom.ext (iterateFrobenius_add_apply R p m n)
340
-
341
- lemma iterateFrobenius_mul_apply :
342
- iterateFrobenius R p (m * n) x = (iterateFrobenius R p m)^[n] x := by
343
- simp_rw [coe_iterateFrobenius, Function.iterate_mul]
344
-
345
- lemma coe_iterateFrobenius_mul : iterateFrobenius R p (m * n) = (iterateFrobenius R p m)^[n] :=
346
- funext (iterateFrobenius_mul_apply R p m n)
347
-
348
304
variable {R}
349
305
350
- lemma frobenius_mul : frobenius R p (x * y) = frobenius R p x * frobenius R p y :=
351
- map_mul (frobenius R p) x y
352
-
353
- lemma frobenius_one : frobenius R p 1 = 1 := one_pow _
354
-
355
- lemma MonoidHom.map_frobenius : f (frobenius R p x) = frobenius S p (f x) := map_pow f x p
356
- lemma RingHom.map_frobenius : g (frobenius R p x) = frobenius S p (g x) := map_pow g x p
357
-
358
- lemma MonoidHom.map_iterate_frobenius (n : ℕ) :
359
- f ((frobenius R p)^[n] x) = (frobenius S p)^[n] (f x) :=
360
- Function.Semiconj.iterate_right (f.map_frobenius p) n x
361
-
362
- lemma RingHom.map_iterate_frobenius (n : ℕ) :
363
- g ((frobenius R p)^[n] x) = (frobenius S p)^[n] (g x) :=
364
- g.toMonoidHom.map_iterate_frobenius p x n
365
-
366
- lemma MonoidHom.iterate_map_frobenius (f : R →* R) (p : ℕ) [ExpChar R p] (n : ℕ) :
367
- f^[n] (frobenius R p x) = frobenius R p (f^[n] x) :=
368
- iterate_map_pow f _ _ _
369
-
370
- lemma RingHom.iterate_map_frobenius (f : R →+* R) (p : ℕ) [ExpChar R p] (n : ℕ) :
371
- f^[n] (frobenius R p x) = frobenius R p (f^[n] x) := iterate_map_pow f _ _ _
372
-
373
306
lemma list_sum_pow_char (l : List R) : l.sum ^ p = (l.map (· ^ p : R → R)).sum :=
374
307
map_list_sum (frobenius R p) _
375
308
@@ -379,25 +312,14 @@ lemma multiset_sum_pow_char (s : Multiset R) : s.sum ^ p = (s.map (· ^ p : R
379
312
lemma sum_pow_char {ι : Type *} (s : Finset ι) (f : ι → R) : (∑ i ∈ s, f i) ^ p = ∑ i ∈ s, f i ^ p :=
380
313
map_sum (frobenius R p) _ _
381
314
382
- variable (n : ℕ)
383
-
384
315
lemma list_sum_pow_char_pow (l : List R) : l.sum ^ p ^ n = (l.map (· ^ p ^ n : R → R)).sum :=
385
316
map_list_sum (iterateFrobenius R p n) _
386
317
387
318
lemma multiset_sum_pow_char_pow (s : Multiset R) :
388
- s.sum ^ p ^ n = (s.map (· ^ p ^ n : R → R)).sum := map_multiset_sum (iterateFrobenius R p n) _
319
+ s.sum ^ p ^ n = (s.map (· ^ p ^ n : R → R)).sum :=
320
+ map_multiset_sum (iterateFrobenius R p n) _
389
321
390
322
lemma sum_pow_char_pow {ι : Type *} (s : Finset ι) (f : ι → R) :
391
323
(∑ i ∈ s, f i) ^ p ^ n = ∑ i ∈ s, f i ^ p ^ n := map_sum (iterateFrobenius R p n) _ _
392
324
393
- end CommSemiring
394
-
395
- section CommRing
396
- variable [CommRing R] (p : ℕ) [ExpChar R p] (x y : R)
397
-
398
- lemma frobenius_neg : frobenius R p (-x) = -frobenius R p x := map_neg ..
399
-
400
- lemma frobenius_sub : frobenius R p (x - y) = frobenius R p x - frobenius R p y := map_sub ..
401
-
402
- end CommRing
403
- end frobenius
325
+ end Frobenius
0 commit comments