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

Commit 9925a11

Browse files
committed
chore(data/list/range): split & reduce imports (#17887)
This PR splits most of the lemmas about `list.fin_range` into a new file. `list.fin_range` is much less useful than `list.range`, but we need to import `data.list.of_fn` for `list.fin_range`, and then `data.list.of_fn` imports `data.fin.tuple.basic` and `data.fin.tuple.basic` imports many things.
1 parent 43afc5a commit 9925a11

File tree

14 files changed

+101
-78
lines changed

14 files changed

+101
-78
lines changed

src/algebra/big_operators/fin.lean

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -5,6 +5,7 @@ Authors: Yury Kudryashov, Anne Baanen
55
-/
66
import data.fintype.big_operators
77
import data.fintype.fin
8+
import data.list.fin_range
89
import logic.equiv.fin
910

1011
/-!

src/algebra/graded_monoid.lean

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -5,7 +5,7 @@ Authors: Eric Wieser
55
-/
66
import algebra.group.inj_surj
77
import data.list.big_operators.basic
8-
import data.list.range
8+
import data.list.fin_range
99
import group_theory.group_action.defs
1010
import group_theory.submonoid.basic
1111
import data.set_like.basic

src/algebra/order/hom/ring.lean

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -7,6 +7,7 @@ import algebra.order.archimedean
77
import algebra.order.hom.monoid
88
import algebra.order.ring.defs
99
import algebra.ring.equiv
10+
import tactic.by_contra
1011
import tactic.wlog
1112

1213
/-!

src/data/fin/tuple/sort.lean

Lines changed: 1 addition & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -3,9 +3,8 @@ Copyright (c) 2021 Kyle Miller. All rights reserved.
33
Released under Apache 2.0 license as described in the file LICENSE.
44
Authors: Kyle Miller
55
-/
6-
7-
import data.fin.basic
86
import data.finset.sort
7+
import data.list.fin_range
98
import data.prod.lex
109
import group_theory.perm.basic
1110

src/data/fin/vec_notation.lean

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -3,6 +3,7 @@ Copyright (c) 2020 Anne Baanen. All rights reserved.
33
Released under Apache 2.0 license as described in the file LICENSE.
44
Authors: Anne Baanen
55
-/
6+
import data.fin.tuple.basic
67
import data.list.range
78
import group_theory.group_action.pi
89
import meta.univs

src/data/finset/image.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: Leonardo de Moura, Jeremy Avigad, Minchao Wu, Mario Carneiro
55
-/
66
import algebra.hom.embedding
7+
import data.fin.basic
78
import data.finset.basic
89
import data.int.order.basic
910

src/data/list/fin_range.lean

Lines changed: 87 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,87 @@
1+
/-
2+
Copyright (c) 2018 Mario Carneiro. All rights reserved.
3+
Released under Apache 2.0 license as described in the file LICENSE.
4+
Authors: Mario Carneiro, Kenny Lau, Scott Morrison
5+
-/
6+
import data.list.of_fn
7+
import data.list.perm
8+
9+
/-!
10+
# Lists of elements of `fin n`
11+
12+
This file develops some results on `fin_range n`.
13+
-/
14+
15+
universe u
16+
17+
namespace list
18+
variables {α : Type u}
19+
20+
@[simp] lemma map_coe_fin_range (n : ℕ) : (fin_range n).map coe = list.range n :=
21+
begin
22+
simp_rw [fin_range, map_pmap, fin.coe_mk, pmap_eq_map],
23+
exact list.map_id _
24+
end
25+
26+
lemma fin_range_succ_eq_map (n : ℕ) :
27+
fin_range n.succ = 0 :: (fin_range n).map fin.succ :=
28+
begin
29+
apply map_injective_iff.mpr fin.coe_injective,
30+
rw [map_cons, map_coe_fin_range, range_succ_eq_map, fin.coe_zero, ←map_coe_fin_range, map_map,
31+
map_map, function.comp, function.comp],
32+
congr' 2 with x,
33+
exact (fin.coe_succ _).symm,
34+
end
35+
36+
@[simp] lemma map_nth_le (l : list α) :
37+
(fin_range l.length).map (λ n, l.nth_le n n.2) = l :=
38+
ext_le (by rw [length_map, length_fin_range]) $ λ n _ h,
39+
by { rw ← nth_le_map_rev, congr, { rw nth_le_fin_range, refl }, { rw length_fin_range, exact h } }
40+
41+
theorem of_fn_eq_pmap {α n} {f : fin n → α} :
42+
of_fn f = pmap (λ i hi, f ⟨i, hi⟩) (range n) (λ _, mem_range.1) :=
43+
by rw [pmap_eq_map_attach]; from ext_le (by simp)
44+
(λ i hi1 hi2, by { simp at hi1, simp [nth_le_of_fn f ⟨i, hi1⟩, -subtype.val_eq_coe] })
45+
46+
theorem of_fn_id (n) : of_fn id = fin_range n := of_fn_eq_pmap
47+
48+
theorem of_fn_eq_map {α n} {f : fin n → α} :
49+
of_fn f = (fin_range n).map f :=
50+
by rw [← of_fn_id, map_of_fn, function.right_id]
51+
52+
theorem nodup_of_fn_of_injective {α n} {f : fin n → α} (hf : function.injective f) :
53+
nodup (of_fn f) :=
54+
by { rw of_fn_eq_pmap, exact (nodup_range n).pmap (λ _ _ _ _ H, fin.veq_of_eq $ hf H) }
55+
56+
theorem nodup_of_fn {α n} {f : fin n → α} :
57+
nodup (of_fn f) ↔ function.injective f :=
58+
begin
59+
refine ⟨_, nodup_of_fn_of_injective⟩,
60+
refine fin.cons_induction _ (λ n x₀ xs ih, _) f,
61+
{ intro h,
62+
exact function.injective_of_subsingleton _ },
63+
{ intro h,
64+
rw fin.cons_injective_iff,
65+
simp_rw [of_fn_succ, fin.cons_succ, nodup_cons, fin.cons_zero, mem_of_fn] at h,
66+
exact h.imp_right ih }
67+
end
68+
69+
end list
70+
71+
open list
72+
73+
lemma equiv.perm.map_fin_range_perm {n : ℕ} (σ : equiv.perm (fin n)) :
74+
map σ (fin_range n) ~ fin_range n :=
75+
begin
76+
rw [perm_ext ((nodup_fin_range n).map σ.injective) $ nodup_fin_range n],
77+
simpa only [mem_map, mem_fin_range, true_and, iff_true] using σ.surjective
78+
end
79+
80+
/-- The list obtained from a permutation of a tuple `f` is permutation equivalent to
81+
the list obtained from `f`. -/
82+
lemma equiv.perm.of_fn_comp_perm {n : ℕ} {α : Type u} (σ : equiv.perm (fin n)) (f : fin n → α) :
83+
of_fn (f ∘ σ) ~ of_fn f :=
84+
begin
85+
rw [of_fn_eq_map, of_fn_eq_map, ←map_map],
86+
exact σ.map_fin_range_perm.map f,
87+
end

src/data/list/indexes.lean

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -3,6 +3,7 @@ Copyright (c) 2020 Jannis Limperg. All rights reserved.
33
Released under Apache 2.0 license as described in the file LICENSE.
44
Authors: Jannis Limperg
55
-/
6+
import data.list.of_fn
67
import data.list.range
78

89
/-!

src/data/list/nat_antidiagonal.lean

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -3,6 +3,7 @@ Copyright (c) 2019 Johan Commelin. All rights reserved.
33
Released under Apache 2.0 license as described in the file LICENSE.
44
Authors: Johan Commelin
55
-/
6+
import data.list.nodup
67
import data.list.range
78

89
/-!

src/data/list/perm.lean

Lines changed: 0 additions & 21 deletions
Original file line numberDiff line numberDiff line change
@@ -4,12 +4,9 @@ Released under Apache 2.0 license as described in the file LICENSE.
44
Authors: Leonardo de Moura, Jeremy Avigad, Mario Carneiro
55
-/
66
import data.list.dedup
7-
import data.list.lattice
87
import data.list.permutation
9-
import data.list.zip
108
import data.list.range
119
import data.nat.factorial.basic
12-
import logic.relation
1310

1411
/-!
1512
# List Permutations
@@ -1343,21 +1340,3 @@ end
13431340
end permutations
13441341

13451342
end list
1346-
1347-
open list
1348-
1349-
lemma equiv.perm.map_fin_range_perm {n : ℕ} (σ : equiv.perm (fin n)) :
1350-
map σ (fin_range n) ~ fin_range n :=
1351-
begin
1352-
rw [perm_ext ((nodup_fin_range n).map σ.injective) $ nodup_fin_range n],
1353-
simpa only [mem_map, mem_fin_range, true_and, iff_true] using σ.surjective
1354-
end
1355-
1356-
/-- The list obtained from a permutation of a tuple `f` is permutation equivalent to
1357-
the list obtained from `f`. -/
1358-
lemma equiv.perm.of_fn_comp_perm {n : ℕ} {α : Type uu} (σ : equiv.perm (fin n)) (f : fin n → α) :
1359-
of_fn (f ∘ σ) ~ of_fn f :=
1360-
begin
1361-
rw [of_fn_eq_map, of_fn_eq_map, ←map_map],
1362-
exact σ.map_fin_range_perm.map f,
1363-
end

0 commit comments

Comments
 (0)