@@ -706,6 +706,96 @@ end MonoidAlgebra
706
706
707
707
end MonoidAlgebra
708
708
709
+ section Orzech
710
+
711
+ open Submodule Module Module.Finite in
712
+ /-- Any commutative ring `R` satisfies the `OrzechProperty`, that is, for any finitely generated
713
+ `R`-module `M`, any surjective homomorphism `f : N →ₗ[R] M` from a submodule `N` of `M` to `M`
714
+ is injective.
715
+
716
+ This is a consequence of Noetherian case
717
+ (`IsNoetherian.injective_of_surjective_of_injective`), which requires that `M` is a
718
+ Noetherian module, but allows `R` to be non-commutative. The reduction of this result to
719
+ Noetherian case is adapted from <https://math.stackexchange.com/a/1066110>:
720
+ suppose `{ m_j }` is a finite set of generator of `M`, for any `n : N` one can write
721
+ `i n = ∑ j, b_j * m_j` for `{ b_j }` in `R`, here `i : N →ₗ[R] M` is the standard inclusion.
722
+ We can choose `{ n_j }` which are preimages of `{ m_j }` under `f`, and can choose
723
+ `{ c_jl }` in `R` such that `i n_j = ∑ l, c_jl * m_l` for each `j`.
724
+ Now let `A` be the subring of `R` generated by `{ b_j }` and `{ c_jl }`, then it is
725
+ Noetherian. Let `N'` be the `A`-submodule of `N` generated by `n` and `{ n_j }`,
726
+ `M'` be the `A`-submodule of `M` generated by `{ m_j }`,
727
+ then it's easy to see that `i` and `f` restrict to `N' →ₗ[A] M'`,
728
+ and the restricted version of `f` is surjective, hence by Noetherian case,
729
+ it is also injective, in particular, if `f n = 0`, then `n = 0`.
730
+
731
+ See also Orzech's original paper: *Onto endomorphisms are isomorphisms* [ orzech1971 ] . -/
732
+ instance (priority := 100 ) CommRing.orzechProperty
733
+ (R : Type *) [CommRing R] : OrzechProperty R := by
734
+ refine ⟨fun {M} _ _ _ {N} f hf ↦ ?_⟩
735
+ letI := addCommMonoidToAddCommGroup R (M := M)
736
+ letI := addCommMonoidToAddCommGroup R (M := N)
737
+ let i := N.subtype
738
+ let hi : Function.Injective i := N.injective_subtype
739
+ refine LinearMap.ker_eq_bot.1 <| LinearMap.ker_eq_bot'.2 fun n hn ↦ ?_
740
+ obtain ⟨k, mj, hmj⟩ := exists_fin (R := R) (M := M)
741
+ rw [← surjective_piEquiv_apply_iff] at hmj
742
+ obtain ⟨b, hb⟩ := hmj (i n)
743
+ choose nj hnj using fun j ↦ hf (mj j)
744
+ choose c hc using fun j ↦ hmj (i (nj j))
745
+ let A := Subring.closure (Set.range b ∪ Set.range c.uncurry)
746
+ let N' := span A ({n} ∪ Set.range nj)
747
+ let M' := span A (Set.range mj)
748
+ haveI : IsNoetherianRing A := is_noetherian_subring_closure _
749
+ (.union (Set.finite_range _) (Set.finite_range _))
750
+ haveI : Module.Finite A M' := span_of_finite A (Set.finite_range _)
751
+ refine congr($((LinearMap.ker_eq_bot'.1 <| LinearMap.ker_eq_bot.2 <|
752
+ IsNoetherian.injective_of_surjective_of_injective
753
+ ((i.restrictScalars A).restrict fun x hx ↦ ?_ : N' →ₗ[A] M')
754
+ ((f.restrictScalars A).restrict fun x hx ↦ ?_ : N' →ₗ[A] M')
755
+ (fun _ _ h ↦ injective_subtype _ (hi congr(($h).1 )))
756
+ fun ⟨x, hx⟩ ↦ ?_) ⟨n, (subset_span (by simp))⟩ (Subtype.val_injective hn)).1 )
757
+ · induction hx using span_induction' with
758
+ | mem x hx =>
759
+ change i x ∈ M'
760
+ simp only [Set.singleton_union, Set.mem_insert_iff, Set.mem_range] at hx
761
+ rcases hx with hx | ⟨j, rfl⟩
762
+ · rw [hx, ← hb, piEquiv_apply_apply]
763
+ refine Submodule.sum_mem _ fun j _ ↦ ?_
764
+ let b' : A := ⟨b j, Subring.subset_closure (by simp)⟩
765
+ rw [show b j • mj j = b' • mj j from rfl]
766
+ exact smul_mem _ _ (subset_span (by simp))
767
+ · rw [← hc, piEquiv_apply_apply]
768
+ refine Submodule.sum_mem _ fun j' _ ↦ ?_
769
+ let c' : A := ⟨c j j', Subring.subset_closure
770
+ (by simp [show ∃ a b, c a b = c j j' from ⟨j, j', rfl⟩])⟩
771
+ rw [show c j j' • mj j' = c' • mj j' from rfl]
772
+ exact smul_mem _ _ (subset_span (by simp))
773
+ | zero => simp
774
+ | add x _ y _ hx hy => rw [map_add]; exact add_mem hx hy
775
+ | smul a x _ hx => rw [map_smul]; exact smul_mem _ _ hx
776
+ · induction hx using span_induction' with
777
+ | mem x hx =>
778
+ change f x ∈ M'
779
+ simp only [Set.singleton_union, Set.mem_insert_iff, Set.mem_range] at hx
780
+ rcases hx with hx | ⟨j, rfl⟩
781
+ · rw [hx, hn]; exact zero_mem _
782
+ · exact subset_span (by simp [hnj])
783
+ | zero => simp
784
+ | add x _ y _ hx hy => rw [map_add]; exact add_mem hx hy
785
+ | smul a x _ hx => rw [map_smul]; exact smul_mem _ _ hx
786
+ suffices x ∈ LinearMap.range ((f.restrictScalars A).domRestrict N') by
787
+ obtain ⟨a, ha⟩ := this
788
+ exact ⟨a, Subtype.val_injective ha⟩
789
+ induction hx using span_induction' with
790
+ | mem x hx =>
791
+ obtain ⟨j, rfl⟩ := hx
792
+ exact ⟨⟨nj j, subset_span (by simp)⟩, hnj j⟩
793
+ | zero => exact zero_mem _
794
+ | add x _ y _ hx hy => exact add_mem hx hy
795
+ | smul a x _ hx => exact smul_mem _ a hx
796
+
797
+ end Orzech
798
+
709
799
section Vasconcelos
710
800
711
801
/-- A theorem/proof by Vasconcelos, given a finite module `M` over a commutative ring, any
0 commit comments