Skip to content

Commit

Permalink
fix: precedences of ⨆⋃⋂⨅ (#5614)
Browse files Browse the repository at this point in the history
  • Loading branch information
fpvandoorn committed Jun 30, 2023
1 parent 19879d9 commit e3c8f98
Show file tree
Hide file tree
Showing 149 changed files with 791 additions and 790 deletions.
4 changes: 2 additions & 2 deletions Archive/Wiedijk100Theorems/CubingACube.lean
Original file line number Diff line number Diff line change
Expand Up @@ -152,7 +152,7 @@ variable {ι : Type} {cs : ι → Cube (n + 1)} {i i' : ι}
/-- A finite family of (at least 2) cubes partitioning the unit cube with different sizes -/
structure Correct (cs : ι → Cube n) : Prop where
PairwiseDisjoint : Pairwise (Disjoint on Cube.toSet ∘ cs)
iUnion_eq : (⋃ i : ι, (cs i).toSet) = unitCube.toSet
iUnion_eq : ⋃ i : ι, (cs i).toSet = unitCube.toSet
Injective : Injective (Cube.w ∘ cs)
three_le : 3 ≤ n
#align theorems_100.«82».correct Theorems100.«82».Correct
Expand Down Expand Up @@ -575,7 +575,7 @@ theorem cannot_cube_a_cube :
∀ {s : Set (Cube n)}, s.Finite → -- given a finite collection of (hyper)cubes
s.Nontrivial → -- containing at least two elements
s.PairwiseDisjoint Cube.toSet → -- which is pairwise disjoint
(⋃ c ∈ s, Cube.toSet c) = unitCube.toSet → -- whose union is the unit cube
⋃ c ∈ s, Cube.toSet c = unitCube.toSet → -- whose union is the unit cube
InjOn Cube.w s → -- such that the widths of all cubes are different
False := by -- then we can derive a contradiction
intro n hn s hfin h2 hd hU hinj
Expand Down
2 changes: 1 addition & 1 deletion Counterexamples/SeminormLatticeNotDistrib.lean
Original file line number Diff line number Diff line change
Expand Up @@ -48,7 +48,7 @@ noncomputable def q2 : Seminorm ℝ (ℝ × ℝ) :=
#align counterexample.seminorm_not_distrib.q2 Counterexample.SeminormNotDistrib.q2

theorem eq_one : (p ⊔ q1 ⊓ q2) (1, 1) = 1 := by
suffices (⨅ x : ℝ × ℝ, q1 x + q2 (1 - x)) ≤ 1 by simpa
suffices ⨅ x : ℝ × ℝ, q1 x + q2 (1 - x) ≤ 1 by simpa
apply ciInf_le_of_le bddBelow_range_add ((0, 1) : ℝ × ℝ); dsimp [q1, q2]
simp only [abs_zero, smul_zero, sub_self, add_zero, zero_le_one]
#align counterexample.seminorm_not_distrib.eq_one Counterexample.SeminormNotDistrib.eq_one
Expand Down
2 changes: 1 addition & 1 deletion Mathlib/Algebra/DirectSum/Internal.lean
Original file line number Diff line number Diff line change
Expand Up @@ -327,7 +327,7 @@ def DirectSum.coeAlgHom [AddMonoid ι] [CommSemiring S] [Semiring R] [Algebra S
`DirectSum.coeAlgHom`. -/
theorem Submodule.iSup_eq_toSubmodule_range [AddMonoid ι] [CommSemiring S] [Semiring R]
[Algebra S R] (A : ι → Submodule S R) [SetLike.GradedMonoid A] :
(⨆ i, A i) = Subalgebra.toSubmodule (DirectSum.coeAlgHom A).range :=
⨆ i, A i = Subalgebra.toSubmodule (DirectSum.coeAlgHom A).range :=
(Submodule.iSup_eq_range_dfinsupp_lsum A).trans <| SetLike.coe_injective rfl
#align submodule.supr_eq_to_submodule_range Submodule.iSup_eq_toSubmodule_range

Expand Down
4 changes: 2 additions & 2 deletions Mathlib/Algebra/Lie/Nilpotent.lean
Original file line number Diff line number Diff line change
Expand Up @@ -222,7 +222,7 @@ theorem nilpotent_endo_of_nilpotent_module [hM : IsNilpotent R L M] :
This result will be used downstream to show that weight spaces are Lie submodules, at which time
it will be possible to state it in the language of weight spaces. -/
theorem iInf_max_gen_zero_eigenspace_eq_top_of_nilpotent [IsNilpotent R L M] :
(⨅ x : L, (toEndomorphism R L M x).maximalGeneralizedEigenspace 0) = ⊤ := by
⨅ x : L, (toEndomorphism R L M x).maximalGeneralizedEigenspace 0 = ⊤ := by
ext m
simp only [Module.End.mem_maximalGeneralizedEigenspace, Submodule.mem_top, sub_zero, iff_true_iff,
zero_smul, Submodule.mem_iInf]
Expand Down Expand Up @@ -535,7 +535,7 @@ theorem LieAlgebra.nilpotent_ad_of_nilpotent_algebra [IsNilpotent R L] :

/-- See also `LieAlgebra.zero_rootSpace_eq_top_of_nilpotent`. -/
theorem LieAlgebra.iInf_max_gen_zero_eigenspace_eq_top_of_nilpotent [IsNilpotent R L] :
(⨅ x : L, (ad R L x).maximalGeneralizedEigenspace 0) = ⊤ :=
⨅ x : L, (ad R L x).maximalGeneralizedEigenspace 0 = ⊤ :=
LieModule.iInf_max_gen_zero_eigenspace_eq_top_of_nilpotent R L L
#align lie_algebra.infi_max_gen_zero_eigenspace_eq_top_of_nilpotent LieAlgebra.iInf_max_gen_zero_eigenspace_eq_top_of_nilpotent

Expand Down
2 changes: 1 addition & 1 deletion Mathlib/Algebra/Module/Submodule/Bilinear.lean
Original file line number Diff line number Diff line change
Expand Up @@ -48,7 +48,7 @@ variable [Module R M] [Module R N] [Module R P]
This is the submodule version of `Set.image2`. -/
def map₂ (f : M →ₗ[R] N →ₗ[R] P) (p : Submodule R M) (q : Submodule R N) : Submodule R P :=
⨆ s : p, q.map <| f s
⨆ s : p, q.map (f s)
#align submodule.map₂ Submodule.map₂

theorem apply_mem_map₂ (f : M →ₗ[R] N →ₗ[R] P) {m : M} {n : N} {p : Submodule R M}
Expand Down
4 changes: 2 additions & 2 deletions Mathlib/Algebra/Module/Torsion.lean
Original file line number Diff line number Diff line change
Expand Up @@ -394,7 +394,7 @@ variable (hp : (S : Set ι).Pairwise fun i j => p i ⊔ p j = ⊤)

-- Porting note: mem_iSup_finset_iff_exists_sum now requires DecidableEq ι
theorem iSup_torsionBySet_ideal_eq_torsionBySet_iInf [DecidableEq ι] :
(⨆ i ∈ S, torsionBySet R M <| p i) = torsionBySet R M ↑(⨅ i ∈ S, p i) := by
⨆ i ∈ S, torsionBySet R M (p i) = torsionBySet R M ↑(⨅ i ∈ S, p i) := by
cases' S.eq_empty_or_nonempty with h h
· simp only [h]
-- Porting note: converts were not cooperating
Expand Down Expand Up @@ -446,7 +446,7 @@ theorem supIndep_torsionBySet_ideal [DecidableEq ι] : S.SupIndep fun i => torsi
variable {q : ι → R} (hq : (S : Set ι).Pairwise <| (IsCoprime on q))

theorem iSup_torsionBy_eq_torsionBy_prod [DecidableEq ι] :
(⨆ i ∈ S, torsionBy R M <| q i) = torsionBy R M (∏ i in S, q i) := by
⨆ i ∈ S, torsionBy R M (q i) = torsionBy R M (∏ i in S, q i) := by
rw [← torsionBySet_span_singleton_eq, Ideal.submodule_span_eq, ←
Ideal.finset_inf_span_singleton _ _ hq, Finset.inf_eq_iInf, ←
iSup_torsionBySet_ideal_eq_torsionBySet_iInf]
Expand Down
24 changes: 12 additions & 12 deletions Mathlib/Algebra/Order/ToIntervalMod.lean
Original file line number Diff line number Diff line change
Expand Up @@ -1050,36 +1050,36 @@ section LinearOrderedAddCommGroup

variable {α : Type _} [LinearOrderedAddCommGroup α] [Archimedean α] {p : α} (hp : 0 < p) (a : α)

theorem iUnion_Ioc_add_zsmul : (⋃ n : ℤ, Ioc (a + n • p) (a + (n + 1) • p)) = univ := by
theorem iUnion_Ioc_add_zsmul : ⋃ n : ℤ, Ioc (a + n • p) (a + (n + 1) • p) = univ := by
refine' eq_univ_iff_forall.mpr fun b => mem_iUnion.mpr _
rcases sub_toIocDiv_zsmul_mem_Ioc hp a b with ⟨hl, hr⟩
refine' ⟨toIocDiv hp a b, ⟨lt_sub_iff_add_lt.mp hl, _⟩⟩
rw [add_smul, one_smul, ← add_assoc]
convert sub_le_iff_le_add.mp hr using 1; abel
#align Union_Ioc_add_zsmul iUnion_Ioc_add_zsmul

theorem iUnion_Ico_add_zsmul : (⋃ n : ℤ, Ico (a + n • p) (a + (n + 1) • p)) = univ := by
theorem iUnion_Ico_add_zsmul : ⋃ n : ℤ, Ico (a + n • p) (a + (n + 1) • p) = univ := by
refine' eq_univ_iff_forall.mpr fun b => mem_iUnion.mpr _
rcases sub_toIcoDiv_zsmul_mem_Ico hp a b with ⟨hl, hr⟩
refine' ⟨toIcoDiv hp a b, ⟨le_sub_iff_add_le.mp hl, _⟩⟩
rw [add_smul, one_smul, ← add_assoc]
convert sub_lt_iff_lt_add.mp hr using 1; abel
#align Union_Ico_add_zsmul iUnion_Ico_add_zsmul

theorem iUnion_Icc_add_zsmul : (⋃ n : ℤ, Icc (a + n • p) (a + (n + 1) • p)) = univ := by
theorem iUnion_Icc_add_zsmul : ⋃ n : ℤ, Icc (a + n • p) (a + (n + 1) • p) = univ := by
simpa only [iUnion_Ioc_add_zsmul hp a, univ_subset_iff] using
iUnion_mono fun n : ℤ => (Ioc_subset_Icc_self : Ioc (a + n • p) (a + (n + 1) • p) ⊆ Icc _ _)
#align Union_Icc_add_zsmul iUnion_Icc_add_zsmul

theorem iUnion_Ioc_zsmul : (⋃ n : ℤ, Ioc (n • p) ((n + 1) • p)) = univ := by
theorem iUnion_Ioc_zsmul : ⋃ n : ℤ, Ioc (n • p) ((n + 1) • p) = univ := by
simpa only [zero_add] using iUnion_Ioc_add_zsmul hp 0
#align Union_Ioc_zsmul iUnion_Ioc_zsmul

theorem iUnion_Ico_zsmul : (⋃ n : ℤ, Ico (n • p) ((n + 1) • p)) = univ := by
theorem iUnion_Ico_zsmul : ⋃ n : ℤ, Ico (n • p) ((n + 1) • p) = univ := by
simpa only [zero_add] using iUnion_Ico_add_zsmul hp 0
#align Union_Ico_zsmul iUnion_Ico_zsmul

theorem iUnion_Icc_zsmul : (⋃ n : ℤ, Icc (n • p) ((n + 1) • p)) = univ := by
theorem iUnion_Icc_zsmul : ⋃ n : ℤ, Icc (n • p) ((n + 1) • p) = univ := by
simpa only [zero_add] using iUnion_Icc_add_zsmul hp 0
#align Union_Icc_zsmul iUnion_Icc_zsmul

Expand All @@ -1089,32 +1089,32 @@ section LinearOrderedRing

variable {α : Type _} [LinearOrderedRing α] [Archimedean α] (a : α)

theorem iUnion_Ioc_add_int_cast : (⋃ n : ℤ, Ioc (a + n) (a + n + 1)) = Set.univ := by
theorem iUnion_Ioc_add_int_cast : ⋃ n : ℤ, Ioc (a + n) (a + n + 1) = Set.univ := by
simpa only [zsmul_one, Int.cast_add, Int.cast_one, ← add_assoc] using
iUnion_Ioc_add_zsmul zero_lt_one a
#align Union_Ioc_add_int_cast iUnion_Ioc_add_int_cast

theorem iUnion_Ico_add_int_cast : (⋃ n : ℤ, Ico (a + n) (a + n + 1)) = Set.univ := by
theorem iUnion_Ico_add_int_cast : ⋃ n : ℤ, Ico (a + n) (a + n + 1) = Set.univ := by
simpa only [zsmul_one, Int.cast_add, Int.cast_one, ← add_assoc] using
iUnion_Ico_add_zsmul zero_lt_one a
#align Union_Ico_add_int_cast iUnion_Ico_add_int_cast

theorem iUnion_Icc_add_int_cast : (⋃ n : ℤ, Icc (a + n) (a + n + 1)) = Set.univ := by
theorem iUnion_Icc_add_int_cast : ⋃ n : ℤ, Icc (a + n) (a + n + 1) = Set.univ := by
simpa only [zsmul_one, Int.cast_add, Int.cast_one, ← add_assoc] using
iUnion_Icc_add_zsmul zero_lt_one a
#align Union_Icc_add_int_cast iUnion_Icc_add_int_cast

variable (α)

theorem iUnion_Ioc_int_cast : (⋃ n : ℤ, Ioc (n : α) (n + 1)) = Set.univ := by
theorem iUnion_Ioc_int_cast : ⋃ n : ℤ, Ioc (n : α) (n + 1) = Set.univ := by
simpa only [zero_add] using iUnion_Ioc_add_int_cast (0 : α)
#align Union_Ioc_int_cast iUnion_Ioc_int_cast

theorem iUnion_Ico_int_cast : (⋃ n : ℤ, Ico (n : α) (n + 1)) = Set.univ := by
theorem iUnion_Ico_int_cast : ⋃ n : ℤ, Ico (n : α) (n + 1) = Set.univ := by
simpa only [zero_add] using iUnion_Ico_add_int_cast (0 : α)
#align Union_Ico_int_cast iUnion_Ico_int_cast

theorem iUnion_Icc_int_cast : (⋃ n : ℤ, Icc (n : α) (n + 1)) = Set.univ := by
theorem iUnion_Icc_int_cast : ⋃ n : ℤ, Icc (n : α) (n + 1) = Set.univ := by
simpa only [zero_add] using iUnion_Icc_add_int_cast (0 : α)
#align Union_Icc_int_cast iUnion_Icc_int_cast

Expand Down
4 changes: 2 additions & 2 deletions Mathlib/AlgebraicGeometry/AffineScheme.lean
Original file line number Diff line number Diff line change
Expand Up @@ -738,8 +738,8 @@ theorem IsAffineOpen.fromSpec_map_basicOpen {X : Scheme} {U : Opens X} (hU : IsA

theorem IsAffineOpen.basicOpen_union_eq_self_iff {X : Scheme} {U : Opens X}
(hU : IsAffineOpen U) (s : Set (X.presheaf.obj <| op U)) :
(⨆ f : s, X.basicOpen (f : X.presheaf.obj <| op U)) = U ↔ Ideal.span s = ⊤ := by
trans (⋃ i : s, (PrimeSpectrum.basicOpen i.1).1) = Set.univ
⨆ f : s, X.basicOpen (f : X.presheaf.obj <| op U) = U ↔ Ideal.span s = ⊤ := by
trans ⋃ i : s, (PrimeSpectrum.basicOpen i.1).1 = Set.univ
trans
hU.fromSpec.1.base ⁻¹' (⨆ f : s, X.basicOpen (f : X.presheaf.obj <| op U)).1 =
hU.fromSpec.1.base ⁻¹' U.1
Expand Down
6 changes: 3 additions & 3 deletions Mathlib/AlgebraicGeometry/OpenImmersion/Scheme.lean
Original file line number Diff line number Diff line change
Expand Up @@ -852,15 +852,15 @@ def Scheme.OpenCover.pullbackCover {X : Scheme} (𝒰 : X.OpenCover) {W : Scheme
#align algebraic_geometry.Scheme.open_cover.pullback_cover AlgebraicGeometry.Scheme.OpenCover.pullbackCover

theorem Scheme.OpenCover.iUnion_range {X : Scheme} (𝒰 : X.OpenCover) :
(⋃ i, Set.range (𝒰.map i).1.base) = Set.univ := by
⋃ i, Set.range (𝒰.map i).1.base = Set.univ := by
rw [Set.eq_univ_iff_forall]
intro x
rw [Set.mem_iUnion]
exact ⟨𝒰.f x, 𝒰.Covers x⟩
#align algebraic_geometry.Scheme.open_cover.Union_range AlgebraicGeometry.Scheme.OpenCover.iUnion_range

theorem Scheme.OpenCover.iSup_opensRange {X : Scheme} (𝒰 : X.OpenCover) :
(⨆ i, Scheme.Hom.opensRange (𝒰.map i)) = ⊤ :=
⨆ i, Scheme.Hom.opensRange (𝒰.map i) = ⊤ :=
Opens.ext <| by rw [Opens.coe_iSup]; exact 𝒰.iUnion_range
#align algebraic_geometry.Scheme.open_cover.supr_opens_range AlgebraicGeometry.Scheme.OpenCover.iSup_opensRange

Expand Down Expand Up @@ -897,7 +897,7 @@ def Scheme.OpenCover.inter {X : Scheme.{u}} (𝒰₁ : Scheme.OpenCover.{v₁} X
/-- If `U` is a family of open sets that covers `X`, then `X.restrict U` forms an `X.open_cover`. -/
@[simps! J obj map]
def Scheme.openCoverOfSuprEqTop {s : Type _} (X : Scheme) (U : s → Opens X)
(hU : (⨆ i, U i) = ⊤) : X.OpenCover where
(hU : ⨆ i, U i = ⊤) : X.OpenCover where
J := s
obj i := X.restrict (U i).openEmbedding
map i := X.ofRestrict (U i).openEmbedding
Expand Down
4 changes: 2 additions & 2 deletions Mathlib/AlgebraicGeometry/PrimeSpectrum/Maximal.lean
Original file line number Diff line number Diff line change
Expand Up @@ -131,8 +131,8 @@ variable [IsDomain R] (K : Type v) [Field K] [Algebra R K] [IsFractionRing R K]

/-- An integral domain is equal to the intersection of its localizations at all its prime ideals
viewed as subalgebras of its field of fractions. -/
theorem iInf_localization_eq_bot : (⨅ v : PrimeSpectrum R,
Localization.subalgebra.ofField K _ <| v.asIdeal.primeCompl_le_nonZeroDivisors) = ⊥ := by
theorem iInf_localization_eq_bot : ⨅ v : PrimeSpectrum R,
Localization.subalgebra.ofField K _ (v.asIdeal.primeCompl_le_nonZeroDivisors) = ⊥ := by
ext x
rw [Algebra.mem_iInf]
constructor
Expand Down
6 changes: 3 additions & 3 deletions Mathlib/Analysis/BoxIntegral/Box/Basic.lean
Original file line number Diff line number Diff line change
Expand Up @@ -292,7 +292,7 @@ theorem isSome_iff : ∀ {I : WithBot (Box ι)}, I.isSome ↔ (I : Set (ι →
#align box_integral.box.is_some_iff BoxIntegral.Box.isSome_iff

theorem biUnion_coe_eq_coe (I : WithBot (Box ι)) :
(⋃ (J : Box ι) (_ : ↑J = I), (J : Set (ι → ℝ))) = I := by
⋃ (J : Box ι) (_ : ↑J = I), (J : Set (ι → ℝ)) = I := by
induction I using WithBot.recBotCoe <;> simp [WithBot.coe_eq_coe]
#align box_integral.box.bUnion_coe_eq_coe BoxIntegral.Box.biUnion_coe_eq_coe

Expand Down Expand Up @@ -457,13 +457,13 @@ protected theorem Ioo_subset_Icc (I : Box ι) : Box.Ioo I ⊆ Box.Icc I :=

theorem iUnion_Ioo_of_tendsto [Finite ι] {I : Box ι} {J : ℕ → Box ι} (hJ : Monotone J)
(hl : Tendsto (lower ∘ J) atTop (𝓝 I.lower)) (hu : Tendsto (upper ∘ J) atTop (𝓝 I.upper)) :
(⋃ n, Box.Ioo (J n)) = Box.Ioo I :=
⋃ n, Box.Ioo (J n) = Box.Ioo I :=
have hl' : ∀ i, Antitone fun n ↦ (J n).lower i :=
fun i ↦ (monotone_eval i).comp_antitone (antitone_lower.comp_monotone hJ)
have hu' : ∀ i, Monotone fun n ↦ (J n).upper i :=
fun i ↦ (monotone_eval i).comp (monotone_upper.comp hJ)
calc
(⋃ n, Box.Ioo (J n)) = pi univ fun i ↦ ⋃ n, Ioo ((J n).lower i) ((J n).upper i) :=
⋃ n, Box.Ioo (J n) = pi univ fun i ↦ ⋃ n, Ioo ((J n).lower i) ((J n).upper i) :=
iUnion_univ_pi_of_monotone fun i ↦ (hl' i).Ioo (hu' i)
_ = Box.Ioo I :=
pi_congr rfl fun i _ ↦
Expand Down
2 changes: 1 addition & 1 deletion Mathlib/Analysis/BoxIntegral/Box/SubboxInduction.lean
Original file line number Diff line number Diff line change
Expand Up @@ -95,7 +95,7 @@ def splitCenterBoxEmb (I : Box ι) : Set ι ↪ Box ι :=
#align box_integral.box.split_center_box_emb BoxIntegral.Box.splitCenterBoxEmb

@[simp]
theorem iUnion_coe_splitCenterBox (I : Box ι) : (⋃ s, (I.splitCenterBox s : Set (ι → ℝ))) = I := by
theorem iUnion_coe_splitCenterBox (I : Box ι) : ⋃ s, (I.splitCenterBox s : Set (ι → ℝ)) = I := by
ext x
simp
#align box_integral.box.Union_coe_split_center_box BoxIntegral.Box.iUnion_coe_splitCenterBox
Expand Down
2 changes: 1 addition & 1 deletion Mathlib/Analysis/BoxIntegral/Partition/Basic.lean
Original file line number Diff line number Diff line change
Expand Up @@ -425,7 +425,7 @@ theorem iUnion_ofWithBot (boxes : Finset (WithBot (Box ι)))
(le_of_mem : ∀ J ∈ boxes, (J : WithBot (Box ι)) ≤ I)
(pairwise_disjoint : Set.Pairwise (boxes : Set (WithBot (Box ι))) Disjoint) :
(ofWithBot boxes le_of_mem pairwise_disjoint).iUnion = ⋃ J ∈ boxes, ↑J := by
suffices (⋃ (J : Box ι) (_ : ↑J ∈ boxes), ↑J) = ⋃ J ∈ boxes, (J : Set (ι → ℝ)) by
suffices ⋃ (J : Box ι) (_ : ↑J ∈ boxes), ↑J = ⋃ J ∈ boxes, (J : Set (ι → ℝ)) by
simpa [ofWithBot, Prepartition.iUnion]
simp only [← Box.biUnion_coe_eq_coe, @iUnion_comm _ _ (Box ι), @iUnion_comm _ _ (@Eq _ _ _),
iUnion_iUnion_eq_right]
Expand Down
4 changes: 2 additions & 2 deletions Mathlib/Analysis/Calculus/BumpFunctionFindim.lean
Original file line number Diff line number Diff line change
Expand Up @@ -91,8 +91,8 @@ theorem IsOpen.exists_smooth_support_eq {s : Set E} (hs : IsOpen s) :
fun _ => 0, Function.support_zero, contDiff_const, by
simp only [range_const, singleton_subset_iff, left_mem_Icc, zero_le_one]⟩
let ι := { f : E → ℝ // f.support ⊆ s ∧ HasCompactSupport f ∧ ContDiff ℝ ⊤ f ∧ range f ⊆ Icc 0 1 }
obtain ⟨T, T_count, hT⟩ : ∃ T : Set ι, T.Countable ∧ (⋃ f ∈ T, support (f : E → ℝ)) = s := by
have : (⋃ f : ι, (f : E → ℝ).support) = s := by
obtain ⟨T, T_count, hT⟩ : ∃ T : Set ι, T.Countable ∧ ⋃ f ∈ T, support (f : E → ℝ) = s := by
have : ⋃ f : ι, (f : E → ℝ).support = s := by
refine' Subset.antisymm (iUnion_subset fun f => f.2.1) _
intro x hx
rcases exists_smooth_tsupport_subset (hs.mem_nhds hx) with ⟨f, hf⟩
Expand Down
4 changes: 2 additions & 2 deletions Mathlib/Analysis/InnerProductSpace/Orthogonal.lean
Original file line number Diff line number Diff line change
Expand Up @@ -178,12 +178,12 @@ theorem inf_orthogonal (K₁ K₂ : Submodule 𝕜 E) : K₁ᗮ ⊓ K₂ᗮ = (K

/-- The inf of an indexed family of orthogonal subspaces equals the
subspace orthogonal to the sup. -/
theorem iInf_orthogonal {ι : Type _} (K : ι → Submodule 𝕜 E) : (⨅ i, (K i)ᗮ) = (iSup K)ᗮ :=
theorem iInf_orthogonal {ι : Type _} (K : ι → Submodule 𝕜 E) : ⨅ i, (K i)ᗮ = (iSup K)ᗮ :=
(orthogonal_gc 𝕜 E).l_iSup.symm
#align submodule.infi_orthogonal Submodule.iInf_orthogonal

/-- The inf of a set of orthogonal subspaces equals the subspace orthogonal to the sup. -/
theorem sInf_orthogonal (s : Set <| Submodule 𝕜 E) : (⨅ K ∈ s, Kᗮ) = (sSup s)ᗮ :=
theorem sInf_orthogonal (s : Set <| Submodule 𝕜 E) : ⨅ K ∈ s, Kᗮ = (sSup s)ᗮ :=
(orthogonal_gc 𝕜 E).l_sSup.symm
#align submodule.Inf_orthogonal Submodule.sInf_orthogonal

Expand Down
2 changes: 1 addition & 1 deletion Mathlib/Analysis/InnerProductSpace/Projection.lean
Original file line number Diff line number Diff line change
Expand Up @@ -280,7 +280,7 @@ theorem norm_eq_iInf_iff_real_inner_le_zero {K : Set F} (h : Convex ℝ K) {u :
_ = ‖u - w‖ * ‖u - w‖ := by
have : u - v - (w - v) = u - w := by abel
rw [this, sq]
· show (⨅ w : K, ‖u - w‖) ≤ (fun w : K => ‖u - w‖) ⟨v, hv⟩
· show ⨅ w : K, ‖u - w‖ ≤ (fun w : K => ‖u - w‖) ⟨v, hv⟩
apply ciInf_le
use 0
rintro y ⟨z, rfl⟩
Expand Down
8 changes: 4 additions & 4 deletions Mathlib/Analysis/InnerProductSpace/Rayleigh.lean
Original file line number Diff line number Diff line change
Expand Up @@ -85,17 +85,17 @@ theorem image_rayleigh_eq_image_rayleigh_sphere {r : ℝ} (hr : 0 < r) :
#align continuous_linear_map.image_rayleigh_eq_image_rayleigh_sphere ContinuousLinearMap.image_rayleigh_eq_image_rayleigh_sphere

theorem iSup_rayleigh_eq_iSup_rayleigh_sphere {r : ℝ} (hr : 0 < r) :
(⨆ x : { x : E // x ≠ 0 }, rayleighQuotient T x) =
⨆ x : { x : E // x ≠ 0 }, rayleighQuotient T x =
⨆ x : sphere (0 : E) r, rayleighQuotient T x :=
show (⨆ x : ({0}ᶜ : Set E), rayleighQuotient T x) = _ by
show ⨆ x : ({0}ᶜ : Set E), rayleighQuotient T x = _ by
simp only [← @sSup_image' _ _ _ _ (rayleighQuotient T),
T.image_rayleigh_eq_image_rayleigh_sphere hr]
#align continuous_linear_map.supr_rayleigh_eq_supr_rayleigh_sphere ContinuousLinearMap.iSup_rayleigh_eq_iSup_rayleigh_sphere

theorem iInf_rayleigh_eq_iInf_rayleigh_sphere {r : ℝ} (hr : 0 < r) :
(⨅ x : { x : E // x ≠ 0 }, rayleighQuotient T x) =
⨅ x : { x : E // x ≠ 0 }, rayleighQuotient T x =
⨅ x : sphere (0 : E) r, rayleighQuotient T x :=
show (⨅ x : ({0}ᶜ : Set E), rayleighQuotient T x) = _ by
show ⨅ x : ({0}ᶜ : Set E), rayleighQuotient T x = _ by
simp only [← @sInf_image' _ _ _ _ (rayleighQuotient T),
T.image_rayleigh_eq_image_rayleigh_sphere hr]
#align continuous_linear_map.infi_rayleigh_eq_infi_rayleigh_sphere ContinuousLinearMap.iInf_rayleigh_eq_iInf_rayleigh_sphere
Expand Down
2 changes: 1 addition & 1 deletion Mathlib/Analysis/LocallyConvex/WithSeminorms.lean
Original file line number Diff line number Diff line change
Expand Up @@ -74,7 +74,7 @@ namespace SeminormFamily

/-- The sets of a filter basis for the neighborhood filter of 0. -/
def basisSets (p : SeminormFamily 𝕜 E ι) : Set (Set E) :=
⋃ (s : Finset ι) (r) (_ : 0 < r), singleton <| ball (s.sup p) (0 : E) r
⋃ (s : Finset ι) (r) (_ : 0 < r), singleton (ball (s.sup p) (0 : E) r)
#align seminorm_family.basis_sets SeminormFamily.basisSets

variable (p : SeminormFamily 𝕜 E ι)
Expand Down
2 changes: 1 addition & 1 deletion Mathlib/Analysis/NormedSpace/Banach.lean
Original file line number Diff line number Diff line change
Expand Up @@ -85,7 +85,7 @@ For further use, we will only need such an element whose image
is within distance `‖y‖/2` of `y`, to apply an iterative process. -/
theorem exists_approx_preimage_norm_le (surj : Surjective f) :
∃ C ≥ 0, ∀ y, ∃ x, dist (f x) y ≤ 1 / 2 * ‖y‖ ∧ ‖x‖ ≤ C * ‖y‖ := by
have A : (⋃ n : ℕ, closure (f '' ball 0 n)) = Set.univ := by
have A : ⋃ n : ℕ, closure (f '' ball 0 n) = Set.univ := by
refine' Subset.antisymm (subset_univ _) fun y _ => _
rcases surj y with ⟨x, hx⟩
rcases exists_nat_gt ‖x‖ with ⟨n, hn⟩
Expand Down
Loading

0 comments on commit e3c8f98

Please sign in to comment.