@@ -31,7 +31,7 @@ It takes the value zero at zero; for non-zero argument `a : α`, it is `1`
31
31
if `a` is a square, otherwise it is `-1`.
32
32
33
33
This only deserves the name "character" when it is multiplicative,
34
- e.g., when `α` is a finite field. See `quadratic_char_mul `.
34
+ e.g., when `α` is a finite field. See `quadratic_char_fun_mul `.
35
35
36
36
We will later define `quadratic_char` to be a multiplicative character
37
37
of type `mul_char F ℤ`, when the domain is a finite field `F`.
@@ -57,7 +57,7 @@ open mul_char
57
57
variables {F : Type *} [field F] [fintype F] [decidable_eq F]
58
58
59
59
/-- Some basic API lemmas -/
60
- lemma quadratic_char_eq_zero_iff' {a : F} : quadratic_char_fun F a = 0 ↔ a = 0 :=
60
+ lemma quadratic_char_fun_eq_zero_iff {a : F} : quadratic_char_fun F a = 0 ↔ a = 0 :=
61
61
begin
62
62
simp only [quadratic_char_fun],
63
63
by_cases ha : a = 0 ,
@@ -67,15 +67,15 @@ begin
67
67
end
68
68
69
69
@[simp]
70
- lemma quadratic_char_zero : quadratic_char_fun F 0 = 0 :=
70
+ lemma quadratic_char_fun_zero : quadratic_char_fun F 0 = 0 :=
71
71
by simp only [quadratic_char_fun, eq_self_iff_true, if_true, id.def]
72
72
73
73
@[simp]
74
- lemma quadratic_char_one : quadratic_char_fun F 1 = 1 :=
74
+ lemma quadratic_char_fun_one : quadratic_char_fun F 1 = 1 :=
75
75
by simp only [quadratic_char_fun, one_ne_zero, is_square_one, if_true, if_false, id.def]
76
76
77
77
/-- If `ring_char F = 2`, then `quadratic_char_fun F` takes the value `1` on nonzero elements. -/
78
- lemma quadratic_char_eq_one_of_char_two' (hF : ring_char F = 2 ) {a : F} (ha : a ≠ 0 ) :
78
+ lemma quadratic_char_fun_eq_one_of_char_two (hF : ring_char F = 2 ) {a : F} (ha : a ≠ 0 ) :
79
79
quadratic_char_fun F a = 1 :=
80
80
begin
81
81
simp only [quadratic_char_fun, ha, if_false, ite_eq_left_iff],
84
84
85
85
/-- If `ring_char F` is odd, then `quadratic_char_fun F a` can be computed in
86
86
terms of `a ^ (fintype.card F / 2)`. -/
87
- lemma quadratic_char_eq_pow_of_char_ne_two' (hF : ring_char F ≠ 2 ) {a : F} (ha : a ≠ 0 ) :
87
+ lemma quadratic_char_fun_eq_pow_of_char_ne_two (hF : ring_char F ≠ 2 ) {a : F} (ha : a ≠ 0 ) :
88
88
quadratic_char_fun F a = if a ^ (fintype.card F / 2 ) = 1 then 1 else -1 :=
89
89
begin
90
90
simp only [quadratic_char_fun, ha, if_false],
91
91
simp_rw finite_field.is_square_iff hF ha,
92
92
end
93
93
94
94
/-- The quadratic character is multiplicative. -/
95
- lemma quadratic_char_mul (a b : F) :
95
+ lemma quadratic_char_fun_mul (a b : F) :
96
96
quadratic_char_fun F (a * b) = quadratic_char_fun F a * quadratic_char_fun F b :=
97
97
begin
98
98
by_cases ha : a = 0 ,
99
- { rw [ha, zero_mul, quadratic_char_zero , zero_mul], },
99
+ { rw [ha, zero_mul, quadratic_char_fun_zero , zero_mul], },
100
100
-- now `a ≠ 0`
101
101
by_cases hb : b = 0 ,
102
- { rw [hb, mul_zero, quadratic_char_zero , mul_zero], },
102
+ { rw [hb, mul_zero, quadratic_char_fun_zero , mul_zero], },
103
103
-- now `a ≠ 0` and `b ≠ 0`
104
104
have hab := mul_ne_zero ha hb,
105
105
by_cases hF : ring_char F = 2 ,
106
106
{ -- case `ring_char F = 2`
107
- rw [quadratic_char_eq_one_of_char_two' hF ha,
108
- quadratic_char_eq_one_of_char_two' hF hb,
109
- quadratic_char_eq_one_of_char_two' hF hab,
107
+ rw [quadratic_char_fun_eq_one_of_char_two hF ha,
108
+ quadratic_char_fun_eq_one_of_char_two hF hb,
109
+ quadratic_char_fun_eq_one_of_char_two hF hab,
110
110
mul_one], },
111
111
{ -- case of odd characteristic
112
- rw [quadratic_char_eq_pow_of_char_ne_two' hF ha,
113
- quadratic_char_eq_pow_of_char_ne_two' hF hb,
114
- quadratic_char_eq_pow_of_char_ne_two' hF hab,
112
+ rw [quadratic_char_fun_eq_pow_of_char_ne_two hF ha,
113
+ quadratic_char_fun_eq_pow_of_char_ne_two hF hb,
114
+ quadratic_char_fun_eq_pow_of_char_ne_two hF hab,
115
115
mul_pow],
116
116
cases finite_field.pow_dichotomy hF hb with hb' hb',
117
117
{ simp only [hb', mul_one, eq_self_iff_true, if_true], },
@@ -126,15 +126,19 @@ variables (F)
126
126
/-- The quadratic character as a multiplicative character. -/
127
127
@[simps] def quadratic_char : mul_char F ℤ :=
128
128
{ to_fun := quadratic_char_fun F,
129
- map_one' := quadratic_char_one ,
130
- map_mul' := quadratic_char_mul ,
131
- map_nonunit' := λ a ha, by { rw of_not_not (mt ne.is_unit ha), exact quadratic_char_zero , } }
129
+ map_one' := quadratic_char_fun_one ,
130
+ map_mul' := quadratic_char_fun_mul ,
131
+ map_nonunit' := λ a ha, by { rw of_not_not (mt ne.is_unit ha), exact quadratic_char_fun_zero , } }
132
132
133
133
variables {F}
134
134
135
135
/-- The value of the quadratic character on `a` is zero iff `a = 0`. -/
136
136
lemma quadratic_char_eq_zero_iff {a : F} : quadratic_char F a = 0 ↔ a = 0 :=
137
- quadratic_char_eq_zero_iff'
137
+ quadratic_char_fun_eq_zero_iff
138
+
139
+ @[simp]
140
+ lemma quadratic_char_zero : quadratic_char F 0 = 0 :=
141
+ by simp only [quadratic_char_apply, quadratic_char_fun_zero]
138
142
139
143
/-- For nonzero `a : F`, `quadratic_char F a = 1 ↔ is_square a`. -/
140
144
lemma quadratic_char_one_iff_is_square {a : F} (ha : a ≠ 0 ) :
@@ -181,15 +185,15 @@ lemma quadratic_char_exists_neg_one (hF : ring_char F ≠ 2) : ∃ a, quadratic_
181
185
/-- If `ring_char F = 2`, then `quadratic_char F` takes the value `1` on nonzero elements. -/
182
186
lemma quadratic_char_eq_one_of_char_two (hF : ring_char F = 2 ) {a : F} (ha : a ≠ 0 ) :
183
187
quadratic_char F a = 1 :=
184
- quadratic_char_eq_one_of_char_two' hF ha
188
+ quadratic_char_fun_eq_one_of_char_two hF ha
185
189
186
190
/-- If `ring_char F` is odd, then `quadratic_char F a` can be computed in
187
191
terms of `a ^ (fintype.card F / 2)`. -/
188
192
lemma quadratic_char_eq_pow_of_char_ne_two (hF : ring_char F ≠ 2 ) {a : F} (ha : a ≠ 0 ) :
189
193
quadratic_char F a = if a ^ (fintype.card F / 2 ) = 1 then 1 else -1 :=
190
- quadratic_char_eq_pow_of_char_ne_two' hF ha
194
+ quadratic_char_fun_eq_pow_of_char_ne_two hF ha
191
195
192
- lemma quadratic_char_eq_pow_of_char_ne_two'' (hF : ring_char F ≠ 2 ) (a : F) :
196
+ lemma quadratic_char_eq_pow_of_char_ne_two' (hF : ring_char F ≠ 2 ) (a : F) :
193
197
(quadratic_char F a : F) = a ^ (fintype.card F / 2 ) :=
194
198
begin
195
199
by_cases ha : a = 0 ,
318
322
lemma quadratic_char_two [decidable_eq F] (hF : ring_char F ≠ 2 ) :
319
323
quadratic_char F 2 = χ₈ (fintype.card F) :=
320
324
is_quadratic.eq_of_eq_coe (quadratic_char_is_quadratic F) is_quadratic_χ₈ hF
321
- ((quadratic_char_eq_pow_of_char_ne_two'' hF 2 ).trans (finite_field.two_pow_card hF))
325
+ ((quadratic_char_eq_pow_of_char_ne_two' hF 2 ).trans (finite_field.two_pow_card hF))
322
326
323
327
/-- `2` is a square in `F` iff `#F` is not congruent to `3` or `5` mod `8`. -/
324
328
lemma finite_field.is_square_two_iff :
@@ -394,7 +398,7 @@ begin
394
398
exact ring.neg_one_ne_one_of_char_ne_two hF', },
395
399
have hχ₂ : χ.is_quadratic := is_quadratic.comp (quadratic_char_is_quadratic F) _,
396
400
have h := char.card_pow_card hχ₁ hχ₂ h hF',
397
- rw [← quadratic_char_eq_pow_of_char_ne_two'' hF'] at h,
401
+ rw [← quadratic_char_eq_pow_of_char_ne_two' hF'] at h,
398
402
exact (is_quadratic.eq_of_eq_coe (quadratic_char_is_quadratic F')
399
403
(quadratic_char_is_quadratic F) hF' h).symm,
400
404
end
0 commit comments