@@ -384,7 +384,7 @@ noncomputable instance : Field (A ⧸ P) := Ideal.Quotient.field P
384
384
lemma is_primepow_char_A_quot_P : IsPrimePow q := Fintype.isPrimePow_card_of_field
385
385
386
386
lemma ex_primepow_char_A_quot_P : ∃ p n : ℕ , Prime p ∧ 0 < n ∧ p ^ n = q := by
387
- apply is_primepow_char_A_quot_P
387
+ exact is_primepow_char_A_quot_P _
388
388
389
389
local notation "p" => Classical.choose (CharP.exists (A ⧸ P))
390
390
local notation "p'" => Classical.choose (ex_primepow_char_A_quot_P P)
@@ -407,7 +407,7 @@ lemma p_is_p' : p = p' := by
407
407
have h1 : p ∣ q := charP_iff (A ⧸ P) p |>.1 (p_is_char P) q |>.1 eq0
408
408
have eq1 : p' ^ n = q := q_is_p'_pow_n P
409
409
rw [← eq1] at h1
410
- refine Nat.dvd_prime (p'_is_prime P) |>.1
410
+ exact Nat.dvd_prime (p'_is_prime P) |>.1
411
411
(Nat.Prime.dvd_of_dvd_pow (p_is_prime P) h1) |>.resolve_left <| Nat.Prime.ne_one <| p_is_prime P
412
412
413
413
lemma q_is_p_pow_n : p ^ n = q := by
@@ -421,7 +421,7 @@ theorem pow_eq_expand (a : (A ⧸ P)[X]) :
421
421
have pprime : Nat.Prime p := p_is_prime P
422
422
have factprime : Fact (Nat.Prime p) := { out := pprime }
423
423
rw [← q_is_p_pow_n, ← map_expand_pow_char, map_expand, FiniteField.frobenius_pow]
424
- · simp only [exists_and_left, RingHom.one_def, map_id]
424
+ · simp [exists_and_left, RingHom.one_def, map_id]
425
425
· exact (q_is_p_pow_n P).symm
426
426
427
427
end FreshmansDream
@@ -488,11 +488,7 @@ theorem gal_smul_F_eq (σ : L ≃ₐ[K] L) :
488
488
∏ τ : L ≃ₐ[K] L,
489
489
(X - C (galRestrict A K L B σ
490
490
(galRestrict A K L B τ α))):= by
491
- rw [Finset.smul_prod]
492
- simp_rw [smul_sub]
493
- ext
494
- congr
495
- simp only [smul_X, smul_C, AlgEquiv.smul_def]
491
+ simp [Finset.smul_prod, smul_sub, smul_X, smul_C, AlgEquiv.smul_def]
496
492
497
493
/-- use `Finset.prod_bij` to show
498
494
`(galRestrict A K L B σ • (∏ τ : L ≃ₐ[ K ] L, (X - C (galRestrict A K L B τ α))) =
@@ -507,7 +503,7 @@ lemma F_invariant_under_finite_aut (σ : L ≃ₐ[K] L) :
507
503
have i_inj : ∀ (τ₁ : L ≃ₐ[K] L) (hτ₁ : τ₁ ∈ Finset.univ) (τ₂ : L ≃ₐ[K] L)
508
504
(hτ₂ : τ₂ ∈ Finset.univ), i τ₁ hτ₁ = i τ₂ hτ₂ → τ₁ = τ₂ := by
509
505
intros τ₁ _ τ₂ _ h
510
- simpa only [i, mul_right_inj] using h
506
+ simpa [i, mul_right_inj] using h
511
507
have i_surj : ∀ σ ∈ Finset.univ, ∃ (τ : L ≃ₐ[K] L) (hτ : τ ∈ Finset.univ), i τ hτ = σ := by
512
508
intro τ'
513
509
simp only [Finset.mem_univ, exists_true_left, forall_true_left, i]
@@ -520,7 +516,7 @@ lemma F_invariant_under_finite_aut (σ : L ≃ₐ[K] L) :
520
516
simp only [i, map_mul, sub_right_inj, C_inj]
521
517
rw [AlgEquiv.aut_mul]
522
518
rfl
523
- apply Finset.prod_bij i hi i_inj i_surj h
519
+ exact Finset.prod_bij i hi i_inj i_surj h
524
520
525
521
/-- ` L ≃ₐ[K] L` fixes `F`. -/
526
522
theorem gal_smul_F_eq_self (σ : L ≃ₐ[K] L) :
@@ -532,9 +528,8 @@ theorem gal_smul_F_eq_self (σ : L ≃ₐ[K] L) :
532
528
533
529
theorem gal_smul_coeff_eq (n : ℕ) (h : ∀ σ : L ≃ₐ[K] L, galRestrict A K L B σ • F = F)
534
530
(σ : L ≃ₐ[K] L) : galRestrict A K L B σ • (coeff F n) = coeff F n := by
535
- simp only [AlgEquiv.smul_def]
536
531
nth_rewrite 2 [← h σ]
537
- simp only [coeff_smul, AlgEquiv.smul_def]
532
+ simp [coeff_smul, AlgEquiv.smul_def]
538
533
539
534
variable {A K L B Q}
540
535
@@ -580,7 +575,7 @@ theorem coeff_lives_in_A (n : ℕ) : ∃ a : A, algebraMap B L (coeff F n) = (al
580
575
exact NoZeroSMulDivisors.algebraMap_injective K L
581
576
cases' h1.1 h2 with a' ha'
582
577
use a'
583
- simpa only [eq0, RingHom.coe_comp, Function.comp_apply, ha']
578
+ simpa [eq0, RingHom.coe_comp, Function.comp_apply, ha']
584
579
585
580
/-- `α` is a root of `F`. -/
586
581
lemma isRoot_α : eval α F = 0 := by
@@ -603,14 +598,12 @@ lemma isRoot_α : eval α F = 0 := by
603
598
apply eq0 at evalid
604
599
rwa [← eqF]
605
600
606
- lemma quotient_isRoot_α : (eval α F) ∈ Q := by
607
- rw [isRoot_α Q_ne_bot]
608
- apply Ideal.zero_mem
601
+ lemma quotient_isRoot_α : (eval α F) ∈ Q := (isRoot_α Q_ne_bot) ▸ Ideal.zero_mem _
609
602
610
603
lemma conjugate_isRoot_α (σ : L ≃ₐ[K] L) : (eval (galRestrict A K L B σ α) F) = 0 := by
611
604
have evalσ : eval (galRestrict A K L B σ α)
612
605
(X - C (galRestrict A K L B σ α)) = 0 := by
613
- simp only [eval_sub, eval_X, eval_C, sub_self]
606
+ simp [eval_sub, eval_X, eval_C, sub_self]
614
607
have eqF : (eval (galRestrict A K L B σ α) (∏ τ : L ≃ₐ[K] L,
615
608
(X - C (galRestrict A K L B τ α)))) =
616
609
eval (galRestrict A K L B σ α) F := rfl
@@ -630,9 +623,7 @@ lemma conjugate_isRoot_α (σ : L ≃ₐ[K] L) : (eval (galRestrict A K L B σ
630
623
rw [← eqF, evalσ]
631
624
632
625
lemma conjugate_quotient_isRoot_α (σ : L ≃ₐ[K] L) :
633
- (eval (galRestrict A K L B σ α) F) ∈ Q := by
634
- rw [conjugate_isRoot_α Q_ne_bot]
635
- apply Ideal.zero_mem
626
+ (eval (galRestrict A K L B σ α) F) ∈ Q := (conjugate_isRoot_α Q_ne_bot) _ ▸ Ideal.zero_mem _
636
627
637
628
lemma F_is_root_iff_is_conjugate {x : B} :
638
629
IsRoot F x ↔ (∃ σ : L ≃ₐ[K] L, x = (galRestrict A K L B σ α)) := by
@@ -656,7 +647,7 @@ lemma F_is_root_iff_is_conjugate {x : B} :
656
647
· intros h
657
648
rcases h with ⟨σ, hσ⟩
658
649
rw [Polynomial.IsRoot.def, hσ]
659
- apply conjugate_isRoot_α Q_ne_bot
650
+ exact conjugate_isRoot_α Q_ne_bot _
660
651
661
652
lemma F_eval_zero_is_conjugate {x : B} (h : eval x F = 0 ) : ∃ σ : L ≃ₐ[K] L,
662
653
x = ((galRestrict A K L B σ) α) := by
@@ -678,17 +669,15 @@ lemma ex_poly_in_A : ∃ m : A[X], Polynomial.map (algebraMap A B) m = F := by
678
669
apply Iff.not
679
670
rw [← _root_.map_eq_zero_iff (algebraMap B L), this, map_eq_zero_iff]
680
671
have I : NoZeroSMulDivisors A L := NoZeroSMulDivisors.trans A K L
681
- · apply NoZeroSMulDivisors.algebraMap_injective
682
- · apply NoZeroSMulDivisors.algebraMap_injective
672
+ · exact NoZeroSMulDivisors.algebraMap_injective _ _
673
+ · exact NoZeroSMulDivisors.algebraMap_injective _ _
683
674
}}
684
675
use m
685
676
ext n
686
- have := Classical.choose_spec (h n)
687
677
simp only [coeff_map, coeff_ofFinsupp, Finsupp.coe_mk]
688
678
set s := Classical.choose (h n)
689
679
apply NoZeroSMulDivisors.algebraMap_injective B L
690
- rw [this]
691
- exact (IsScalarTower.algebraMap_apply A B L _).symm
680
+ exact (Classical.choose_spec (h n)) ▸ (IsScalarTower.algebraMap_apply A B L _).symm
692
681
693
682
/--`m' : A[X]` such that `Polynomial.map (algebraMap A B) m = F`. -/
694
683
noncomputable def m' : A[X] := Classical.choose (ex_poly_in_A Q_ne_bot)
@@ -703,11 +692,11 @@ lemma m_eq_F_in_B_quot_Q :
703
692
Polynomial.map (algebraMap B (B ⧸ Q)) F := by
704
693
suffices h : Polynomial.map (algebraMap A B) m = F by
705
694
exact congrArg (map (algebraMap B (B ⧸ Q))) h
706
- apply m_mapsto_F
695
+ exact m_mapsto_F _
707
696
708
697
lemma m_expand_char_q : (Polynomial.map (algebraMap A (A ⧸ P)) m) ^ q =
709
698
(expand _ q (Polynomial.map (algebraMap A (A ⧸ P)) m)) := by
710
- apply pow_eq_expand
699
+ exact pow_eq_expand _ _
711
700
712
701
lemma B_m_expand_char_q : (Polynomial.map (algebraMap A (B ⧸ Q)) m) ^ q =
713
702
(expand _ q (Polynomial.map (algebraMap A (B ⧸ Q)) m)) := by
@@ -741,23 +730,23 @@ lemma pow_expand_A_B_scalar_tower_F :
741
730
lemma F_expand_eval_eq_eval_pow :
742
731
(eval₂ (Ideal.Quotient.mk Q) (Ideal.Quotient.mk Q α) F) ^ q =
743
732
(eval₂ (Ideal.Quotient.mk Q) (Ideal.Quotient.mk Q (α ^ q)) F) := by
744
- simp only [← Polynomial.eval_map, ← Ideal.Quotient.algebraMap_eq, ← Polynomial.coe_evalRingHom,
745
- ← map_pow, pow_expand_A_B_scalar_tower_F]
746
- simp only [Ideal.Quotient.algebraMap_eq, coe_evalRingHom, expand_eval, map_pow]
733
+ simp_rw [← Polynomial.eval_map, ← Ideal.Quotient.algebraMap_eq, ← Polynomial.coe_evalRingHom,
734
+ ← map_pow, pow_expand_A_B_scalar_tower_F, Ideal.Quotient.algebraMap_eq, coe_evalRingHom,
735
+ expand_eval, map_pow]
747
736
748
737
lemma quotient_F_is_product_of_quot :
749
738
(Polynomial.map (Ideal.Quotient.mk Q) F) =
750
739
∏ τ : L ≃ₐ[K] L, (X - C ((Ideal.Quotient.mk Q) ((galRestrict A K L B τ) α))) := by
751
740
rw [← Polynomial.coe_mapRingHom]
752
741
erw [map_prod]
753
- simp only [map_sub, coe_mapRingHom, map_X, map_C]
742
+ simp [map_sub, coe_mapRingHom, map_X, map_C]
754
743
755
744
lemma quotient_F_is_root_iff_is_conjugate (x : (B ⧸ Q)) :
756
745
IsRoot (Polynomial.map (Ideal.Quotient.mk Q) F) x ↔
757
746
(∃ σ : L ≃ₐ[K] L, x = ((Ideal.Quotient.mk Q) ((galRestrict A K L B σ) α))) := by
758
747
rw [quotient_F_is_product_of_quot, Polynomial.isRoot_prod]
759
748
simp only [Finset.mem_univ, eval_sub, eval_X, eval_C, true_and, Polynomial.root_X_sub_C]
760
- simp only [eq_comm (a := x) ]
749
+ simp [eq_comm]
761
750
762
751
lemma pow_eval_root_in_Q : ((eval α F) ^ q) ∈ Q := by
763
752
have h : (eval α F) ∈ Q := quotient_isRoot_α Q_ne_bot
@@ -767,16 +756,15 @@ lemma pow_eval_root_in_Q : ((eval α F) ^ q) ∈ Q := by
767
756
768
757
lemma expand_eval_root_eq_zero :
769
758
(eval₂ (Ideal.Quotient.mk Q) (Ideal.Quotient.mk Q (α ^ q)) F) = 0 := by
770
- rw [← F_expand_eval_eq_eval_pow P Q_ne_bot]
771
- simp only [eval₂_at_apply, ne_eq, Fintype.card_ne_zero, not_false_eq_true, pow_eq_zero_iff]
759
+ simp only [← F_expand_eval_eq_eval_pow P Q_ne_bot, eval₂_at_apply, ne_eq, Fintype.card_ne_zero,
760
+ not_false_eq_true, pow_eq_zero_iff]
772
761
have h : eval α F ∈ Q := quotient_isRoot_α Q_ne_bot
773
762
rwa [← Ideal.Quotient.eq_zero_iff_mem] at h
774
763
775
764
-- now, want `∃ σ, α ^ q ≡ σ α mod Q`
776
765
lemma pow_q_is_conjugate : ∃ σ : L ≃ₐ[K] L, (Ideal.Quotient.mk Q (α ^ q)) =
777
766
(Ideal.Quotient.mk Q ((((galRestrict A K L B) σ)) α)) := by
778
- rw [← quotient_F_is_root_iff_is_conjugate]
779
- simp only [map_pow, IsRoot.def, Polynomial.eval_map]
767
+ rw [← quotient_F_is_root_iff_is_conjugate, map_pow, IsRoot.def, Polynomial.eval_map]
780
768
exact expand_eval_root_eq_zero P Q_ne_bot
781
769
782
770
-- following lemma suggested by Amelia
@@ -785,7 +773,7 @@ lemma pow_quotient_IsRoot_α : (eval (α ^ q) F) ∈ Q := by
785
773
have h2 : (eval₂ (Ideal.Quotient.mk Q) (Ideal.Quotient.mk Q (α ^ q)) F) = 0 :=
786
774
expand_eval_root_eq_zero P Q_ne_bot
787
775
convert h2
788
- simp only [eval₂_at_apply]
776
+ rw [eval₂_at_apply]
789
777
790
778
/--`α ^ q ≡ σ • α mod Q` for some `σ : L ≃ₐ[K] L` -/
791
779
lemma pow_q_conjugate :
@@ -808,9 +796,8 @@ lemma inv_aut_not_mem_decomp (h : Frob ∉ decomposition_subgroup_Ideal' Q) : (F
808
796
lemma gen_zero_mod_inv_aut (h1 : Frob ∉ decomposition_subgroup_Ideal' Q) :
809
797
α ∈ (Frob⁻¹ • Q) := by
810
798
have inv : Frob⁻¹ ∉ decomposition_subgroup_Ideal' Q := by
811
- simpa only [inv_mem_iff]
812
- apply generator_well_defined
813
- exact inv
799
+ simpa [inv_mem_iff]
800
+ exact generator_well_defined _ _ inv
814
801
815
802
lemma prop_Frob : (α ^ q - (galRestrict A K L B Frob) α) ∈ Q :=
816
803
Classical.choose_spec (pow_q_conjugate P Q_ne_bot)
@@ -830,11 +817,9 @@ lemma is_zero_pow_gen_mod_Q (h : α ∈ (Frob⁻¹ • Q)) :
830
817
rw [← Ideal.neg_mem_iff] at h1
831
818
have h3 : ((α ^ q - (galRestrict A K L B Frob) α) -
832
819
(-(galRestrict A K L B Frob) α)) ∈ Q := by
833
- apply Ideal.sub_mem
834
- · exact h2
835
- · exact h1
820
+ exact Ideal.sub_mem Q h2 h1
836
821
convert h3
837
- simp only [sub_neg_eq_add, sub_add_cancel]
822
+ simp [sub_neg_eq_add, sub_add_cancel]
838
823
839
824
/-- `Frob ∈ decomposition_subgroup_Ideal' A K L B Q`. -/
840
825
theorem Frob_is_in_decompositionSubgroup :
@@ -852,13 +837,12 @@ lemma γ_not_in_Q_is_pow_gen {γ : B} (h : γ ∉ Q) : ∃ (i : ℕ), γ - (α
852
837
let g := Units.mk0 (((Ideal.Quotient.mk Q γ))) <| by
853
838
intro h1
854
839
rw [Ideal.Quotient.eq_zero_iff_mem] at h1
855
- apply h
856
- exact h1
840
+ exact h h1
857
841
rcases generator_mem_submonoid_powers Q_ne_bot g with ⟨i, hi⟩
858
842
use i
859
843
rw [← Ideal.Quotient.mk_eq_mk_iff_sub_mem]
860
- simp only [g, Units.ext_iff, Units.val_pow_eq_pow_val, IsUnit.unit_spec, Units.val_mk0] at hi
861
- simp only [g, map_pow, hi]
844
+ simp [g, Units.ext_iff, Units.val_pow_eq_pow_val, IsUnit.unit_spec, Units.val_mk0] at hi
845
+ simp [g, map_pow, hi]
862
846
863
847
/--`i' : ℕ` such that, for `(γ : B) (h : γ ∉ Q)`, `γ - (α ^ i) ∈ Q`. -/
864
848
noncomputable def i' {γ : B} (h : γ ∉ Q) : ℕ :=
@@ -874,12 +858,11 @@ lemma eq_pow_gen_apply {γ : B} (h: γ ∉ Q) : (galRestrict A K L B Frob) γ -
874
858
galRestrict A K L B Frob (α ^ (i h)) ∈ Q := by
875
859
rw [← Ideal.Quotient.mk_eq_mk_iff_sub_mem]
876
860
have h1 : γ - (α ^ (i h)) ∈ Q := prop_γ_not_in_Q_is_pow_gen Q_ne_bot h
877
- rw [← Ideal.Quotient.mk_eq_mk_iff_sub_mem] at h1
861
+ rw [← Ideal.Quotient.mk_eq_mk_iff_sub_mem, Ideal.Quotient.eq ] at h1
878
862
rw [Ideal.Quotient.eq, ← map_sub]
879
- rw [Ideal.Quotient.eq] at h1
880
863
have := Frob_is_in_decompositionSubgroup P Q_ne_bot
881
864
rw [mem_decomposition_iff] at this
882
- apply (this _).1 h1
865
+ exact (this _).1 h1
883
866
884
867
-- γ ∈ B \ Q is α^i mod Q
885
868
/-- `Frob • (α ^ i) ≡ α ^ (i * q) mod Q` -/
@@ -916,10 +899,7 @@ theorem Frob_γ_not_in_Q_is_pow {γ : B} (h : γ ∉ Q) :
916
899
· exact h3
917
900
simp only [map_pow, sub_sub_sub_cancel_right] at h5
918
901
have h6 : (( (((galRestrict A K L B) Frob)) γ - α ^ (i h * q)) +
919
- (((α ^ ((i h) * q)) - (γ ^ q)))) ∈ Q := by
920
- apply Ideal.add_mem
921
- · exact h5
922
- · exact h4
902
+ (((α ^ ((i h) * q)) - (γ ^ q)))) ∈ Q := Ideal.add_mem _ h5 h4
923
903
simp only [sub_add_sub_cancel] at h6
924
904
rw [← Ideal.neg_mem_iff] at h6
925
905
simp only [neg_sub] at h6
0 commit comments