Built with
doc-gen4 , running Lean4.
Bubbles (
) indicate interactive fragments: hover for details, tap to reveal contents.
Use
Ctrl+β Ctrl+β to navigate,
Ctrl+π±οΈ to focus.
On Mac, use
Cmd instead of
Ctrl .
/-
Copyright (c) 2020 Aaron Anderson. All rights reserved.
Released under Apache 2.0 license as described in the file LICENSE.
Authors: Aaron Anderson
! This file was ported from Lean 3 source module algebra.big_operators.nat_antidiagonal
! leanprover-community/mathlib commit 008205aa645b3f194c1da47025c5f110c8406eab
! Please do not edit these lines, except to modify the commit id
! if you have ported upstream changes.
-/
import Mathlib.Data.Finset.NatAntidiagonal
import Mathlib.Algebra.BigOperators.Basic
/-!
# Big operators for `NatAntidiagonal`
This file contains theorems relevant to big operators over `Finset.NatAntidiagonal`.
-/
open BigOperators
variable { M N : Type _ } [ CommMonoid : Type ?u.6201 β Type ?u.6201 CommMonoid M ] [ AddCommMonoid : Type ?u.4630 β Type ?u.4630 AddCommMonoid N ]
namespace Finset
namespace Nat
theorem prod_antidiagonal_succ { n : β } { f : β Γ β β M } :
(β p in antidiagonal ( n + 1 ), f p ) = f ( 0 , n + 1 ) * β p in antidiagonal n , f ( p . 1 : {Ξ± : Type ?u.197} β {Ξ² : Type ?u.196} β Ξ± Γ Ξ² β Ξ± 1 + 1 , p . 2 : {Ξ± : Type ?u.243} β {Ξ² : Type ?u.242} β Ξ± Γ Ξ² β Ξ² 2) :=
by rw [ antidiagonal_succ , prod_cons : β {Ξ² : Type ?u.1074} {Ξ± : Type ?u.1073} {s : Finset Ξ± } {a : Ξ± } {f : Ξ± β Ξ² } [inst : CommMonoid Ξ² ] (h : Β¬ a β s ),
β x in cons a s h , f x = f a * β x in s , f x prod_cons, prod_map : β {Ξ² : Type ?u.1204} {Ξ± : Type ?u.1203} {Ξ³ : Type ?u.1202} [inst : CommMonoid Ξ² ] (s : Finset Ξ± ) (e : Ξ± βͺ Ξ³ ) (f : Ξ³ β Ξ² ),
β x in map e s , f x = β x in s , f (βe x ) prod_map] ; rfl
#align finset.nat.prod_antidiagonal_succ Finset.Nat.prod_antidiagonal_succ
theorem sum_antidiagonal_succ { n : β } { f : β Γ β β N } :
(β p in antidiagonal ( n + 1 ), f p ) = f ( 0 , n + 1 ) + β p in antidiagonal n , f ( p . 1 : {Ξ± : Type ?u.1525} β {Ξ² : Type ?u.1524} β Ξ± Γ Ξ² β Ξ± 1 + 1 , p . 2 : {Ξ± : Type ?u.1571} β {Ξ² : Type ?u.1570} β Ξ± Γ Ξ² β Ξ² 2) :=
@ prod_antidiagonal_succ ( Multiplicative : Type ?u.2310 β Type ?u.2310 Multiplicative N ) _ _ _
#align finset.nat.sum_antidiagonal_succ Finset.Nat.sum_antidiagonal_succ
@[ to_additive ]
theorem prod_antidiagonal_swap { n : β } { f : β Γ β β M } :
(β p in antidiagonal n , f p . swap : {Ξ± : Type ?u.4653} β {Ξ² : Type ?u.4652} β Ξ± Γ Ξ² β Ξ² Γ Ξ± swap) = β p in antidiagonal n , f p := by
conv_lhs => rw [ β map_swap_antidiagonal , Finset.prod_map : β {Ξ² : Type ?u.4736} {Ξ± : Type ?u.4735} {Ξ³ : Type ?u.4734} [inst : CommMonoid Ξ² ] (s : Finset Ξ± ) (e : Ξ± βͺ Ξ³ ) (f : Ξ³ β Ξ² ),
β x in map e s , f x = β x in s , f (βe x ) Finset.prod_map]
#align finset.nat.prod_antidiagonal_swap Finset.Nat.prod_antidiagonal_swap
#align finset.nat.sum_antidiagonal_swap Finset.Nat.sum_antidiagonal_swap
theorem prod_antidiagonal_succ' { n : β } { f : β Γ β β M } : (β p in antidiagonal ( n + 1 ), f p ) =
f ( n + 1 , 0 ) * β p in antidiagonal n , f ( p . 1 : {Ξ± : Type ?u.5084} β {Ξ² : Type ?u.5083} β Ξ± Γ Ξ² β Ξ± 1, p . 2 : {Ξ± : Type ?u.5091} β {Ξ² : Type ?u.5090} β Ξ± Γ Ξ² β Ξ² 2 + 1 ) := by
rw [ β prod_antidiagonal_swap , prod_antidiagonal_succ , β prod_antidiagonal_swap ]
rfl
#align finset.nat.prod_antidiagonal_succ' Finset.Nat.prod_antidiagonal_succ'
theorem sum_antidiagonal_succ' { n : β } { f : β Γ β β N } :
(β p in antidiagonal ( n + 1 ), f p ) = f ( n + 1 , 0 ) + β p in antidiagonal n , f ( p . 1 : {Ξ± : Type ?u.6373} β {Ξ² : Type ?u.6372} β Ξ± Γ Ξ² β Ξ± 1, p . 2 : {Ξ± : Type ?u.6380} β {Ξ² : Type ?u.6379} β Ξ± Γ Ξ² β Ξ² 2 + 1 ) :=
@ prod_antidiagonal_succ' ( Multiplicative : Type ?u.7161 β Type ?u.7161 Multiplicative N ) _ _ _
#align finset.nat.sum_antidiagonal_succ' Finset.Nat.sum_antidiagonal_succ'
@[ to_additive ]
theorem prod_antidiagonal_subst { n : β } { f : β Γ β β β β M } :
(β p in antidiagonal n , f p n ) = β p in antidiagonal n , f p ( p . 1 : {Ξ± : Type ?u.9533} β {Ξ² : Type ?u.9532} β Ξ± Γ Ξ² β Ξ± 1 + p . 2 : {Ξ± : Type ?u.9539} β {Ξ² : Type ?u.9538} β Ξ± Γ Ξ² β Ξ² 2) :=
prod_congr rfl : β {Ξ± : Sort ?u.9630} {a : Ξ± }, a = a rfl fun p hp β¦ by f p n = f p (p .fst + p .snd )rw [ f p n = f p (p .fst + p .snd )Nat.mem_antidiagonal . 1 : β {a b : Prop }, (a β b ) β a β b 1 hp ]
#align finset.nat.prod_antidiagonal_subst Finset.Nat.prod_antidiagonal_subst
#align finset.nat.sum_antidiagonal_subst Finset.Nat.sum_antidiagonal_subst
@[ to_additive ]
theorem prod_antidiagonal_eq_prod_range_succ_mk { M : Type _ } [ CommMonoid : Type ?u.9736 β Type ?u.9736 CommMonoid M ] ( f : β Γ β β M )
( n : β ) : (β ij in Finset.Nat.antidiagonal n , f ij ) = β k in range n . succ , f ( k , n - k ) :=
Finset.prod_map : β {Ξ² : Type ?u.9841} {Ξ± : Type ?u.9840} {Ξ³ : Type ?u.9839} [inst : CommMonoid Ξ² ] (s : Finset Ξ± ) (e : Ξ± βͺ Ξ³ ) (f : Ξ³ β Ξ² ),
β x in map e s , f x = β x in s , f (βe x ) Finset.prod_map ( range n . succ ) β¨ fun i β¦ ( i , n - i ), fun _ _ h β¦ ( Prod.mk.inj : β {Ξ± : Type ?u.9913} {Ξ² : Type ?u.9912} {fst : Ξ± } {snd : Ξ² } {fst_1 : Ξ± } {snd_1 : Ξ² },
(fst , snd ) = (fst_1 , snd_1 ) β fst = fst_1 β§ snd = snd_1 Prod.mk.inj h ). 1 β© f
#align finset.nat.prod_antidiagonal_eq_prod_range_succ_mk Finset.Nat.prod_antidiagonal_eq_prod_range_succ_mk
#align finset.nat.sum_antidiagonal_eq_sum_range_succ_mk Finset.Nat.sum_antidiagonal_eq_sum_range_succ_mk
/-- This lemma matches more generally than `Finset.Nat.prod_antidiagonal_eq_prod_range_succ_mk` when
using `rw β`. -/
@[ to_additive "This lemma matches more generally than
`Finset.Nat.sum_antidiagonal_eq_sum_range_succ_mk` when using `rw β`."]
theorem prod_antidiagonal_eq_prod_range_succ { M : Type _ : Type (?u.10073+1) Type _} [ CommMonoid : Type ?u.10076 β Type ?u.10076 CommMonoid M ] ( f : β β β β M ) ( n : β ) :
(β ij in Finset.Nat.antidiagonal n , f ij . 1 : {Ξ± : Type ?u.10099} β {Ξ² : Type ?u.10098} β Ξ± Γ Ξ² β Ξ± 1 ij . 2 : {Ξ± : Type ?u.10105} β {Ξ² : Type ?u.10104} β Ξ± Γ Ξ² β Ξ² 2) = β k in range n . succ , f k ( n - k ) :=
prod_antidiagonal_eq_prod_range_succ_mk _ _
#align finset.nat.prod_antidiagonal_eq_prod_range_succ Finset.Nat.prod_antidiagonal_eq_prod_range_succ
#align finset.nat.sum_antidiagonal_eq_sum_range_succ Finset.Nat.sum_antidiagonal_eq_sum_range_succ
end Nat
end Finset