Skip to content

Commit bec97d6

Browse files
committed
chore(Algebra/BigOperators): add to_additive for expectation and antidiagonal lemmas (#42763)
- Add `@[to_additive]` attributes to: - `Expect.expect_inv_index` - `Nat.prod_antidiagonal_succ` - `Nat.prod_antidiagonal_succ'` - Remove the duplicated additive proofs: - `expect_neg_index` - `sum_antidiagonal_succ` - `sum_antidiagonal_succ'` Used Aristotle AI to find the duplicates, and verify the change, and ChatGPT, AmazonQ to navigate VS Code, cli, running tests, making the PR, understanding the proof and so forth
1 parent a47a014 commit bec97d6

2 files changed

Lines changed: 4 additions & 12 deletions

File tree

Mathlib/Algebra/BigOperators/Expect.lean

Lines changed: 2 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -276,12 +276,10 @@ lemma expect_image [DecidableEq ι] {m : κ → ι} (hm : (t : Set κ).InjOn m)
276276

277277
end bij
278278

279-
@[simp] lemma expect_inv_index [DecidableEq ι] [InvolutiveInv ι] (s : Finset ι) (f : ι → M) :
279+
@[to_additive (attr := simp)]
280+
lemma expect_inv_index [DecidableEq ι] [InvolutiveInv ι] (s : Finset ι) (f : ι → M) :
280281
𝔼 i ∈ s⁻¹, f i = 𝔼 i ∈ s, f i⁻¹ := expect_image inv_injective.injOn
281282

282-
@[simp] lemma expect_neg_index [DecidableEq ι] [InvolutiveNeg ι] (s : Finset ι) (f : ι → M) :
283-
𝔼 i ∈ -s, f i = 𝔼 i ∈ s, f (-i) := expect_image neg_injective.injOn
284-
285283
lemma _root_.map_expect {F : Type*} [FunLike F M N] [LinearMapClass F ℚ≥0 M N]
286284
(g : F) (f : ι → M) (s : Finset ι) :
287285
g (𝔼 i ∈ s, f i) = 𝔼 i ∈ s, g (f i) := by simp only [expect, map_smul, map_sum]

Mathlib/Algebra/BigOperators/NatAntidiagonal.lean

Lines changed: 2 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -24,30 +24,24 @@ open HasAntidiagonal
2424

2525
namespace Nat
2626

27+
@[to_additive]
2728
theorem prod_antidiagonal_succ {n : ℕ} {f : ℕ × ℕ → M} :
2829
(∏ p ∈ antidiagonal (n + 1), f p)
2930
= f (0, n + 1) * ∏ p ∈ antidiagonal n, f (p.1 + 1, p.2) := by
3031
rw [antidiagonal_succ, prod_cons, prod_map]; rfl
3132

32-
theorem sum_antidiagonal_succ {n : ℕ} {f : ℕ × ℕ → N} :
33-
(∑ p ∈ antidiagonal (n + 1), f p) = f (0, n + 1) + ∑ p ∈ antidiagonal n, f (p.1 + 1, p.2) :=
34-
@prod_antidiagonal_succ (Multiplicative N) _ _ _
35-
3633
@[to_additive]
3734
theorem prod_antidiagonal_swap {n : ℕ} {f : ℕ × ℕ → M} :
3835
∏ p ∈ antidiagonal n, f p.swap = ∏ p ∈ antidiagonal n, f p := by
3936
conv_lhs => rw [← map_swap_antidiagonal, Finset.prod_map]
4037
rfl
4138

39+
@[to_additive]
4240
theorem prod_antidiagonal_succ' {n : ℕ} {f : ℕ × ℕ → M} : (∏ p ∈ antidiagonal (n + 1), f p) =
4341
f (n + 1, 0) * ∏ p ∈ antidiagonal n, f (p.1, p.2 + 1) := by
4442
rw [← prod_antidiagonal_swap, prod_antidiagonal_succ, ← prod_antidiagonal_swap]
4543
rfl
4644

47-
theorem sum_antidiagonal_succ' {n : ℕ} {f : ℕ × ℕ → N} :
48-
(∑ p ∈ antidiagonal (n + 1), f p) = f (n + 1, 0) + ∑ p ∈ antidiagonal n, f (p.1, p.2 + 1) :=
49-
@prod_antidiagonal_succ' (Multiplicative N) _ _ _
50-
5145
@[to_additive]
5246
theorem prod_antidiagonal_subst {n : ℕ} {f : ℕ × ℕ → ℕ → M} :
5347
∏ p ∈ antidiagonal n, f p n = ∏ p ∈ antidiagonal n, f p (p.1 + p.2) :=

0 commit comments

Comments
 (0)