@@ -11,8 +11,8 @@ import Mathlib.Data.List.Count
11
11
/-!
12
12
# `List.count` as a bundled homomorphism
13
13
14
- In this file we define `FreeMonoid.countp `, `FreeMonoid.count`, `FreeAddMonoid.countp `, and
15
- `FreeAddMonoid.count`. These are `List.countp ` and `List.count` bundled as multiplicative and
14
+ In this file we define `FreeMonoid.countP `, `FreeMonoid.count`, `FreeAddMonoid.countP `, and
15
+ `FreeAddMonoid.count`. These are `List.countP ` and `List.count` bundled as multiplicative and
16
16
additive homomorphisms from `FreeMonoid` and `FreeAddMonoid`.
17
17
18
18
We do not use `to_additive` because it can't map `Multiplicative ℕ` to `ℕ`.
@@ -22,27 +22,27 @@ variable {α : Type*} (p : α → Prop) [DecidablePred p]
22
22
23
23
namespace FreeAddMonoid
24
24
25
- /-- `List.countp ` as a bundled additive monoid homomorphism. -/
26
- def countp : FreeAddMonoid α →+ ℕ where
27
- toFun := List.countp p
28
- map_zero' := List.countp_nil _
29
- map_add' := List.countp_append _
30
- #align free_add_monoid.countp FreeAddMonoid.countp
25
+ /-- `List.countP ` as a bundled additive monoid homomorphism. -/
26
+ def countP : FreeAddMonoid α →+ ℕ where
27
+ toFun := List.countP p
28
+ map_zero' := List.countP_nil _
29
+ map_add' := List.countP_append _
30
+ #align free_add_monoid.countp FreeAddMonoid.countP
31
31
32
- theorem countp_of (x : α) : countp p (of x) = if p x = true then 1 else 0 := by
33
- simp [countp , List.countp , List.countp .go]
34
- #align free_add_monoid.countp_of FreeAddMonoid.countp_of
32
+ theorem countP_of (x : α) : countP p (of x) = if p x = true then 1 else 0 := by
33
+ simp [countP , List.countP , List.countP .go]
34
+ #align free_add_monoid.countp_of FreeAddMonoid.countP_of
35
35
36
- theorem countp_apply (l : FreeAddMonoid α) : countp p l = List.countp p l := rfl
37
- #align free_add_monoid.countp_apply FreeAddMonoid.countp_apply
36
+ theorem countP_apply (l : FreeAddMonoid α) : countP p l = List.countP p l := rfl
37
+ #align free_add_monoid.countp_apply FreeAddMonoid.countP_apply
38
38
39
39
/-- `List.count` as a bundled additive monoid homomorphism. -/
40
40
-- Porting note: was (x = ·)
41
- def count [DecidableEq α] (x : α) : FreeAddMonoid α →+ ℕ := countp (· = x)
41
+ def count [DecidableEq α] (x : α) : FreeAddMonoid α →+ ℕ := countP (· = x)
42
42
#align free_add_monoid.count FreeAddMonoid.count
43
43
44
44
theorem count_of [DecidableEq α] (x y : α) : count x (of y) = (Pi.single x 1 : α → ℕ) y := by
45
- simp [Pi.single, Function.update, count, countp , List.countp , List.countp .go,
45
+ simp [Pi.single, Function.update, count, countP , List.countP , List.countP .go,
46
46
Bool.beq_eq_decide_eq]
47
47
#align free_add_monoid.count_of FreeAddMonoid.count_of
48
48
@@ -54,28 +54,28 @@ end FreeAddMonoid
54
54
55
55
namespace FreeMonoid
56
56
57
- /-- `List.countp ` as a bundled multiplicative monoid homomorphism. -/
58
- def countp : FreeMonoid α →* Multiplicative ℕ :=
59
- AddMonoidHom.toMultiplicative (FreeAddMonoid.countp p)
60
- #align free_monoid.countp FreeMonoid.countp
57
+ /-- `List.countP ` as a bundled multiplicative monoid homomorphism. -/
58
+ def countP : FreeMonoid α →* Multiplicative ℕ :=
59
+ AddMonoidHom.toMultiplicative (FreeAddMonoid.countP p)
60
+ #align free_monoid.countp FreeMonoid.countP
61
61
62
- theorem countp_of ' (x : α) :
63
- countp p (of x) = if p x then Multiplicative.ofAdd 1 else Multiplicative.ofAdd 0 := by
64
- erw [FreeAddMonoid.countp_of ]
62
+ theorem countP_of ' (x : α) :
63
+ countP p (of x) = if p x then Multiplicative.ofAdd 1 else Multiplicative.ofAdd 0 := by
64
+ erw [FreeAddMonoid.countP_of ]
65
65
simp only [eq_iff_iff, iff_true, ofAdd_zero]; rfl
66
- #align free_monoid.countp_of' FreeMonoid.countp_of '
66
+ #align free_monoid.countp_of' FreeMonoid.countP_of '
67
67
68
- theorem countp_of (x : α) : countp p (of x) = if p x then Multiplicative.ofAdd 1 else 1 := by
69
- rw [countp_of ', ofAdd_zero]
70
- #align free_monoid.countp_of FreeMonoid.countp_of
68
+ theorem countP_of (x : α) : countP p (of x) = if p x then Multiplicative.ofAdd 1 else 1 := by
69
+ rw [countP_of ', ofAdd_zero]
70
+ #align free_monoid.countp_of FreeMonoid.countP_of
71
71
72
72
-- `rfl` is not transitive
73
- theorem countp_apply (l : FreeAddMonoid α) : countp p l = Multiplicative.ofAdd (List.countp p l) :=
73
+ theorem countP_apply (l : FreeAddMonoid α) : countP p l = Multiplicative.ofAdd (List.countP p l) :=
74
74
rfl
75
- #align free_monoid.countp_apply FreeMonoid.countp_apply
75
+ #align free_monoid.countp_apply FreeMonoid.countP_apply
76
76
77
77
/-- `List.count` as a bundled additive monoid homomorphism. -/
78
- def count [DecidableEq α] (x : α) : FreeMonoid α →* Multiplicative ℕ := countp (· = x)
78
+ def count [DecidableEq α] (x : α) : FreeMonoid α →* Multiplicative ℕ := countP (· = x)
79
79
#align free_monoid.count FreeMonoid.count
80
80
81
81
theorem count_apply [DecidableEq α] (x : α) (l : FreeAddMonoid α) :
@@ -84,7 +84,7 @@ theorem count_apply [DecidableEq α] (x : α) (l : FreeAddMonoid α) :
84
84
85
85
theorem count_of [DecidableEq α] (x y : α) :
86
86
count x (of y) = @Pi.mulSingle α (fun _ => Multiplicative ℕ) _ _ x (Multiplicative.ofAdd 1 ) y :=
87
- by simp [count, countp_of , Pi.mulSingle_apply, eq_comm, Bool.beq_eq_decide_eq]
87
+ by simp [count, countP_of , Pi.mulSingle_apply, eq_comm, Bool.beq_eq_decide_eq]
88
88
#align free_monoid.count_of FreeMonoid.count_of
89
89
90
90
end FreeMonoid
0 commit comments