Skip to content

Commit 8f26559

Browse files
Merge master into nightly-testing
2 parents e4cba26 + ee89f2d commit 8f26559

79 files changed

Lines changed: 920 additions & 285 deletions

File tree

Some content is hidden

Large Commits have some content hidden by default. Use the searchbox below for content that may be hidden.

Mathlib/Algebra/Algebra/Equiv.lean

Lines changed: 11 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -187,12 +187,14 @@ theorem toAlgHom_apply (x : A₁) : e.toAlgHom x = e x :=
187187
rfl
188188

189189
@[simp, norm_cast]
190-
theorem coe_algHom : DFunLike.coe e.toAlgHom = DFunLike.coe e :=
191-
rfl
190+
theorem coe_toAlgHom : DFunLike.coe e.toAlgHom = e := rfl
192191

193-
theorem coe_algHom_injective : Function.Injective ((↑) : (A₁ ≃ₐ[R] A₂) → A₁ →ₐ[R] A₂) :=
192+
theorem coe_toAlgHom_injective : Function.Injective ((↑) : (A₁ ≃ₐ[R] A₂) → A₁ →ₐ[R] A₂) :=
194193
fun _ _ h => ext <| AlgHom.congr_fun h
195194

195+
@[deprecated (since := "2026-05-05")] alias coe_algHom := coe_toAlgHom
196+
@[deprecated (since := "2026-05-05")] alias coe_algHom_injective := coe_toAlgHom_injective
197+
196198
@[simp, norm_cast]
197199
lemma toAlgHom_toRingHom : ((e : A₁ →ₐ[R] A₂) : A₁ →+* A₂) = e :=
198200
rfl
@@ -476,15 +478,18 @@ def ofAlgHom (f : A₁ →ₐ[R] A₂) (g : A₂ →ₐ[R] A₁) (h₁ : f.comp
476478
left_inv := AlgHom.ext_iff.1 h₂
477479
right_inv := AlgHom.ext_iff.1 h₁ }
478480

479-
theorem coe_algHom_ofAlgHom (f : A₁ →ₐ[R] A₂) (g : A₂ →ₐ[R] A₁) (h₁ h₂) :
481+
theorem toAlgHom_ofAlgHom (f : A₁ →ₐ[R] A₂) (g : A₂ →ₐ[R] A₁) (h₁ h₂) :
480482
↑(ofAlgHom f g h₁ h₂) = f :=
481483
rfl
482484

483485
@[simp]
484-
theorem ofAlgHom_coe_algHom (f : A₁ ≃ₐ[R] A₂) (g : A₂ →ₐ[R] A₁) (h₁ h₂) :
486+
theorem ofAlgHom_toAlgHom (f : A₁ ≃ₐ[R] A₂) (g : A₂ →ₐ[R] A₁) (h₁ h₂) :
485487
ofAlgHom (↑f) g h₁ h₂ = f :=
486488
ext fun _ => rfl
487489

490+
@[deprecated (since := "2026-05-05")] alias coe_algHom_ofAlgHom := toAlgHom_ofAlgHom
491+
@[deprecated (since := "2026-05-05")] alias ofAlgHom_coe_algHom := ofAlgHom_toAlgHom
492+
488493
theorem ofAlgHom_symm (f : A₁ →ₐ[R] A₂) (g : A₂ →ₐ[R] A₁) (h₁ h₂) :
489494
(ofAlgHom f g h₁ h₂).symm = ofAlgHom g f h₂ h₁ :=
490495
rfl
@@ -761,7 +766,7 @@ def algHomUnitsEquiv (R S : Type*) [CommSemiring R] [Semiring S] [Algebra R S] :
761766

762767
/-- See also `Finite.algHom` -/
763768
instance _root_.Finite.algEquiv [Finite (A₁ →ₐ[R] A₂)] : Finite (A₁ ≃ₐ[R] A₂) :=
764-
Finite.of_injective _ AlgEquiv.coe_algHom_injective
769+
Finite.of_injective _ AlgEquiv.coe_toAlgHom_injective
765770

766771
-- TODO Morally this is just `isLocalHom_equiv`: can we obviate the need for this instance?
767772
instance : IsLocalHom e.toAlgHom := by

Mathlib/Algebra/Algebra/Spectrum/Basic.lean

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -431,7 +431,7 @@ theorem AlgEquiv.spectrum_eq {F R A B : Type*} [CommSemiring R] [Ring A] [Ring B
431431
[Algebra R B] [EquivLike F A B] [AlgEquivClass F R A B] (f : F) (a : A) :
432432
spectrum R (f a) = spectrum R a :=
433433
Set.Subset.antisymm (AlgHom.spectrum_apply_subset _ _) <| by
434-
simpa only [AlgEquiv.coe_algHom, AlgEquiv.coe_coe_symm_apply_coe_apply] using
434+
simpa only [AlgEquiv.coe_toAlgHom, AlgEquiv.coe_coe_symm_apply_coe_apply] using
435435
AlgHom.spectrum_apply_subset (AlgEquivClass.toAlgEquiv f : A ≃ₐ[R] B).symm (f a)
436436

437437
section ConjugateUnits

Mathlib/Algebra/Algebra/Subalgebra/Centralizer.lean

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -117,7 +117,7 @@ lemma centralizer_coe_image_includeRight_eq_center_tensorProduct
117117
fun h b hb ↦ (Algebra.TensorProduct.comm R A B).symm.injective <| by aesop, fun h b hb ↦
118118
(Algebra.TensorProduct.comm R A B).injective <| by aesop⟩
119119
· ext x
120-
simp only [AlgHom.mem_range, mem_comap, AlgEquiv.coe_algHom]
120+
simp only [AlgHom.mem_range, mem_comap, AlgEquiv.coe_toAlgHom]
121121
constructor
122122
· rintro ⟨x, rfl⟩
123123
exact ⟨(Algebra.TensorProduct.comm R _ _) x,

Mathlib/Algebra/Azumaya/Basic.lean

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -79,7 +79,7 @@ theorem of_AlgEquiv (e : A ≃ₐ[R] B) [IsAzumaya R A] : IsAzumaya R B :=
7979
let _ : Module.Finite R B := .equiv e.toLinearEquiv
8080
⟨Function.Bijective.of_comp_iff (AlgHom.mulLeftRight R B)
8181
(Algebra.TensorProduct.congr e e.op).bijective |>.1 <| by
82-
rw [← AlgEquiv.coe_algHom, ← AlgHom.coe_comp, mulLeftRight_comp_congr]
82+
rw [← AlgEquiv.coe_toAlgHom, ← AlgHom.coe_comp, mulLeftRight_comp_congr]
8383
simp [AlgHom.mulLeftRight_bij]⟩
8484

8585
end IsAzumaya

Mathlib/Algebra/Group/Fin/Tuple.lean

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -103,6 +103,9 @@ variable [Zero α]
103103

104104
@[simp] lemma zero_empty : (0 : Fin 0 → α) = ![] := empty_eq _
105105

106+
@[simp] lemma finZeroElim_eq_zero : (@finZeroElim fun _ ↦ α) = 0 := by
107+
rw [Matrix.empty_eq finZeroElim, Matrix.zero_empty]
108+
106109
@[simp] lemma cons_zero_zero : vecCons (0 : α) (0 : Fin n → α) = 0 := by
107110
ext i; exact i.cases rfl (by simp)
108111

Mathlib/Algebra/MvPolynomial/Basic.lean

Lines changed: 9 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -593,6 +593,15 @@ theorem coeff_C [DecidableEq σ] (m) (a) :
593593
coeff m (C a : MvPolynomial σ R) = if 0 = m then a else 0 :=
594594
Finsupp.single_apply
595595

596+
theorem coeff_C_of_ne_zero {m : σ →₀ ℕ} (h : m ≠ 0) (a : R) : coeff m (C a) = 0 := by
597+
classical rw [coeff_C, if_neg h.symm]
598+
599+
-- The intended use case of this theorem is for `n = 1` (often useful for `pderiv`).
600+
@[simp]
601+
theorem coeff_add_single_C {n : ℕ} [NeZero n] {m : σ →₀ ℕ} (a : R) (i : σ) :
602+
coeff (m + Finsupp.single i n) (C a) = 0 :=
603+
coeff_C_of_ne_zero (fun H ↦ by simpa [NeZero.ne] using congr($(H) i)) a
604+
596605
lemma eq_C_of_isEmpty [IsEmpty σ] (p : MvPolynomial σ R) :
597606
p = C (p.coeff 0) := by
598607
obtain ⟨x, rfl⟩ := C_surjective σ p

Mathlib/Algebra/MvPolynomial/Equiv.lean

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -502,7 +502,7 @@ theorem optionEquivLeft_elim_eval (s : S₁ → R) (y : R) (f : MvPolynomial (Op
502502
apply MvPolynomial.algHom_ext
503503
rw [Option.forall]
504504
simp only [aeval_X, Option.elim_none, AlgHom.coe_comp, Polynomial.coe_aeval_eq_eval,
505-
AlgHom.coe_mk, Polynomial.coe_mapRingHom, AlgEquiv.coe_algHom, comp_apply,
505+
AlgHom.coe_mk, Polynomial.coe_mapRingHom, AlgEquiv.coe_toAlgHom, comp_apply,
506506
optionEquivLeft_apply, Polynomial.map_X, Polynomial.eval_X, Option.elim_some,
507507
Polynomial.map_C, eval_X, Polynomial.eval_C, implies_true, and_self, φ]
508508

@@ -684,7 +684,7 @@ theorem eval_eq_eval_mv_eval' (s : Fin n → R) (y : R) (f : MvPolynomial (Fin (
684684
apply MvPolynomial.algHom_ext
685685
rw [Fin.forall_iff_succ]
686686
simp only [aeval_X, Fin.cons_zero, AlgHom.coe_comp, Polynomial.coe_aeval_eq_eval,
687-
AlgHom.coe_mk, Polynomial.coe_mapRingHom, AlgEquiv.coe_algHom,
687+
AlgHom.coe_mk, Polynomial.coe_mapRingHom, AlgEquiv.coe_toAlgHom,
688688
comp_apply, finSuccEquiv_apply, eval₂Hom_X', Fin.cases_zero, Polynomial.map_X,
689689
Polynomial.eval_X, Fin.cons_succ, Fin.cases_succ, Polynomial.map_C, eval_X, Polynomial.eval_C,
690690
implies_true, and_self, φ]
@@ -864,7 +864,7 @@ lemma Polynomial.toMvPolynomial_eq_rename_comp (i : σ) :
864864

865865
lemma Polynomial.toMvPolynomial_injective (i : σ) :
866866
Function.Injective (toMvPolynomial (R := R) i) := by
867-
simp only [toMvPolynomial_eq_rename_comp, AlgHom.coe_comp, AlgEquiv.coe_algHom,
867+
simp only [toMvPolynomial_eq_rename_comp, AlgHom.coe_comp, AlgEquiv.coe_toAlgHom,
868868
EquivLike.injective_comp]
869869
exact MvPolynomial.rename_injective (fun x ↦ i) fun _ _ _ ↦ rfl
870870

Mathlib/AlgebraicGeometry/AffineScheme.lean

Lines changed: 16 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -432,6 +432,10 @@ instance isOpenImmersion_fromSpec :
432432
@[reassoc (attr := simp)]
433433
lemma isoSpec_inv_ι : hU.isoSpec.inv ≫ U.ι = hU.fromSpec := rfl
434434

435+
@[reassoc (attr := simp)]
436+
lemma isoSpec_hom_fromSpec : hU.isoSpec.hom ≫ hU.fromSpec = U.ι := by
437+
simp [← cancel_epi hU.isoSpec.inv]
438+
435439
@[reassoc (attr := simp)]
436440
lemma toSpecΓ_fromSpec : U.toSpecΓ ≫ hU.fromSpec = U.ι := toSpecΓ_isoSpec_inv_assoc _ _
437441

@@ -943,6 +947,18 @@ theorem self_le_iSup_basicOpen_iff {s : Set Γ(X, U)} :
943947

944948
end IsAffineOpen
945949

950+
/-- The affine open cover given by a covering family of affine opens. -/
951+
@[simps I₀ X f]
952+
def Scheme.AffineOpenCover.ofIsOpenCover {X : Scheme.{u}} {ι : Type*} (U : ι → X.Opens)
953+
(hU : IsOpenCover U) (hU' : ∀ i, IsAffineOpen (U i)) :
954+
AffineOpenCover X where
955+
I₀ := ι
956+
X i := Γ(X, U i)
957+
f i := (hU' i).fromSpec
958+
idx x := (hU.exists_mem x).choose
959+
covers x :=
960+
⟨(hU' _).isoSpec.hom ⟨_, (hU.exists_mem x).choose_spec⟩, by simp [← Scheme.Hom.comp_apply]⟩
961+
946962
set_option backward.defeqAttrib.useBackward true in
947963
set_option backward.isDefEq.respectTransparency false in
948964
open _root_.PrimeSpectrum in

Mathlib/AlgebraicGeometry/AffineSpace.lean

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -457,7 +457,7 @@ lemma isIntegralHom_over_iff_isEmpty : IsIntegralHom (𝔸(n; S) ↘ S) ↔ IsEm
457457
have : (rename fun _ ↦ i).comp (uniqueAlgEquiv.{_, u} _ PUnit).symm.toAlgHom p = 0 := by
458458
simp [← hp', ← algebraMap_eq]
459459
rw [AlgHom.comp_apply, map_eq_zero_iff _ (rename_injective _ (fun _ _ _ ↦ rfl))] at this
460-
simp only [AlgEquiv.coe_algHom, EmbeddingLike.map_eq_zero_iff] at this
460+
simp only [AlgEquiv.coe_toAlgHom, EmbeddingLike.map_eq_zero_iff] at this
461461
simp [this] at hp
462462
· rintro (_ | _) <;> infer_instance
463463

Mathlib/AlgebraicGeometry/Cover/Open.lean

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -44,6 +44,10 @@ variable [∀ x, HasPullback (𝒰.f x ≫ f) g]
4444

4545
instance (i : 𝒰.I₀) : IsOpenImmersion (𝒰.f i) := 𝒰.map_prop i
4646

47+
instance {𝒱 : OpenCover X} (f : 𝒰 ⟶ 𝒱) (i : 𝒰.I₀) : IsOpenImmersion (f.h₀ i) :=
48+
have : IsOpenImmersion (f.h₀ i ≫ 𝒱.f (f.s₀ i)) := by rw [f.w₀]; infer_instance
49+
.of_comp _ (𝒱.f _)
50+
4751
set_option backward.isDefEq.respectTransparency false in
4852
/-- The affine cover of a scheme. -/
4953
def affineCover (X : Scheme.{u}) : OpenCover X := by

0 commit comments

Comments
 (0)