@@ -7,7 +7,6 @@ import algebra.big_operators.finsupp
7
7
import algebra.hom.group_action
8
8
import algebra.regular.smul
9
9
import data.finset.preimage
10
- import data.list.alist
11
10
import data.rat.big_operators
12
11
13
12
/-!
@@ -16,8 +15,6 @@ import data.rat.big_operators
16
15
## Main declarations
17
16
18
17
* `finsupp.graph`: the finset of input and output pairs with non-zero outputs.
19
- * `alist.lookup_finsupp`: converts an association list into a finitely supported function
20
- via `alist.lookup`, sending absent keys to zero.
21
18
* `finsupp.map_range.equiv`: `finsupp.map_range` as an equiv.
22
19
* `finsupp.map_domain`: maps the domain of a `finsupp` by a function and by summing.
23
20
* `finsupp.comap_domain`: postcomposition of a `finsupp` with a function injective on the preimage
@@ -107,101 +104,10 @@ end
107
104
@[simp] lemma graph_eq_empty {f : α →₀ M} : f.graph = ∅ ↔ f = 0 :=
108
105
(graph_injective α M).eq_iff' graph_zero
109
106
110
- /-- Produce an association list for the finsupp over its support using choice. -/
111
- @[simps] def to_alist (f : α →₀ M) : alist (λ x : α, M) :=
112
- ⟨f.graph.to_list.map prod.to_sigma, begin
113
- rw [list.nodupkeys, list.keys, list.map_map, prod.fst_comp_to_sigma, list.nodup_map_iff_inj_on],
114
- { rintros ⟨b, m⟩ hb ⟨c, n⟩ hc (rfl : b = c),
115
- rw [mem_to_list, finsupp.mem_graph_iff] at hb hc,
116
- dsimp at hb hc,
117
- rw [←hc.1 , hb.1 ] },
118
- { apply nodup_to_list }
119
- end ⟩
120
-
121
- @[simp] lemma to_alist_keys_to_finset [decidable_eq α] (f : α →₀ M) :
122
- f.to_alist.keys.to_finset = f.support :=
123
- by { ext, simp [to_alist, alist.mem_keys, alist.keys, list.keys] }
124
-
125
- @[simp] lemma mem_to_alist {f : α →₀ M} {x : α} : x ∈ f.to_alist ↔ f x ≠ 0 :=
126
- begin
127
- classical,
128
- rw [alist.mem_keys, ←list.mem_to_finset, to_alist_keys_to_finset, mem_support_iff]
129
- end
130
-
131
107
end graph
132
108
133
109
end finsupp
134
110
135
- /-! ### Declarations about `alist.lookup_finsupp` -/
136
-
137
- section lookup_finsupp
138
-
139
- variable [has_zero M]
140
-
141
- namespace alist
142
- open list
143
-
144
- /-- Converts an association list into a finitely supported function via `alist.lookup`, sending
145
- absent keys to zero. -/
146
- def lookup_finsupp (l : alist (λ x : α, M)) : α →₀ M :=
147
- { support := by haveI := classical.dec_eq α; haveI := classical.dec_eq M; exact
148
- (l.1 .filter $ λ x, sigma.snd x ≠ 0 ).keys.to_finset,
149
- to_fun := λ a, by haveI := classical.dec_eq α; exact (l.lookup a).get_or_else 0 ,
150
- mem_support_to_fun := λ a, begin
151
- classical,
152
- simp_rw [mem_to_finset, list.mem_keys, list.mem_filter, ←mem_lookup_iff],
153
- cases lookup a l;
154
- simp
155
- end }
156
-
157
- @[simp] lemma lookup_finsupp_apply [decidable_eq α] (l : alist (λ x : α, M)) (a : α) :
158
- l.lookup_finsupp a = (l.lookup a).get_or_else 0 :=
159
- by convert rfl
160
-
161
- @[simp] lemma lookup_finsupp_support [decidable_eq α] [decidable_eq M] (l : alist (λ x : α, M)) :
162
- l.lookup_finsupp.support = (l.1 .filter $ λ x, sigma.snd x ≠ 0 ).keys.to_finset :=
163
- by convert rfl
164
-
165
- lemma lookup_finsupp_eq_iff_of_ne_zero [decidable_eq α]
166
- {l : alist (λ x : α, M)} {a : α} {x : M} (hx : x ≠ 0 ) :
167
- l.lookup_finsupp a = x ↔ x ∈ l.lookup a :=
168
- by { rw lookup_finsupp_apply, cases lookup a l with m; simp [hx.symm] }
169
-
170
- lemma lookup_finsupp_eq_zero_iff [decidable_eq α] {l : alist (λ x : α, M)} {a : α} :
171
- l.lookup_finsupp a = 0 ↔ a ∉ l ∨ (0 : M) ∈ l.lookup a :=
172
- by { rw [lookup_finsupp_apply, ←lookup_eq_none], cases lookup a l with m; simp }
173
-
174
- @[simp] lemma empty_lookup_finsupp : lookup_finsupp (∅ : alist (λ x : α, M)) = 0 :=
175
- by { classical, ext, simp }
176
-
177
- @[simp] lemma insert_lookup_finsupp [decidable_eq α] (l : alist (λ x : α, M)) (a : α) (m : M) :
178
- (l.insert a m).lookup_finsupp = l.lookup_finsupp.update a m :=
179
- by { ext b, by_cases h : b = a; simp [h] }
180
-
181
- @[simp] lemma singleton_lookup_finsupp (a : α) (m : M) :
182
- (singleton a m).lookup_finsupp = finsupp.single a m :=
183
- by { classical, simp [←alist.insert_empty] }
184
-
185
- @[simp] lemma _root_.finsupp.to_alist_lookup_finsupp (f : α →₀ M) : f.to_alist.lookup_finsupp = f :=
186
- begin
187
- ext,
188
- by_cases h : f a = 0 ,
189
- { suffices : f.to_alist.lookup a = none,
190
- { simp [h, this ] },
191
- { simp [lookup_eq_none, h] } },
192
- { suffices : f.to_alist.lookup a = some (f a),
193
- { simp [h, this ] },
194
- { apply mem_lookup_iff.2 ,
195
- simpa using h } }
196
- end
197
-
198
- lemma lookup_finsupp_surjective : surjective (@lookup_finsupp α M _) :=
199
- λ f, ⟨_, finsupp.to_alist_lookup_finsupp f⟩
200
-
201
- end alist
202
-
203
- end lookup_finsupp
204
-
205
111
/-! ### Declarations about `map_range` -/
206
112
207
113
section map_range
0 commit comments