@@ -1057,36 +1057,41 @@ end centralizer
1057
1057
/-- Suppose we are given `∑ i, lᵢ * sᵢ = 1` in `S`, and `S'` a subalgebra of `S` that contains
1058
1058
`lᵢ` and `sᵢ`. To check that an `x : S` falls in `S'`, we only need to show that
1059
1059
`r ^ n • x ∈ M'` for some `n` for each `r : s`. -/
1060
- lemma mem_of_span_eq_top_of_smul_pow_mem {S : Type *} [comm_ring S] [algebra R S]
1061
- (S' : subalgebra R S) (s : set S) (l : s →₀ S) (hs : finsupp.total s S S coe l = 1 )
1062
- (hs' : s ⊆ S') (hl : ∀ i, l i ∈ S') (x : S)
1063
- (H : ∀ r : s, ∃ (n : ℕ), (r ^ n : S) • x ∈ S') : x ∈ S' :=
1060
+ lemma mem_of_finset_sum_eq_one_of_pow_smul_mem {S : Type *} [comm_ring S]
1061
+ [algebra R S] (S' : subalgebra R S) {ι : Type *} (ι' : finset ι) (s : ι → S) (l : ι → S)
1062
+ (e : ∑ i in ι', l i * s i = 1 )
1063
+ (hs : ∀ i, s i ∈ S') (hl : ∀ i, l i ∈ S') (x : S)
1064
+ (H : ∀ i, ∃ (n : ℕ), (s i ^ n : S) • x ∈ S') : x ∈ S' :=
1064
1065
begin
1065
- let s' : set S' := coe ⁻¹' s,
1066
- let e : s' ≃ s := ⟨λ x, ⟨x.1 , x.2 ⟩, λ x, ⟨⟨_, hs' x.2 ⟩, x.2 ⟩, λ ⟨⟨_, _⟩, _⟩, rfl, λ ⟨_, _⟩, rfl⟩,
1067
- let l' : s →₀ S' := ⟨l.support, λ x, ⟨_, hl x⟩,
1068
- λ _, finsupp.mem_support_iff.trans $ iff.not $ by { rw ← subtype.coe_inj, refl }⟩,
1069
- have : ideal.span s' = ⊤,
1066
+ classical,
1067
+ suffices : x ∈ (algebra.of_id S' S).range.to_submodule,
1068
+ { obtain ⟨x, rfl⟩ := this , exact x.2 },
1069
+ choose n hn using H,
1070
+ let s' : ι → S' := λ x, ⟨s x, hs x⟩,
1071
+ have : ideal.span (s' ' ' ι')= ⊤,
1070
1072
{ rw [ideal.eq_top_iff_one, ideal.span, finsupp.mem_span_iff_total],
1071
- refine ⟨finsupp.equiv_map_domain e.symm l', subtype.ext $ eq.trans _ hs⟩,
1072
- rw finsupp.total_equiv_map_domain,
1073
- exact finsupp.apply_total _ (algebra.of_id S' S).to_linear_map _ _ },
1074
- obtain ⟨s'', hs₁, hs₂⟩ := (ideal.span_eq_top_iff_finite _).mp this ,
1075
- replace H : ∀ r : s'', ∃ (n : ℕ), (r ^ n : S) • x ∈ S' := λ r, H ⟨r, hs₁ r.2 ⟩,
1076
- choose n₁ n₂ using H,
1077
- let N := s''.attach.sup n₁,
1078
- have hs' := ideal.span_pow_eq_top _ hs₂ N,
1079
- have : ∀ {x : S}, x ∈ (algebra.of_id S' S).range.to_submodule ↔ x ∈ S' :=
1080
- λ x, ⟨by { rintro ⟨x, rfl⟩, exact x.2 }, λ h, ⟨⟨x, h⟩, rfl⟩⟩,
1081
- rw ← this ,
1073
+ refine ⟨(finsupp.of_support_finite (λ i : ι', (⟨l i, hl i⟩ : S')) (set.to_finite _))
1074
+ .map_domain $ λ i, ⟨s' i, i, i.2 , rfl⟩, S'.to_submodule.injective_subtype _⟩,
1075
+ rw [finsupp.total_map_domain, finsupp.total_apply, finsupp.sum_fintype,
1076
+ map_sum, submodule.subtype_apply, subalgebra.coe_one],
1077
+ { exact finset.sum_attach.trans e },
1078
+ { exact λ _, zero_smul _ _ } },
1079
+ let N := ι'.sup n,
1080
+ have hs' := ideal.span_pow_eq_top _ this N,
1082
1081
apply (algebra.of_id S' S).range.to_submodule.mem_of_span_top_of_smul_mem _ hs',
1083
- rintro ⟨_, r, hr , rfl⟩,
1084
- convert submodule.smul_mem _ (r ^ (N - n₁ ⟨r, hr⟩)) (this.mpr $ n₂ ⟨r, hr⟩) using 1 ,
1085
- simp only [_root_.coe_coe, subtype.coe_mk ,
1086
- subalgebra.smul_def, smul_smul, ← pow_add, subalgebra.coe_pow] ,
1087
- rw tsub_add_cancel_of_le (finset.le_sup (s''.mem_attach _) : n₁ ⟨r, hr⟩ ≤ N) ,
1082
+ rintros ⟨_, _, ⟨i, hi, rfl⟩ , rfl⟩,
1083
+ change s i ^ N • x ∈ _ ,
1084
+ rw [← tsub_add_cancel_of_le ( show n i ≤ N, from finset.le_sup hi), pow_add, mul_smul] ,
1085
+ refine submodule.smul_mem _ (⟨_, pow_mem (hs i) _⟩ : S') _ ,
1086
+ exact ⟨⟨_, hn i⟩, rfl⟩ ,
1088
1087
end
1089
1088
1089
+ lemma mem_of_span_eq_top_of_smul_pow_mem {S : Type *} [comm_ring S] [algebra R S]
1090
+ (S' : subalgebra R S) (s : set S) (l : s →₀ S) (hs : finsupp.total s S S coe l = 1 )
1091
+ (hs' : s ⊆ S') (hl : ∀ i, l i ∈ S') (x : S)
1092
+ (H : ∀ r : s, ∃ (n : ℕ), (r ^ n : S) • x ∈ S') : x ∈ S' :=
1093
+ mem_of_finset_sum_eq_one_of_pow_smul_mem S' l.support coe l hs (λ x, hs' x.2 ) hl x H
1094
+
1090
1095
end subalgebra
1091
1096
1092
1097
section nat
0 commit comments