Skip to content

Commit d9e8bb5

Browse files
committed
Merge remote-tracking branch 'origin/feat/convex-first-order-inequalities' into HEAD
2 parents 608f5bb + a9a383f commit d9e8bb5

94 files changed

Lines changed: 1864 additions & 461 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.

Archive/Imo/Imo1998Q2.lean

Lines changed: 0 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -98,7 +98,6 @@ def A : Finset (AgreedTriple C J) :=
9898
Finset.univ.filter @fun (a : AgreedTriple C J) =>
9999
(a.judgePair.Agree r a.contestant ∧ a.judgePair.Distinct)
100100

101-
open scoped Classical in
102101
theorem A_maps_to_offDiag_judgePair (a : AgreedTriple C J) :
103102
a ∈ A r → a.judgePair ∈ Finset.offDiag (@Finset.univ J _) := by simp [A, Finset.mem_offDiag]
104103

Mathlib.lean

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1955,17 +1955,20 @@ public import Mathlib.Analysis.Convex.EGauge
19551955
public import Mathlib.Analysis.Convex.Exposed
19561956
public import Mathlib.Analysis.Convex.Extrema
19571957
public import Mathlib.Analysis.Convex.Extreme
1958+
public import Mathlib.Analysis.Convex.FDeriv
19581959
public import Mathlib.Analysis.Convex.Function
19591960
public import Mathlib.Analysis.Convex.FunctionTopology
19601961
public import Mathlib.Analysis.Convex.Gauge
19611962
public import Mathlib.Analysis.Convex.GaugeRescale
1963+
public import Mathlib.Analysis.Convex.Gradient
19621964
public import Mathlib.Analysis.Convex.Hull
19631965
public import Mathlib.Analysis.Convex.Independent
19641966
public import Mathlib.Analysis.Convex.Integral
19651967
public import Mathlib.Analysis.Convex.Intrinsic
19661968
public import Mathlib.Analysis.Convex.Jensen
19671969
public import Mathlib.Analysis.Convex.Join
19681970
public import Mathlib.Analysis.Convex.KreinMilman
1971+
public import Mathlib.Analysis.Convex.LineDeriv
19691972
public import Mathlib.Analysis.Convex.LinearIsometry
19701973
public import Mathlib.Analysis.Convex.Measure
19711974
public import Mathlib.Analysis.Convex.MetricSpace
@@ -2054,6 +2057,7 @@ public import Mathlib.Analysis.InnerProductSpace.LinearMap
20542057
public import Mathlib.Analysis.InnerProductSpace.LinearPMap
20552058
public import Mathlib.Analysis.InnerProductSpace.MeanErgodic
20562059
public import Mathlib.Analysis.InnerProductSpace.MulOpposite
2060+
public import Mathlib.Analysis.InnerProductSpace.NormDet
20572061
public import Mathlib.Analysis.InnerProductSpace.NormPow
20582062
public import Mathlib.Analysis.InnerProductSpace.OfNorm
20592063
public import Mathlib.Analysis.InnerProductSpace.Orientation
@@ -6961,6 +6965,7 @@ public import Mathlib.RingTheory.Regular.LinearMap
69616965
public import Mathlib.RingTheory.Regular.ProjectiveDimension
69626966
public import Mathlib.RingTheory.Regular.RegularSequence
69636967
public import Mathlib.RingTheory.RegularLocalRing.Defs
6968+
public import Mathlib.RingTheory.RegularLocalRing.Polynomial
69646969
public import Mathlib.RingTheory.RingHom.Bijective
69656970
public import Mathlib.RingTheory.RingHom.EssFiniteType
69666971
public import Mathlib.RingTheory.RingHom.Etale

Mathlib/Algebra/Group/Pointwise/Set/Basic.lean

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -536,6 +536,10 @@ theorem inter_div_union_subset_union : s₁ ∩ s₂ / (t₁ ∪ t₂) ⊆ s₁
536536
theorem union_div_inter_subset_union : (s₁ ∪ s₂) / (t₁ ∩ t₂) ⊆ s₁ / t₁ ∪ s₂ / t₂ :=
537537
image2_union_inter_subset_union
538538

539+
@[to_additive (attr := simp) prod_sub_prod_comm]
540+
lemma prod_div_prod_comm [Div β] (s₁ s₂ : Set α) (t₁ t₂ : Set β) :
541+
(s₁ ×ˢ t₁) / (s₂ ×ˢ t₂) = (s₁ / s₂) ×ˢ (t₁ / t₂) := by aesop (add simp mem_div)
542+
539543
end Div
540544

541545
-- TODO: rename `NPow` to `npow` and `ZPow` to `zpow`.

Mathlib/Algebra/Polynomial/Degree/TrailingDegree.lean

Lines changed: 6 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -259,10 +259,10 @@ theorem natTrailingDegree_mem_support_of_nonzero : p ≠ 0 → natTrailingDegree
259259
theorem natTrailingDegree_le_of_mem_supp (a : ℕ) : a ∈ p.support → natTrailingDegree p ≤ a :=
260260
natTrailingDegree_le_of_ne_zero ∘ mem_support_iff.mp
261261

262-
set_option backward.isDefEq.respectTransparency false in
263262
theorem natTrailingDegree_eq_support_min' (h : p ≠ 0) :
264263
natTrailingDegree p = p.support.min' (nonempty_support_iff.mpr h) := by
265-
rw [natTrailingDegree, trailingDegree, ← Finset.coe_min', ENat.some_eq_coe, ENat.toNat_coe]
264+
rw [natTrailingDegree, trailingDegree, ← Finset.coe_min' (support_nonempty.mpr h)]
265+
norm_cast
266266

267267
theorem le_natTrailingDegree (hp : p ≠ 0) (hn : ∀ m < n, p.coeff m = 0) :
268268
n ≤ p.natTrailingDegree := by
@@ -296,15 +296,12 @@ theorem le_trailingDegree_mul : p.trailingDegree + q.trailingDegree ≤ (p * q).
296296
(min_le (mem_support_iff.mpr (right_ne_zero_of_mul hpq)))).trans_eq ?_
297297
rwa [← WithTop.coe_add, WithTop.coe_eq_coe, ← mem_antidiagonal]
298298

299-
set_option backward.isDefEq.respectTransparency false in
300299
theorem le_natTrailingDegree_mul (h : p * q ≠ 0) :
301300
p.natTrailingDegree + q.natTrailingDegree ≤ (p * q).natTrailingDegree := by
302301
have hp : p ≠ 0 := fun hp => h (by rw [hp, zero_mul])
303302
have hq : q ≠ 0 := fun hq => h (by rw [hq, mul_zero])
304-
rw [← WithTop.coe_le_coe, WithTop.coe_add, ← Nat.cast_withTop (natTrailingDegree p),
305-
← Nat.cast_withTop (natTrailingDegree q), ← Nat.cast_withTop (natTrailingDegree (p * q)),
306-
← trailingDegree_eq_natTrailingDegree hp, ← trailingDegree_eq_natTrailingDegree hq,
307-
← trailingDegree_eq_natTrailingDegree h]
303+
rw [← ENat.coe_le_coe, ENat.coe_add, ← trailingDegree_eq_natTrailingDegree hp,
304+
← trailingDegree_eq_natTrailingDegree hq, ← trailingDegree_eq_natTrailingDegree h]
308305
exact le_trailingDegree_mul
309306

310307
theorem coeff_mul_natTrailingDegree_add_natTrailingDegree : (p * q).coeff
@@ -332,15 +329,13 @@ theorem trailingDegree_mul' (h : p.trailingCoeff * q.trailingCoeff ≠ 0) :
332329
apply trailingDegree_le_of_ne_zero
333330
rwa [coeff_mul_natTrailingDegree_add_natTrailingDegree]
334331

335-
set_option backward.isDefEq.respectTransparency false in
336332
theorem natTrailingDegree_mul' (h : p.trailingCoeff * q.trailingCoeff ≠ 0) :
337333
(p * q).natTrailingDegree = p.natTrailingDegree + q.natTrailingDegree := by
338334
have hp : p ≠ 0 := fun hp => h (by rw [hp, trailingCoeff_zero, zero_mul])
339335
have hq : q ≠ 0 := fun hq => h (by rw [hq, trailingCoeff_zero, mul_zero])
340336
apply natTrailingDegree_eq_of_trailingDegree_eq_some
341-
rw [trailingDegree_mul' h, Nat.cast_withTop (natTrailingDegree p + natTrailingDegree q),
342-
WithTop.coe_add, ← Nat.cast_withTop, ← Nat.cast_withTop,
343-
← trailingDegree_eq_natTrailingDegree hp, ← trailingDegree_eq_natTrailingDegree hq]
337+
rw [trailingDegree_mul' h, ENat.coe_add, ← trailingDegree_eq_natTrailingDegree hp,
338+
← trailingDegree_eq_natTrailingDegree hq]
344339

345340
theorem natTrailingDegree_mul [NoZeroDivisors R] (hp : p ≠ 0) (hq : q ≠ 0) :
346341
(p * q).natTrailingDegree = p.natTrailingDegree + q.natTrailingDegree :=

0 commit comments

Comments
 (0)