Skip to content
This repository was archived by the owner on Jul 24, 2024. It is now read-only.

Commit f77cb57

Browse files
kim-emmergify[bot]
andauthored
chore(data/fintype): move results depending on big_operators (#2044)
Co-authored-by: mergify[bot] <37929162+mergify[bot]@users.noreply.github.com>
1 parent 61d75bb commit f77cb57

File tree

11 files changed

+117
-79
lines changed

11 files changed

+117
-79
lines changed

src/algebra/big_operators.lean

Lines changed: 1 addition & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -5,8 +5,7 @@ Authors: Johannes Hölzl
55
66
Some big operators for lists and finite sets.
77
-/
8-
import tactic.tauto data.list.basic data.finset data.nat.enat
9-
import algebra.group algebra.ordered_group algebra.group_power
8+
import tactic.tauto data.list.defs data.finset data.nat.enat
109

1110
universes u v w
1211
variables {α : Type u} {β : Type v} {γ : Type w}

src/analysis/normed_space/multilinear.lean

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -5,6 +5,7 @@ Authors: Sébastien Gouëzel
55
-/
66

77
import analysis.normed_space.operator_norm topology.algebra.multilinear
8+
import data.fintype.card
89

910
/-!
1011
# Operator norm on the space of continuous multilinear maps

src/data/fintype.lean

Lines changed: 1 addition & 76 deletions
Original file line numberDiff line numberDiff line change
@@ -5,7 +5,7 @@ Author: Mario Carneiro
55
66
Finite types.
77
-/
8-
import data.finset algebra.big_operators data.array.lemmas logic.unique
8+
import data.finset data.array.lemmas logic.unique
99
import tactic.wlog
1010
universes u v
1111

@@ -196,9 +196,6 @@ def of_subsingleton (a : α) [subsingleton α] : fintype α :=
196196
@[simp] theorem card_of_subsingleton (a : α) [subsingleton α] :
197197
@fintype.card _ (of_subsingleton a) = 1 := rfl
198198

199-
lemma card_eq_sum_ones {α} [fintype α] : fintype.card α = (finset.univ : finset α).sum (λ _, 1) :=
200-
finset.card_eq_sum_ones _
201-
202199
end fintype
203200

204201
namespace set
@@ -237,22 +234,6 @@ begin
237234
exact fin.cases (or.inl rfl) (λ i, or.inr ⟨i, trivial, rfl⟩) m
238235
end
239236

240-
theorem fin.prod_univ_succ [comm_monoid β] {n:ℕ} (f : fin n.succ → β) :
241-
univ.prod f = f 0 * univ.prod (λ i:fin n, f i.succ) :=
242-
begin
243-
rw [fin.univ_succ, prod_insert, prod_image],
244-
{ intros x _ y _ hxy, exact fin.succ.inj hxy },
245-
{ simpa using fin.succ_ne_zero }
246-
end
247-
248-
@[simp, to_additive] theorem fin.prod_univ_zero [comm_monoid β] (f : fin 0 → β) : univ.prod f = 1 := rfl
249-
250-
theorem fin.sum_univ_succ [add_comm_monoid β] {n:ℕ} (f : fin n.succ → β) :
251-
univ.sum f = f 0 + univ.sum (λ i:fin n, f i.succ) :=
252-
by apply @fin.prod_univ_succ (multiplicative β)
253-
254-
attribute [to_additive] fin.prod_univ_succ
255-
256237
lemma fin.univ_cast_succ (n : ℕ) :
257238
(univ : finset (fin $ n+1)) = insert (fin.last n) (univ.image fin.cast_succ) :=
258239
begin
@@ -266,19 +247,6 @@ begin
266247
exact fin.eq_last_of_not_lt h }
267248
end
268249

269-
theorem fin.prod_univ_cast_succ [comm_monoid β] {n:ℕ} (f : fin n.succ → β) :
270-
univ.prod f = univ.prod (λ i:fin n, f i.cast_succ) * f (fin.last n) :=
271-
begin
272-
rw [fin.univ_cast_succ, prod_insert, prod_image, mul_comm],
273-
{ intros x _ y _ hxy, exact fin.cast_succ_inj.mp hxy },
274-
{ simpa using fin.cast_succ_ne_last }
275-
end
276-
277-
theorem fin.sum_univ_cast_succ [add_comm_monoid β] {n:ℕ} (f : fin n.succ → β) :
278-
univ.sum f = univ.sum (λ i:fin n, f i.cast_succ) + f (fin.last n) :=
279-
by apply @fin.prod_univ_cast_succ (multiplicative β)
280-
attribute [to_additive] fin.prod_univ_cast_succ
281-
282250
@[instance, priority 10] def unique.fintype {α : Type*} [unique α] : fintype α :=
283251
⟨finset.singleton (default α), λ x, by rw [unique.eq_default x]; simp⟩
284252

@@ -347,11 +315,6 @@ instance {α : Type*} (β : α → Type*)
347315
[fintype α] [∀ a, fintype (β a)] : fintype (sigma β) :=
348316
⟨univ.sigma (λ _, univ), λ ⟨a, b⟩, by simp⟩
349317

350-
@[simp] theorem fintype.card_sigma {α : Type*} (β : α → Type*)
351-
[fintype α] [∀ a, fintype (β a)] :
352-
fintype.card (sigma β) = univ.sum (λ a, fintype.card (β a)) :=
353-
card_sigma _ _
354-
355318
instance (α β : Type*) [fintype α] [fintype β] : fintype (α × β) :=
356319
⟨univ.product univ, λ ⟨a, b⟩, by simp⟩
357320

@@ -381,10 +344,6 @@ instance (α : Type u) (β : Type v) [fintype α] [fintype β] : fintype (α ⊕
381344
((equiv.sum_equiv_sigma_bool _ _).symm.trans
382345
(equiv.sum_congr equiv.ulift equiv.ulift))
383346

384-
@[simp] theorem fintype.card_sum (α β : Type*) [fintype α] [fintype β] :
385-
fintype.card (α ⊕ β) = fintype.card α + fintype.card β :=
386-
by rw [sum.fintype, fintype.of_equiv_card]; simp
387-
388347
lemma fintype.card_le_of_injective [fintype α] [fintype β] (f : α → β)
389348
(hf : function.injective f) : fintype.card α ≤ fintype.card β :=
390349
by haveI := classical.prop_decidable; exact
@@ -486,18 +445,6 @@ instance pi.fintype {α : Type*} {β : α → Type*}
486445
λ f, finset.mem_pi.2 $ λ a ha, mem_univ _⟩
487446
⟨λ f a, f a (mem_univ _), λ f a _, f a, λ f, rfl, λ f, rfl⟩
488447

489-
@[simp] lemma fintype.card_pi {β : α → Type*} [fintype α] [decidable_eq α]
490-
[f : Π a, fintype (β a)] : fintype.card (Π a, β a) = univ.prod (λ a, fintype.card (β a)) :=
491-
by letI f' : fintype (Πa∈univ, β a) :=
492-
⟨(univ.pi $ λa, univ), assume f, finset.mem_pi.2 $ assume a ha, mem_univ _⟩;
493-
exact calc fintype.card (Π a, β a) = fintype.card (Π a ∈ univ, β a) : fintype.card_congr
494-
⟨λ f a ha, f a, λ f a, f a (mem_univ a), λ _, rfl, λ _, rfl⟩
495-
... = univ.prod (λ a, fintype.card (β a)) : finset.card_pi _ _
496-
497-
@[simp] lemma fintype.card_fun [fintype α] [decidable_eq α] [fintype β] :
498-
fintype.card (α → β) = fintype.card β ^ fintype.card α :=
499-
by rw [fintype.card_pi, finset.prod_const, nat.pow_eq_pow]; refl
500-
501448
instance d_array.fintype {n : ℕ} {α : fin n → Type*}
502449
[∀n, fintype (α n)] : fintype (d_array n α) :=
503450
fintype.of_equiv _ (equiv.d_array_equiv_fin _).symm
@@ -508,10 +455,6 @@ d_array.fintype
508455
instance vector.fintype {α : Type*} [fintype α] {n : ℕ} : fintype (vector α n) :=
509456
fintype.of_equiv _ (equiv.vector_equiv_fin _ _).symm
510457

511-
@[simp] lemma card_vector [fintype α] (n : ℕ) :
512-
fintype.card (vector α n) = fintype.card α ^ n :=
513-
by rw fintype.of_equiv_card; simp
514-
515458
instance quotient.fintype [fintype α] (s : setoid α)
516459
[decidable_rel ((≈) : α → α → Prop)] : fintype (quotient s) :=
517460
fintype.of_surjective quotient.mk (λ x, quotient.induction_on x (λ x, ⟨x, rfl⟩))
@@ -614,24 +557,6 @@ begin
614557
simp [this], exact setoid.refl _
615558
end
616559

617-
@[simp, to_additive]
618-
lemma finset.prod_attach_univ [fintype α] [comm_monoid β] (f : {a : α // a ∈ @univ α _} → β) :
619-
univ.attach.prod (λ x, f x) = univ.prod (λ x, f ⟨x, (mem_univ _)⟩) :=
620-
prod_bij (λ x _, x.1) (λ _ _, mem_univ _) (λ _ _ , by simp) (by simp) (λ b _, ⟨⟨b, mem_univ _⟩, by simp⟩)
621-
622-
@[to_additive]
623-
lemma finset.range_prod_eq_univ_prod [comm_monoid β] (n : ℕ) (f : ℕ → β) :
624-
(range n).prod f = univ.prod (λ (k : fin n), f k) :=
625-
begin
626-
symmetry,
627-
refine prod_bij (λ k hk, k) _ _ _ _,
628-
{ rintro ⟨k, hk⟩ _, simp * },
629-
{ rintro ⟨k, hk⟩ _, simp * },
630-
{ intros, rwa fin.eq_iff_veq },
631-
{ intros k hk, rw mem_range at hk,
632-
exact ⟨⟨k, hk⟩, mem_univ _, rfl⟩ }
633-
end
634-
635560
section equiv
636561

637562
open list equiv equiv.perm

src/data/fintype/card.lean

Lines changed: 106 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,106 @@
1+
/-
2+
Copyright (c) 2017 Mario Carneiro. All rights reserved.
3+
Released under Apache 2.0 license as described in the file LICENSE.
4+
Author: Mario Carneiro
5+
-/
6+
7+
import data.fintype
8+
import algebra.big_operators
9+
10+
/-!
11+
Results about "big operations" over a `fintype`, and consequent
12+
results about cardinalities of certain types.
13+
14+
## Implementation note
15+
This content had previously been in `data.fintype`, but was moved here to avoid
16+
requiring `algebra.big_operators` (and hence many other imports) as a
17+
dependency of `fintype`.
18+
-/
19+
20+
universes u v
21+
22+
variables {α : Type*} {β : Type*} {γ : Type*}
23+
24+
namespace fintype
25+
26+
lemma card_eq_sum_ones {α} [fintype α] : fintype.card α = (finset.univ : finset α).sum (λ _, 1) :=
27+
finset.card_eq_sum_ones _
28+
29+
end fintype
30+
31+
open finset
32+
33+
theorem fin.prod_univ_succ [comm_monoid β] {n:ℕ} (f : fin n.succ → β) :
34+
univ.prod f = f 0 * univ.prod (λ i:fin n, f i.succ) :=
35+
begin
36+
rw [fin.univ_succ, prod_insert, prod_image],
37+
{ intros x _ y _ hxy, exact fin.succ.inj hxy },
38+
{ simpa using fin.succ_ne_zero }
39+
end
40+
41+
@[simp, to_additive] theorem fin.prod_univ_zero [comm_monoid β] (f : fin 0 → β) : univ.prod f = 1 := rfl
42+
43+
theorem fin.sum_univ_succ [add_comm_monoid β] {n:ℕ} (f : fin n.succ → β) :
44+
univ.sum f = f 0 + univ.sum (λ i:fin n, f i.succ) :=
45+
by apply @fin.prod_univ_succ (multiplicative β)
46+
47+
attribute [to_additive] fin.prod_univ_succ
48+
49+
theorem fin.prod_univ_cast_succ [comm_monoid β] {n:ℕ} (f : fin n.succ → β) :
50+
univ.prod f = univ.prod (λ i:fin n, f i.cast_succ) * f (fin.last n) :=
51+
begin
52+
rw [fin.univ_cast_succ, prod_insert, prod_image, mul_comm],
53+
{ intros x _ y _ hxy, exact fin.cast_succ_inj.mp hxy },
54+
{ simpa using fin.cast_succ_ne_last }
55+
end
56+
57+
theorem fin.sum_univ_cast_succ [add_comm_monoid β] {n:ℕ} (f : fin n.succ → β) :
58+
univ.sum f = univ.sum (λ i:fin n, f i.cast_succ) + f (fin.last n) :=
59+
by apply @fin.prod_univ_cast_succ (multiplicative β)
60+
attribute [to_additive] fin.prod_univ_cast_succ
61+
62+
@[simp] theorem fintype.card_sigma {α : Type*} (β : α → Type*)
63+
[fintype α] [∀ a, fintype (β a)] :
64+
fintype.card (sigma β) = univ.sum (λ a, fintype.card (β a)) :=
65+
card_sigma _ _
66+
67+
-- FIXME ouch, this should be in the main file.
68+
@[simp] theorem fintype.card_sum (α β : Type*) [fintype α] [fintype β] :
69+
fintype.card (α ⊕ β) = fintype.card α + fintype.card β :=
70+
by rw [sum.fintype, fintype.of_equiv_card]; simp
71+
72+
@[simp] lemma fintype.card_pi {β : α → Type*} [fintype α] [decidable_eq α]
73+
[f : Π a, fintype (β a)] : fintype.card (Π a, β a) = univ.prod (λ a, fintype.card (β a)) :=
74+
by letI f' : fintype (Πa∈univ, β a) :=
75+
⟨(univ.pi $ λa, univ), assume f, finset.mem_pi.2 $ assume a ha, mem_univ _⟩;
76+
exact calc fintype.card (Π a, β a) = fintype.card (Π a ∈ univ, β a) : fintype.card_congr
77+
⟨λ f a ha, f a, λ f a, f a (mem_univ a), λ _, rfl, λ _, rfl⟩
78+
... = univ.prod (λ a, fintype.card (β a)) : finset.card_pi _ _
79+
80+
-- FIXME ouch, this should be in the main file.
81+
@[simp] lemma fintype.card_fun [fintype α] [decidable_eq α] [fintype β] :
82+
fintype.card (α → β) = fintype.card β ^ fintype.card α :=
83+
by rw [fintype.card_pi, finset.prod_const, nat.pow_eq_pow]; refl
84+
85+
@[simp] lemma card_vector [fintype α] (n : ℕ) :
86+
fintype.card (vector α n) = fintype.card α ^ n :=
87+
by rw fintype.of_equiv_card; simp
88+
89+
90+
@[simp, to_additive]
91+
lemma finset.prod_attach_univ [fintype α] [comm_monoid β] (f : {a : α // a ∈ @univ α _} → β) :
92+
univ.attach.prod (λ x, f x) = univ.prod (λ x, f ⟨x, (mem_univ _)⟩) :=
93+
prod_bij (λ x _, x.1) (λ _ _, mem_univ _) (λ _ _ , by simp) (by simp) (λ b _, ⟨⟨b, mem_univ _⟩, by simp⟩)
94+
95+
@[to_additive]
96+
lemma finset.range_prod_eq_univ_prod [comm_monoid β] (n : ℕ) (f : ℕ → β) :
97+
(range n).prod f = univ.prod (λ (k : fin n), f k) :=
98+
begin
99+
symmetry,
100+
refine prod_bij (λ k hk, k) _ _ _ _,
101+
{ rintro ⟨k, hk⟩ _, simp * },
102+
{ rintro ⟨k, hk⟩ _, simp * },
103+
{ intros, rwa fin.eq_iff_veq },
104+
{ intros k hk, rw mem_range at hk,
105+
exact ⟨⟨k, hk⟩, mem_univ _, rfl⟩ }
106+
end

src/data/set/finite.lean

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -7,6 +7,7 @@ Finite sets.
77
-/
88
import logic.function
99
import data.nat.basic data.fintype data.set.lattice data.set.function
10+
import algebra.big_operators
1011

1112
open set lattice function
1213

src/group_theory/perm/sign.lean

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -4,6 +4,7 @@ Released under Apache 2.0 license as described in the file LICENSE.
44
Authors: Chris Hughes
55
-/
66
import data.fintype
7+
import algebra.big_operators
78

89
universes u v
910
open equiv function fintype finset

src/group_theory/sylow.lean

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -5,6 +5,7 @@ Authors: Chris Hughes
55
-/
66
import group_theory.group_action group_theory.quotient_group
77
import group_theory.order_of_element data.zmod.basic
8+
import data.fintype.card
89

910
open equiv fintype finset mul_action function
1011
open equiv.perm is_subgroup list quotient_group

src/linear_algebra/basis.lean

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -5,6 +5,7 @@ Authors: Johannes Hölzl, Mario Carneiro, Alexander Bentkamp
55
-/
66

77
import linear_algebra.basic linear_algebra.finsupp order.zorn
8+
import data.fintype.card
89

910
/-!
1011

src/linear_algebra/determinant.lean

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -5,6 +5,7 @@ Authors: Kenny Lau, Chris Hughes, Tim Baanen
55
-/
66
import data.matrix.basic
77
import data.matrix.pequiv
8+
import data.fintype.card
89
import group_theory.perm.sign
910

1011
universes u v
@@ -84,7 +85,7 @@ calc det (M ⬝ N) = univ.sum (λ σ : perm n, (univ.pi (λ a, univ)).sum
8485
finset.sum_comm
8586
... = ((@univ (n → n) _).filter bijective).sum (λ p : n → n, univ.sum
8687
(λ σ : perm n, ε σ * univ.prod (λ i, M (σ i) (p i) * N (p i) i))) :
87-
eq.symm $ sum_subset (filter_subset _)
88+
eq.symm $ sum_subset (filter_subset _)
8889
(λ f _ hbij, det_mul_aux $ by simpa using hbij)
8990
... = (@univ (perm n) _).sum (λ τ, univ.sum
9091
(λ σ : perm n, ε σ * univ.prod (λ i, M (σ i) (τ i) * N (τ i) i))) :

src/number_theory/bernoulli.lean

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -6,6 +6,7 @@ Authors: Johan Commelin
66

77
import data.rat
88
import data.fintype
9+
import data.fintype.card
910

1011
/-!
1112
# Bernoulli numbers

0 commit comments

Comments
 (0)