@@ -484,20 +484,7 @@ theorem mem_span_singleton_trans {x y z : M} (hxy : x ∈ R ∙ y) (hyz : y ∈
484
484
exact Submodule.subset_span_trans hxy hyz
485
485
#align submodule.mem_span_singleton_trans Submodule.mem_span_singleton_trans
486
486
487
- theorem mem_span_insert {y} :
488
- x ∈ span R (insert y s) ↔ ∃ a : R, ∃ z ∈ span R s, x = a • y + z := by
489
- simp only [← union_singleton, span_union, mem_sup, mem_span_singleton, exists_prop,
490
- exists_exists_eq_and]
491
- rw [exists_comm]
492
- simp only [eq_comm, add_comm, exists_and_left]
493
- #align submodule.mem_span_insert Submodule.mem_span_insert
494
-
495
- theorem mem_span_pair {x y z : M} :
496
- z ∈ span R ({x, y} : Set M) ↔ ∃ a b : R, a • x + b • y = z := by
497
- simp_rw [mem_span_insert, mem_span_singleton, exists_exists_eq_and, eq_comm]
498
- #align submodule.mem_span_pair Submodule.mem_span_pair
499
-
500
- theorem span_insert (x) (s : Set M) : span R (insert x s) = span R ({x} : Set M) ⊔ span R s := by
487
+ theorem span_insert (x) (s : Set M) : span R (insert x s) = (R ∙ x) ⊔ span R s := by
501
488
rw [insert_eq, span_union]
502
489
#align submodule.span_insert Submodule.span_insert
503
490
@@ -509,6 +496,16 @@ theorem span_span : span R (span R s : Set M) = span R s :=
509
496
span_eq _
510
497
#align submodule.span_span Submodule.span_span
511
498
499
+ theorem mem_span_insert {y} :
500
+ x ∈ span R (insert y s) ↔ ∃ a : R, ∃ z ∈ span R s, x = a • y + z := by
501
+ simp [span_insert, mem_sup, mem_span_singleton, eq_comm (a := x)]
502
+ #align submodule.mem_span_insert Submodule.mem_span_insert
503
+
504
+ theorem mem_span_pair {x y z : M} :
505
+ z ∈ span R ({x, y} : Set M) ↔ ∃ a b : R, a • x + b • y = z := by
506
+ simp_rw [mem_span_insert, mem_span_singleton, exists_exists_eq_and, eq_comm]
507
+ #align submodule.mem_span_pair Submodule.mem_span_pair
508
+
512
509
variable (R S s)
513
510
514
511
/-- If `R` is "smaller" ring than `S` then the span by `R` is smaller than the span by `S`. -/
@@ -548,37 +545,25 @@ theorem span_singleton_eq_bot : (R ∙ x) = ⊥ ↔ x = 0 :=
548
545
theorem span_zero : span R (0 : Set M) = ⊥ := by rw [← singleton_zero, span_singleton_eq_bot]
549
546
#align submodule.span_zero Submodule.span_zero
550
547
548
+ @[simp]
549
+ theorem span_singleton_le_iff_mem (m : M) (p : Submodule R M) : (R ∙ m) ≤ p ↔ m ∈ p := by
550
+ rw [span_le, singleton_subset_iff, SetLike.mem_coe]
551
+ #align submodule.span_singleton_le_iff_mem Submodule.span_singleton_le_iff_mem
552
+
551
553
theorem span_singleton_eq_span_singleton {R M : Type *} [Ring R] [AddCommGroup M] [Module R M]
552
554
[NoZeroSMulDivisors R M] {x y : M} : ((R ∙ x) = R ∙ y) ↔ ∃ z : Rˣ, z • x = y := by
553
- by_cases hx : x = 0
554
- · rw [hx, span_zero_singleton, eq_comm, span_singleton_eq_bot]
555
- exact ⟨fun hy => ⟨1 , by rw [hy, smul_zero]⟩, fun ⟨_, hz⟩ => by rw [← hz, smul_zero]⟩
556
- by_cases hy : y = 0
557
- · rw [hy, span_zero_singleton, span_singleton_eq_bot]
558
- exact ⟨fun hx => ⟨1 , by rw [hx, smul_zero]⟩, fun ⟨z, hz⟩ => (smul_eq_zero_iff_eq z).mp hz⟩
559
555
constructor
560
- · intro hxy
561
- cases'
562
- mem_span_singleton.mp
563
- (by
564
- rw [hxy]
565
- apply mem_span_singleton_self) with
566
- v hv
567
- cases'
568
- mem_span_singleton.mp
569
- (by
570
- rw [← hxy]
571
- apply mem_span_singleton_self) with
572
- i hi
573
- have vi : v * i = 1 := by
574
- rw [← one_smul R y, ← hi, smul_smul] at hv
575
- exact smul_left_injective R hy hv
576
- have iv : i * v = 1 := by
577
- rw [← one_smul R x, ← hv, smul_smul] at hi
578
- exact smul_left_injective R hx hi
579
- exact ⟨⟨v, i, vi, iv⟩, hv⟩
580
- · rintro ⟨v, rfl⟩
581
- rw [span_singleton_group_smul_eq]
556
+ · simp only [le_antisymm_iff, span_singleton_le_iff_mem, mem_span_singleton]
557
+ rintro ⟨⟨a, rfl⟩, b, hb⟩
558
+ rcases eq_or_ne y 0 with rfl | hy; · simp
559
+ refine ⟨⟨b, a, ?_, ?_⟩, hb⟩
560
+ · apply smul_left_injective R hy
561
+ simpa only [mul_smul, one_smul]
562
+ · rw [← hb] at hy
563
+ apply smul_left_injective R (smul_ne_zero_iff.1 hy).2
564
+ simp only [mul_smul, one_smul, hb]
565
+ · rintro ⟨u, rfl⟩
566
+ exact (span_singleton_group_smul_eq _ _ _).symm
582
567
#align submodule.span_singleton_eq_span_singleton Submodule.span_singleton_eq_span_singleton
583
568
584
569
@[simp]
@@ -664,11 +649,6 @@ theorem iSup_induction' {ι : Sort*} (p : ι → Submodule R M) {C : ∀ x, (x
664
649
refine' ⟨_, hadd _ _ _ _ Cx Cy⟩
665
650
#align submodule.supr_induction' Submodule.iSup_induction'
666
651
667
- @[simp]
668
- theorem span_singleton_le_iff_mem (m : M) (p : Submodule R M) : (R ∙ m) ≤ p ↔ m ∈ p := by
669
- rw [span_le, singleton_subset_iff, SetLike.mem_coe]
670
- #align submodule.span_singleton_le_iff_mem Submodule.span_singleton_le_iff_mem
671
-
672
652
theorem singleton_span_isCompactElement (x : M) :
673
653
CompleteLattice.IsCompactElement (span R {x} : Submodule R M) := by
674
654
rw [CompleteLattice.isCompactElement_iff_le_of_directed_sSup_le]
@@ -717,27 +697,7 @@ theorem submodule_eq_sSup_le_nonzero_spans (p : Submodule R M) :
717
697
rwa [span_singleton_le_iff_mem]
718
698
#align submodule.submodule_eq_Sup_le_nonzero_spans Submodule.submodule_eq_sSup_le_nonzero_spans
719
699
720
- theorem lt_sup_iff_not_mem {I : Submodule R M} {a : M} : (I < I ⊔ R ∙ a) ↔ a ∉ I := by
721
- constructor
722
- · intro h
723
- by_contra akey
724
- have h1 : (I ⊔ R ∙ a) ≤ I := by
725
- simp only [sup_le_iff]
726
- constructor
727
- · exact le_refl I
728
- · exact (span_singleton_le_iff_mem a I).mpr akey
729
- have h2 := gt_of_ge_of_gt h1 h
730
- exact lt_irrefl I h2
731
- · intro h
732
- apply SetLike.lt_iff_le_and_exists.mpr
733
- constructor
734
- simp only [le_sup_left]
735
- use a
736
- constructor
737
- swap
738
- · assumption
739
- · have : (R ∙ a) ≤ I ⊔ R ∙ a := le_sup_right
740
- exact this (mem_span_singleton_self a)
700
+ theorem lt_sup_iff_not_mem {I : Submodule R M} {a : M} : (I < I ⊔ R ∙ a) ↔ a ∉ I := by simp
741
701
#align submodule.lt_sup_iff_not_mem Submodule.lt_sup_iff_not_mem
742
702
743
703
theorem mem_iSup {ι : Sort *} (p : ι → Submodule R M) {m : M} :
@@ -881,6 +841,28 @@ theorem comap_map_eq_self {f : F} {p : Submodule R M} (h : LinearMap.ker f ≤ p
881
841
882
842
end AddCommGroup
883
843
844
+ section DivisionRing
845
+
846
+ variable [DivisionRing K] [AddCommGroup V] [Module K V]
847
+
848
+ /-- There is no vector subspace between `p` and `(K ∙ x) ⊔ p`, `Wcovby` version. -/
849
+ theorem wcovby_span_singleton_sup (x : V) (p : Submodule K V) : Wcovby p ((K ∙ x) ⊔ p) := by
850
+ refine ⟨le_sup_right, fun q hpq hqp ↦ hqp.not_le ?_⟩
851
+ rcases SetLike.exists_of_lt hpq with ⟨y, hyq, hyp⟩
852
+ obtain ⟨c, z, hz, rfl⟩ : ∃ c : K, ∃ z ∈ p, c • x + z = y := by
853
+ simpa [mem_sup, mem_span_singleton] using hqp.le hyq
854
+ rcases eq_or_ne c 0 with rfl | hc
855
+ · simp [hz] at hyp
856
+ · have : x ∈ q
857
+ · rwa [q.add_mem_iff_left (hpq.le hz), q.smul_mem_iff hc] at hyq
858
+ simp [hpq.le, this]
859
+
860
+ /-- There is no vector subspace between `p` and `(K ∙ x) ⊔ p`, `Covby` version. -/
861
+ theorem covby_span_singleton_sup {x : V} {p : Submodule K V} (h : x ∉ p) : Covby p ((K ∙ x) ⊔ p) :=
862
+ ⟨by simpa, (wcovby_span_singleton_sup _ _).2 ⟩
863
+
864
+ end DivisionRing
865
+
884
866
end Submodule
885
867
886
868
namespace LinearMap
@@ -1010,13 +992,10 @@ variable [Field K] [AddCommGroup V] [Module K V]
1010
992
1011
993
theorem span_singleton_sup_ker_eq_top (f : V →ₗ[K] K) {x : V} (hx : f x ≠ 0 ) :
1012
994
(K ∙ x) ⊔ ker f = ⊤ :=
1013
- eq_top_iff. 2 fun y _ =>
995
+ top_unique fun y _ =>
1014
996
Submodule.mem_sup.2
1015
997
⟨(f y * (f x)⁻¹) • x, Submodule.mem_span_singleton.2 ⟨f y * (f x)⁻¹, rfl⟩,
1016
- ⟨y - (f y * (f x)⁻¹) • x, by
1017
- rw [LinearMap.mem_ker, f.map_sub, f.map_smul, smul_eq_mul, mul_assoc, inv_mul_cancel hx,
1018
- mul_one, sub_self],
1019
- by simp only [add_sub_cancel'_right]⟩⟩
998
+ ⟨y - (f y * (f x)⁻¹) • x, by simp [hx]⟩⟩
1020
999
#align linear_map.span_singleton_sup_ker_eq_top LinearMap.span_singleton_sup_ker_eq_top
1021
1000
1022
1001
end Field
0 commit comments