@@ -58,13 +58,44 @@ theorem isSquare_mul_self (m : α) : IsSquare (m * m) :=
58
58
#align even_add_self even_add_self
59
59
60
60
@[to_additive]
61
- theorem isSquare_op_iff ( a : α) : IsSquare (op a) ↔ IsSquare a :=
62
- ⟨fun ⟨c, hc⟩ => ⟨unop c, by rw [← unop_mul, ← hc, unop_op] ⟩, fun ⟨c, hc⟩ => by simp [hc] ⟩
61
+ theorem isSquare_op_iff { a : α} : IsSquare (op a) ↔ IsSquare a :=
62
+ ⟨fun ⟨c, hc⟩ => ⟨unop c, congr_arg unop hc ⟩, fun ⟨c, hc⟩ => ⟨op c, congr_arg op hc⟩ ⟩
63
63
#align is_square_op_iff isSquare_op_iff
64
64
#align even_op_iff even_op_iff
65
65
66
+ @[to_additive]
67
+ theorem isSquare_unop_iff {a : αᵐᵒᵖ} : IsSquare (unop a) ↔ IsSquare a := isSquare_op_iff.symm
68
+
69
+ @[to_additive]
70
+ instance [DecidablePred (IsSquare : α → Prop )] : DecidablePred (IsSquare : αᵐᵒᵖ → Prop ) :=
71
+ fun _ => decidable_of_iff _ isSquare_unop_iff
72
+
73
+ @[simp]
74
+ theorem even_ofMul_iff {a : α} : Even (Additive.ofMul a) ↔ IsSquare a := Iff.rfl
75
+
76
+ @[simp]
77
+ theorem isSquare_toMul_iff {a : Additive α} : IsSquare (Additive.toMul a) ↔ Even a := Iff.rfl
78
+
79
+ instance [DecidablePred (IsSquare : α → Prop )] : DecidablePred (Even : Additive α → Prop ) :=
80
+ fun _ => decidable_of_iff _ isSquare_toMul_iff
81
+
66
82
end Mul
67
83
84
+ section Add
85
+ variable [Add α]
86
+
87
+ @[simp]
88
+ theorem isSquare_ofAdd_iff {a : α} : IsSquare (Multiplicative.ofAdd a) ↔ Even a := Iff.rfl
89
+
90
+ @[simp]
91
+ theorem even_toAdd_iff {a : Multiplicative α} :
92
+ Even (Multiplicative.toAdd a) ↔ IsSquare a := Iff.rfl
93
+
94
+ instance [DecidablePred (Even : α → Prop )] : DecidablePred (IsSquare : Multiplicative α → Prop ) :=
95
+ fun _ => decidable_of_iff _ even_toAdd_iff
96
+
97
+ end Add
98
+
68
99
@[to_additive (attr := simp)]
69
100
theorem isSquare_one [MulOneClass α] : IsSquare (1 : α) :=
70
101
⟨1 , (mul_one _).symm⟩
@@ -165,7 +196,7 @@ theorem isSquare_inv : IsSquare a⁻¹ ↔ IsSquare a := by
165
196
refine' ⟨fun h => _, fun h => _⟩
166
197
· rw [← isSquare_op_iff, ← inv_inv a]
167
198
exact h.map (MulEquiv.inv' α)
168
- · exact (( isSquare_op_iff a) .mpr h).map (MulEquiv.inv' α).symm
199
+ · exact (isSquare_op_iff.mpr h).map (MulEquiv.inv' α).symm
169
200
#align is_square_inv isSquare_inv
170
201
#align even_neg even_neg
171
202
0 commit comments