@@ -53,7 +53,7 @@ local attribute [instance] vector.perm.is_setoid
53
53
54
54
namespace sym
55
55
56
- variables {α β : Type *} {n : ℕ} {s : sym α n} {a b : α}
56
+ variables {α β : Type *} {n n' m : ℕ} {s : sym α n} {a b : α}
57
57
58
58
lemma coe_injective : injective (coe : sym α n → multiset α) := subtype.coe_injective
59
59
@@ -117,10 +117,12 @@ s.1.decidable_mem _
117
117
@[simp]
118
118
lemma mem_mk (a : α) (s : multiset α) (h : s.card = n) : a ∈ mk s h ↔ a ∈ s := iff.rfl
119
119
120
- @[simp] lemma mem_cons {a b : α} {s : sym α n} : a ∈ b ::ₛ s ↔ a = b ∨ a ∈ s :=
120
+ @[simp] lemma mem_cons : a ∈ b ::ₛ s ↔ a = b ∨ a ∈ s :=
121
121
multiset.mem_cons
122
122
123
- lemma mem_cons_of_mem {a b : α} {s : sym α n} (h : a ∈ s) : a ∈ b ::ₛ s :=
123
+ @[simp] lemma mem_coe : a ∈ (s : multiset α) ↔ a ∈ s := iff.rfl
124
+
125
+ lemma mem_cons_of_mem (h : a ∈ s) : a ∈ b ::ₛ s :=
124
126
multiset.mem_cons_of_mem h
125
127
126
128
@[simp] lemma mem_cons_self (a : α) (s : sym α n) : a ∈ a ::ₛ s :=
@@ -324,36 +326,46 @@ protected def cast {n m : ℕ} (h : n = m) : sym α n ≃ sym α m :=
324
326
325
327
@[simp] lemma cast_rfl : sym.cast rfl s = s := subtype.ext rfl
326
328
327
- @[simp] lemma cast_cast {n n' n'' : ℕ} (s : sym α n) (h : n = n') (h' : n' = n'') :
329
+ @[simp] lemma cast_cast {n'' : ℕ} (h : n = n') (h' : n' = n'') :
328
330
sym.cast h' (sym.cast h s) = sym.cast (h.trans h') s := rfl
329
331
330
- @[simp] lemma coe_cast {n m : ℕ} (h : n = m) (s : sym α n) :
331
- (sym.cast h s : multiset α) = s := rfl
332
+ @[simp] lemma coe_cast (h : n = m) : (sym.cast h s : multiset α) = s := rfl
333
+
334
+ @[simp] lemma mem_cast (h : n = m) : a ∈ sym.cast h s ↔ a ∈ s := iff.rfl
332
335
333
336
/-- Append a pair of `sym` terms. -/
334
- def append {n n' : ℕ} (s : sym α n) (s' : sym α n') : sym α (n + n') :=
337
+ def append (s : sym α n) (s' : sym α n') : sym α (n + n') :=
335
338
⟨s.1 + s'.1 , by simp_rw [← s.2 , ← s'.2 , map_add]⟩
336
339
337
- @[simp] lemma append_inj_right {n n' : ℕ} (s : sym α n) ( t t' : sym α n') :
340
+ @[simp] lemma append_inj_right (s : sym α n) { t t' : sym α n'} :
338
341
s.append t = s.append t' ↔ t = t' :=
339
342
subtype.ext_iff.trans $ (add_right_inj _).trans subtype.ext_iff.symm
340
343
341
- @[simp] lemma append_inj_left {n n' : ℕ} ( s s' : sym α n) (t : sym α n') :
344
+ @[simp] lemma append_inj_left {s s' : sym α n} (t : sym α n') :
342
345
s.append t = s'.append t ↔ s = s' :=
343
346
subtype.ext_iff.trans $ (add_left_inj _).trans subtype.ext_iff.symm
344
347
345
- lemma append_comm {n n' : ℕ} (s : sym α n) (s' : sym α n') :
348
+ lemma append_comm (s : sym α n' ) (s' : sym α n') :
346
349
s.append s' = sym.cast (add_comm _ _) (s'.append s) :=
347
350
by { ext, simp [append, add_comm], }
348
351
352
+ @[simp, norm_cast] lemma coe_append (s : sym α n') (s' : sym α n') :
353
+ (s.append s' : multiset α) = s + s' := rfl
354
+
355
+ lemma mem_append_iff {s' : sym α m} : a ∈ s.append s' ↔ a ∈ s ∨ a ∈ s' := multiset.mem_add
356
+
349
357
/-- Fill a term `m : sym α (n - i)` with `i` copies of `a` to obtain a term of `sym α n`.
350
358
This is a convenience wrapper for `m.append (repeat a i)` that adjusts the term using `sym.cast`. -/
351
359
def fill (a : α) (i : fin (n + 1 )) (m : sym α (n - i)) : sym α n :=
352
360
sym.cast (nat.sub_add_cancel i.is_le) (m.append (repeat a i))
353
361
362
+ lemma mem_fill_iff (a b : α) (i : fin (n + 1 )) (s : sym α (n - i)) :
363
+ a ∈ sym.fill b i s ↔ ((i : ℕ) ≠ 0 ∧ a = b) ∨ a ∈ s :=
364
+ by rw [fill, mem_cast, mem_append_iff, or_comm, mem_repeat]
365
+
354
366
/-- Remove every `a` from a given `sym α n`.
355
367
Yields the number of copies `i` and a term of `sym α (n - i)`. -/
356
- def filter_ne [decidable_eq α] (a : α) {n : ℕ} (m : sym α n) : Σ i : fin (n + 1 ), sym α (n - i) :=
368
+ def filter_ne [decidable_eq α] (a : α) (m : sym α n) : Σ i : fin (n + 1 ), sym α (n - i) :=
357
369
⟨⟨m.1 .count a, (multiset.count_le_card _ _).trans_lt $ by rw [m.2 , nat.lt_succ_iff]⟩,
358
370
m.1 .filter ((≠) a), eq_tsub_of_add_eq $ eq.trans begin
359
371
rw [← multiset.countp_eq_card_filter, add_comm],
0 commit comments