Skip to content

Commit

Permalink
feat(ring_theory/local_properties): Being finite / of finite type is …
Browse files Browse the repository at this point in the history
…local. (#10775)




Co-authored-by: Andrew Yang <36414270+erdOne@users.noreply.github.com>
  • Loading branch information
erdOne and erdOne committed Dec 18, 2021
1 parent c10a872 commit 5603398
Show file tree
Hide file tree
Showing 4 changed files with 426 additions and 0 deletions.
7 changes: 7 additions & 0 deletions src/ring_theory/ideal/basic.lean
Expand Up @@ -114,6 +114,13 @@ submodule.span_singleton_eq_bot

@[simp] lemma span_one : span (1 : set α) = ⊤ := by rw [←set.singleton_one, span_singleton_one]

lemma span_eq_top_iff_finite (s : set α) :
span s = ⊤ ↔ ∃ s' : finset α, ↑s' ⊆ s ∧ span (s' : set α) = ⊤ :=
begin
simp_rw eq_top_iff_one,
exact ⟨submodule.mem_span_finite_of_mem_span, λ ⟨s', h₁, h₂⟩, span_mono h₁ h₂⟩
end

/--
The ideal generated by an arbitrary binary relation.
-/
Expand Down
18 changes: 18 additions & 0 deletions src/ring_theory/ideal/operations.lean
Expand Up @@ -205,6 +205,24 @@ begin
simpa using H
end

/-- Given `s`, a generating set of `R`, to check that an `x : M` falls in a
submodule `M'` of `x`, we only need to show that `r ^ n • x ∈ M'` for some `n` for each `r : s`. -/
lemma mem_of_span_eq_top_of_smul_pow_mem (M' : submodule R M)
(s : set R) (hs : ideal.span s = ⊤) (x : M)
(H : ∀ r : s, ∃ (n : ℕ), (r ^ n : R) • x ∈ M') : x ∈ M' :=
begin
obtain ⟨s', hs₁, hs₂⟩ := (ideal.span_eq_top_iff_finite _).mp hs,
replace H : ∀ r : s', ∃ (n : ℕ), (r ^ n : R) • x ∈ M' := λ r, H ⟨_, hs₁ r.prop⟩,
choose n₁ n₂ using H,
let N := s'.attach.sup n₁,
have hs' := ideal.span_pow_eq_top (s' : set R) hs₂ N,
apply M'.mem_of_span_top_of_smul_mem _ hs',
rintro ⟨_, r, hr, rfl⟩,
convert M'.smul_mem (r ^ (N - n₁ ⟨r, hr⟩)) (n₂ ⟨r, hr⟩) using 1,
simp only [subtype.coe_mk, smul_smul, ← pow_add],
rw tsub_add_cancel_of_le (finset.le_sup (s'.mem_attach _) : n₁ ⟨r, hr⟩ ≤ N),
end

variables {M' : Type w} [add_comm_monoid M'] [module R M']

theorem map_smul'' (f : M →ₗ[R] M') : (I • N).map f = I • N.map f :=
Expand Down

0 comments on commit 5603398

Please sign in to comment.