number_theory.padics.ring_homs
⟷
Mathlib.NumberTheory.Padics.RingHoms
The following section lists changes to this file in mathlib3 and mathlib4 that occured after the initial port. Most recent changes are shown first. Hovering over a commit will show all commits associated with the same mathlib3 commit.
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(last sync)
mathlib commit https://github.com/leanprover-community/mathlib/commit/65a1391a0106c9204fe45bc73a039f056558cb83
@@ -118,10 +118,10 @@ theorem isUnit_den (r : ℚ) (h : ‖(r : ℚ_[p])‖ ≤ 1) : IsUnit (r.den :
theorem norm_sub_modPart_aux (r : ℚ) (h : ‖(r : ℚ_[p])‖ ≤ 1) :
↑p ∣ r.num - r.num * r.den.gcdA p % p * ↑r.den :=
by
- rw [← ZMod.int_cast_zmod_eq_zero_iff_dvd]
- simp only [Int.cast_natCast, ZMod.nat_cast_mod, Int.cast_mul, Int.cast_sub]
+ rw [← ZMod.intCast_zmod_eq_zero_iff_dvd]
+ simp only [Int.cast_natCast, ZMod.natCast_mod, Int.cast_mul, Int.cast_sub]
have := congr_arg (coe : ℤ → ZMod p) (gcd_eq_gcd_ab r.denom p)
- simp only [Int.cast_natCast, add_zero, Int.cast_add, ZMod.nat_cast_self, Int.cast_mul,
+ simp only [Int.cast_natCast, add_zero, Int.cast_add, ZMod.natCast_self, Int.cast_mul,
MulZeroClass.zero_mul] at this
push_cast
rw [mul_right_comm, mul_assoc, ← this]
@@ -165,7 +165,7 @@ theorem zmod_congr_of_sub_mem_span_aux (n : ℕ) (x : ℤ_[p]) (a b : ℤ)
(hb : x - b ∈ (Ideal.span {p ^ n} : Ideal ℤ_[p])) : (a : ZMod (p ^ n)) = b :=
by
rw [Ideal.mem_span_singleton] at ha hb
- rw [← sub_eq_zero, ← Int.cast_sub, ZMod.int_cast_zmod_eq_zero_iff_dvd, Int.coe_nat_pow]
+ rw [← sub_eq_zero, ← Int.cast_sub, ZMod.intCast_zmod_eq_zero_iff_dvd, Int.coe_nat_pow]
rw [← dvd_neg, neg_sub] at ha
have := dvd_add ha hb
rwa [sub_eq_add_neg, sub_eq_add_neg, add_assoc, neg_add_cancel_left, ← sub_eq_add_neg, ←
@@ -309,7 +309,7 @@ theorem toZMod_spec (z : ℤ_[p]) : z - (toZMod z : ℤ_[p]) ∈ maximalIdeal
dsimp [to_zmod, to_zmod_hom]
rcases exists_eq_add_of_lt hp_prime.1.Pos with ⟨p', rfl⟩
change ↑(ZMod.val _) = _
- simp only [ZMod.val_nat_cast, add_zero, add_def, Nat.cast_inj, zero_add]
+ simp only [ZMod.val_natCast, add_zero, add_def, Nat.cast_inj, zero_add]
apply mod_eq_of_lt
simpa only [zero_add] using zmod_repr_lt_p z
#align padic_int.to_zmod_spec PadicInt.toZMod_spec
@@ -350,7 +350,7 @@ theorem appr_lt (x : ℤ_[p]) (n : ℕ) : x.appr n < p ^ n :=
by
induction' n with n ih generalizing x
· simp only [appr, succ_pos', pow_zero]
- simp only [appr, map_natCast, ZMod.nat_cast_self, RingHom.map_pow, Int.natAbs, RingHom.map_mul]
+ simp only [appr, map_natCast, ZMod.natCast_self, RingHom.map_pow, Int.natAbs, RingHom.map_mul]
have hp : p ^ n < p ^ (n + 1) := by apply pow_lt_pow hp_prime.1.one_lt (lt_add_one n)
split_ifs with h
· apply lt_trans (ih _) hp
@@ -406,7 +406,7 @@ theorem appr_spec (n : ℕ) : ∀ x : ℤ_[p], x - appr x n ∈ (Ideal.span {p ^
· rw [h]; apply dvd_zero
push_cast; rw [sub_add_eq_sub_sub]
obtain ⟨c, hc⟩ := ih x
- simp only [map_natCast, ZMod.nat_cast_self, RingHom.map_pow, RingHom.map_mul, ZMod.nat_cast_val]
+ simp only [map_natCast, ZMod.natCast_self, RingHom.map_pow, RingHom.map_mul, ZMod.natCast_val]
have hc' : c ≠ 0 := by rintro rfl; simp only [MulZeroClass.mul_zero] at hc; contradiction
conv_rhs =>
congr
@@ -456,7 +456,7 @@ theorem ker_toZModPow (n : ℕ) : (toZModPow n : ℤ_[p] →+* ZMod (p ^ n)).ker
· intro h
suffices x.appr n = 0 by convert appr_spec n x; simp only [this, sub_zero, cast_zero]
dsimp [to_zmod_pow, to_zmod_hom] at h
- rw [ZMod.nat_cast_zmod_eq_zero_iff_dvd] at h
+ rw [ZMod.natCast_zmod_eq_zero_iff_dvd] at h
apply eq_zero_of_dvd_of_lt h (appr_lt _ _)
· intro h
rw [← sub_zero x] at h
@@ -476,7 +476,7 @@ theorem zmod_cast_comp_toZModPow (m n : ℕ) (h : m ≤ n) :
rw [RingHom.mem_ker, RingHom.mem_ker]
simp only [Function.comp_apply, ZMod.castHom_apply, RingHom.coe_comp]
simp only [to_zmod_pow, to_zmod_hom, RingHom.coe_mk]
- rw [ZMod.cast_nat_cast (pow_dvd_pow p h),
+ rw [ZMod.cast_natCast (pow_dvd_pow p h),
zmod_congr_of_sub_mem_span m (x.appr n) (x.appr n) (x.appr m)]
· rw [sub_self]; apply Ideal.zero_mem _
· rw [Ideal.mem_span_singleton]
@@ -494,8 +494,8 @@ theorem cast_toZModPow (m n : ℕ) (h : m ≤ n) (x : ℤ_[p]) : ↑(toZModPow n
#align padic_int.cast_to_zmod_pow PadicInt.cast_toZModPow
-/
-#print PadicInt.denseRange_nat_cast /-
-theorem denseRange_nat_cast : DenseRange (Nat.cast : ℕ → ℤ_[p]) :=
+#print PadicInt.denseRange_natCast /-
+theorem denseRange_natCast : DenseRange (Nat.cast : ℕ → ℤ_[p]) :=
by
intro x
rw [Metric.mem_closure_range_iff]
@@ -506,11 +506,11 @@ theorem denseRange_nat_cast : DenseRange (Nat.cast : ℕ → ℤ_[p]) :=
apply lt_of_le_of_lt _ hn
rw [norm_le_pow_iff_mem_span_pow]
apply appr_spec
-#align padic_int.dense_range_nat_cast PadicInt.denseRange_nat_cast
+#align padic_int.dense_range_nat_cast PadicInt.denseRange_natCast
-/
-#print PadicInt.denseRange_int_cast /-
-theorem denseRange_int_cast : DenseRange (Int.cast : ℤ → ℤ_[p]) :=
+#print PadicInt.denseRange_intCast /-
+theorem denseRange_intCast : DenseRange (Int.cast : ℤ → ℤ_[p]) :=
by
intro x
apply dense_range_nat_cast.induction_on x
@@ -519,7 +519,7 @@ theorem denseRange_int_cast : DenseRange (Int.cast : ℤ → ℤ_[p]) :=
change (a.cast : ℤ_[p]) with (a : ℤ).cast
apply subset_closure
exact Set.mem_range_self _
-#align padic_int.dense_range_int_cast PadicInt.denseRange_int_cast
+#align padic_int.dense_range_int_cast PadicInt.denseRange_intCast
-/
end RingHoms
@@ -556,10 +556,10 @@ variable {f}
theorem pow_dvd_nthHom_sub (r : R) (i j : ℕ) (h : i ≤ j) : ↑p ^ i ∣ nthHom f r j - nthHom f r i :=
by
specialize f_compat i j h
- rw [← Int.coe_nat_pow, ← ZMod.int_cast_zmod_eq_zero_iff_dvd, Int.cast_sub]
+ rw [← Int.coe_nat_pow, ← ZMod.intCast_zmod_eq_zero_iff_dvd, Int.cast_sub]
dsimp [nth_hom]
rw [← f_compat, RingHom.comp_apply]
- simp only [ZMod.cast_id, ZMod.castHom_apply, sub_self, ZMod.nat_cast_val, ZMod.int_cast_cast]
+ simp only [ZMod.cast_id, ZMod.castHom_apply, sub_self, ZMod.natCast_val, ZMod.intCast_cast]
#align padic_int.pow_dvd_nth_hom_sub PadicInt.pow_dvd_nthHom_sub
-/
@@ -612,9 +612,9 @@ theorem nthHomSeq_add (r s : R) :
dsimp [nth_hom_seq]
apply lt_of_le_of_lt _ hn
rw [← Int.cast_add, ← Int.cast_sub, ← padicNorm.dvd_iff_norm_le, ←
- ZMod.int_cast_zmod_eq_zero_iff_dvd]
+ ZMod.intCast_zmod_eq_zero_iff_dvd]
dsimp [nth_hom]
- simp only [ZMod.nat_cast_val, RingHom.map_add, Int.cast_sub, ZMod.int_cast_cast, Int.cast_add]
+ simp only [ZMod.natCast_val, RingHom.map_add, Int.cast_sub, ZMod.intCast_cast, Int.cast_add]
rw [ZMod.cast_add (show p ^ n ∣ p ^ j from pow_dvd_pow _ hj), sub_self]
· infer_instance
#align padic_int.nth_hom_seq_add PadicInt.nthHomSeq_add
@@ -631,9 +631,9 @@ theorem nthHomSeq_mul (r s : R) :
dsimp [nth_hom_seq]
apply lt_of_le_of_lt _ hn
rw [← Int.cast_mul, ← Int.cast_sub, ← padicNorm.dvd_iff_norm_le, ←
- ZMod.int_cast_zmod_eq_zero_iff_dvd]
+ ZMod.intCast_zmod_eq_zero_iff_dvd]
dsimp [nth_hom]
- simp only [ZMod.nat_cast_val, RingHom.map_mul, Int.cast_sub, ZMod.int_cast_cast, Int.cast_mul]
+ simp only [ZMod.natCast_val, RingHom.map_mul, Int.cast_sub, ZMod.intCast_cast, Int.cast_mul]
rw [ZMod.cast_mul (show p ^ n ∣ p ^ j from pow_dvd_pow _ hj), sub_self]
· infer_instance
#align padic_int.nth_hom_seq_mul PadicInt.nthHomSeq_mul
@@ -730,7 +730,7 @@ See also `padic_int.lift_unique`.
theorem lift_spec (n : ℕ) : (toZModPow n).comp (lift f_compat) = f n :=
by
ext r
- rw [RingHom.comp_apply, ← ZMod.nat_cast_zmod_val (f n r), ← map_natCast <| to_zmod_pow n, ←
+ rw [RingHom.comp_apply, ← ZMod.natCast_zmod_val (f n r), ← map_natCast <| to_zmod_pow n, ←
sub_eq_zero, ← RingHom.map_sub, ← RingHom.mem_ker, ker_to_zmod_pow]
apply lift_sub_val_mem_span
#align padic_int.lift_spec PadicInt.lift_spec
mathlib commit https://github.com/leanprover-community/mathlib/commit/65a1391a0106c9204fe45bc73a039f056558cb83
@@ -119,9 +119,9 @@ theorem norm_sub_modPart_aux (r : ℚ) (h : ‖(r : ℚ_[p])‖ ≤ 1) :
↑p ∣ r.num - r.num * r.den.gcdA p % p * ↑r.den :=
by
rw [← ZMod.int_cast_zmod_eq_zero_iff_dvd]
- simp only [Int.cast_ofNat, ZMod.nat_cast_mod, Int.cast_mul, Int.cast_sub]
+ simp only [Int.cast_natCast, ZMod.nat_cast_mod, Int.cast_mul, Int.cast_sub]
have := congr_arg (coe : ℤ → ZMod p) (gcd_eq_gcd_ab r.denom p)
- simp only [Int.cast_ofNat, add_zero, Int.cast_add, ZMod.nat_cast_self, Int.cast_mul,
+ simp only [Int.cast_natCast, add_zero, Int.cast_add, ZMod.nat_cast_self, Int.cast_mul,
MulZeroClass.zero_mul] at this
push_cast
rw [mul_right_comm, mul_assoc, ← this]
@@ -144,7 +144,7 @@ theorem norm_sub_modPart (h : ‖(r : ℚ_[p])‖ ≤ 1) : ‖(⟨r, h⟩ - modP
suffices ↑p ∣ r.num - n * r.denom
by
convert (Int.castRingHom ℤ_[p]).map_dvd this
- simp only [sub_mul, Int.cast_ofNat, eq_intCast, Int.cast_mul, sub_left_inj, Int.cast_sub]
+ simp only [sub_mul, Int.cast_natCast, eq_intCast, Int.cast_mul, sub_left_inj, Int.cast_sub]
apply Subtype.coe_injective
simp only [coe_mul, Subtype.coe_mk, coe_nat_cast]
rw_mod_cast [@Rat.mul_den_eq_num r]; rfl
@@ -191,7 +191,7 @@ theorem zmod_congr_of_sub_mem_max_ideal (x : ℤ_[p]) (m n : ℕ) (hm : x - m
specialize this hm hn
apply_fun ZMod.castHom (show p ∣ p ^ 1 by rw [pow_one]) (ZMod p) at this
simp only [map_intCast] at this
- simpa only [Int.cast_ofNat] using this
+ simpa only [Int.cast_natCast] using this
#align padic_int.zmod_congr_of_sub_mem_max_ideal PadicInt.zmod_congr_of_sub_mem_max_ideal
-/
mathlib commit https://github.com/leanprover-community/mathlib/commit/65a1391a0106c9204fe45bc73a039f056558cb83
@@ -3,7 +3,7 @@ Copyright (c) 2020 Johan Commelin, Robert Y. Lewis. All rights reserved.
Released under Apache 2.0 license as described in the file LICENSE.
Authors: Johan Commelin, Robert Y. Lewis
-/
-import Data.Zmod.Basic
+import Data.ZMod.Basic
import NumberTheory.Padics.PadicIntegers
#align_import number_theory.padics.ring_homs from "leanprover-community/mathlib"@"f60c6087a7275b72d5db3c5a1d0e19e35a429c0a"
@@ -110,7 +110,7 @@ theorem isUnit_den (r : ℚ) (h : ‖(r : ℚ_[p])‖ ≤ 1) : IsUnit (r.den :
simp only [← norm_int_lt_one_iff_dvd, ← padic_norm_e_of_padic_int]
norm_cast; exact ⟨key, norm_denom_lt⟩
apply hp_prime.1.not_dvd_one
- rwa [← r.cop.gcd_eq_one, Nat.dvd_gcd_iff, ← Int.coe_nat_dvd_left, ← Int.coe_nat_dvd]
+ rwa [← r.cop.gcd_eq_one, Nat.dvd_gcd_iff, ← Int.natCast_dvd, ← Int.natCast_dvd_natCast]
#align padic_int.is_unit_denom PadicInt.isUnit_den
-/
@@ -129,7 +129,7 @@ theorem norm_sub_modPart_aux (r : ℚ) (h : ‖(r : ℚ_[p])‖ ≤ 1) :
· rw [rdcp.gcd_eq_one]; simp only [mul_one, cast_one, sub_self]
apply coprime.symm
apply (coprime_or_dvd_of_prime hp_prime.1 _).resolve_right
- rw [← Int.coe_nat_dvd, ← norm_int_lt_one_iff_dvd, not_lt]
+ rw [← Int.natCast_dvd_natCast, ← norm_int_lt_one_iff_dvd, not_lt]
apply ge_of_eq
rw [← is_unit_iff]
exact is_unit_denom r h
@@ -361,7 +361,7 @@ theorem appr_lt (x : ℤ_[p]) (n : ℕ) : x.appr n < p ^ n :=
apply Nat.mul_le_mul_left
apply le_pred_of_lt
apply ZMod.val_lt
- · rw [mul_tsub, mul_one, ← pow_succ']
+ · rw [mul_tsub, mul_one, ← pow_succ]
apply add_tsub_cancel_of_le (le_of_lt hp)
#align padic_int.appr_lt PadicInt.appr_lt
-/
@@ -412,7 +412,7 @@ theorem appr_spec (n : ℕ) : ∀ x : ℤ_[p], x - appr x n ∈ (Ideal.span {p ^
congr
simp only [hc]
rw [show (x - ↑(appr x n)).Valuation = (↑p ^ n * c).Valuation by rw [hc]]
- rw [valuation_p_pow_mul _ _ hc', add_sub_cancel', pow_succ', ← mul_sub]
+ rw [valuation_p_pow_mul _ _ hc', add_sub_cancel_left, pow_succ, ← mul_sub]
apply mul_dvd_mul_left
obtain hc0 | hc0 := c.valuation.nat_abs.eq_zero_or_pos
· simp only [hc0, mul_one, pow_zero]
mathlib commit https://github.com/leanprover-community/mathlib/commit/65a1391a0106c9204fe45bc73a039f056558cb83
@@ -99,7 +99,7 @@ theorem isUnit_den (r : ℚ) (h : ‖(r : ℚ_[p])‖ ≤ 1) : IsUnit (r.den :
intro norm_denom_lt
have hr : ‖(r * r.denom : ℚ_[p])‖ = ‖(r.num : ℚ_[p])‖ := by rw_mod_cast [@Rat.mul_den_eq_num r];
rfl
- rw [padicNormE.mul] at hr
+ rw [padicNormE.mul] at hr
have key : ‖(r.num : ℚ_[p])‖ < 1 := by
calc
_ = _ := hr.symm
@@ -122,7 +122,7 @@ theorem norm_sub_modPart_aux (r : ℚ) (h : ‖(r : ℚ_[p])‖ ≤ 1) :
simp only [Int.cast_ofNat, ZMod.nat_cast_mod, Int.cast_mul, Int.cast_sub]
have := congr_arg (coe : ℤ → ZMod p) (gcd_eq_gcd_ab r.denom p)
simp only [Int.cast_ofNat, add_zero, Int.cast_add, ZMod.nat_cast_self, Int.cast_mul,
- MulZeroClass.zero_mul] at this
+ MulZeroClass.zero_mul] at this
push_cast
rw [mul_right_comm, mul_assoc, ← this]
suffices rdcp : r.denom.coprime p
@@ -164,12 +164,12 @@ theorem zmod_congr_of_sub_mem_span_aux (n : ℕ) (x : ℤ_[p]) (a b : ℤ)
(ha : x - a ∈ (Ideal.span {p ^ n} : Ideal ℤ_[p]))
(hb : x - b ∈ (Ideal.span {p ^ n} : Ideal ℤ_[p])) : (a : ZMod (p ^ n)) = b :=
by
- rw [Ideal.mem_span_singleton] at ha hb
+ rw [Ideal.mem_span_singleton] at ha hb
rw [← sub_eq_zero, ← Int.cast_sub, ZMod.int_cast_zmod_eq_zero_iff_dvd, Int.coe_nat_pow]
- rw [← dvd_neg, neg_sub] at ha
+ rw [← dvd_neg, neg_sub] at ha
have := dvd_add ha hb
rwa [sub_eq_add_neg, sub_eq_add_neg, add_assoc, neg_add_cancel_left, ← sub_eq_add_neg, ←
- Int.cast_sub, pow_p_dvd_int_iff] at this
+ Int.cast_sub, pow_p_dvd_int_iff] at this
#align padic_int.zmod_congr_of_sub_mem_span_aux PadicInt.zmod_congr_of_sub_mem_span_aux
-/
@@ -185,12 +185,12 @@ theorem zmod_congr_of_sub_mem_span (n : ℕ) (x : ℤ_[p]) (a b : ℕ)
theorem zmod_congr_of_sub_mem_max_ideal (x : ℤ_[p]) (m n : ℕ) (hm : x - m ∈ maximalIdeal ℤ_[p])
(hn : x - n ∈ maximalIdeal ℤ_[p]) : (m : ZMod p) = n :=
by
- rw [maximal_ideal_eq_span_p] at hm hn
+ rw [maximal_ideal_eq_span_p] at hm hn
have := zmod_congr_of_sub_mem_span_aux 1 x m n
- simp only [pow_one] at this
+ simp only [pow_one] at this
specialize this hm hn
- apply_fun ZMod.castHom (show p ∣ p ^ 1 by rw [pow_one]) (ZMod p) at this
- simp only [map_intCast] at this
+ apply_fun ZMod.castHom (show p ∣ p ^ 1 by rw [pow_one]) (ZMod p) at this
+ simp only [map_intCast] at this
simpa only [Int.cast_ofNat] using this
#align padic_int.zmod_congr_of_sub_mem_max_ideal PadicInt.zmod_congr_of_sub_mem_max_ideal
-/
@@ -203,7 +203,7 @@ theorem exists_mem_range : ∃ n : ℕ, n < p ∧ x - n ∈ maximalIdeal ℤ_[p]
simp only [maximal_ideal_eq_span_p, Ideal.mem_span_singleton, ← norm_lt_one_iff_dvd]
obtain ⟨r, hr⟩ := rat_dense p (x : ℚ_[p]) zero_lt_one
have H : ‖(r : ℚ_[p])‖ ≤ 1 := by
- rw [norm_sub_rev] at hr
+ rw [norm_sub_rev] at hr
calc
_ = ‖(r : ℚ_[p]) - x + x‖ := by ring_nf
_ ≤ _ := (padicNormE.nonarchimedean _ _)
@@ -324,7 +324,7 @@ theorem ker_toZMod : (toZMod : ℤ_[p] →+* ZMod p).ker = maximalIdeal ℤ_[p]
· intro h
simpa only [h, ZMod.cast_zero, sub_zero] using to_zmod_spec x
· intro h
- rw [← sub_zero x] at h
+ rw [← sub_zero x] at h
dsimp [to_zmod, to_zmod_hom]
convert zmod_congr_of_sub_mem_max_ideal x _ 0 _ h
norm_cast; apply sub_zmod_repr_mem
@@ -407,7 +407,7 @@ theorem appr_spec (n : ℕ) : ∀ x : ℤ_[p], x - appr x n ∈ (Ideal.span {p ^
push_cast; rw [sub_add_eq_sub_sub]
obtain ⟨c, hc⟩ := ih x
simp only [map_natCast, ZMod.nat_cast_self, RingHom.map_pow, RingHom.map_mul, ZMod.nat_cast_val]
- have hc' : c ≠ 0 := by rintro rfl; simp only [MulZeroClass.mul_zero] at hc ; contradiction
+ have hc' : c ≠ 0 := by rintro rfl; simp only [MulZeroClass.mul_zero] at hc; contradiction
conv_rhs =>
congr
simp only [hc]
@@ -416,7 +416,7 @@ theorem appr_spec (n : ℕ) : ∀ x : ℤ_[p], x - appr x n ∈ (Ideal.span {p ^
apply mul_dvd_mul_left
obtain hc0 | hc0 := c.valuation.nat_abs.eq_zero_or_pos
· simp only [hc0, mul_one, pow_zero]
- rw [mul_comm, unit_coeff_spec h] at hc
+ rw [mul_comm, unit_coeff_spec h] at hc
suffices c = unit_coeff h
by
rw [← this, ← Ideal.mem_span_singleton, ← maximal_ideal_eq_span_p]
@@ -424,7 +424,7 @@ theorem appr_spec (n : ℕ) : ∀ x : ℤ_[p], x - appr x n ∈ (Ideal.span {p ^
obtain ⟨c, rfl⟩ : IsUnit c :=
by
-- TODO: write a can_lift instance for units
- rw [Int.natAbs_eq_zero] at hc0
+ rw [Int.natAbs_eq_zero] at hc0
rw [is_unit_iff, norm_eq_pow_val hc', hc0, neg_zero, zpow_zero]
rw [DiscreteValuationRing.unit_mul_pow_congr_unit _ _ _ _ _ hc]
exact irreducible_p
@@ -455,11 +455,11 @@ theorem ker_toZModPow (n : ℕ) : (toZModPow n : ℤ_[p] →+* ZMod (p ^ n)).ker
constructor
· intro h
suffices x.appr n = 0 by convert appr_spec n x; simp only [this, sub_zero, cast_zero]
- dsimp [to_zmod_pow, to_zmod_hom] at h
- rw [ZMod.nat_cast_zmod_eq_zero_iff_dvd] at h
+ dsimp [to_zmod_pow, to_zmod_hom] at h
+ rw [ZMod.nat_cast_zmod_eq_zero_iff_dvd] at h
apply eq_zero_of_dvd_of_lt h (appr_lt _ _)
· intro h
- rw [← sub_zero x] at h
+ rw [← sub_zero x] at h
dsimp [to_zmod_pow, to_zmod_hom]
rw [zmod_congr_of_sub_mem_span n x _ 0 _ h, cast_zero]
apply appr_spec
@@ -592,7 +592,7 @@ def nthHomSeq (r : R) : PadicSeq p :=
theorem nthHomSeq_one : nthHomSeq f_compat 1 ≈ 1 :=
by
intro ε hε
- change _ < _ at hε
+ change _ < _ at hε
use 1
intro j hj
haveI : Fact (1 < p ^ j) := ⟨Nat.one_lt_pow _ _ (by linarith) hp_prime.1.one_lt⟩
@@ -655,7 +655,7 @@ theorem limNthHom_spec (r : R) :
by
intro ε hε
obtain ⟨ε', hε'0, hε'⟩ : ∃ v : ℚ, (0 : ℝ) < v ∧ ↑v < ε := exists_rat_btwn hε
- norm_cast at hε'0
+ norm_cast at hε'0
obtain ⟨N, hN⟩ := padicNormE.defn (nth_hom_seq f_compat r) hε'0
use N
intro n hn
@@ -713,7 +713,7 @@ theorem lift_sub_val_mem_span (r : R) (n : ℕ) :
lim_nth_hom_spec f_compat r _
(show (0 : ℝ) < p ^ (-n : ℤ) from Nat.zpow_pos_of_pos hp_prime.1.Pos _)
have := le_of_lt (hk (max n k) (le_max_right _ _))
- rw [norm_le_pow_iff_mem_span_pow] at this
+ rw [norm_le_pow_iff_mem_span_pow] at this
dsimp [lift]
rw [sub_eq_sub_add_sub (lim_nth_hom f_compat r) _ ↑(nth_hom f r (max n k))]
apply Ideal.add_mem _ _ this
mathlib commit https://github.com/leanprover-community/mathlib/commit/65a1391a0106c9204fe45bc73a039f056558cb83
@@ -404,7 +404,7 @@ theorem appr_spec (n : ℕ) : ∀ x : ℤ_[p], x - appr x n ∈ (Ideal.span {p ^
dsimp only [appr]
split_ifs with h
· rw [h]; apply dvd_zero
- push_cast ; rw [sub_add_eq_sub_sub]
+ push_cast; rw [sub_add_eq_sub_sub]
obtain ⟨c, hc⟩ := ih x
simp only [map_natCast, ZMod.nat_cast_self, RingHom.map_pow, RingHom.map_mul, ZMod.nat_cast_val]
have hc' : c ≠ 0 := by rintro rfl; simp only [MulZeroClass.mul_zero] at hc ; contradiction
mathlib commit https://github.com/leanprover-community/mathlib/commit/ce64cd319bb6b3e82f31c2d38e79080d377be451
@@ -3,8 +3,8 @@ Copyright (c) 2020 Johan Commelin, Robert Y. Lewis. All rights reserved.
Released under Apache 2.0 license as described in the file LICENSE.
Authors: Johan Commelin, Robert Y. Lewis
-/
-import Mathbin.Data.Zmod.Basic
-import Mathbin.NumberTheory.Padics.PadicIntegers
+import Data.Zmod.Basic
+import NumberTheory.Padics.PadicIntegers
#align_import number_theory.padics.ring_homs from "leanprover-community/mathlib"@"f60c6087a7275b72d5db3c5a1d0e19e35a429c0a"
mathlib commit https://github.com/leanprover-community/mathlib/commit/32a7e535287f9c73f2e4d2aef306a39190f0b504
@@ -431,7 +431,7 @@ theorem appr_spec (n : ℕ) : ∀ x : ℤ_[p], x - appr x n ∈ (Ideal.span {p ^
· rw [zero_pow hc0]
simp only [sub_zero, ZMod.cast_zero, MulZeroClass.mul_zero]
rw [unit_coeff_spec hc']
- exact (dvd_pow_self (p : ℤ_[p]) hc0.ne').mul_left _
+ exact (dvd_pow_self (p : ℤ_[p]) hc0.ne').hMul_left _
#align padic_int.appr_spec PadicInt.appr_spec
-/
mathlib commit https://github.com/leanprover-community/mathlib/commit/8ea5598db6caeddde6cb734aa179cc2408dbd345
@@ -2,15 +2,12 @@
Copyright (c) 2020 Johan Commelin, Robert Y. Lewis. All rights reserved.
Released under Apache 2.0 license as described in the file LICENSE.
Authors: Johan Commelin, Robert Y. Lewis
-
-! This file was ported from Lean 3 source module number_theory.padics.ring_homs
-! leanprover-community/mathlib commit f60c6087a7275b72d5db3c5a1d0e19e35a429c0a
-! Please do not edit these lines, except to modify the commit id
-! if you have ported upstream changes.
-/
import Mathbin.Data.Zmod.Basic
import Mathbin.NumberTheory.Padics.PadicIntegers
+#align_import number_theory.padics.ring_homs from "leanprover-community/mathlib"@"f60c6087a7275b72d5db3c5a1d0e19e35a429c0a"
+
/-!
# Relating `ℤ_[p]` to `zmod (p ^ n)`
mathlib commit https://github.com/leanprover-community/mathlib/commit/9fb8964792b4237dac6200193a0d533f1b3f7423
@@ -55,8 +55,6 @@ namespace PadicInt
variable {p : ℕ} [hp_prime : Fact p.Prime]
-include hp_prime
-
section RingHoms
/-! ### Ring homomorphisms to `zmod p` and `zmod (p ^ n)` -/
@@ -64,8 +62,6 @@ section RingHoms
variable (p) (r : ℚ)
-omit hp_prime
-
#print PadicInt.modPart /-
/-- `mod_part p r` is an integer that satisfies
`‖(r - mod_part p r : ℚ_[p])‖ < 1` when `‖(r : ℚ_[p])‖ ≤ 1`,
@@ -80,8 +76,6 @@ def modPart : ℤ :=
#align padic_int.mod_part PadicInt.modPart
-/
-include hp_prime
-
variable {p}
#print PadicInt.modPart_lt_p /-
@@ -99,6 +93,7 @@ theorem modPart_nonneg : 0 ≤ modPart p r :=
#align padic_int.mod_part_nonneg PadicInt.modPart_nonneg
-/
+#print PadicInt.isUnit_den /-
theorem isUnit_den (r : ℚ) (h : ‖(r : ℚ_[p])‖ ≤ 1) : IsUnit (r.den : ℤ_[p]) :=
by
rw [is_unit_iff]
@@ -120,7 +115,9 @@ theorem isUnit_den (r : ℚ) (h : ‖(r : ℚ_[p])‖ ≤ 1) : IsUnit (r.den :
apply hp_prime.1.not_dvd_one
rwa [← r.cop.gcd_eq_one, Nat.dvd_gcd_iff, ← Int.coe_nat_dvd_left, ← Int.coe_nat_dvd]
#align padic_int.is_unit_denom PadicInt.isUnit_den
+-/
+#print PadicInt.norm_sub_modPart_aux /-
theorem norm_sub_modPart_aux (r : ℚ) (h : ‖(r : ℚ_[p])‖ ≤ 1) :
↑p ∣ r.num - r.num * r.den.gcdA p % p * ↑r.den :=
by
@@ -140,7 +137,9 @@ theorem norm_sub_modPart_aux (r : ℚ) (h : ‖(r : ℚ_[p])‖ ≤ 1) :
rw [← is_unit_iff]
exact is_unit_denom r h
#align padic_int.norm_sub_mod_part_aux PadicInt.norm_sub_modPart_aux
+-/
+#print PadicInt.norm_sub_modPart /-
theorem norm_sub_modPart (h : ‖(r : ℚ_[p])‖ ≤ 1) : ‖(⟨r, h⟩ - modPart p r : ℤ_[p])‖ < 1 :=
by
let n := mod_part p r
@@ -154,12 +153,16 @@ theorem norm_sub_modPart (h : ‖(r : ℚ_[p])‖ ≤ 1) : ‖(⟨r, h⟩ - modP
rw_mod_cast [@Rat.mul_den_eq_num r]; rfl
exact norm_sub_mod_part_aux r h
#align padic_int.norm_sub_mod_part PadicInt.norm_sub_modPart
+-/
+#print PadicInt.exists_mem_range_of_norm_rat_le_one /-
theorem exists_mem_range_of_norm_rat_le_one (h : ‖(r : ℚ_[p])‖ ≤ 1) :
∃ n : ℤ, 0 ≤ n ∧ n < p ∧ ‖(⟨r, h⟩ - n : ℤ_[p])‖ < 1 :=
⟨modPart p r, modPart_nonneg _, modPart_lt_p _, norm_sub_modPart _ h⟩
#align padic_int.exists_mem_range_of_norm_rat_le_one PadicInt.exists_mem_range_of_norm_rat_le_one
+-/
+#print PadicInt.zmod_congr_of_sub_mem_span_aux /-
theorem zmod_congr_of_sub_mem_span_aux (n : ℕ) (x : ℤ_[p]) (a b : ℤ)
(ha : x - a ∈ (Ideal.span {p ^ n} : Ideal ℤ_[p]))
(hb : x - b ∈ (Ideal.span {p ^ n} : Ideal ℤ_[p])) : (a : ZMod (p ^ n)) = b :=
@@ -171,13 +174,17 @@ theorem zmod_congr_of_sub_mem_span_aux (n : ℕ) (x : ℤ_[p]) (a b : ℤ)
rwa [sub_eq_add_neg, sub_eq_add_neg, add_assoc, neg_add_cancel_left, ← sub_eq_add_neg, ←
Int.cast_sub, pow_p_dvd_int_iff] at this
#align padic_int.zmod_congr_of_sub_mem_span_aux PadicInt.zmod_congr_of_sub_mem_span_aux
+-/
+#print PadicInt.zmod_congr_of_sub_mem_span /-
theorem zmod_congr_of_sub_mem_span (n : ℕ) (x : ℤ_[p]) (a b : ℕ)
(ha : x - a ∈ (Ideal.span {p ^ n} : Ideal ℤ_[p]))
(hb : x - b ∈ (Ideal.span {p ^ n} : Ideal ℤ_[p])) : (a : ZMod (p ^ n)) = b := by
simpa using zmod_congr_of_sub_mem_span_aux n x a b ha hb
#align padic_int.zmod_congr_of_sub_mem_span PadicInt.zmod_congr_of_sub_mem_span
+-/
+#print PadicInt.zmod_congr_of_sub_mem_max_ideal /-
theorem zmod_congr_of_sub_mem_max_ideal (x : ℤ_[p]) (m n : ℕ) (hm : x - m ∈ maximalIdeal ℤ_[p])
(hn : x - n ∈ maximalIdeal ℤ_[p]) : (m : ZMod p) = n :=
by
@@ -189,9 +196,11 @@ theorem zmod_congr_of_sub_mem_max_ideal (x : ℤ_[p]) (m n : ℕ) (hm : x - m
simp only [map_intCast] at this
simpa only [Int.cast_ofNat] using this
#align padic_int.zmod_congr_of_sub_mem_max_ideal PadicInt.zmod_congr_of_sub_mem_max_ideal
+-/
variable (x : ℤ_[p])
+#print PadicInt.exists_mem_range /-
theorem exists_mem_range : ∃ n : ℕ, n < p ∧ x - n ∈ maximalIdeal ℤ_[p] :=
by
simp only [maximal_ideal_eq_span_p, Ideal.mem_span_singleton, ← norm_lt_one_iff_dvd]
@@ -212,6 +221,7 @@ theorem exists_mem_range : ∃ n : ℕ, n < p ∧ x - n ∈ maximalIdeal ℤ_[p]
apply max_lt hr
simpa using hn
#align padic_int.exists_mem_range PadicInt.exists_mem_range
+-/
#print PadicInt.zmodRepr /-
/-- `zmod_repr x` is the unique natural number smaller than `p`
@@ -222,9 +232,11 @@ def zmodRepr : ℕ :=
#align padic_int.zmod_repr PadicInt.zmodRepr
-/
+#print PadicInt.zmodRepr_spec /-
theorem zmodRepr_spec : zmodRepr x < p ∧ x - zmodRepr x ∈ maximalIdeal ℤ_[p] :=
Classical.choose_spec (exists_mem_range x)
#align padic_int.zmod_repr_spec PadicInt.zmodRepr_spec
+-/
#print PadicInt.zmodRepr_lt_p /-
theorem zmodRepr_lt_p : zmodRepr x < p :=
@@ -232,10 +244,13 @@ theorem zmodRepr_lt_p : zmodRepr x < p :=
#align padic_int.zmod_repr_lt_p PadicInt.zmodRepr_lt_p
-/
+#print PadicInt.sub_zmodRepr_mem /-
theorem sub_zmodRepr_mem : x - zmodRepr x ∈ maximalIdeal ℤ_[p] :=
(zmodRepr_spec _).2
#align padic_int.sub_zmod_repr_mem PadicInt.sub_zmodRepr_mem
+-/
+#print PadicInt.toZModHom /-
/-- `to_zmod_hom` is an auxiliary constructor for creating ring homs from `ℤ_[p]` to `zmod v`.
-/
def toZModHom (v : ℕ) (f : ℤ_[p] → ℕ) (f_spec : ∀ x, x - f x ∈ (Ideal.span {v} : Ideal ℤ_[p]))
@@ -269,7 +284,9 @@ def toZModHom (v : ℕ) (f : ℤ_[p] → ℕ) (f_spec : ∀ x, x - f x ∈ (Idea
rw [cast_mul]
ring
#align padic_int.to_zmod_hom PadicInt.toZModHom
+-/
+#print PadicInt.toZMod /-
/-- `to_zmod` is a ring hom from `ℤ_[p]` to `zmod p`,
with the equality `to_zmod x = (zmod_repr x : zmod p)`.
-/
@@ -277,7 +294,9 @@ def toZMod : ℤ_[p] →+* ZMod p :=
toZModHom p zmodRepr (by rw [← maximal_ideal_eq_span_p]; exact sub_zmod_repr_mem)
(by rw [← maximal_ideal_eq_span_p]; exact zmod_congr_of_sub_mem_max_ideal)
#align padic_int.to_zmod PadicInt.toZMod
+-/
+#print PadicInt.toZMod_spec /-
/-- `z - (to_zmod z : ℤ_[p])` is contained in the maximal ideal of `ℤ_[p]`, for every `z : ℤ_[p]`.
The coercion from `zmod p` to `ℤ_[p]` is `zmod.has_coe_t`,
@@ -297,7 +316,9 @@ theorem toZMod_spec (z : ℤ_[p]) : z - (toZMod z : ℤ_[p]) ∈ maximalIdeal
apply mod_eq_of_lt
simpa only [zero_add] using zmod_repr_lt_p z
#align padic_int.to_zmod_spec PadicInt.toZMod_spec
+-/
+#print PadicInt.ker_toZMod /-
theorem ker_toZMod : (toZMod : ℤ_[p] →+* ZMod p).ker = maximalIdeal ℤ_[p] :=
by
ext x
@@ -311,6 +332,7 @@ theorem ker_toZMod : (toZMod : ℤ_[p] →+* ZMod p).ker = maximalIdeal ℤ_[p]
convert zmod_congr_of_sub_mem_max_ideal x _ 0 _ h
norm_cast; apply sub_zmod_repr_mem
#align padic_int.ker_to_zmod PadicInt.ker_toZMod
+-/
#print PadicInt.appr /-
/-- `appr n x` gives a value `v : ℕ` such that `x` and `↑v : ℤ_p` are congruent mod `p^n`.
@@ -375,6 +397,7 @@ theorem dvd_appr_sub_appr (x : ℤ_[p]) (m n : ℕ) (h : m ≤ n) : p ^ m ∣ x.
#align padic_int.dvd_appr_sub_appr PadicInt.dvd_appr_sub_appr
-/
+#print PadicInt.appr_spec /-
theorem appr_spec (n : ℕ) : ∀ x : ℤ_[p], x - appr x n ∈ (Ideal.span {p ^ n} : Ideal ℤ_[p]) :=
by
simp only [Ideal.mem_span_singleton]
@@ -413,7 +436,9 @@ theorem appr_spec (n : ℕ) : ∀ x : ℤ_[p], x - appr x n ∈ (Ideal.span {p ^
rw [unit_coeff_spec hc']
exact (dvd_pow_self (p : ℤ_[p]) hc0.ne').mul_left _
#align padic_int.appr_spec PadicInt.appr_spec
+-/
+#print PadicInt.toZModPow /-
/-- A ring hom from `ℤ_[p]` to `zmod (p^n)`, with underlying function `padic_int.appr n`. -/
def toZModPow (n : ℕ) : ℤ_[p] →+* ZMod (p ^ n) :=
toZModHom (p ^ n) (fun x => appr x n) (by intros; convert appr_spec n _ using 1; simp)
@@ -423,7 +448,9 @@ def toZModPow (n : ℕ) : ℤ_[p] →+* ZMod (p ^ n) :=
· simpa using ha
· simpa using hb)
#align padic_int.to_zmod_pow PadicInt.toZModPow
+-/
+#print PadicInt.ker_toZModPow /-
theorem ker_toZModPow (n : ℕ) : (toZModPow n : ℤ_[p] →+* ZMod (p ^ n)).ker = Ideal.span {p ^ n} :=
by
ext x
@@ -440,7 +467,9 @@ theorem ker_toZModPow (n : ℕ) : (toZModPow n : ℤ_[p] →+* ZMod (p ^ n)).ker
rw [zmod_congr_of_sub_mem_span n x _ 0 _ h, cast_zero]
apply appr_spec
#align padic_int.ker_to_zmod_pow PadicInt.ker_toZModPow
+-/
+#print PadicInt.zmod_cast_comp_toZModPow /-
@[simp]
theorem zmod_cast_comp_toZModPow (m n : ℕ) (h : m ≤ n) :
(ZMod.castHom (pow_dvd_pow p h) (ZMod (p ^ m))).comp (toZModPow n) = toZModPow m :=
@@ -459,12 +488,16 @@ theorem zmod_cast_comp_toZModPow (m n : ℕ) (h : m ≤ n) :
rw [← Nat.cast_sub (appr_mono _ h), hc, Nat.cast_mul, Nat.cast_pow]
· infer_instance
#align padic_int.zmod_cast_comp_to_zmod_pow PadicInt.zmod_cast_comp_toZModPow
+-/
+#print PadicInt.cast_toZModPow /-
@[simp]
theorem cast_toZModPow (m n : ℕ) (h : m ≤ n) (x : ℤ_[p]) : ↑(toZModPow n x) = toZModPow m x := by
rw [← zmod_cast_comp_to_zmod_pow _ _ h]; rfl
#align padic_int.cast_to_zmod_pow PadicInt.cast_toZModPow
+-/
+#print PadicInt.denseRange_nat_cast /-
theorem denseRange_nat_cast : DenseRange (Nat.cast : ℕ → ℤ_[p]) :=
by
intro x
@@ -477,7 +510,9 @@ theorem denseRange_nat_cast : DenseRange (Nat.cast : ℕ → ℤ_[p]) :=
rw [norm_le_pow_iff_mem_span_pow]
apply appr_spec
#align padic_int.dense_range_nat_cast PadicInt.denseRange_nat_cast
+-/
+#print PadicInt.denseRange_int_cast /-
theorem denseRange_int_cast : DenseRange (Int.cast : ℤ → ℤ_[p]) :=
by
intro x
@@ -488,6 +523,7 @@ theorem denseRange_int_cast : DenseRange (Int.cast : ℤ → ℤ_[p]) :=
apply subset_closure
exact Set.mem_range_self _
#align padic_int.dense_range_int_cast PadicInt.denseRange_int_cast
+-/
end RingHoms
@@ -501,8 +537,6 @@ open CauSeq PadicSeq
variable {R : Type _} [NonAssocSemiring R] (f : ∀ k : ℕ, R →+* ZMod (p ^ k))
(f_compat : ∀ (k1 k2) (hk : k1 ≤ k2), (ZMod.castHom (pow_dvd_pow p hk) _).comp (f k2) = f k1)
-omit hp_prime
-
#print PadicInt.nthHom /-
/-- Given a family of ring homs `f : Π n : ℕ, R →+* zmod (p ^ n)`,
`nth_hom f r` is an integer-valued sequence
@@ -513,16 +547,15 @@ def nthHom (r : R) : ℕ → ℤ := fun n => (f n r : ZMod (p ^ n)).val
#align padic_int.nth_hom PadicInt.nthHom
-/
+#print PadicInt.nthHom_zero /-
@[simp]
theorem nthHom_zero : nthHom f 0 = 0 := by simp [nth_hom] <;> rfl
#align padic_int.nth_hom_zero PadicInt.nthHom_zero
+-/
variable {f}
-include hp_prime
-
-include f_compat
-
+#print PadicInt.pow_dvd_nthHom_sub /-
theorem pow_dvd_nthHom_sub (r : R) (i j : ℕ) (h : i ≤ j) : ↑p ^ i ∣ nthHom f r j - nthHom f r i :=
by
specialize f_compat i j h
@@ -531,7 +564,9 @@ theorem pow_dvd_nthHom_sub (r : R) (i j : ℕ) (h : i ≤ j) : ↑p ^ i ∣ nthH
rw [← f_compat, RingHom.comp_apply]
simp only [ZMod.cast_id, ZMod.castHom_apply, sub_self, ZMod.nat_cast_val, ZMod.int_cast_cast]
#align padic_int.pow_dvd_nth_hom_sub PadicInt.pow_dvd_nthHom_sub
+-/
+#print PadicInt.isCauSeq_nthHom /-
theorem isCauSeq_nthHom (r : R) : IsCauSeq (padicNorm p) fun n => nthHom f r n :=
by
intro ε hε
@@ -543,6 +578,7 @@ theorem isCauSeq_nthHom (r : R) : IsCauSeq (padicNorm p) fun n => nthHom f r n :
rw [← padicNorm.dvd_iff_norm_le]
exact_mod_cast pow_dvd_nth_hom_sub f_compat r k j hj
#align padic_int.is_cau_seq_nth_hom PadicInt.isCauSeq_nthHom
+-/
#print PadicInt.nthHomSeq /-
/-- `nth_hom_seq f_compat r` bundles `padic_int.nth_hom f r`
@@ -554,6 +590,7 @@ def nthHomSeq (r : R) : PadicSeq p :=
#align padic_int.nth_hom_seq PadicInt.nthHomSeq
-/
+#print PadicInt.nthHomSeq_one /-
-- this lemma ran into issues after changing to `ne_zero` and I'm not sure why.
theorem nthHomSeq_one : nthHomSeq f_compat 1 ≈ 1 :=
by
@@ -565,7 +602,9 @@ theorem nthHomSeq_one : nthHomSeq f_compat 1 ≈ 1 :=
suffices ((1 : ZMod (p ^ j)) : ℚ) = 1 by simp [nth_hom_seq, nth_hom, this, hε]
rw [ZMod.cast_eq_val, ZMod.val_one, Nat.cast_one]
#align padic_int.nth_hom_seq_one PadicInt.nthHomSeq_one
+-/
+#print PadicInt.nthHomSeq_add /-
theorem nthHomSeq_add (r s : R) :
nthHomSeq f_compat (r + s) ≈ nthHomSeq f_compat r + nthHomSeq f_compat s :=
by
@@ -582,7 +621,9 @@ theorem nthHomSeq_add (r s : R) :
rw [ZMod.cast_add (show p ^ n ∣ p ^ j from pow_dvd_pow _ hj), sub_self]
· infer_instance
#align padic_int.nth_hom_seq_add PadicInt.nthHomSeq_add
+-/
+#print PadicInt.nthHomSeq_mul /-
theorem nthHomSeq_mul (r s : R) :
nthHomSeq f_compat (r * s) ≈ nthHomSeq f_compat r * nthHomSeq f_compat s :=
by
@@ -599,6 +640,7 @@ theorem nthHomSeq_mul (r s : R) :
rw [ZMod.cast_mul (show p ^ n ∣ p ^ j from pow_dvd_pow _ hj), sub_self]
· infer_instance
#align padic_int.nth_hom_seq_mul PadicInt.nthHomSeq_mul
+-/
#print PadicInt.limNthHom /-
/--
@@ -610,6 +652,7 @@ def limNthHom (r : R) : ℤ_[p] :=
#align padic_int.lim_nth_hom PadicInt.limNthHom
-/
+#print PadicInt.limNthHom_spec /-
theorem limNthHom_spec (r : R) :
∀ ε : ℝ, 0 < ε → ∃ N : ℕ, ∀ n ≥ N, ‖limNthHom f_compat r - nthHom f r n‖ < ε :=
by
@@ -624,24 +667,34 @@ theorem limNthHom_spec (r : R) :
norm_cast
exact hN _ hn
#align padic_int.lim_nth_hom_spec PadicInt.limNthHom_spec
+-/
+#print PadicInt.limNthHom_zero /-
theorem limNthHom_zero : limNthHom f_compat 0 = 0 := by simp [lim_nth_hom] <;> rfl
#align padic_int.lim_nth_hom_zero PadicInt.limNthHom_zero
+-/
+#print PadicInt.limNthHom_one /-
theorem limNthHom_one : limNthHom f_compat 1 = 1 :=
Subtype.ext <| Quot.sound <| nthHomSeq_one _
#align padic_int.lim_nth_hom_one PadicInt.limNthHom_one
+-/
+#print PadicInt.limNthHom_add /-
theorem limNthHom_add (r s : R) :
limNthHom f_compat (r + s) = limNthHom f_compat r + limNthHom f_compat s :=
Subtype.ext <| Quot.sound <| nthHomSeq_add _ _ _
#align padic_int.lim_nth_hom_add PadicInt.limNthHom_add
+-/
+#print PadicInt.limNthHom_mul /-
theorem limNthHom_mul (r s : R) :
limNthHom f_compat (r * s) = limNthHom f_compat r * limNthHom f_compat s :=
Subtype.ext <| Quot.sound <| nthHomSeq_mul _ _ _
#align padic_int.lim_nth_hom_mul PadicInt.limNthHom_mul
+-/
+#print PadicInt.lift /-
-- TODO: generalize this to arbitrary complete discrete valuation rings
/-- `lift f_compat` is the limit of a sequence `f` of compatible ring homs `R →+* zmod (p^k)`,
with the equality `lift f_compat r = padic_int.lim_nth_hom f_compat r`.
@@ -653,9 +706,9 @@ def lift : R →+* ℤ_[p] where
map_zero' := limNthHom_zero f_compat
map_add' := limNthHom_add f_compat
#align padic_int.lift PadicInt.lift
+-/
-omit f_compat
-
+#print PadicInt.lift_sub_val_mem_span /-
theorem lift_sub_val_mem_span (r : R) (n : ℕ) :
lift f_compat r - (f n r).val ∈ (Ideal.span {↑p ^ n} : Ideal ℤ_[p]) :=
by
@@ -671,6 +724,7 @@ theorem lift_sub_val_mem_span (r : R) (n : ℕ) :
simpa only [eq_intCast, RingHom.map_pow, Int.cast_sub] using
(Int.castRingHom ℤ_[p]).map_dvd (pow_dvd_nth_hom_sub f_compat r n (max n k) (le_max_left _ _))
#align padic_int.lift_sub_val_mem_span PadicInt.lift_sub_val_mem_span
+-/
#print PadicInt.lift_spec /-
/-- One part of the universal property of `ℤ_[p]` as a projective limit.
@@ -685,6 +739,7 @@ theorem lift_spec (n : ℕ) : (toZModPow n).comp (lift f_compat) = f n :=
#align padic_int.lift_spec PadicInt.lift_spec
-/
+#print PadicInt.lift_unique /-
/-- One part of the universal property of `ℤ_[p]` as a projective limit.
See also `padic_int.lift_spec`.
-/
@@ -698,7 +753,9 @@ theorem lift_unique (g : R →+* ℤ_[p]) (hg : ∀ n, (toZModPow n).comp g = f
rw [dist_eq_norm, norm_le_pow_iff_mem_span_pow, ← ker_to_zmod_pow, RingHom.mem_ker,
RingHom.map_sub, ← RingHom.comp_apply, ← RingHom.comp_apply, lift_spec, hg, sub_self]
#align padic_int.lift_unique PadicInt.lift_unique
+-/
+#print PadicInt.lift_self /-
@[simp]
theorem lift_self (z : ℤ_[p]) : @lift p _ ℤ_[p] _ toZModPow zmod_cast_comp_toZModPow z = z :=
by
@@ -706,9 +763,11 @@ theorem lift_self (z : ℤ_[p]) : @lift p _ ℤ_[p] _ toZModPow zmod_cast_comp_t
rw [@lift_unique p _ ℤ_[p] _ _ zmod_cast_comp_to_zmod_pow (RingHom.id ℤ_[p])]
intro; rw [RingHom.comp_id]
#align padic_int.lift_self PadicInt.lift_self
+-/
end lift
+#print PadicInt.ext_of_toZModPow /-
theorem ext_of_toZModPow {x y : ℤ_[p]} : (∀ n, toZModPow n x = toZModPow n y) ↔ x = y :=
by
constructor
@@ -717,7 +776,9 @@ theorem ext_of_toZModPow {x y : ℤ_[p]} : (∀ n, toZModPow n x = toZModPow n y
simp [lift, lim_nth_hom, nth_hom, h]
· rintro rfl _; rfl
#align padic_int.ext_of_to_zmod_pow PadicInt.ext_of_toZModPow
+-/
+#print PadicInt.toZModPow_eq_iff_ext /-
theorem toZModPow_eq_iff_ext {R : Type _} [NonAssocSemiring R] {g g' : R →+* ℤ_[p]} :
(∀ n, (toZModPow n).comp g = (toZModPow n).comp g') ↔ g = g' :=
by
@@ -730,6 +791,7 @@ theorem toZModPow_eq_iff_ext {R : Type _} [NonAssocSemiring R] {g g' : R →+*
rw [hg n]
· rintro rfl _; rfl
#align padic_int.to_zmod_pow_eq_iff_ext PadicInt.toZModPow_eq_iff_ext
+-/
end PadicInt
mathlib commit https://github.com/leanprover-community/mathlib/commit/7e5137f579de09a059a5ce98f364a04e221aabf0
@@ -113,7 +113,6 @@ theorem isUnit_den (r : ℚ) (h : ‖(r : ℚ_[p])‖ ≤ 1) : IsUnit (r.den :
_ = _ := hr.symm
_ < 1 * 1 := (mul_lt_mul' h norm_denom_lt (norm_nonneg _) zero_lt_one)
_ = 1 := mul_one 1
-
have : ↑p ∣ r.num ∧ (p : ℤ) ∣ r.denom :=
by
simp only [← norm_int_lt_one_iff_dvd, ← padic_norm_e_of_padic_int]
@@ -203,7 +202,6 @@ theorem exists_mem_range : ∃ n : ℕ, n < p ∧ x - n ∈ maximalIdeal ℤ_[p]
_ = ‖(r : ℚ_[p]) - x + x‖ := by ring_nf
_ ≤ _ := (padicNormE.nonarchimedean _ _)
_ ≤ _ := max_le (le_of_lt hr) x.2
-
obtain ⟨n, hzn, hnp, hn⟩ := exists_mem_range_of_norm_rat_le_one r H
lift n to ℕ using hzn
use n
@@ -340,7 +338,6 @@ theorem appr_lt (x : ℤ_[p]) (n : ℕ) : x.appr n < p ^ n :=
· calc
_ < p ^ n + p ^ n * (p - 1) := _
_ = p ^ (n + 1) := _
-
· apply add_lt_add_of_lt_of_le (ih _)
apply Nat.mul_le_mul_left
apply le_pred_of_lt
mathlib commit https://github.com/leanprover-community/mathlib/commit/5f25c089cb34db4db112556f23c50d12da81b297
@@ -148,7 +148,7 @@ theorem norm_sub_modPart (h : ‖(r : ℚ_[p])‖ ≤ 1) : ‖(⟨r, h⟩ - modP
rw [norm_lt_one_iff_dvd, ← (is_unit_denom r h).dvd_mul_right]
suffices ↑p ∣ r.num - n * r.denom
by
- convert(Int.castRingHom ℤ_[p]).map_dvd this
+ convert (Int.castRingHom ℤ_[p]).map_dvd this
simp only [sub_mul, Int.cast_ofNat, eq_intCast, Int.cast_mul, sub_left_inj, Int.cast_sub]
apply Subtype.coe_injective
simp only [coe_mul, Subtype.coe_mk, coe_nat_cast]
@@ -186,7 +186,7 @@ theorem zmod_congr_of_sub_mem_max_ideal (x : ℤ_[p]) (m n : ℕ) (hm : x - m
have := zmod_congr_of_sub_mem_span_aux 1 x m n
simp only [pow_one] at this
specialize this hm hn
- apply_fun ZMod.castHom (show p ∣ p ^ 1 by rw [pow_one]) (ZMod p) at this
+ apply_fun ZMod.castHom (show p ∣ p ^ 1 by rw [pow_one]) (ZMod p) at this
simp only [map_intCast] at this
simpa only [Int.cast_ofNat] using this
#align padic_int.zmod_congr_of_sub_mem_max_ideal PadicInt.zmod_congr_of_sub_mem_max_ideal
@@ -618,7 +618,7 @@ theorem limNthHom_spec (r : R) :
by
intro ε hε
obtain ⟨ε', hε'0, hε'⟩ : ∃ v : ℚ, (0 : ℝ) < v ∧ ↑v < ε := exists_rat_btwn hε
- norm_cast at hε'0
+ norm_cast at hε'0
obtain ⟨N, hN⟩ := padicNormE.defn (nth_hom_seq f_compat r) hε'0
use N
intro n hn
mathlib commit https://github.com/leanprover-community/mathlib/commit/cca40788df1b8755d5baf17ab2f27dacc2e17acb
@@ -107,7 +107,7 @@ theorem isUnit_den (r : ℚ) (h : ‖(r : ℚ_[p])‖ ≤ 1) : IsUnit (r.den :
intro norm_denom_lt
have hr : ‖(r * r.denom : ℚ_[p])‖ = ‖(r.num : ℚ_[p])‖ := by rw_mod_cast [@Rat.mul_den_eq_num r];
rfl
- rw [padicNormE.mul] at hr
+ rw [padicNormE.mul] at hr
have key : ‖(r.num : ℚ_[p])‖ < 1 := by
calc
_ = _ := hr.symm
@@ -129,7 +129,7 @@ theorem norm_sub_modPart_aux (r : ℚ) (h : ‖(r : ℚ_[p])‖ ≤ 1) :
simp only [Int.cast_ofNat, ZMod.nat_cast_mod, Int.cast_mul, Int.cast_sub]
have := congr_arg (coe : ℤ → ZMod p) (gcd_eq_gcd_ab r.denom p)
simp only [Int.cast_ofNat, add_zero, Int.cast_add, ZMod.nat_cast_self, Int.cast_mul,
- MulZeroClass.zero_mul] at this
+ MulZeroClass.zero_mul] at this
push_cast
rw [mul_right_comm, mul_assoc, ← this]
suffices rdcp : r.denom.coprime p
@@ -165,12 +165,12 @@ theorem zmod_congr_of_sub_mem_span_aux (n : ℕ) (x : ℤ_[p]) (a b : ℤ)
(ha : x - a ∈ (Ideal.span {p ^ n} : Ideal ℤ_[p]))
(hb : x - b ∈ (Ideal.span {p ^ n} : Ideal ℤ_[p])) : (a : ZMod (p ^ n)) = b :=
by
- rw [Ideal.mem_span_singleton] at ha hb
+ rw [Ideal.mem_span_singleton] at ha hb
rw [← sub_eq_zero, ← Int.cast_sub, ZMod.int_cast_zmod_eq_zero_iff_dvd, Int.coe_nat_pow]
- rw [← dvd_neg, neg_sub] at ha
+ rw [← dvd_neg, neg_sub] at ha
have := dvd_add ha hb
rwa [sub_eq_add_neg, sub_eq_add_neg, add_assoc, neg_add_cancel_left, ← sub_eq_add_neg, ←
- Int.cast_sub, pow_p_dvd_int_iff] at this
+ Int.cast_sub, pow_p_dvd_int_iff] at this
#align padic_int.zmod_congr_of_sub_mem_span_aux PadicInt.zmod_congr_of_sub_mem_span_aux
theorem zmod_congr_of_sub_mem_span (n : ℕ) (x : ℤ_[p]) (a b : ℕ)
@@ -182,12 +182,12 @@ theorem zmod_congr_of_sub_mem_span (n : ℕ) (x : ℤ_[p]) (a b : ℕ)
theorem zmod_congr_of_sub_mem_max_ideal (x : ℤ_[p]) (m n : ℕ) (hm : x - m ∈ maximalIdeal ℤ_[p])
(hn : x - n ∈ maximalIdeal ℤ_[p]) : (m : ZMod p) = n :=
by
- rw [maximal_ideal_eq_span_p] at hm hn
+ rw [maximal_ideal_eq_span_p] at hm hn
have := zmod_congr_of_sub_mem_span_aux 1 x m n
- simp only [pow_one] at this
+ simp only [pow_one] at this
specialize this hm hn
- apply_fun ZMod.castHom (show p ∣ p ^ 1 by rw [pow_one]) (ZMod p) at this
- simp only [map_intCast] at this
+ apply_fun ZMod.castHom (show p ∣ p ^ 1 by rw [pow_one]) (ZMod p) at this
+ simp only [map_intCast] at this
simpa only [Int.cast_ofNat] using this
#align padic_int.zmod_congr_of_sub_mem_max_ideal PadicInt.zmod_congr_of_sub_mem_max_ideal
@@ -198,7 +198,7 @@ theorem exists_mem_range : ∃ n : ℕ, n < p ∧ x - n ∈ maximalIdeal ℤ_[p]
simp only [maximal_ideal_eq_span_p, Ideal.mem_span_singleton, ← norm_lt_one_iff_dvd]
obtain ⟨r, hr⟩ := rat_dense p (x : ℚ_[p]) zero_lt_one
have H : ‖(r : ℚ_[p])‖ ≤ 1 := by
- rw [norm_sub_rev] at hr
+ rw [norm_sub_rev] at hr
calc
_ = ‖(r : ℚ_[p]) - x + x‖ := by ring_nf
_ ≤ _ := (padicNormE.nonarchimedean _ _)
@@ -208,7 +208,7 @@ theorem exists_mem_range : ∃ n : ℕ, n < p ∧ x - n ∈ maximalIdeal ℤ_[p]
lift n to ℕ using hzn
use n
constructor; · exact_mod_cast hnp
- simp only [norm_def, coe_sub, Subtype.coe_mk, coe_nat_cast] at hn⊢
+ simp only [norm_def, coe_sub, Subtype.coe_mk, coe_nat_cast] at hn ⊢
rw [show (x - n : ℚ_[p]) = x - r + (r - n) by ring]
apply lt_of_le_of_lt (padicNormE.nonarchimedean _ _)
apply max_lt hr
@@ -308,7 +308,7 @@ theorem ker_toZMod : (toZMod : ℤ_[p] →+* ZMod p).ker = maximalIdeal ℤ_[p]
· intro h
simpa only [h, ZMod.cast_zero, sub_zero] using to_zmod_spec x
· intro h
- rw [← sub_zero x] at h
+ rw [← sub_zero x] at h
dsimp [to_zmod, to_zmod_hom]
convert zmod_congr_of_sub_mem_max_ideal x _ 0 _ h
norm_cast; apply sub_zmod_repr_mem
@@ -390,7 +390,7 @@ theorem appr_spec (n : ℕ) : ∀ x : ℤ_[p], x - appr x n ∈ (Ideal.span {p ^
push_cast ; rw [sub_add_eq_sub_sub]
obtain ⟨c, hc⟩ := ih x
simp only [map_natCast, ZMod.nat_cast_self, RingHom.map_pow, RingHom.map_mul, ZMod.nat_cast_val]
- have hc' : c ≠ 0 := by rintro rfl; simp only [MulZeroClass.mul_zero] at hc; contradiction
+ have hc' : c ≠ 0 := by rintro rfl; simp only [MulZeroClass.mul_zero] at hc ; contradiction
conv_rhs =>
congr
simp only [hc]
@@ -399,7 +399,7 @@ theorem appr_spec (n : ℕ) : ∀ x : ℤ_[p], x - appr x n ∈ (Ideal.span {p ^
apply mul_dvd_mul_left
obtain hc0 | hc0 := c.valuation.nat_abs.eq_zero_or_pos
· simp only [hc0, mul_one, pow_zero]
- rw [mul_comm, unit_coeff_spec h] at hc
+ rw [mul_comm, unit_coeff_spec h] at hc
suffices c = unit_coeff h
by
rw [← this, ← Ideal.mem_span_singleton, ← maximal_ideal_eq_span_p]
@@ -407,7 +407,7 @@ theorem appr_spec (n : ℕ) : ∀ x : ℤ_[p], x - appr x n ∈ (Ideal.span {p ^
obtain ⟨c, rfl⟩ : IsUnit c :=
by
-- TODO: write a can_lift instance for units
- rw [Int.natAbs_eq_zero] at hc0
+ rw [Int.natAbs_eq_zero] at hc0
rw [is_unit_iff, norm_eq_pow_val hc', hc0, neg_zero, zpow_zero]
rw [DiscreteValuationRing.unit_mul_pow_congr_unit _ _ _ _ _ hc]
exact irreducible_p
@@ -419,7 +419,7 @@ theorem appr_spec (n : ℕ) : ∀ x : ℤ_[p], x - appr x n ∈ (Ideal.span {p ^
/-- A ring hom from `ℤ_[p]` to `zmod (p^n)`, with underlying function `padic_int.appr n`. -/
def toZModPow (n : ℕ) : ℤ_[p] →+* ZMod (p ^ n) :=
- toZModHom (p ^ n) (fun x => appr x n) (by intros ; convert appr_spec n _ using 1; simp)
+ toZModHom (p ^ n) (fun x => appr x n) (by intros; convert appr_spec n _ using 1; simp)
(by
intro x a b ha hb
apply zmod_congr_of_sub_mem_span n x a b
@@ -434,11 +434,11 @@ theorem ker_toZModPow (n : ℕ) : (toZModPow n : ℤ_[p] →+* ZMod (p ^ n)).ker
constructor
· intro h
suffices x.appr n = 0 by convert appr_spec n x; simp only [this, sub_zero, cast_zero]
- dsimp [to_zmod_pow, to_zmod_hom] at h
- rw [ZMod.nat_cast_zmod_eq_zero_iff_dvd] at h
+ dsimp [to_zmod_pow, to_zmod_hom] at h
+ rw [ZMod.nat_cast_zmod_eq_zero_iff_dvd] at h
apply eq_zero_of_dvd_of_lt h (appr_lt _ _)
· intro h
- rw [← sub_zero x] at h
+ rw [← sub_zero x] at h
dsimp [to_zmod_pow, to_zmod_hom]
rw [zmod_congr_of_sub_mem_span n x _ 0 _ h, cast_zero]
apply appr_spec
@@ -561,7 +561,7 @@ def nthHomSeq (r : R) : PadicSeq p :=
theorem nthHomSeq_one : nthHomSeq f_compat 1 ≈ 1 :=
by
intro ε hε
- change _ < _ at hε
+ change _ < _ at hε
use 1
intro j hj
haveI : Fact (1 < p ^ j) := ⟨Nat.one_lt_pow _ _ (by linarith) hp_prime.1.one_lt⟩
@@ -618,7 +618,7 @@ theorem limNthHom_spec (r : R) :
by
intro ε hε
obtain ⟨ε', hε'0, hε'⟩ : ∃ v : ℚ, (0 : ℝ) < v ∧ ↑v < ε := exists_rat_btwn hε
- norm_cast at hε'0
+ norm_cast at hε'0
obtain ⟨N, hN⟩ := padicNormE.defn (nth_hom_seq f_compat r) hε'0
use N
intro n hn
@@ -666,7 +666,7 @@ theorem lift_sub_val_mem_span (r : R) (n : ℕ) :
lim_nth_hom_spec f_compat r _
(show (0 : ℝ) < p ^ (-n : ℤ) from Nat.zpow_pos_of_pos hp_prime.1.Pos _)
have := le_of_lt (hk (max n k) (le_max_right _ _))
- rw [norm_le_pow_iff_mem_span_pow] at this
+ rw [norm_le_pow_iff_mem_span_pow] at this
dsimp [lift]
rw [sub_eq_sub_add_sub (lim_nth_hom f_compat r) _ ↑(nth_hom f r (max n k))]
apply Ideal.add_mem _ _ this
@@ -707,7 +707,7 @@ theorem lift_self (z : ℤ_[p]) : @lift p _ ℤ_[p] _ toZModPow zmod_cast_comp_t
by
show _ = RingHom.id _ z
rw [@lift_unique p _ ℤ_[p] _ _ zmod_cast_comp_to_zmod_pow (RingHom.id ℤ_[p])]
- intro ; rw [RingHom.comp_id]
+ intro; rw [RingHom.comp_id]
#align padic_int.lift_self PadicInt.lift_self
end lift
mathlib commit https://github.com/leanprover-community/mathlib/commit/cca40788df1b8755d5baf17ab2f27dacc2e17acb
@@ -4,7 +4,7 @@ Released under Apache 2.0 license as described in the file LICENSE.
Authors: Johan Commelin, Robert Y. Lewis
! This file was ported from Lean 3 source module number_theory.padics.ring_homs
-! leanprover-community/mathlib commit 565eb991e264d0db702722b4bde52ee5173c9950
+! leanprover-community/mathlib commit f60c6087a7275b72d5db3c5a1d0e19e35a429c0a
! Please do not edit these lines, except to modify the commit id
! if you have ported upstream changes.
-/
@@ -15,6 +15,9 @@ import Mathbin.NumberTheory.Padics.PadicIntegers
# Relating `ℤ_[p]` to `zmod (p ^ n)`
+> THIS FILE IS SYNCHRONIZED WITH MATHLIB4.
+> Any changes to this file require a corresponding PR to mathlib4.
+
In this file we establish connections between the `p`-adic integers $\mathbb{Z}_p$
and the integers modulo powers of `p`, $\mathbb{Z}/p^n\mathbb{Z}$.
@@ -119,7 +122,7 @@ theorem isUnit_den (r : ℚ) (h : ‖(r : ℚ_[p])‖ ≤ 1) : IsUnit (r.den :
rwa [← r.cop.gcd_eq_one, Nat.dvd_gcd_iff, ← Int.coe_nat_dvd_left, ← Int.coe_nat_dvd]
#align padic_int.is_unit_denom PadicInt.isUnit_den
-theorem norm_sub_mod_part_aux (r : ℚ) (h : ‖(r : ℚ_[p])‖ ≤ 1) :
+theorem norm_sub_modPart_aux (r : ℚ) (h : ‖(r : ℚ_[p])‖ ≤ 1) :
↑p ∣ r.num - r.num * r.den.gcdA p % p * ↑r.den :=
by
rw [← ZMod.int_cast_zmod_eq_zero_iff_dvd]
@@ -137,7 +140,7 @@ theorem norm_sub_mod_part_aux (r : ℚ) (h : ‖(r : ℚ_[p])‖ ≤ 1) :
apply ge_of_eq
rw [← is_unit_iff]
exact is_unit_denom r h
-#align padic_int.norm_sub_mod_part_aux PadicInt.norm_sub_mod_part_aux
+#align padic_int.norm_sub_mod_part_aux PadicInt.norm_sub_modPart_aux
theorem norm_sub_modPart (h : ‖(r : ℚ_[p])‖ ≤ 1) : ‖(⟨r, h⟩ - modPart p r : ℤ_[p])‖ < 1 :=
by
mathlib commit https://github.com/leanprover-community/mathlib/commit/917c3c072e487b3cccdbfeff17e75b40e45f66cb
@@ -44,7 +44,7 @@ which removes some boilerplate code.
noncomputable section
-open Classical
+open scoped Classical
open Nat LocalRing Padic
mathlib commit https://github.com/leanprover-community/mathlib/commit/917c3c072e487b3cccdbfeff17e75b40e45f66cb
@@ -96,12 +96,6 @@ theorem modPart_nonneg : 0 ≤ modPart p r :=
#align padic_int.mod_part_nonneg PadicInt.modPart_nonneg
-/
-/- warning: padic_int.is_unit_denom -> PadicInt.isUnit_den is a dubious translation:
-lean 3 declaration is
- forall {p : Nat} [hp_prime : Fact (Nat.Prime p)] (r : Rat), (LE.le.{0} Real Real.hasLe (Norm.norm.{0} (Padic p hp_prime) (Padic.hasNorm p hp_prime) ((fun (a : Type) (b : Type) [self : HasLiftT.{1, 1} a b] => self.0) Rat (Padic p hp_prime) (HasLiftT.mk.{1, 1} Rat (Padic p hp_prime) (CoeTCₓ.coe.{1, 1} Rat (Padic p hp_prime) (Rat.castCoe.{0} (Padic p hp_prime) (DivisionRing.toHasRatCast.{0} (Padic p hp_prime) (NormedDivisionRing.toDivisionRing.{0} (Padic p hp_prime) (NormedField.toNormedDivisionRing.{0} (Padic p hp_prime) (Padic.normedField p hp_prime))))))) r)) (OfNat.ofNat.{0} Real 1 (OfNat.mk.{0} Real 1 (One.one.{0} Real Real.hasOne)))) -> (IsUnit.{0} (PadicInt p hp_prime) (Ring.toMonoid.{0} (PadicInt p hp_prime) (NormedRing.toRing.{0} (PadicInt p hp_prime) (NormedCommRing.toNormedRing.{0} (PadicInt p hp_prime) (PadicInt.normedCommRing p hp_prime)))) ((fun (a : Type) (b : Type) [self : HasLiftT.{1, 1} a b] => self.0) Nat (PadicInt p hp_prime) (HasLiftT.mk.{1, 1} Nat (PadicInt p hp_prime) (CoeTCₓ.coe.{1, 1} Nat (PadicInt p hp_prime) (Nat.castCoe.{0} (PadicInt p hp_prime) (AddMonoidWithOne.toNatCast.{0} (PadicInt p hp_prime) (AddGroupWithOne.toAddMonoidWithOne.{0} (PadicInt p hp_prime) (AddCommGroupWithOne.toAddGroupWithOne.{0} (PadicInt p hp_prime) (Ring.toAddCommGroupWithOne.{0} (PadicInt p hp_prime) (NormedRing.toRing.{0} (PadicInt p hp_prime) (NormedCommRing.toNormedRing.{0} (PadicInt p hp_prime) (PadicInt.normedCommRing p hp_prime)))))))))) (Rat.den r)))
-but is expected to have type
- forall {p : Nat} [hp_prime : Fact (Nat.Prime p)] (r : Rat), (LE.le.{0} Real Real.instLEReal (Norm.norm.{0} (Padic p hp_prime) (Padic.instNormPadic p hp_prime) (Rat.cast.{0} (Padic p hp_prime) (Field.toRatCast.{0} (Padic p hp_prime) (Padic.field p hp_prime)) r)) (OfNat.ofNat.{0} Real 1 (One.toOfNat1.{0} Real Real.instOneReal))) -> (IsUnit.{0} (PadicInt p hp_prime) (MonoidWithZero.toMonoid.{0} (PadicInt p hp_prime) (Semiring.toMonoidWithZero.{0} (PadicInt p hp_prime) (CommSemiring.toSemiring.{0} (PadicInt p hp_prime) (CommRing.toCommSemiring.{0} (PadicInt p hp_prime) (PadicInt.instCommRingPadicInt p hp_prime))))) (Nat.cast.{0} (PadicInt p hp_prime) (Semiring.toNatCast.{0} (PadicInt p hp_prime) (CommSemiring.toSemiring.{0} (PadicInt p hp_prime) (CommRing.toCommSemiring.{0} (PadicInt p hp_prime) (PadicInt.instCommRingPadicInt p hp_prime)))) (Rat.den r)))
-Case conversion may be inaccurate. Consider using '#align padic_int.is_unit_denom PadicInt.isUnit_denₓ'. -/
theorem isUnit_den (r : ℚ) (h : ‖(r : ℚ_[p])‖ ≤ 1) : IsUnit (r.den : ℤ_[p]) :=
by
rw [is_unit_iff]
@@ -125,12 +119,6 @@ theorem isUnit_den (r : ℚ) (h : ‖(r : ℚ_[p])‖ ≤ 1) : IsUnit (r.den :
rwa [← r.cop.gcd_eq_one, Nat.dvd_gcd_iff, ← Int.coe_nat_dvd_left, ← Int.coe_nat_dvd]
#align padic_int.is_unit_denom PadicInt.isUnit_den
-/- warning: padic_int.norm_sub_mod_part_aux -> PadicInt.norm_sub_mod_part_aux is a dubious translation:
-lean 3 declaration is
- forall {p : Nat} [hp_prime : Fact (Nat.Prime p)] (r : Rat), (LE.le.{0} Real Real.hasLe (Norm.norm.{0} (Padic p hp_prime) (Padic.hasNorm p hp_prime) ((fun (a : Type) (b : Type) [self : HasLiftT.{1, 1} a b] => self.0) Rat (Padic p hp_prime) (HasLiftT.mk.{1, 1} Rat (Padic p hp_prime) (CoeTCₓ.coe.{1, 1} Rat (Padic p hp_prime) (Rat.castCoe.{0} (Padic p hp_prime) (DivisionRing.toHasRatCast.{0} (Padic p hp_prime) (NormedDivisionRing.toDivisionRing.{0} (Padic p hp_prime) (NormedField.toNormedDivisionRing.{0} (Padic p hp_prime) (Padic.normedField p hp_prime))))))) r)) (OfNat.ofNat.{0} Real 1 (OfNat.mk.{0} Real 1 (One.one.{0} Real Real.hasOne)))) -> (Dvd.Dvd.{0} Int (semigroupDvd.{0} Int Int.semigroup) ((fun (a : Type) (b : Type) [self : HasLiftT.{1, 1} a b] => self.0) Nat Int (HasLiftT.mk.{1, 1} Nat Int (CoeTCₓ.coe.{1, 1} Nat Int (coeBase.{1, 1} Nat Int Int.hasCoe))) p) (HSub.hSub.{0, 0, 0} Int Int Int (instHSub.{0} Int Int.hasSub) (Rat.num r) (HMul.hMul.{0, 0, 0} Int Int Int (instHMul.{0} Int Int.hasMul) (HMod.hMod.{0, 0, 0} Int Int Int (instHMod.{0} Int Int.hasMod) (HMul.hMul.{0, 0, 0} Int Int Int (instHMul.{0} Int Int.hasMul) (Rat.num r) (Nat.gcdA (Rat.den r) p)) ((fun (a : Type) (b : Type) [self : HasLiftT.{1, 1} a b] => self.0) Nat Int (HasLiftT.mk.{1, 1} Nat Int (CoeTCₓ.coe.{1, 1} Nat Int (coeBase.{1, 1} Nat Int Int.hasCoe))) p)) ((fun (a : Type) (b : Type) [self : HasLiftT.{1, 1} a b] => self.0) Nat Int (HasLiftT.mk.{1, 1} Nat Int (CoeTCₓ.coe.{1, 1} Nat Int (coeBase.{1, 1} Nat Int Int.hasCoe))) (Rat.den r)))))
-but is expected to have type
- forall {p : Nat} [hp_prime : Fact (Nat.Prime p)] (r : Rat), (LE.le.{0} Real Real.instLEReal (Norm.norm.{0} (Padic p hp_prime) (Padic.instNormPadic p hp_prime) (Rat.cast.{0} (Padic p hp_prime) (Field.toRatCast.{0} (Padic p hp_prime) (Padic.field p hp_prime)) r)) (OfNat.ofNat.{0} Real 1 (One.toOfNat1.{0} Real Real.instOneReal))) -> (Dvd.dvd.{0} Int Int.instDvdInt (Nat.cast.{0} Int instNatCastInt p) (HSub.hSub.{0, 0, 0} Int Int Int (instHSub.{0} Int Int.instSubInt) (Rat.num r) (HMul.hMul.{0, 0, 0} Int Int Int (instHMul.{0} Int Int.instMulInt) (HMod.hMod.{0, 0, 0} Int Int Int (instHMod.{0} Int Int.instModInt_1) (HMul.hMul.{0, 0, 0} Int Int Int (instHMul.{0} Int Int.instMulInt) (Rat.num r) (Nat.gcdA (Rat.den r) p)) (Nat.cast.{0} Int instNatCastInt p)) (Nat.cast.{0} Int instNatCastInt (Rat.den r)))))
-Case conversion may be inaccurate. Consider using '#align padic_int.norm_sub_mod_part_aux PadicInt.norm_sub_mod_part_auxₓ'. -/
theorem norm_sub_mod_part_aux (r : ℚ) (h : ‖(r : ℚ_[p])‖ ≤ 1) :
↑p ∣ r.num - r.num * r.den.gcdA p % p * ↑r.den :=
by
@@ -151,12 +139,6 @@ theorem norm_sub_mod_part_aux (r : ℚ) (h : ‖(r : ℚ_[p])‖ ≤ 1) :
exact is_unit_denom r h
#align padic_int.norm_sub_mod_part_aux PadicInt.norm_sub_mod_part_aux
-/- warning: padic_int.norm_sub_mod_part -> PadicInt.norm_sub_modPart is a dubious translation:
-lean 3 declaration is
- forall {p : Nat} [hp_prime : Fact (Nat.Prime p)] (r : Rat) (h : LE.le.{0} Real Real.hasLe (Norm.norm.{0} (Padic p hp_prime) (Padic.hasNorm p hp_prime) ((fun (a : Type) (b : Type) [self : HasLiftT.{1, 1} a b] => self.0) Rat (Padic p hp_prime) (HasLiftT.mk.{1, 1} Rat (Padic p hp_prime) (CoeTCₓ.coe.{1, 1} Rat (Padic p hp_prime) (Rat.castCoe.{0} (Padic p hp_prime) (DivisionRing.toHasRatCast.{0} (Padic p hp_prime) (NormedDivisionRing.toDivisionRing.{0} (Padic p hp_prime) (NormedField.toNormedDivisionRing.{0} (Padic p hp_prime) (Padic.normedField p hp_prime))))))) r)) (OfNat.ofNat.{0} Real 1 (OfNat.mk.{0} Real 1 (One.one.{0} Real Real.hasOne)))), LT.lt.{0} Real Real.hasLt (Norm.norm.{0} (PadicInt p hp_prime) (PadicInt.hasNorm p hp_prime) (HSub.hSub.{0, 0, 0} (PadicInt p hp_prime) (PadicInt p hp_prime) (PadicInt p hp_prime) (instHSub.{0} (PadicInt p hp_prime) (PadicInt.hasSub p hp_prime)) (Subtype.mk.{1} (Padic p hp_prime) (fun (x : Padic p hp_prime) => LE.le.{0} Real Real.hasLe (Norm.norm.{0} (Padic p hp_prime) (Padic.hasNorm p hp_prime) x) (OfNat.ofNat.{0} Real 1 (OfNat.mk.{0} Real 1 (One.one.{0} Real Real.hasOne)))) ((fun (a : Type) (b : Type) [self : HasLiftT.{1, 1} a b] => self.0) Rat (Padic p hp_prime) (HasLiftT.mk.{1, 1} Rat (Padic p hp_prime) (CoeTCₓ.coe.{1, 1} Rat (Padic p hp_prime) (Rat.castCoe.{0} (Padic p hp_prime) (DivisionRing.toHasRatCast.{0} (Padic p hp_prime) (NormedDivisionRing.toDivisionRing.{0} (Padic p hp_prime) (NormedField.toNormedDivisionRing.{0} (Padic p hp_prime) (Padic.normedField p hp_prime))))))) r) h) ((fun (a : Type) (b : Type) [self : HasLiftT.{1, 1} a b] => self.0) Int (PadicInt p hp_prime) (HasLiftT.mk.{1, 1} Int (PadicInt p hp_prime) (CoeTCₓ.coe.{1, 1} Int (PadicInt p hp_prime) (Int.castCoe.{0} (PadicInt p hp_prime) (AddGroupWithOne.toHasIntCast.{0} (PadicInt p hp_prime) (AddCommGroupWithOne.toAddGroupWithOne.{0} (PadicInt p hp_prime) (Ring.toAddCommGroupWithOne.{0} (PadicInt p hp_prime) (NormedRing.toRing.{0} (PadicInt p hp_prime) (NormedCommRing.toNormedRing.{0} (PadicInt p hp_prime) (PadicInt.normedCommRing p hp_prime))))))))) (PadicInt.modPart p r)))) (OfNat.ofNat.{0} Real 1 (OfNat.mk.{0} Real 1 (One.one.{0} Real Real.hasOne)))
-but is expected to have type
- forall {p : Nat} [hp_prime : Fact (Nat.Prime p)] (r : Rat) (h : LE.le.{0} Real Real.instLEReal (Norm.norm.{0} (Padic p hp_prime) (Padic.instNormPadic p hp_prime) (Rat.cast.{0} (Padic p hp_prime) (Field.toRatCast.{0} (Padic p hp_prime) (Padic.field p hp_prime)) r)) (OfNat.ofNat.{0} Real 1 (One.toOfNat1.{0} Real Real.instOneReal))), LT.lt.{0} Real Real.instLTReal (Norm.norm.{0} (PadicInt p hp_prime) (PadicInt.instNormPadicInt p hp_prime) (HSub.hSub.{0, 0, 0} (PadicInt p hp_prime) (PadicInt p hp_prime) (PadicInt p hp_prime) (instHSub.{0} (PadicInt p hp_prime) (PadicInt.instSubPadicInt p hp_prime)) (Subtype.mk.{1} (Padic p hp_prime) (fun (x : Padic p hp_prime) => LE.le.{0} Real Real.instLEReal (Norm.norm.{0} (Padic p hp_prime) (Padic.instNormPadic p hp_prime) x) (OfNat.ofNat.{0} Real 1 (One.toOfNat1.{0} Real Real.instOneReal))) (Rat.cast.{0} (Padic p hp_prime) (Field.toRatCast.{0} (Padic p hp_prime) (Padic.field p hp_prime)) r) h) (Int.cast.{0} (PadicInt p hp_prime) (Ring.toIntCast.{0} (PadicInt p hp_prime) (NormedRing.toRing.{0} (PadicInt p hp_prime) (NormedCommRing.toNormedRing.{0} (PadicInt p hp_prime) (PadicInt.instNormedCommRingPadicInt p hp_prime)))) (PadicInt.modPart p r)))) (OfNat.ofNat.{0} Real 1 (One.toOfNat1.{0} Real Real.instOneReal))
-Case conversion may be inaccurate. Consider using '#align padic_int.norm_sub_mod_part PadicInt.norm_sub_modPartₓ'. -/
theorem norm_sub_modPart (h : ‖(r : ℚ_[p])‖ ≤ 1) : ‖(⟨r, h⟩ - modPart p r : ℤ_[p])‖ < 1 :=
by
let n := mod_part p r
@@ -171,20 +153,11 @@ theorem norm_sub_modPart (h : ‖(r : ℚ_[p])‖ ≤ 1) : ‖(⟨r, h⟩ - modP
exact norm_sub_mod_part_aux r h
#align padic_int.norm_sub_mod_part PadicInt.norm_sub_modPart
-/- warning: padic_int.exists_mem_range_of_norm_rat_le_one -> PadicInt.exists_mem_range_of_norm_rat_le_one is a dubious translation:
-lean 3 declaration is
- forall {p : Nat} [hp_prime : Fact (Nat.Prime p)] (r : Rat) (h : LE.le.{0} Real Real.hasLe (Norm.norm.{0} (Padic p hp_prime) (Padic.hasNorm p hp_prime) ((fun (a : Type) (b : Type) [self : HasLiftT.{1, 1} a b] => self.0) Rat (Padic p hp_prime) (HasLiftT.mk.{1, 1} Rat (Padic p hp_prime) (CoeTCₓ.coe.{1, 1} Rat (Padic p hp_prime) (Rat.castCoe.{0} (Padic p hp_prime) (DivisionRing.toHasRatCast.{0} (Padic p hp_prime) (NormedDivisionRing.toDivisionRing.{0} (Padic p hp_prime) (NormedField.toNormedDivisionRing.{0} (Padic p hp_prime) (Padic.normedField p hp_prime))))))) r)) (OfNat.ofNat.{0} Real 1 (OfNat.mk.{0} Real 1 (One.one.{0} Real Real.hasOne)))), Exists.{1} Int (fun (n : Int) => And (LE.le.{0} Int Int.hasLe (OfNat.ofNat.{0} Int 0 (OfNat.mk.{0} Int 0 (Zero.zero.{0} Int Int.hasZero))) n) (And (LT.lt.{0} Int Int.hasLt n ((fun (a : Type) (b : Type) [self : HasLiftT.{1, 1} a b] => self.0) Nat Int (HasLiftT.mk.{1, 1} Nat Int (CoeTCₓ.coe.{1, 1} Nat Int (coeBase.{1, 1} Nat Int Int.hasCoe))) p)) (LT.lt.{0} Real Real.hasLt (Norm.norm.{0} (PadicInt p hp_prime) (PadicInt.hasNorm p hp_prime) (HSub.hSub.{0, 0, 0} (PadicInt p hp_prime) (PadicInt p hp_prime) (PadicInt p hp_prime) (instHSub.{0} (PadicInt p hp_prime) (PadicInt.hasSub p hp_prime)) (Subtype.mk.{1} (Padic p hp_prime) (fun (x : Padic p hp_prime) => LE.le.{0} Real Real.hasLe (Norm.norm.{0} (Padic p hp_prime) (Padic.hasNorm p hp_prime) x) (OfNat.ofNat.{0} Real 1 (OfNat.mk.{0} Real 1 (One.one.{0} Real Real.hasOne)))) ((fun (a : Type) (b : Type) [self : HasLiftT.{1, 1} a b] => self.0) Rat (Padic p hp_prime) (HasLiftT.mk.{1, 1} Rat (Padic p hp_prime) (CoeTCₓ.coe.{1, 1} Rat (Padic p hp_prime) (Rat.castCoe.{0} (Padic p hp_prime) (DivisionRing.toHasRatCast.{0} (Padic p hp_prime) (NormedDivisionRing.toDivisionRing.{0} (Padic p hp_prime) (NormedField.toNormedDivisionRing.{0} (Padic p hp_prime) (Padic.normedField p hp_prime))))))) r) h) ((fun (a : Type) (b : Type) [self : HasLiftT.{1, 1} a b] => self.0) Int (PadicInt p hp_prime) (HasLiftT.mk.{1, 1} Int (PadicInt p hp_prime) (CoeTCₓ.coe.{1, 1} Int (PadicInt p hp_prime) (Int.castCoe.{0} (PadicInt p hp_prime) (AddGroupWithOne.toHasIntCast.{0} (PadicInt p hp_prime) (AddCommGroupWithOne.toAddGroupWithOne.{0} (PadicInt p hp_prime) (Ring.toAddCommGroupWithOne.{0} (PadicInt p hp_prime) (NormedRing.toRing.{0} (PadicInt p hp_prime) (NormedCommRing.toNormedRing.{0} (PadicInt p hp_prime) (PadicInt.normedCommRing p hp_prime))))))))) n))) (OfNat.ofNat.{0} Real 1 (OfNat.mk.{0} Real 1 (One.one.{0} Real Real.hasOne))))))
-but is expected to have type
- forall {p : Nat} [hp_prime : Fact (Nat.Prime p)] (r : Rat) (h : LE.le.{0} Real Real.instLEReal (Norm.norm.{0} (Padic p hp_prime) (Padic.instNormPadic p hp_prime) (Rat.cast.{0} (Padic p hp_prime) (Field.toRatCast.{0} (Padic p hp_prime) (Padic.field p hp_prime)) r)) (OfNat.ofNat.{0} Real 1 (One.toOfNat1.{0} Real Real.instOneReal))), Exists.{1} Int (fun (n : Int) => And (LE.le.{0} Int Int.instLEInt (OfNat.ofNat.{0} Int 0 (instOfNatInt 0)) n) (And (LT.lt.{0} Int Int.instLTInt n (Nat.cast.{0} Int instNatCastInt p)) (LT.lt.{0} Real Real.instLTReal (Norm.norm.{0} (PadicInt p hp_prime) (PadicInt.instNormPadicInt p hp_prime) (HSub.hSub.{0, 0, 0} (PadicInt p hp_prime) (PadicInt p hp_prime) (PadicInt p hp_prime) (instHSub.{0} (PadicInt p hp_prime) (PadicInt.instSubPadicInt p hp_prime)) (Subtype.mk.{1} (Padic p hp_prime) (fun (x : Padic p hp_prime) => LE.le.{0} Real Real.instLEReal (Norm.norm.{0} (Padic p hp_prime) (Padic.instNormPadic p hp_prime) x) (OfNat.ofNat.{0} Real 1 (One.toOfNat1.{0} Real Real.instOneReal))) (Rat.cast.{0} (Padic p hp_prime) (Field.toRatCast.{0} (Padic p hp_prime) (Padic.field p hp_prime)) r) h) (Int.cast.{0} (PadicInt p hp_prime) (Ring.toIntCast.{0} (PadicInt p hp_prime) (NormedRing.toRing.{0} (PadicInt p hp_prime) (NormedCommRing.toNormedRing.{0} (PadicInt p hp_prime) (PadicInt.instNormedCommRingPadicInt p hp_prime)))) n))) (OfNat.ofNat.{0} Real 1 (One.toOfNat1.{0} Real Real.instOneReal)))))
-Case conversion may be inaccurate. Consider using '#align padic_int.exists_mem_range_of_norm_rat_le_one PadicInt.exists_mem_range_of_norm_rat_le_oneₓ'. -/
theorem exists_mem_range_of_norm_rat_le_one (h : ‖(r : ℚ_[p])‖ ≤ 1) :
∃ n : ℤ, 0 ≤ n ∧ n < p ∧ ‖(⟨r, h⟩ - n : ℤ_[p])‖ < 1 :=
⟨modPart p r, modPart_nonneg _, modPart_lt_p _, norm_sub_modPart _ h⟩
#align padic_int.exists_mem_range_of_norm_rat_le_one PadicInt.exists_mem_range_of_norm_rat_le_one
-/- warning: padic_int.zmod_congr_of_sub_mem_span_aux -> PadicInt.zmod_congr_of_sub_mem_span_aux is a dubious translation:
-<too large>
-Case conversion may be inaccurate. Consider using '#align padic_int.zmod_congr_of_sub_mem_span_aux PadicInt.zmod_congr_of_sub_mem_span_auxₓ'. -/
theorem zmod_congr_of_sub_mem_span_aux (n : ℕ) (x : ℤ_[p]) (a b : ℤ)
(ha : x - a ∈ (Ideal.span {p ^ n} : Ideal ℤ_[p]))
(hb : x - b ∈ (Ideal.span {p ^ n} : Ideal ℤ_[p])) : (a : ZMod (p ^ n)) = b :=
@@ -197,21 +170,12 @@ theorem zmod_congr_of_sub_mem_span_aux (n : ℕ) (x : ℤ_[p]) (a b : ℤ)
Int.cast_sub, pow_p_dvd_int_iff] at this
#align padic_int.zmod_congr_of_sub_mem_span_aux PadicInt.zmod_congr_of_sub_mem_span_aux
-/- warning: padic_int.zmod_congr_of_sub_mem_span -> PadicInt.zmod_congr_of_sub_mem_span is a dubious translation:
-<too large>
-Case conversion may be inaccurate. Consider using '#align padic_int.zmod_congr_of_sub_mem_span PadicInt.zmod_congr_of_sub_mem_spanₓ'. -/
theorem zmod_congr_of_sub_mem_span (n : ℕ) (x : ℤ_[p]) (a b : ℕ)
(ha : x - a ∈ (Ideal.span {p ^ n} : Ideal ℤ_[p]))
(hb : x - b ∈ (Ideal.span {p ^ n} : Ideal ℤ_[p])) : (a : ZMod (p ^ n)) = b := by
simpa using zmod_congr_of_sub_mem_span_aux n x a b ha hb
#align padic_int.zmod_congr_of_sub_mem_span PadicInt.zmod_congr_of_sub_mem_span
-/- warning: padic_int.zmod_congr_of_sub_mem_max_ideal -> PadicInt.zmod_congr_of_sub_mem_max_ideal is a dubious translation:
-lean 3 declaration is
- forall {p : Nat} [hp_prime : Fact (Nat.Prime p)] (x : PadicInt p hp_prime) (m : Nat) (n : Nat), (Membership.Mem.{0, 0} (PadicInt p hp_prime) (Ideal.{0} (PadicInt p hp_prime) (CommSemiring.toSemiring.{0} (PadicInt p hp_prime) (CommRing.toCommSemiring.{0} (PadicInt p hp_prime) (PadicInt.commRing p hp_prime)))) (SetLike.hasMem.{0, 0} (Ideal.{0} (PadicInt p hp_prime) (CommSemiring.toSemiring.{0} (PadicInt p hp_prime) (CommRing.toCommSemiring.{0} (PadicInt p hp_prime) (PadicInt.commRing p hp_prime)))) (PadicInt p hp_prime) (Submodule.setLike.{0, 0} (PadicInt p hp_prime) (PadicInt p hp_prime) (CommSemiring.toSemiring.{0} (PadicInt p hp_prime) (CommRing.toCommSemiring.{0} (PadicInt p hp_prime) (PadicInt.commRing p hp_prime))) (NonUnitalNonAssocSemiring.toAddCommMonoid.{0} (PadicInt p hp_prime) (NonAssocSemiring.toNonUnitalNonAssocSemiring.{0} (PadicInt p hp_prime) (Semiring.toNonAssocSemiring.{0} (PadicInt p hp_prime) (CommSemiring.toSemiring.{0} (PadicInt p hp_prime) (CommRing.toCommSemiring.{0} (PadicInt p hp_prime) (PadicInt.commRing p hp_prime)))))) (Semiring.toModule.{0} (PadicInt p hp_prime) (CommSemiring.toSemiring.{0} (PadicInt p hp_prime) (CommRing.toCommSemiring.{0} (PadicInt p hp_prime) (PadicInt.commRing p hp_prime)))))) (HSub.hSub.{0, 0, 0} (PadicInt p hp_prime) (PadicInt p hp_prime) (PadicInt p hp_prime) (instHSub.{0} (PadicInt p hp_prime) (PadicInt.hasSub p hp_prime)) x ((fun (a : Type) (b : Type) [self : HasLiftT.{1, 1} a b] => self.0) Nat (PadicInt p hp_prime) (HasLiftT.mk.{1, 1} Nat (PadicInt p hp_prime) (CoeTCₓ.coe.{1, 1} Nat (PadicInt p hp_prime) (Nat.castCoe.{0} (PadicInt p hp_prime) (AddMonoidWithOne.toNatCast.{0} (PadicInt p hp_prime) (AddGroupWithOne.toAddMonoidWithOne.{0} (PadicInt p hp_prime) (AddCommGroupWithOne.toAddGroupWithOne.{0} (PadicInt p hp_prime) (Ring.toAddCommGroupWithOne.{0} (PadicInt p hp_prime) (NormedRing.toRing.{0} (PadicInt p hp_prime) (NormedCommRing.toNormedRing.{0} (PadicInt p hp_prime) (PadicInt.normedCommRing p hp_prime)))))))))) m)) (LocalRing.maximalIdeal.{0} (PadicInt p hp_prime) (CommRing.toCommSemiring.{0} (PadicInt p hp_prime) (PadicInt.commRing p hp_prime)) (PadicInt.localRing p hp_prime))) -> (Membership.Mem.{0, 0} (PadicInt p hp_prime) (Ideal.{0} (PadicInt p hp_prime) (CommSemiring.toSemiring.{0} (PadicInt p hp_prime) (CommRing.toCommSemiring.{0} (PadicInt p hp_prime) (PadicInt.commRing p hp_prime)))) (SetLike.hasMem.{0, 0} (Ideal.{0} (PadicInt p hp_prime) (CommSemiring.toSemiring.{0} (PadicInt p hp_prime) (CommRing.toCommSemiring.{0} (PadicInt p hp_prime) (PadicInt.commRing p hp_prime)))) (PadicInt p hp_prime) (Submodule.setLike.{0, 0} (PadicInt p hp_prime) (PadicInt p hp_prime) (CommSemiring.toSemiring.{0} (PadicInt p hp_prime) (CommRing.toCommSemiring.{0} (PadicInt p hp_prime) (PadicInt.commRing p hp_prime))) (NonUnitalNonAssocSemiring.toAddCommMonoid.{0} (PadicInt p hp_prime) (NonAssocSemiring.toNonUnitalNonAssocSemiring.{0} (PadicInt p hp_prime) (Semiring.toNonAssocSemiring.{0} (PadicInt p hp_prime) (CommSemiring.toSemiring.{0} (PadicInt p hp_prime) (CommRing.toCommSemiring.{0} (PadicInt p hp_prime) (PadicInt.commRing p hp_prime)))))) (Semiring.toModule.{0} (PadicInt p hp_prime) (CommSemiring.toSemiring.{0} (PadicInt p hp_prime) (CommRing.toCommSemiring.{0} (PadicInt p hp_prime) (PadicInt.commRing p hp_prime)))))) (HSub.hSub.{0, 0, 0} (PadicInt p hp_prime) (PadicInt p hp_prime) (PadicInt p hp_prime) (instHSub.{0} (PadicInt p hp_prime) (PadicInt.hasSub p hp_prime)) x ((fun (a : Type) (b : Type) [self : HasLiftT.{1, 1} a b] => self.0) Nat (PadicInt p hp_prime) (HasLiftT.mk.{1, 1} Nat (PadicInt p hp_prime) (CoeTCₓ.coe.{1, 1} Nat (PadicInt p hp_prime) (Nat.castCoe.{0} (PadicInt p hp_prime) (AddMonoidWithOne.toNatCast.{0} (PadicInt p hp_prime) (AddGroupWithOne.toAddMonoidWithOne.{0} (PadicInt p hp_prime) (AddCommGroupWithOne.toAddGroupWithOne.{0} (PadicInt p hp_prime) (Ring.toAddCommGroupWithOne.{0} (PadicInt p hp_prime) (NormedRing.toRing.{0} (PadicInt p hp_prime) (NormedCommRing.toNormedRing.{0} (PadicInt p hp_prime) (PadicInt.normedCommRing p hp_prime)))))))))) n)) (LocalRing.maximalIdeal.{0} (PadicInt p hp_prime) (CommRing.toCommSemiring.{0} (PadicInt p hp_prime) (PadicInt.commRing p hp_prime)) (PadicInt.localRing p hp_prime))) -> (Eq.{1} (ZMod p) ((fun (a : Type) (b : Type) [self : HasLiftT.{1, 1} a b] => self.0) Nat (ZMod p) (HasLiftT.mk.{1, 1} Nat (ZMod p) (CoeTCₓ.coe.{1, 1} Nat (ZMod p) (Nat.castCoe.{0} (ZMod p) (AddMonoidWithOne.toNatCast.{0} (ZMod p) (AddGroupWithOne.toAddMonoidWithOne.{0} (ZMod p) (AddCommGroupWithOne.toAddGroupWithOne.{0} (ZMod p) (Ring.toAddCommGroupWithOne.{0} (ZMod p) (DivisionRing.toRing.{0} (ZMod p) (Field.toDivisionRing.{0} (ZMod p) (ZMod.field p hp_prime)))))))))) m) ((fun (a : Type) (b : Type) [self : HasLiftT.{1, 1} a b] => self.0) Nat (ZMod p) (HasLiftT.mk.{1, 1} Nat (ZMod p) (CoeTCₓ.coe.{1, 1} Nat (ZMod p) (Nat.castCoe.{0} (ZMod p) (AddMonoidWithOne.toNatCast.{0} (ZMod p) (AddGroupWithOne.toAddMonoidWithOne.{0} (ZMod p) (AddCommGroupWithOne.toAddGroupWithOne.{0} (ZMod p) (Ring.toAddCommGroupWithOne.{0} (ZMod p) (DivisionRing.toRing.{0} (ZMod p) (Field.toDivisionRing.{0} (ZMod p) (ZMod.field p hp_prime)))))))))) n))
-but is expected to have type
- forall {p : Nat} [hp_prime : Fact (Nat.Prime p)] (x : PadicInt p hp_prime) (m : Nat) (n : Nat), (Membership.mem.{0, 0} (PadicInt p hp_prime) (Ideal.{0} (PadicInt p hp_prime) (CommSemiring.toSemiring.{0} (PadicInt p hp_prime) (CommRing.toCommSemiring.{0} (PadicInt p hp_prime) (PadicInt.instCommRingPadicInt p hp_prime)))) (SetLike.instMembership.{0, 0} (Ideal.{0} (PadicInt p hp_prime) (CommSemiring.toSemiring.{0} (PadicInt p hp_prime) (CommRing.toCommSemiring.{0} (PadicInt p hp_prime) (PadicInt.instCommRingPadicInt p hp_prime)))) (PadicInt p hp_prime) (Submodule.setLike.{0, 0} (PadicInt p hp_prime) (PadicInt p hp_prime) (CommSemiring.toSemiring.{0} (PadicInt p hp_prime) (CommRing.toCommSemiring.{0} (PadicInt p hp_prime) (PadicInt.instCommRingPadicInt p hp_prime))) (NonUnitalNonAssocSemiring.toAddCommMonoid.{0} (PadicInt p hp_prime) (NonAssocSemiring.toNonUnitalNonAssocSemiring.{0} (PadicInt p hp_prime) (Semiring.toNonAssocSemiring.{0} (PadicInt p hp_prime) (CommSemiring.toSemiring.{0} (PadicInt p hp_prime) (CommRing.toCommSemiring.{0} (PadicInt p hp_prime) (PadicInt.instCommRingPadicInt p hp_prime)))))) (Semiring.toModule.{0} (PadicInt p hp_prime) (CommSemiring.toSemiring.{0} (PadicInt p hp_prime) (CommRing.toCommSemiring.{0} (PadicInt p hp_prime) (PadicInt.instCommRingPadicInt p hp_prime)))))) (HSub.hSub.{0, 0, 0} (PadicInt p hp_prime) (PadicInt p hp_prime) (PadicInt p hp_prime) (instHSub.{0} (PadicInt p hp_prime) (PadicInt.instSubPadicInt p hp_prime)) x (Nat.cast.{0} (PadicInt p hp_prime) (Semiring.toNatCast.{0} (PadicInt p hp_prime) (CommSemiring.toSemiring.{0} (PadicInt p hp_prime) (CommRing.toCommSemiring.{0} (PadicInt p hp_prime) (PadicInt.instCommRingPadicInt p hp_prime)))) m)) (LocalRing.maximalIdeal.{0} (PadicInt p hp_prime) (CommRing.toCommSemiring.{0} (PadicInt p hp_prime) (PadicInt.instCommRingPadicInt p hp_prime)) (PadicInt.instLocalRingPadicIntToSemiringToCommSemiringInstCommRingPadicInt p hp_prime))) -> (Membership.mem.{0, 0} (PadicInt p hp_prime) (Ideal.{0} (PadicInt p hp_prime) (CommSemiring.toSemiring.{0} (PadicInt p hp_prime) (CommRing.toCommSemiring.{0} (PadicInt p hp_prime) (PadicInt.instCommRingPadicInt p hp_prime)))) (SetLike.instMembership.{0, 0} (Ideal.{0} (PadicInt p hp_prime) (CommSemiring.toSemiring.{0} (PadicInt p hp_prime) (CommRing.toCommSemiring.{0} (PadicInt p hp_prime) (PadicInt.instCommRingPadicInt p hp_prime)))) (PadicInt p hp_prime) (Submodule.setLike.{0, 0} (PadicInt p hp_prime) (PadicInt p hp_prime) (CommSemiring.toSemiring.{0} (PadicInt p hp_prime) (CommRing.toCommSemiring.{0} (PadicInt p hp_prime) (PadicInt.instCommRingPadicInt p hp_prime))) (NonUnitalNonAssocSemiring.toAddCommMonoid.{0} (PadicInt p hp_prime) (NonAssocSemiring.toNonUnitalNonAssocSemiring.{0} (PadicInt p hp_prime) (Semiring.toNonAssocSemiring.{0} (PadicInt p hp_prime) (CommSemiring.toSemiring.{0} (PadicInt p hp_prime) (CommRing.toCommSemiring.{0} (PadicInt p hp_prime) (PadicInt.instCommRingPadicInt p hp_prime)))))) (Semiring.toModule.{0} (PadicInt p hp_prime) (CommSemiring.toSemiring.{0} (PadicInt p hp_prime) (CommRing.toCommSemiring.{0} (PadicInt p hp_prime) (PadicInt.instCommRingPadicInt p hp_prime)))))) (HSub.hSub.{0, 0, 0} (PadicInt p hp_prime) (PadicInt p hp_prime) (PadicInt p hp_prime) (instHSub.{0} (PadicInt p hp_prime) (PadicInt.instSubPadicInt p hp_prime)) x (Nat.cast.{0} (PadicInt p hp_prime) (Semiring.toNatCast.{0} (PadicInt p hp_prime) (CommSemiring.toSemiring.{0} (PadicInt p hp_prime) (CommRing.toCommSemiring.{0} (PadicInt p hp_prime) (PadicInt.instCommRingPadicInt p hp_prime)))) n)) (LocalRing.maximalIdeal.{0} (PadicInt p hp_prime) (CommRing.toCommSemiring.{0} (PadicInt p hp_prime) (PadicInt.instCommRingPadicInt p hp_prime)) (PadicInt.instLocalRingPadicIntToSemiringToCommSemiringInstCommRingPadicInt p hp_prime))) -> (Eq.{1} (ZMod p) (Nat.cast.{0} (ZMod p) (Semiring.toNatCast.{0} (ZMod p) (DivisionSemiring.toSemiring.{0} (ZMod p) (Semifield.toDivisionSemiring.{0} (ZMod p) (Field.toSemifield.{0} (ZMod p) (ZMod.instFieldZMod p hp_prime))))) m) (Nat.cast.{0} (ZMod p) (Semiring.toNatCast.{0} (ZMod p) (DivisionSemiring.toSemiring.{0} (ZMod p) (Semifield.toDivisionSemiring.{0} (ZMod p) (Field.toSemifield.{0} (ZMod p) (ZMod.instFieldZMod p hp_prime))))) n))
-Case conversion may be inaccurate. Consider using '#align padic_int.zmod_congr_of_sub_mem_max_ideal PadicInt.zmod_congr_of_sub_mem_max_idealₓ'. -/
theorem zmod_congr_of_sub_mem_max_ideal (x : ℤ_[p]) (m n : ℕ) (hm : x - m ∈ maximalIdeal ℤ_[p])
(hn : x - n ∈ maximalIdeal ℤ_[p]) : (m : ZMod p) = n :=
by
@@ -226,12 +190,6 @@ theorem zmod_congr_of_sub_mem_max_ideal (x : ℤ_[p]) (m n : ℕ) (hm : x - m
variable (x : ℤ_[p])
-/- warning: padic_int.exists_mem_range -> PadicInt.exists_mem_range is a dubious translation:
-lean 3 declaration is
- forall {p : Nat} [hp_prime : Fact (Nat.Prime p)] (x : PadicInt p hp_prime), Exists.{1} Nat (fun (n : Nat) => And (LT.lt.{0} Nat Nat.hasLt n p) (Membership.Mem.{0, 0} (PadicInt p hp_prime) (Ideal.{0} (PadicInt p hp_prime) (CommSemiring.toSemiring.{0} (PadicInt p hp_prime) (CommRing.toCommSemiring.{0} (PadicInt p hp_prime) (PadicInt.commRing p hp_prime)))) (SetLike.hasMem.{0, 0} (Ideal.{0} (PadicInt p hp_prime) (CommSemiring.toSemiring.{0} (PadicInt p hp_prime) (CommRing.toCommSemiring.{0} (PadicInt p hp_prime) (PadicInt.commRing p hp_prime)))) (PadicInt p hp_prime) (Submodule.setLike.{0, 0} (PadicInt p hp_prime) (PadicInt p hp_prime) (CommSemiring.toSemiring.{0} (PadicInt p hp_prime) (CommRing.toCommSemiring.{0} (PadicInt p hp_prime) (PadicInt.commRing p hp_prime))) (NonUnitalNonAssocSemiring.toAddCommMonoid.{0} (PadicInt p hp_prime) (NonAssocSemiring.toNonUnitalNonAssocSemiring.{0} (PadicInt p hp_prime) (Semiring.toNonAssocSemiring.{0} (PadicInt p hp_prime) (CommSemiring.toSemiring.{0} (PadicInt p hp_prime) (CommRing.toCommSemiring.{0} (PadicInt p hp_prime) (PadicInt.commRing p hp_prime)))))) (Semiring.toModule.{0} (PadicInt p hp_prime) (CommSemiring.toSemiring.{0} (PadicInt p hp_prime) (CommRing.toCommSemiring.{0} (PadicInt p hp_prime) (PadicInt.commRing p hp_prime)))))) (HSub.hSub.{0, 0, 0} (PadicInt p hp_prime) (PadicInt p hp_prime) (PadicInt p hp_prime) (instHSub.{0} (PadicInt p hp_prime) (PadicInt.hasSub p hp_prime)) x ((fun (a : Type) (b : Type) [self : HasLiftT.{1, 1} a b] => self.0) Nat (PadicInt p hp_prime) (HasLiftT.mk.{1, 1} Nat (PadicInt p hp_prime) (CoeTCₓ.coe.{1, 1} Nat (PadicInt p hp_prime) (Nat.castCoe.{0} (PadicInt p hp_prime) (AddMonoidWithOne.toNatCast.{0} (PadicInt p hp_prime) (AddGroupWithOne.toAddMonoidWithOne.{0} (PadicInt p hp_prime) (AddCommGroupWithOne.toAddGroupWithOne.{0} (PadicInt p hp_prime) (Ring.toAddCommGroupWithOne.{0} (PadicInt p hp_prime) (NormedRing.toRing.{0} (PadicInt p hp_prime) (NormedCommRing.toNormedRing.{0} (PadicInt p hp_prime) (PadicInt.normedCommRing p hp_prime)))))))))) n)) (LocalRing.maximalIdeal.{0} (PadicInt p hp_prime) (CommRing.toCommSemiring.{0} (PadicInt p hp_prime) (PadicInt.commRing p hp_prime)) (PadicInt.localRing p hp_prime))))
-but is expected to have type
- forall {p : Nat} [hp_prime : Fact (Nat.Prime p)] (x : PadicInt p hp_prime), Exists.{1} Nat (fun (n : Nat) => And (LT.lt.{0} Nat instLTNat n p) (Membership.mem.{0, 0} (PadicInt p hp_prime) (Ideal.{0} (PadicInt p hp_prime) (CommSemiring.toSemiring.{0} (PadicInt p hp_prime) (CommRing.toCommSemiring.{0} (PadicInt p hp_prime) (PadicInt.instCommRingPadicInt p hp_prime)))) (SetLike.instMembership.{0, 0} (Ideal.{0} (PadicInt p hp_prime) (CommSemiring.toSemiring.{0} (PadicInt p hp_prime) (CommRing.toCommSemiring.{0} (PadicInt p hp_prime) (PadicInt.instCommRingPadicInt p hp_prime)))) (PadicInt p hp_prime) (Submodule.setLike.{0, 0} (PadicInt p hp_prime) (PadicInt p hp_prime) (CommSemiring.toSemiring.{0} (PadicInt p hp_prime) (CommRing.toCommSemiring.{0} (PadicInt p hp_prime) (PadicInt.instCommRingPadicInt p hp_prime))) (NonUnitalNonAssocSemiring.toAddCommMonoid.{0} (PadicInt p hp_prime) (NonAssocSemiring.toNonUnitalNonAssocSemiring.{0} (PadicInt p hp_prime) (Semiring.toNonAssocSemiring.{0} (PadicInt p hp_prime) (CommSemiring.toSemiring.{0} (PadicInt p hp_prime) (CommRing.toCommSemiring.{0} (PadicInt p hp_prime) (PadicInt.instCommRingPadicInt p hp_prime)))))) (Semiring.toModule.{0} (PadicInt p hp_prime) (CommSemiring.toSemiring.{0} (PadicInt p hp_prime) (CommRing.toCommSemiring.{0} (PadicInt p hp_prime) (PadicInt.instCommRingPadicInt p hp_prime)))))) (HSub.hSub.{0, 0, 0} (PadicInt p hp_prime) (PadicInt p hp_prime) (PadicInt p hp_prime) (instHSub.{0} (PadicInt p hp_prime) (PadicInt.instSubPadicInt p hp_prime)) x (Nat.cast.{0} (PadicInt p hp_prime) (Semiring.toNatCast.{0} (PadicInt p hp_prime) (CommSemiring.toSemiring.{0} (PadicInt p hp_prime) (CommRing.toCommSemiring.{0} (PadicInt p hp_prime) (PadicInt.instCommRingPadicInt p hp_prime)))) n)) (LocalRing.maximalIdeal.{0} (PadicInt p hp_prime) (CommRing.toCommSemiring.{0} (PadicInt p hp_prime) (PadicInt.instCommRingPadicInt p hp_prime)) (PadicInt.instLocalRingPadicIntToSemiringToCommSemiringInstCommRingPadicInt p hp_prime))))
-Case conversion may be inaccurate. Consider using '#align padic_int.exists_mem_range PadicInt.exists_mem_rangeₓ'. -/
theorem exists_mem_range : ∃ n : ℕ, n < p ∧ x - n ∈ maximalIdeal ℤ_[p] :=
by
simp only [maximal_ideal_eq_span_p, Ideal.mem_span_singleton, ← norm_lt_one_iff_dvd]
@@ -263,12 +221,6 @@ def zmodRepr : ℕ :=
#align padic_int.zmod_repr PadicInt.zmodRepr
-/
-/- warning: padic_int.zmod_repr_spec -> PadicInt.zmodRepr_spec is a dubious translation:
-lean 3 declaration is
- forall {p : Nat} [hp_prime : Fact (Nat.Prime p)] (x : PadicInt p hp_prime), And (LT.lt.{0} Nat Nat.hasLt (PadicInt.zmodRepr p hp_prime x) p) (Membership.Mem.{0, 0} (PadicInt p hp_prime) (Ideal.{0} (PadicInt p hp_prime) (CommSemiring.toSemiring.{0} (PadicInt p hp_prime) (CommRing.toCommSemiring.{0} (PadicInt p hp_prime) (PadicInt.commRing p hp_prime)))) (SetLike.hasMem.{0, 0} (Ideal.{0} (PadicInt p hp_prime) (CommSemiring.toSemiring.{0} (PadicInt p hp_prime) (CommRing.toCommSemiring.{0} (PadicInt p hp_prime) (PadicInt.commRing p hp_prime)))) (PadicInt p hp_prime) (Submodule.setLike.{0, 0} (PadicInt p hp_prime) (PadicInt p hp_prime) (CommSemiring.toSemiring.{0} (PadicInt p hp_prime) (CommRing.toCommSemiring.{0} (PadicInt p hp_prime) (PadicInt.commRing p hp_prime))) (NonUnitalNonAssocSemiring.toAddCommMonoid.{0} (PadicInt p hp_prime) (NonAssocSemiring.toNonUnitalNonAssocSemiring.{0} (PadicInt p hp_prime) (Semiring.toNonAssocSemiring.{0} (PadicInt p hp_prime) (CommSemiring.toSemiring.{0} (PadicInt p hp_prime) (CommRing.toCommSemiring.{0} (PadicInt p hp_prime) (PadicInt.commRing p hp_prime)))))) (Semiring.toModule.{0} (PadicInt p hp_prime) (CommSemiring.toSemiring.{0} (PadicInt p hp_prime) (CommRing.toCommSemiring.{0} (PadicInt p hp_prime) (PadicInt.commRing p hp_prime)))))) (HSub.hSub.{0, 0, 0} (PadicInt p hp_prime) (PadicInt p hp_prime) (PadicInt p hp_prime) (instHSub.{0} (PadicInt p hp_prime) (PadicInt.hasSub p hp_prime)) x ((fun (a : Type) (b : Type) [self : HasLiftT.{1, 1} a b] => self.0) Nat (PadicInt p hp_prime) (HasLiftT.mk.{1, 1} Nat (PadicInt p hp_prime) (CoeTCₓ.coe.{1, 1} Nat (PadicInt p hp_prime) (Nat.castCoe.{0} (PadicInt p hp_prime) (AddMonoidWithOne.toNatCast.{0} (PadicInt p hp_prime) (AddGroupWithOne.toAddMonoidWithOne.{0} (PadicInt p hp_prime) (AddCommGroupWithOne.toAddGroupWithOne.{0} (PadicInt p hp_prime) (Ring.toAddCommGroupWithOne.{0} (PadicInt p hp_prime) (NormedRing.toRing.{0} (PadicInt p hp_prime) (NormedCommRing.toNormedRing.{0} (PadicInt p hp_prime) (PadicInt.normedCommRing p hp_prime)))))))))) (PadicInt.zmodRepr p hp_prime x))) (LocalRing.maximalIdeal.{0} (PadicInt p hp_prime) (CommRing.toCommSemiring.{0} (PadicInt p hp_prime) (PadicInt.commRing p hp_prime)) (PadicInt.localRing p hp_prime)))
-but is expected to have type
- forall {p : Nat} [hp_prime : Fact (Nat.Prime p)] (x : PadicInt p hp_prime), And (LT.lt.{0} Nat instLTNat (PadicInt.zmodRepr p hp_prime x) p) (Membership.mem.{0, 0} (PadicInt p hp_prime) (Ideal.{0} (PadicInt p hp_prime) (CommSemiring.toSemiring.{0} (PadicInt p hp_prime) (CommRing.toCommSemiring.{0} (PadicInt p hp_prime) (PadicInt.instCommRingPadicInt p hp_prime)))) (SetLike.instMembership.{0, 0} (Ideal.{0} (PadicInt p hp_prime) (CommSemiring.toSemiring.{0} (PadicInt p hp_prime) (CommRing.toCommSemiring.{0} (PadicInt p hp_prime) (PadicInt.instCommRingPadicInt p hp_prime)))) (PadicInt p hp_prime) (Submodule.setLike.{0, 0} (PadicInt p hp_prime) (PadicInt p hp_prime) (CommSemiring.toSemiring.{0} (PadicInt p hp_prime) (CommRing.toCommSemiring.{0} (PadicInt p hp_prime) (PadicInt.instCommRingPadicInt p hp_prime))) (NonUnitalNonAssocSemiring.toAddCommMonoid.{0} (PadicInt p hp_prime) (NonAssocSemiring.toNonUnitalNonAssocSemiring.{0} (PadicInt p hp_prime) (Semiring.toNonAssocSemiring.{0} (PadicInt p hp_prime) (CommSemiring.toSemiring.{0} (PadicInt p hp_prime) (CommRing.toCommSemiring.{0} (PadicInt p hp_prime) (PadicInt.instCommRingPadicInt p hp_prime)))))) (Semiring.toModule.{0} (PadicInt p hp_prime) (CommSemiring.toSemiring.{0} (PadicInt p hp_prime) (CommRing.toCommSemiring.{0} (PadicInt p hp_prime) (PadicInt.instCommRingPadicInt p hp_prime)))))) (HSub.hSub.{0, 0, 0} (PadicInt p hp_prime) (PadicInt p hp_prime) (PadicInt p hp_prime) (instHSub.{0} (PadicInt p hp_prime) (PadicInt.instSubPadicInt p hp_prime)) x (Nat.cast.{0} (PadicInt p hp_prime) (Semiring.toNatCast.{0} (PadicInt p hp_prime) (CommSemiring.toSemiring.{0} (PadicInt p hp_prime) (CommRing.toCommSemiring.{0} (PadicInt p hp_prime) (PadicInt.instCommRingPadicInt p hp_prime)))) (PadicInt.zmodRepr p hp_prime x))) (LocalRing.maximalIdeal.{0} (PadicInt p hp_prime) (CommRing.toCommSemiring.{0} (PadicInt p hp_prime) (PadicInt.instCommRingPadicInt p hp_prime)) (PadicInt.instLocalRingPadicIntToSemiringToCommSemiringInstCommRingPadicInt p hp_prime)))
-Case conversion may be inaccurate. Consider using '#align padic_int.zmod_repr_spec PadicInt.zmodRepr_specₓ'. -/
theorem zmodRepr_spec : zmodRepr x < p ∧ x - zmodRepr x ∈ maximalIdeal ℤ_[p] :=
Classical.choose_spec (exists_mem_range x)
#align padic_int.zmod_repr_spec PadicInt.zmodRepr_spec
@@ -279,19 +231,10 @@ theorem zmodRepr_lt_p : zmodRepr x < p :=
#align padic_int.zmod_repr_lt_p PadicInt.zmodRepr_lt_p
-/
-/- warning: padic_int.sub_zmod_repr_mem -> PadicInt.sub_zmodRepr_mem is a dubious translation:
-lean 3 declaration is
- forall {p : Nat} [hp_prime : Fact (Nat.Prime p)] (x : PadicInt p hp_prime), Membership.Mem.{0, 0} (PadicInt p hp_prime) (Ideal.{0} (PadicInt p hp_prime) (CommSemiring.toSemiring.{0} (PadicInt p hp_prime) (CommRing.toCommSemiring.{0} (PadicInt p hp_prime) (PadicInt.commRing p hp_prime)))) (SetLike.hasMem.{0, 0} (Ideal.{0} (PadicInt p hp_prime) (CommSemiring.toSemiring.{0} (PadicInt p hp_prime) (CommRing.toCommSemiring.{0} (PadicInt p hp_prime) (PadicInt.commRing p hp_prime)))) (PadicInt p hp_prime) (Submodule.setLike.{0, 0} (PadicInt p hp_prime) (PadicInt p hp_prime) (CommSemiring.toSemiring.{0} (PadicInt p hp_prime) (CommRing.toCommSemiring.{0} (PadicInt p hp_prime) (PadicInt.commRing p hp_prime))) (NonUnitalNonAssocSemiring.toAddCommMonoid.{0} (PadicInt p hp_prime) (NonAssocSemiring.toNonUnitalNonAssocSemiring.{0} (PadicInt p hp_prime) (Semiring.toNonAssocSemiring.{0} (PadicInt p hp_prime) (CommSemiring.toSemiring.{0} (PadicInt p hp_prime) (CommRing.toCommSemiring.{0} (PadicInt p hp_prime) (PadicInt.commRing p hp_prime)))))) (Semiring.toModule.{0} (PadicInt p hp_prime) (CommSemiring.toSemiring.{0} (PadicInt p hp_prime) (CommRing.toCommSemiring.{0} (PadicInt p hp_prime) (PadicInt.commRing p hp_prime)))))) (HSub.hSub.{0, 0, 0} (PadicInt p hp_prime) (PadicInt p hp_prime) (PadicInt p hp_prime) (instHSub.{0} (PadicInt p hp_prime) (PadicInt.hasSub p hp_prime)) x ((fun (a : Type) (b : Type) [self : HasLiftT.{1, 1} a b] => self.0) Nat (PadicInt p hp_prime) (HasLiftT.mk.{1, 1} Nat (PadicInt p hp_prime) (CoeTCₓ.coe.{1, 1} Nat (PadicInt p hp_prime) (Nat.castCoe.{0} (PadicInt p hp_prime) (AddMonoidWithOne.toNatCast.{0} (PadicInt p hp_prime) (AddGroupWithOne.toAddMonoidWithOne.{0} (PadicInt p hp_prime) (AddCommGroupWithOne.toAddGroupWithOne.{0} (PadicInt p hp_prime) (Ring.toAddCommGroupWithOne.{0} (PadicInt p hp_prime) (NormedRing.toRing.{0} (PadicInt p hp_prime) (NormedCommRing.toNormedRing.{0} (PadicInt p hp_prime) (PadicInt.normedCommRing p hp_prime)))))))))) (PadicInt.zmodRepr p hp_prime x))) (LocalRing.maximalIdeal.{0} (PadicInt p hp_prime) (CommRing.toCommSemiring.{0} (PadicInt p hp_prime) (PadicInt.commRing p hp_prime)) (PadicInt.localRing p hp_prime))
-but is expected to have type
- forall {p : Nat} [hp_prime : Fact (Nat.Prime p)] (x : PadicInt p hp_prime), Membership.mem.{0, 0} (PadicInt p hp_prime) (Ideal.{0} (PadicInt p hp_prime) (CommSemiring.toSemiring.{0} (PadicInt p hp_prime) (CommRing.toCommSemiring.{0} (PadicInt p hp_prime) (PadicInt.instCommRingPadicInt p hp_prime)))) (SetLike.instMembership.{0, 0} (Ideal.{0} (PadicInt p hp_prime) (CommSemiring.toSemiring.{0} (PadicInt p hp_prime) (CommRing.toCommSemiring.{0} (PadicInt p hp_prime) (PadicInt.instCommRingPadicInt p hp_prime)))) (PadicInt p hp_prime) (Submodule.setLike.{0, 0} (PadicInt p hp_prime) (PadicInt p hp_prime) (CommSemiring.toSemiring.{0} (PadicInt p hp_prime) (CommRing.toCommSemiring.{0} (PadicInt p hp_prime) (PadicInt.instCommRingPadicInt p hp_prime))) (NonUnitalNonAssocSemiring.toAddCommMonoid.{0} (PadicInt p hp_prime) (NonAssocSemiring.toNonUnitalNonAssocSemiring.{0} (PadicInt p hp_prime) (Semiring.toNonAssocSemiring.{0} (PadicInt p hp_prime) (CommSemiring.toSemiring.{0} (PadicInt p hp_prime) (CommRing.toCommSemiring.{0} (PadicInt p hp_prime) (PadicInt.instCommRingPadicInt p hp_prime)))))) (Semiring.toModule.{0} (PadicInt p hp_prime) (CommSemiring.toSemiring.{0} (PadicInt p hp_prime) (CommRing.toCommSemiring.{0} (PadicInt p hp_prime) (PadicInt.instCommRingPadicInt p hp_prime)))))) (HSub.hSub.{0, 0, 0} (PadicInt p hp_prime) (PadicInt p hp_prime) (PadicInt p hp_prime) (instHSub.{0} (PadicInt p hp_prime) (PadicInt.instSubPadicInt p hp_prime)) x (Nat.cast.{0} (PadicInt p hp_prime) (Semiring.toNatCast.{0} (PadicInt p hp_prime) (CommSemiring.toSemiring.{0} (PadicInt p hp_prime) (CommRing.toCommSemiring.{0} (PadicInt p hp_prime) (PadicInt.instCommRingPadicInt p hp_prime)))) (PadicInt.zmodRepr p hp_prime x))) (LocalRing.maximalIdeal.{0} (PadicInt p hp_prime) (CommRing.toCommSemiring.{0} (PadicInt p hp_prime) (PadicInt.instCommRingPadicInt p hp_prime)) (PadicInt.instLocalRingPadicIntToSemiringToCommSemiringInstCommRingPadicInt p hp_prime))
-Case conversion may be inaccurate. Consider using '#align padic_int.sub_zmod_repr_mem PadicInt.sub_zmodRepr_memₓ'. -/
theorem sub_zmodRepr_mem : x - zmodRepr x ∈ maximalIdeal ℤ_[p] :=
(zmodRepr_spec _).2
#align padic_int.sub_zmod_repr_mem PadicInt.sub_zmodRepr_mem
-/- warning: padic_int.to_zmod_hom -> PadicInt.toZModHom is a dubious translation:
-<too large>
-Case conversion may be inaccurate. Consider using '#align padic_int.to_zmod_hom PadicInt.toZModHomₓ'. -/
/-- `to_zmod_hom` is an auxiliary constructor for creating ring homs from `ℤ_[p]` to `zmod v`.
-/
def toZModHom (v : ℕ) (f : ℤ_[p] → ℕ) (f_spec : ∀ x, x - f x ∈ (Ideal.span {v} : Ideal ℤ_[p]))
@@ -326,12 +269,6 @@ def toZModHom (v : ℕ) (f : ℤ_[p] → ℕ) (f_spec : ∀ x, x - f x ∈ (Idea
ring
#align padic_int.to_zmod_hom PadicInt.toZModHom
-/- warning: padic_int.to_zmod -> PadicInt.toZMod is a dubious translation:
-lean 3 declaration is
- forall {p : Nat} [hp_prime : Fact (Nat.Prime p)], RingHom.{0, 0} (PadicInt p hp_prime) (ZMod p) (NonAssocRing.toNonAssocSemiring.{0} (PadicInt p hp_prime) (Ring.toNonAssocRing.{0} (PadicInt p hp_prime) (NormedRing.toRing.{0} (PadicInt p hp_prime) (NormedCommRing.toNormedRing.{0} (PadicInt p hp_prime) (PadicInt.normedCommRing p hp_prime))))) (NonAssocRing.toNonAssocSemiring.{0} (ZMod p) (Ring.toNonAssocRing.{0} (ZMod p) (DivisionRing.toRing.{0} (ZMod p) (Field.toDivisionRing.{0} (ZMod p) (ZMod.field p hp_prime)))))
-but is expected to have type
- forall {p : Nat} [hp_prime : Fact (Nat.Prime p)], RingHom.{0, 0} (PadicInt p hp_prime) (ZMod p) (Semiring.toNonAssocSemiring.{0} (PadicInt p hp_prime) (CommSemiring.toSemiring.{0} (PadicInt p hp_prime) (CommRing.toCommSemiring.{0} (PadicInt p hp_prime) (PadicInt.instCommRingPadicInt p hp_prime)))) (Semiring.toNonAssocSemiring.{0} (ZMod p) (DivisionSemiring.toSemiring.{0} (ZMod p) (Semifield.toDivisionSemiring.{0} (ZMod p) (Field.toSemifield.{0} (ZMod p) (ZMod.instFieldZMod p hp_prime)))))
-Case conversion may be inaccurate. Consider using '#align padic_int.to_zmod PadicInt.toZModₓ'. -/
/-- `to_zmod` is a ring hom from `ℤ_[p]` to `zmod p`,
with the equality `to_zmod x = (zmod_repr x : zmod p)`.
-/
@@ -340,12 +277,6 @@ def toZMod : ℤ_[p] →+* ZMod p :=
(by rw [← maximal_ideal_eq_span_p]; exact zmod_congr_of_sub_mem_max_ideal)
#align padic_int.to_zmod PadicInt.toZMod
-/- warning: padic_int.to_zmod_spec -> PadicInt.toZMod_spec is a dubious translation:
-lean 3 declaration is
- forall {p : Nat} [hp_prime : Fact (Nat.Prime p)] (z : PadicInt p hp_prime), Membership.Mem.{0, 0} (PadicInt p hp_prime) (Ideal.{0} (PadicInt p hp_prime) (CommSemiring.toSemiring.{0} (PadicInt p hp_prime) (CommRing.toCommSemiring.{0} (PadicInt p hp_prime) (PadicInt.commRing p hp_prime)))) (SetLike.hasMem.{0, 0} (Ideal.{0} (PadicInt p hp_prime) (CommSemiring.toSemiring.{0} (PadicInt p hp_prime) (CommRing.toCommSemiring.{0} (PadicInt p hp_prime) (PadicInt.commRing p hp_prime)))) (PadicInt p hp_prime) (Submodule.setLike.{0, 0} (PadicInt p hp_prime) (PadicInt p hp_prime) (CommSemiring.toSemiring.{0} (PadicInt p hp_prime) (CommRing.toCommSemiring.{0} (PadicInt p hp_prime) (PadicInt.commRing p hp_prime))) (NonUnitalNonAssocSemiring.toAddCommMonoid.{0} (PadicInt p hp_prime) (NonAssocSemiring.toNonUnitalNonAssocSemiring.{0} (PadicInt p hp_prime) (Semiring.toNonAssocSemiring.{0} (PadicInt p hp_prime) (CommSemiring.toSemiring.{0} (PadicInt p hp_prime) (CommRing.toCommSemiring.{0} (PadicInt p hp_prime) (PadicInt.commRing p hp_prime)))))) (Semiring.toModule.{0} (PadicInt p hp_prime) (CommSemiring.toSemiring.{0} (PadicInt p hp_prime) (CommRing.toCommSemiring.{0} (PadicInt p hp_prime) (PadicInt.commRing p hp_prime)))))) (HSub.hSub.{0, 0, 0} (PadicInt p hp_prime) (PadicInt p hp_prime) (PadicInt p hp_prime) (instHSub.{0} (PadicInt p hp_prime) (PadicInt.hasSub p hp_prime)) z ((fun (a : Type) (b : Type) [self : HasLiftT.{1, 1} a b] => self.0) (ZMod p) (PadicInt p hp_prime) (HasLiftT.mk.{1, 1} (ZMod p) (PadicInt p hp_prime) (CoeTCₓ.coe.{1, 1} (ZMod p) (PadicInt p hp_prime) (ZMod.hasCoeT.{0} (PadicInt p hp_prime) (AddCommGroupWithOne.toAddGroupWithOne.{0} (PadicInt p hp_prime) (Ring.toAddCommGroupWithOne.{0} (PadicInt p hp_prime) (NormedRing.toRing.{0} (PadicInt p hp_prime) (NormedCommRing.toNormedRing.{0} (PadicInt p hp_prime) (PadicInt.normedCommRing p hp_prime))))) p))) (coeFn.{1, 1} (RingHom.{0, 0} (PadicInt p hp_prime) (ZMod p) (NonAssocRing.toNonAssocSemiring.{0} (PadicInt p hp_prime) (Ring.toNonAssocRing.{0} (PadicInt p hp_prime) (NormedRing.toRing.{0} (PadicInt p hp_prime) (NormedCommRing.toNormedRing.{0} (PadicInt p hp_prime) (PadicInt.normedCommRing p hp_prime))))) (NonAssocRing.toNonAssocSemiring.{0} (ZMod p) (Ring.toNonAssocRing.{0} (ZMod p) (DivisionRing.toRing.{0} (ZMod p) (Field.toDivisionRing.{0} (ZMod p) (ZMod.field p hp_prime)))))) (fun (_x : RingHom.{0, 0} (PadicInt p hp_prime) (ZMod p) (NonAssocRing.toNonAssocSemiring.{0} (PadicInt p hp_prime) (Ring.toNonAssocRing.{0} (PadicInt p hp_prime) (NormedRing.toRing.{0} (PadicInt p hp_prime) (NormedCommRing.toNormedRing.{0} (PadicInt p hp_prime) (PadicInt.normedCommRing p hp_prime))))) (NonAssocRing.toNonAssocSemiring.{0} (ZMod p) (Ring.toNonAssocRing.{0} (ZMod p) (DivisionRing.toRing.{0} (ZMod p) (Field.toDivisionRing.{0} (ZMod p) (ZMod.field p hp_prime)))))) => (PadicInt p hp_prime) -> (ZMod p)) (RingHom.hasCoeToFun.{0, 0} (PadicInt p hp_prime) (ZMod p) (NonAssocRing.toNonAssocSemiring.{0} (PadicInt p hp_prime) (Ring.toNonAssocRing.{0} (PadicInt p hp_prime) (NormedRing.toRing.{0} (PadicInt p hp_prime) (NormedCommRing.toNormedRing.{0} (PadicInt p hp_prime) (PadicInt.normedCommRing p hp_prime))))) (NonAssocRing.toNonAssocSemiring.{0} (ZMod p) (Ring.toNonAssocRing.{0} (ZMod p) (DivisionRing.toRing.{0} (ZMod p) (Field.toDivisionRing.{0} (ZMod p) (ZMod.field p hp_prime)))))) (PadicInt.toZMod p hp_prime) z))) (LocalRing.maximalIdeal.{0} (PadicInt p hp_prime) (CommRing.toCommSemiring.{0} (PadicInt p hp_prime) (PadicInt.commRing p hp_prime)) (PadicInt.localRing p hp_prime))
-but is expected to have type
- forall {p : Nat} [hp_prime : Fact (Nat.Prime p)] (z : PadicInt p hp_prime), Membership.mem.{0, 0} (PadicInt p hp_prime) (Ideal.{0} (PadicInt p hp_prime) (CommSemiring.toSemiring.{0} (PadicInt p hp_prime) (CommRing.toCommSemiring.{0} (PadicInt p hp_prime) (PadicInt.instCommRingPadicInt p hp_prime)))) (SetLike.instMembership.{0, 0} (Ideal.{0} (PadicInt p hp_prime) (CommSemiring.toSemiring.{0} (PadicInt p hp_prime) (CommRing.toCommSemiring.{0} (PadicInt p hp_prime) (PadicInt.instCommRingPadicInt p hp_prime)))) (PadicInt p hp_prime) (Submodule.setLike.{0, 0} (PadicInt p hp_prime) (PadicInt p hp_prime) (CommSemiring.toSemiring.{0} (PadicInt p hp_prime) (CommRing.toCommSemiring.{0} (PadicInt p hp_prime) (PadicInt.instCommRingPadicInt p hp_prime))) (NonUnitalNonAssocSemiring.toAddCommMonoid.{0} (PadicInt p hp_prime) (NonAssocSemiring.toNonUnitalNonAssocSemiring.{0} (PadicInt p hp_prime) (Semiring.toNonAssocSemiring.{0} (PadicInt p hp_prime) (CommSemiring.toSemiring.{0} (PadicInt p hp_prime) (CommRing.toCommSemiring.{0} (PadicInt p hp_prime) (PadicInt.instCommRingPadicInt p hp_prime)))))) (Semiring.toModule.{0} (PadicInt p hp_prime) (CommSemiring.toSemiring.{0} (PadicInt p hp_prime) (CommRing.toCommSemiring.{0} (PadicInt p hp_prime) (PadicInt.instCommRingPadicInt p hp_prime)))))) (HSub.hSub.{0, 0, 0} (PadicInt p hp_prime) (PadicInt p hp_prime) (PadicInt p hp_prime) (instHSub.{0} (PadicInt p hp_prime) (PadicInt.instSubPadicInt p hp_prime)) z (ZMod.cast.{0} (PadicInt p hp_prime) (Ring.toAddGroupWithOne.{0} (PadicInt p hp_prime) (NormedRing.toRing.{0} (PadicInt p hp_prime) (NormedCommRing.toNormedRing.{0} (PadicInt p hp_prime) (PadicInt.instNormedCommRingPadicInt p hp_prime)))) p (FunLike.coe.{1, 1, 1} (RingHom.{0, 0} (PadicInt p hp_prime) (ZMod p) (Semiring.toNonAssocSemiring.{0} (PadicInt p hp_prime) (CommSemiring.toSemiring.{0} (PadicInt p hp_prime) (CommRing.toCommSemiring.{0} (PadicInt p hp_prime) (PadicInt.instCommRingPadicInt p hp_prime)))) (Semiring.toNonAssocSemiring.{0} (ZMod p) (DivisionSemiring.toSemiring.{0} (ZMod p) (Semifield.toDivisionSemiring.{0} (ZMod p) (Field.toSemifield.{0} (ZMod p) (ZMod.instFieldZMod p hp_prime)))))) (PadicInt p hp_prime) (fun (_x : PadicInt p hp_prime) => (fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2397 : PadicInt p hp_prime) => ZMod p) _x) (MulHomClass.toFunLike.{0, 0, 0} (RingHom.{0, 0} (PadicInt p hp_prime) (ZMod p) (Semiring.toNonAssocSemiring.{0} (PadicInt p hp_prime) (CommSemiring.toSemiring.{0} (PadicInt p hp_prime) (CommRing.toCommSemiring.{0} (PadicInt p hp_prime) (PadicInt.instCommRingPadicInt p hp_prime)))) (Semiring.toNonAssocSemiring.{0} (ZMod p) (DivisionSemiring.toSemiring.{0} (ZMod p) (Semifield.toDivisionSemiring.{0} (ZMod p) (Field.toSemifield.{0} (ZMod p) (ZMod.instFieldZMod p hp_prime)))))) (PadicInt p hp_prime) (ZMod p) (NonUnitalNonAssocSemiring.toMul.{0} (PadicInt p hp_prime) (NonAssocSemiring.toNonUnitalNonAssocSemiring.{0} (PadicInt p hp_prime) (Semiring.toNonAssocSemiring.{0} (PadicInt p hp_prime) (CommSemiring.toSemiring.{0} (PadicInt p hp_prime) (CommRing.toCommSemiring.{0} (PadicInt p hp_prime) (PadicInt.instCommRingPadicInt p hp_prime)))))) (NonUnitalNonAssocSemiring.toMul.{0} (ZMod p) (NonAssocSemiring.toNonUnitalNonAssocSemiring.{0} (ZMod p) (Semiring.toNonAssocSemiring.{0} (ZMod p) (DivisionSemiring.toSemiring.{0} (ZMod p) (Semifield.toDivisionSemiring.{0} (ZMod p) (Field.toSemifield.{0} (ZMod p) (ZMod.instFieldZMod p hp_prime))))))) (NonUnitalRingHomClass.toMulHomClass.{0, 0, 0} (RingHom.{0, 0} (PadicInt p hp_prime) (ZMod p) (Semiring.toNonAssocSemiring.{0} (PadicInt p hp_prime) (CommSemiring.toSemiring.{0} (PadicInt p hp_prime) (CommRing.toCommSemiring.{0} (PadicInt p hp_prime) (PadicInt.instCommRingPadicInt p hp_prime)))) (Semiring.toNonAssocSemiring.{0} (ZMod p) (DivisionSemiring.toSemiring.{0} (ZMod p) (Semifield.toDivisionSemiring.{0} (ZMod p) (Field.toSemifield.{0} (ZMod p) (ZMod.instFieldZMod p hp_prime)))))) (PadicInt p hp_prime) (ZMod p) (NonAssocSemiring.toNonUnitalNonAssocSemiring.{0} (PadicInt p hp_prime) (Semiring.toNonAssocSemiring.{0} (PadicInt p hp_prime) (CommSemiring.toSemiring.{0} (PadicInt p hp_prime) (CommRing.toCommSemiring.{0} (PadicInt p hp_prime) (PadicInt.instCommRingPadicInt p hp_prime))))) (NonAssocSemiring.toNonUnitalNonAssocSemiring.{0} (ZMod p) (Semiring.toNonAssocSemiring.{0} (ZMod p) (DivisionSemiring.toSemiring.{0} (ZMod p) (Semifield.toDivisionSemiring.{0} (ZMod p) (Field.toSemifield.{0} (ZMod p) (ZMod.instFieldZMod p hp_prime)))))) (RingHomClass.toNonUnitalRingHomClass.{0, 0, 0} (RingHom.{0, 0} (PadicInt p hp_prime) (ZMod p) (Semiring.toNonAssocSemiring.{0} (PadicInt p hp_prime) (CommSemiring.toSemiring.{0} (PadicInt p hp_prime) (CommRing.toCommSemiring.{0} (PadicInt p hp_prime) (PadicInt.instCommRingPadicInt p hp_prime)))) (Semiring.toNonAssocSemiring.{0} (ZMod p) (DivisionSemiring.toSemiring.{0} (ZMod p) (Semifield.toDivisionSemiring.{0} (ZMod p) (Field.toSemifield.{0} (ZMod p) (ZMod.instFieldZMod p hp_prime)))))) (PadicInt p hp_prime) (ZMod p) (Semiring.toNonAssocSemiring.{0} (PadicInt p hp_prime) (CommSemiring.toSemiring.{0} (PadicInt p hp_prime) (CommRing.toCommSemiring.{0} (PadicInt p hp_prime) (PadicInt.instCommRingPadicInt p hp_prime)))) (Semiring.toNonAssocSemiring.{0} (ZMod p) (DivisionSemiring.toSemiring.{0} (ZMod p) (Semifield.toDivisionSemiring.{0} (ZMod p) (Field.toSemifield.{0} (ZMod p) (ZMod.instFieldZMod p hp_prime))))) (RingHom.instRingHomClassRingHom.{0, 0} (PadicInt p hp_prime) (ZMod p) (Semiring.toNonAssocSemiring.{0} (PadicInt p hp_prime) (CommSemiring.toSemiring.{0} (PadicInt p hp_prime) (CommRing.toCommSemiring.{0} (PadicInt p hp_prime) (PadicInt.instCommRingPadicInt p hp_prime)))) (Semiring.toNonAssocSemiring.{0} (ZMod p) (DivisionSemiring.toSemiring.{0} (ZMod p) (Semifield.toDivisionSemiring.{0} (ZMod p) (Field.toSemifield.{0} (ZMod p) (ZMod.instFieldZMod p hp_prime))))))))) (PadicInt.toZMod p hp_prime) z))) (LocalRing.maximalIdeal.{0} (PadicInt p hp_prime) (CommRing.toCommSemiring.{0} (PadicInt p hp_prime) (PadicInt.instCommRingPadicInt p hp_prime)) (PadicInt.instLocalRingPadicIntToSemiringToCommSemiringInstCommRingPadicInt p hp_prime))
-Case conversion may be inaccurate. Consider using '#align padic_int.to_zmod_spec PadicInt.toZMod_specₓ'. -/
/-- `z - (to_zmod z : ℤ_[p])` is contained in the maximal ideal of `ℤ_[p]`, for every `z : ℤ_[p]`.
The coercion from `zmod p` to `ℤ_[p]` is `zmod.has_coe_t`,
@@ -366,12 +297,6 @@ theorem toZMod_spec (z : ℤ_[p]) : z - (toZMod z : ℤ_[p]) ∈ maximalIdeal
simpa only [zero_add] using zmod_repr_lt_p z
#align padic_int.to_zmod_spec PadicInt.toZMod_spec
-/- warning: padic_int.ker_to_zmod -> PadicInt.ker_toZMod is a dubious translation:
-lean 3 declaration is
- forall {p : Nat} [hp_prime : Fact (Nat.Prime p)], Eq.{1} (Ideal.{0} (PadicInt p hp_prime) (Ring.toSemiring.{0} (PadicInt p hp_prime) (NormedRing.toRing.{0} (PadicInt p hp_prime) (NormedCommRing.toNormedRing.{0} (PadicInt p hp_prime) (PadicInt.normedCommRing p hp_prime))))) (RingHom.ker.{0, 0, 0} (PadicInt p hp_prime) (ZMod p) (RingHom.{0, 0} (PadicInt p hp_prime) (ZMod p) (NonAssocRing.toNonAssocSemiring.{0} (PadicInt p hp_prime) (Ring.toNonAssocRing.{0} (PadicInt p hp_prime) (NormedRing.toRing.{0} (PadicInt p hp_prime) (NormedCommRing.toNormedRing.{0} (PadicInt p hp_prime) (PadicInt.normedCommRing p hp_prime))))) (NonAssocRing.toNonAssocSemiring.{0} (ZMod p) (Ring.toNonAssocRing.{0} (ZMod p) (DivisionRing.toRing.{0} (ZMod p) (Field.toDivisionRing.{0} (ZMod p) (ZMod.field p hp_prime)))))) (Ring.toSemiring.{0} (PadicInt p hp_prime) (NormedRing.toRing.{0} (PadicInt p hp_prime) (NormedCommRing.toNormedRing.{0} (PadicInt p hp_prime) (PadicInt.normedCommRing p hp_prime)))) (Ring.toSemiring.{0} (ZMod p) (DivisionRing.toRing.{0} (ZMod p) (Field.toDivisionRing.{0} (ZMod p) (ZMod.field p hp_prime)))) (RingHom.ringHomClass.{0, 0} (PadicInt p hp_prime) (ZMod p) (NonAssocRing.toNonAssocSemiring.{0} (PadicInt p hp_prime) (Ring.toNonAssocRing.{0} (PadicInt p hp_prime) (NormedRing.toRing.{0} (PadicInt p hp_prime) (NormedCommRing.toNormedRing.{0} (PadicInt p hp_prime) (PadicInt.normedCommRing p hp_prime))))) (NonAssocRing.toNonAssocSemiring.{0} (ZMod p) (Ring.toNonAssocRing.{0} (ZMod p) (DivisionRing.toRing.{0} (ZMod p) (Field.toDivisionRing.{0} (ZMod p) (ZMod.field p hp_prime)))))) (PadicInt.toZMod p hp_prime)) (LocalRing.maximalIdeal.{0} (PadicInt p hp_prime) (CommRing.toCommSemiring.{0} (PadicInt p hp_prime) (PadicInt.commRing p hp_prime)) (PadicInt.localRing p hp_prime))
-but is expected to have type
- forall {p : Nat} [hp_prime : Fact (Nat.Prime p)], Eq.{1} (Ideal.{0} (PadicInt p hp_prime) (CommSemiring.toSemiring.{0} (PadicInt p hp_prime) (CommRing.toCommSemiring.{0} (PadicInt p hp_prime) (PadicInt.instCommRingPadicInt p hp_prime)))) (RingHom.ker.{0, 0, 0} (PadicInt p hp_prime) (ZMod p) (RingHom.{0, 0} (PadicInt p hp_prime) (ZMod p) (Semiring.toNonAssocSemiring.{0} (PadicInt p hp_prime) (CommSemiring.toSemiring.{0} (PadicInt p hp_prime) (CommRing.toCommSemiring.{0} (PadicInt p hp_prime) (PadicInt.instCommRingPadicInt p hp_prime)))) (Semiring.toNonAssocSemiring.{0} (ZMod p) (DivisionSemiring.toSemiring.{0} (ZMod p) (Semifield.toDivisionSemiring.{0} (ZMod p) (Field.toSemifield.{0} (ZMod p) (ZMod.instFieldZMod p hp_prime)))))) (CommSemiring.toSemiring.{0} (PadicInt p hp_prime) (CommRing.toCommSemiring.{0} (PadicInt p hp_prime) (PadicInt.instCommRingPadicInt p hp_prime))) (DivisionSemiring.toSemiring.{0} (ZMod p) (Semifield.toDivisionSemiring.{0} (ZMod p) (Field.toSemifield.{0} (ZMod p) (ZMod.instFieldZMod p hp_prime)))) (RingHom.instRingHomClassRingHom.{0, 0} (PadicInt p hp_prime) (ZMod p) (Semiring.toNonAssocSemiring.{0} (PadicInt p hp_prime) (CommSemiring.toSemiring.{0} (PadicInt p hp_prime) (CommRing.toCommSemiring.{0} (PadicInt p hp_prime) (PadicInt.instCommRingPadicInt p hp_prime)))) (Semiring.toNonAssocSemiring.{0} (ZMod p) (DivisionSemiring.toSemiring.{0} (ZMod p) (Semifield.toDivisionSemiring.{0} (ZMod p) (Field.toSemifield.{0} (ZMod p) (ZMod.instFieldZMod p hp_prime)))))) (PadicInt.toZMod p hp_prime)) (LocalRing.maximalIdeal.{0} (PadicInt p hp_prime) (CommRing.toCommSemiring.{0} (PadicInt p hp_prime) (PadicInt.instCommRingPadicInt p hp_prime)) (PadicInt.instLocalRingPadicIntToSemiringToCommSemiringInstCommRingPadicInt p hp_prime))
-Case conversion may be inaccurate. Consider using '#align padic_int.ker_to_zmod PadicInt.ker_toZModₓ'. -/
theorem ker_toZMod : (toZMod : ℤ_[p] →+* ZMod p).ker = maximalIdeal ℤ_[p] :=
by
ext x
@@ -450,12 +375,6 @@ theorem dvd_appr_sub_appr (x : ℤ_[p]) (m n : ℕ) (h : m ≤ n) : p ^ m ∣ x.
#align padic_int.dvd_appr_sub_appr PadicInt.dvd_appr_sub_appr
-/
-/- warning: padic_int.appr_spec -> PadicInt.appr_spec is a dubious translation:
-lean 3 declaration is
- forall {p : Nat} [hp_prime : Fact (Nat.Prime p)] (n : Nat) (x : PadicInt p hp_prime), Membership.Mem.{0, 0} (PadicInt p hp_prime) (Ideal.{0} (PadicInt p hp_prime) (Ring.toSemiring.{0} (PadicInt p hp_prime) (NormedRing.toRing.{0} (PadicInt p hp_prime) (NormedCommRing.toNormedRing.{0} (PadicInt p hp_prime) (PadicInt.normedCommRing p hp_prime))))) (SetLike.hasMem.{0, 0} (Ideal.{0} (PadicInt p hp_prime) (Ring.toSemiring.{0} (PadicInt p hp_prime) (NormedRing.toRing.{0} (PadicInt p hp_prime) (NormedCommRing.toNormedRing.{0} (PadicInt p hp_prime) (PadicInt.normedCommRing p hp_prime))))) (PadicInt p hp_prime) (Submodule.setLike.{0, 0} (PadicInt p hp_prime) (PadicInt p hp_prime) (Ring.toSemiring.{0} (PadicInt p hp_prime) (NormedRing.toRing.{0} (PadicInt p hp_prime) (NormedCommRing.toNormedRing.{0} (PadicInt p hp_prime) (PadicInt.normedCommRing p hp_prime)))) (NonUnitalNonAssocSemiring.toAddCommMonoid.{0} (PadicInt p hp_prime) (NonAssocSemiring.toNonUnitalNonAssocSemiring.{0} (PadicInt p hp_prime) (Semiring.toNonAssocSemiring.{0} (PadicInt p hp_prime) (Ring.toSemiring.{0} (PadicInt p hp_prime) (NormedRing.toRing.{0} (PadicInt p hp_prime) (NormedCommRing.toNormedRing.{0} (PadicInt p hp_prime) (PadicInt.normedCommRing p hp_prime))))))) (Semiring.toModule.{0} (PadicInt p hp_prime) (Ring.toSemiring.{0} (PadicInt p hp_prime) (NormedRing.toRing.{0} (PadicInt p hp_prime) (NormedCommRing.toNormedRing.{0} (PadicInt p hp_prime) (PadicInt.normedCommRing p hp_prime))))))) (HSub.hSub.{0, 0, 0} (PadicInt p hp_prime) (PadicInt p hp_prime) (PadicInt p hp_prime) (instHSub.{0} (PadicInt p hp_prime) (PadicInt.hasSub p hp_prime)) x ((fun (a : Type) (b : Type) [self : HasLiftT.{1, 1} a b] => self.0) Nat (PadicInt p hp_prime) (HasLiftT.mk.{1, 1} Nat (PadicInt p hp_prime) (CoeTCₓ.coe.{1, 1} Nat (PadicInt p hp_prime) (Nat.castCoe.{0} (PadicInt p hp_prime) (AddMonoidWithOne.toNatCast.{0} (PadicInt p hp_prime) (AddGroupWithOne.toAddMonoidWithOne.{0} (PadicInt p hp_prime) (AddCommGroupWithOne.toAddGroupWithOne.{0} (PadicInt p hp_prime) (Ring.toAddCommGroupWithOne.{0} (PadicInt p hp_prime) (NormedRing.toRing.{0} (PadicInt p hp_prime) (NormedCommRing.toNormedRing.{0} (PadicInt p hp_prime) (PadicInt.normedCommRing p hp_prime)))))))))) (PadicInt.appr p hp_prime x n))) (Ideal.span.{0} (PadicInt p hp_prime) (Ring.toSemiring.{0} (PadicInt p hp_prime) (NormedRing.toRing.{0} (PadicInt p hp_prime) (NormedCommRing.toNormedRing.{0} (PadicInt p hp_prime) (PadicInt.normedCommRing p hp_prime)))) (Singleton.singleton.{0, 0} (PadicInt p hp_prime) (Set.{0} (PadicInt p hp_prime)) (Set.hasSingleton.{0} (PadicInt p hp_prime)) (HPow.hPow.{0, 0, 0} (PadicInt p hp_prime) Nat (PadicInt p hp_prime) (instHPow.{0, 0} (PadicInt p hp_prime) Nat (Monoid.Pow.{0} (PadicInt p hp_prime) (Ring.toMonoid.{0} (PadicInt p hp_prime) (NormedRing.toRing.{0} (PadicInt p hp_prime) (NormedCommRing.toNormedRing.{0} (PadicInt p hp_prime) (PadicInt.normedCommRing p hp_prime)))))) ((fun (a : Type) (b : Type) [self : HasLiftT.{1, 1} a b] => self.0) Nat (PadicInt p hp_prime) (HasLiftT.mk.{1, 1} Nat (PadicInt p hp_prime) (CoeTCₓ.coe.{1, 1} Nat (PadicInt p hp_prime) (Nat.castCoe.{0} (PadicInt p hp_prime) (AddMonoidWithOne.toNatCast.{0} (PadicInt p hp_prime) (AddGroupWithOne.toAddMonoidWithOne.{0} (PadicInt p hp_prime) (AddCommGroupWithOne.toAddGroupWithOne.{0} (PadicInt p hp_prime) (Ring.toAddCommGroupWithOne.{0} (PadicInt p hp_prime) (NormedRing.toRing.{0} (PadicInt p hp_prime) (NormedCommRing.toNormedRing.{0} (PadicInt p hp_prime) (PadicInt.normedCommRing p hp_prime)))))))))) p) n)))
-but is expected to have type
- forall {p : Nat} [hp_prime : Fact (Nat.Prime p)] (n : Nat) (x : PadicInt p hp_prime), Membership.mem.{0, 0} (PadicInt p hp_prime) (Ideal.{0} (PadicInt p hp_prime) (CommSemiring.toSemiring.{0} (PadicInt p hp_prime) (CommRing.toCommSemiring.{0} (PadicInt p hp_prime) (PadicInt.instCommRingPadicInt p hp_prime)))) (SetLike.instMembership.{0, 0} (Ideal.{0} (PadicInt p hp_prime) (CommSemiring.toSemiring.{0} (PadicInt p hp_prime) (CommRing.toCommSemiring.{0} (PadicInt p hp_prime) (PadicInt.instCommRingPadicInt p hp_prime)))) (PadicInt p hp_prime) (Submodule.setLike.{0, 0} (PadicInt p hp_prime) (PadicInt p hp_prime) (CommSemiring.toSemiring.{0} (PadicInt p hp_prime) (CommRing.toCommSemiring.{0} (PadicInt p hp_prime) (PadicInt.instCommRingPadicInt p hp_prime))) (NonUnitalNonAssocSemiring.toAddCommMonoid.{0} (PadicInt p hp_prime) (NonAssocSemiring.toNonUnitalNonAssocSemiring.{0} (PadicInt p hp_prime) (Semiring.toNonAssocSemiring.{0} (PadicInt p hp_prime) (CommSemiring.toSemiring.{0} (PadicInt p hp_prime) (CommRing.toCommSemiring.{0} (PadicInt p hp_prime) (PadicInt.instCommRingPadicInt p hp_prime)))))) (Semiring.toModule.{0} (PadicInt p hp_prime) (CommSemiring.toSemiring.{0} (PadicInt p hp_prime) (CommRing.toCommSemiring.{0} (PadicInt p hp_prime) (PadicInt.instCommRingPadicInt p hp_prime)))))) (HSub.hSub.{0, 0, 0} (PadicInt p hp_prime) (PadicInt p hp_prime) (PadicInt p hp_prime) (instHSub.{0} (PadicInt p hp_prime) (PadicInt.instSubPadicInt p hp_prime)) x (Nat.cast.{0} (PadicInt p hp_prime) (Semiring.toNatCast.{0} (PadicInt p hp_prime) (CommSemiring.toSemiring.{0} (PadicInt p hp_prime) (CommRing.toCommSemiring.{0} (PadicInt p hp_prime) (PadicInt.instCommRingPadicInt p hp_prime)))) (PadicInt.appr p hp_prime x n))) (Ideal.span.{0} (PadicInt p hp_prime) (CommSemiring.toSemiring.{0} (PadicInt p hp_prime) (CommRing.toCommSemiring.{0} (PadicInt p hp_prime) (PadicInt.instCommRingPadicInt p hp_prime))) (Singleton.singleton.{0, 0} (PadicInt p hp_prime) (Set.{0} (PadicInt p hp_prime)) (Set.instSingletonSet.{0} (PadicInt p hp_prime)) (HPow.hPow.{0, 0, 0} (PadicInt p hp_prime) Nat (PadicInt p hp_prime) (instHPow.{0, 0} (PadicInt p hp_prime) Nat (Monoid.Pow.{0} (PadicInt p hp_prime) (MonoidWithZero.toMonoid.{0} (PadicInt p hp_prime) (Semiring.toMonoidWithZero.{0} (PadicInt p hp_prime) (CommSemiring.toSemiring.{0} (PadicInt p hp_prime) (CommRing.toCommSemiring.{0} (PadicInt p hp_prime) (PadicInt.instCommRingPadicInt p hp_prime))))))) (Nat.cast.{0} (PadicInt p hp_prime) (Semiring.toNatCast.{0} (PadicInt p hp_prime) (CommSemiring.toSemiring.{0} (PadicInt p hp_prime) (CommRing.toCommSemiring.{0} (PadicInt p hp_prime) (PadicInt.instCommRingPadicInt p hp_prime)))) p) n)))
-Case conversion may be inaccurate. Consider using '#align padic_int.appr_spec PadicInt.appr_specₓ'. -/
theorem appr_spec (n : ℕ) : ∀ x : ℤ_[p], x - appr x n ∈ (Ideal.span {p ^ n} : Ideal ℤ_[p]) :=
by
simp only [Ideal.mem_span_singleton]
@@ -495,12 +414,6 @@ theorem appr_spec (n : ℕ) : ∀ x : ℤ_[p], x - appr x n ∈ (Ideal.span {p ^
exact (dvd_pow_self (p : ℤ_[p]) hc0.ne').mul_left _
#align padic_int.appr_spec PadicInt.appr_spec
-/- warning: padic_int.to_zmod_pow -> PadicInt.toZModPow is a dubious translation:
-lean 3 declaration is
- forall {p : Nat} [hp_prime : Fact (Nat.Prime p)] (n : Nat), RingHom.{0, 0} (PadicInt p hp_prime) (ZMod (HPow.hPow.{0, 0, 0} Nat Nat Nat (instHPow.{0, 0} Nat Nat (Monoid.Pow.{0} Nat Nat.monoid)) p n)) (NonAssocRing.toNonAssocSemiring.{0} (PadicInt p hp_prime) (Ring.toNonAssocRing.{0} (PadicInt p hp_prime) (NormedRing.toRing.{0} (PadicInt p hp_prime) (NormedCommRing.toNormedRing.{0} (PadicInt p hp_prime) (PadicInt.normedCommRing p hp_prime))))) (NonAssocRing.toNonAssocSemiring.{0} (ZMod (HPow.hPow.{0, 0, 0} Nat Nat Nat (instHPow.{0, 0} Nat Nat (Monoid.Pow.{0} Nat Nat.monoid)) p n)) (Ring.toNonAssocRing.{0} (ZMod (HPow.hPow.{0, 0, 0} Nat Nat Nat (instHPow.{0, 0} Nat Nat (Monoid.Pow.{0} Nat Nat.monoid)) p n)) (CommRing.toRing.{0} (ZMod (HPow.hPow.{0, 0, 0} Nat Nat Nat (instHPow.{0, 0} Nat Nat (Monoid.Pow.{0} Nat Nat.monoid)) p n)) (ZMod.commRing (HPow.hPow.{0, 0, 0} Nat Nat Nat (instHPow.{0, 0} Nat Nat (Monoid.Pow.{0} Nat Nat.monoid)) p n)))))
-but is expected to have type
- forall {p : Nat} [hp_prime : Fact (Nat.Prime p)] (n : Nat), RingHom.{0, 0} (PadicInt p hp_prime) (ZMod (HPow.hPow.{0, 0, 0} Nat Nat Nat (instHPow.{0, 0} Nat Nat instPowNat) p n)) (Semiring.toNonAssocSemiring.{0} (PadicInt p hp_prime) (CommSemiring.toSemiring.{0} (PadicInt p hp_prime) (CommRing.toCommSemiring.{0} (PadicInt p hp_prime) (PadicInt.instCommRingPadicInt p hp_prime)))) (Semiring.toNonAssocSemiring.{0} (ZMod (HPow.hPow.{0, 0, 0} Nat Nat Nat (instHPow.{0, 0} Nat Nat instPowNat) p n)) (CommSemiring.toSemiring.{0} (ZMod (HPow.hPow.{0, 0, 0} Nat Nat Nat (instHPow.{0, 0} Nat Nat instPowNat) p n)) (CommRing.toCommSemiring.{0} (ZMod (HPow.hPow.{0, 0, 0} Nat Nat Nat (instHPow.{0, 0} Nat Nat instPowNat) p n)) (ZMod.commRing (HPow.hPow.{0, 0, 0} Nat Nat Nat (instHPow.{0, 0} Nat Nat instPowNat) p n)))))
-Case conversion may be inaccurate. Consider using '#align padic_int.to_zmod_pow PadicInt.toZModPowₓ'. -/
/-- A ring hom from `ℤ_[p]` to `zmod (p^n)`, with underlying function `padic_int.appr n`. -/
def toZModPow (n : ℕ) : ℤ_[p] →+* ZMod (p ^ n) :=
toZModHom (p ^ n) (fun x => appr x n) (by intros ; convert appr_spec n _ using 1; simp)
@@ -511,12 +424,6 @@ def toZModPow (n : ℕ) : ℤ_[p] →+* ZMod (p ^ n) :=
· simpa using hb)
#align padic_int.to_zmod_pow PadicInt.toZModPow
-/- warning: padic_int.ker_to_zmod_pow -> PadicInt.ker_toZModPow is a dubious translation:
-lean 3 declaration is
- forall {p : Nat} [hp_prime : Fact (Nat.Prime p)] (n : Nat), Eq.{1} (Ideal.{0} (PadicInt p hp_prime) (Ring.toSemiring.{0} (PadicInt p hp_prime) (NormedRing.toRing.{0} (PadicInt p hp_prime) (NormedCommRing.toNormedRing.{0} (PadicInt p hp_prime) (PadicInt.normedCommRing p hp_prime))))) (RingHom.ker.{0, 0, 0} (PadicInt p hp_prime) (ZMod (HPow.hPow.{0, 0, 0} Nat Nat Nat (instHPow.{0, 0} Nat Nat (Monoid.Pow.{0} Nat Nat.monoid)) p n)) (RingHom.{0, 0} (PadicInt p hp_prime) (ZMod (HPow.hPow.{0, 0, 0} Nat Nat Nat (instHPow.{0, 0} Nat Nat (Monoid.Pow.{0} Nat Nat.monoid)) p n)) (NonAssocRing.toNonAssocSemiring.{0} (PadicInt p hp_prime) (Ring.toNonAssocRing.{0} (PadicInt p hp_prime) (NormedRing.toRing.{0} (PadicInt p hp_prime) (NormedCommRing.toNormedRing.{0} (PadicInt p hp_prime) (PadicInt.normedCommRing p hp_prime))))) (NonAssocRing.toNonAssocSemiring.{0} (ZMod (HPow.hPow.{0, 0, 0} Nat Nat Nat (instHPow.{0, 0} Nat Nat (Monoid.Pow.{0} Nat Nat.monoid)) p n)) (Ring.toNonAssocRing.{0} (ZMod (HPow.hPow.{0, 0, 0} Nat Nat Nat (instHPow.{0, 0} Nat Nat (Monoid.Pow.{0} Nat Nat.monoid)) p n)) (CommRing.toRing.{0} (ZMod (HPow.hPow.{0, 0, 0} Nat Nat Nat (instHPow.{0, 0} Nat Nat (Monoid.Pow.{0} Nat Nat.monoid)) p n)) (ZMod.commRing (HPow.hPow.{0, 0, 0} Nat Nat Nat (instHPow.{0, 0} Nat Nat (Monoid.Pow.{0} Nat Nat.monoid)) p n)))))) (Ring.toSemiring.{0} (PadicInt p hp_prime) (NormedRing.toRing.{0} (PadicInt p hp_prime) (NormedCommRing.toNormedRing.{0} (PadicInt p hp_prime) (PadicInt.normedCommRing p hp_prime)))) (Ring.toSemiring.{0} (ZMod (HPow.hPow.{0, 0, 0} Nat Nat Nat (instHPow.{0, 0} Nat Nat (Monoid.Pow.{0} Nat Nat.monoid)) p n)) (CommRing.toRing.{0} (ZMod (HPow.hPow.{0, 0, 0} Nat Nat Nat (instHPow.{0, 0} Nat Nat (Monoid.Pow.{0} Nat Nat.monoid)) p n)) (ZMod.commRing (HPow.hPow.{0, 0, 0} Nat Nat Nat (instHPow.{0, 0} Nat Nat (Monoid.Pow.{0} Nat Nat.monoid)) p n)))) (RingHom.ringHomClass.{0, 0} (PadicInt p hp_prime) (ZMod (HPow.hPow.{0, 0, 0} Nat Nat Nat (instHPow.{0, 0} Nat Nat (Monoid.Pow.{0} Nat Nat.monoid)) p n)) (NonAssocRing.toNonAssocSemiring.{0} (PadicInt p hp_prime) (Ring.toNonAssocRing.{0} (PadicInt p hp_prime) (NormedRing.toRing.{0} (PadicInt p hp_prime) (NormedCommRing.toNormedRing.{0} (PadicInt p hp_prime) (PadicInt.normedCommRing p hp_prime))))) (NonAssocRing.toNonAssocSemiring.{0} (ZMod (HPow.hPow.{0, 0, 0} Nat Nat Nat (instHPow.{0, 0} Nat Nat (Monoid.Pow.{0} Nat Nat.monoid)) p n)) (Ring.toNonAssocRing.{0} (ZMod (HPow.hPow.{0, 0, 0} Nat Nat Nat (instHPow.{0, 0} Nat Nat (Monoid.Pow.{0} Nat Nat.monoid)) p n)) (CommRing.toRing.{0} (ZMod (HPow.hPow.{0, 0, 0} Nat Nat Nat (instHPow.{0, 0} Nat Nat (Monoid.Pow.{0} Nat Nat.monoid)) p n)) (ZMod.commRing (HPow.hPow.{0, 0, 0} Nat Nat Nat (instHPow.{0, 0} Nat Nat (Monoid.Pow.{0} Nat Nat.monoid)) p n)))))) (PadicInt.toZModPow p hp_prime n)) (Ideal.span.{0} (PadicInt p hp_prime) (Ring.toSemiring.{0} (PadicInt p hp_prime) (NormedRing.toRing.{0} (PadicInt p hp_prime) (NormedCommRing.toNormedRing.{0} (PadicInt p hp_prime) (PadicInt.normedCommRing p hp_prime)))) (Singleton.singleton.{0, 0} (PadicInt p hp_prime) (Set.{0} (PadicInt p hp_prime)) (Set.hasSingleton.{0} (PadicInt p hp_prime)) (HPow.hPow.{0, 0, 0} (PadicInt p hp_prime) Nat (PadicInt p hp_prime) (instHPow.{0, 0} (PadicInt p hp_prime) Nat (Monoid.Pow.{0} (PadicInt p hp_prime) (Ring.toMonoid.{0} (PadicInt p hp_prime) (NormedRing.toRing.{0} (PadicInt p hp_prime) (NormedCommRing.toNormedRing.{0} (PadicInt p hp_prime) (PadicInt.normedCommRing p hp_prime)))))) ((fun (a : Type) (b : Type) [self : HasLiftT.{1, 1} a b] => self.0) Nat (PadicInt p hp_prime) (HasLiftT.mk.{1, 1} Nat (PadicInt p hp_prime) (CoeTCₓ.coe.{1, 1} Nat (PadicInt p hp_prime) (Nat.castCoe.{0} (PadicInt p hp_prime) (AddMonoidWithOne.toNatCast.{0} (PadicInt p hp_prime) (AddGroupWithOne.toAddMonoidWithOne.{0} (PadicInt p hp_prime) (AddCommGroupWithOne.toAddGroupWithOne.{0} (PadicInt p hp_prime) (Ring.toAddCommGroupWithOne.{0} (PadicInt p hp_prime) (NormedRing.toRing.{0} (PadicInt p hp_prime) (NormedCommRing.toNormedRing.{0} (PadicInt p hp_prime) (PadicInt.normedCommRing p hp_prime)))))))))) p) n)))
-but is expected to have type
- forall {p : Nat} [hp_prime : Fact (Nat.Prime p)] (n : Nat), Eq.{1} (Ideal.{0} (PadicInt p hp_prime) (CommSemiring.toSemiring.{0} (PadicInt p hp_prime) (CommRing.toCommSemiring.{0} (PadicInt p hp_prime) (PadicInt.instCommRingPadicInt p hp_prime)))) (RingHom.ker.{0, 0, 0} (PadicInt p hp_prime) (ZMod (HPow.hPow.{0, 0, 0} Nat Nat Nat (instHPow.{0, 0} Nat Nat instPowNat) p n)) (RingHom.{0, 0} (PadicInt p hp_prime) (ZMod (HPow.hPow.{0, 0, 0} Nat Nat Nat (instHPow.{0, 0} Nat Nat instPowNat) p n)) (Semiring.toNonAssocSemiring.{0} (PadicInt p hp_prime) (CommSemiring.toSemiring.{0} (PadicInt p hp_prime) (CommRing.toCommSemiring.{0} (PadicInt p hp_prime) (PadicInt.instCommRingPadicInt p hp_prime)))) (Semiring.toNonAssocSemiring.{0} (ZMod (HPow.hPow.{0, 0, 0} Nat Nat Nat (instHPow.{0, 0} Nat Nat instPowNat) p n)) (CommSemiring.toSemiring.{0} (ZMod (HPow.hPow.{0, 0, 0} Nat Nat Nat (instHPow.{0, 0} Nat Nat instPowNat) p n)) (CommRing.toCommSemiring.{0} (ZMod (HPow.hPow.{0, 0, 0} Nat Nat Nat (instHPow.{0, 0} Nat Nat instPowNat) p n)) (ZMod.commRing (HPow.hPow.{0, 0, 0} Nat Nat Nat (instHPow.{0, 0} Nat Nat instPowNat) p n)))))) (CommSemiring.toSemiring.{0} (PadicInt p hp_prime) (CommRing.toCommSemiring.{0} (PadicInt p hp_prime) (PadicInt.instCommRingPadicInt p hp_prime))) (CommSemiring.toSemiring.{0} (ZMod (HPow.hPow.{0, 0, 0} Nat Nat Nat (instHPow.{0, 0} Nat Nat instPowNat) p n)) (CommRing.toCommSemiring.{0} (ZMod (HPow.hPow.{0, 0, 0} Nat Nat Nat (instHPow.{0, 0} Nat Nat instPowNat) p n)) (ZMod.commRing (HPow.hPow.{0, 0, 0} Nat Nat Nat (instHPow.{0, 0} Nat Nat instPowNat) p n)))) (RingHom.instRingHomClassRingHom.{0, 0} (PadicInt p hp_prime) (ZMod (HPow.hPow.{0, 0, 0} Nat Nat Nat (instHPow.{0, 0} Nat Nat instPowNat) p n)) (Semiring.toNonAssocSemiring.{0} (PadicInt p hp_prime) (CommSemiring.toSemiring.{0} (PadicInt p hp_prime) (CommRing.toCommSemiring.{0} (PadicInt p hp_prime) (PadicInt.instCommRingPadicInt p hp_prime)))) (Semiring.toNonAssocSemiring.{0} (ZMod (HPow.hPow.{0, 0, 0} Nat Nat Nat (instHPow.{0, 0} Nat Nat instPowNat) p n)) (CommSemiring.toSemiring.{0} (ZMod (HPow.hPow.{0, 0, 0} Nat Nat Nat (instHPow.{0, 0} Nat Nat instPowNat) p n)) (CommRing.toCommSemiring.{0} (ZMod (HPow.hPow.{0, 0, 0} Nat Nat Nat (instHPow.{0, 0} Nat Nat instPowNat) p n)) (ZMod.commRing (HPow.hPow.{0, 0, 0} Nat Nat Nat (instHPow.{0, 0} Nat Nat instPowNat) p n)))))) (PadicInt.toZModPow p hp_prime n)) (Ideal.span.{0} (PadicInt p hp_prime) (CommSemiring.toSemiring.{0} (PadicInt p hp_prime) (CommRing.toCommSemiring.{0} (PadicInt p hp_prime) (PadicInt.instCommRingPadicInt p hp_prime))) (Singleton.singleton.{0, 0} (PadicInt p hp_prime) (Set.{0} (PadicInt p hp_prime)) (Set.instSingletonSet.{0} (PadicInt p hp_prime)) (HPow.hPow.{0, 0, 0} (PadicInt p hp_prime) Nat (PadicInt p hp_prime) (instHPow.{0, 0} (PadicInt p hp_prime) Nat (Monoid.Pow.{0} (PadicInt p hp_prime) (MonoidWithZero.toMonoid.{0} (PadicInt p hp_prime) (Semiring.toMonoidWithZero.{0} (PadicInt p hp_prime) (CommSemiring.toSemiring.{0} (PadicInt p hp_prime) (CommRing.toCommSemiring.{0} (PadicInt p hp_prime) (PadicInt.instCommRingPadicInt p hp_prime))))))) (Nat.cast.{0} (PadicInt p hp_prime) (Semiring.toNatCast.{0} (PadicInt p hp_prime) (CommSemiring.toSemiring.{0} (PadicInt p hp_prime) (CommRing.toCommSemiring.{0} (PadicInt p hp_prime) (PadicInt.instCommRingPadicInt p hp_prime)))) p) n)))
-Case conversion may be inaccurate. Consider using '#align padic_int.ker_to_zmod_pow PadicInt.ker_toZModPowₓ'. -/
theorem ker_toZModPow (n : ℕ) : (toZModPow n : ℤ_[p] →+* ZMod (p ^ n)).ker = Ideal.span {p ^ n} :=
by
ext x
@@ -534,12 +441,6 @@ theorem ker_toZModPow (n : ℕ) : (toZModPow n : ℤ_[p] →+* ZMod (p ^ n)).ker
apply appr_spec
#align padic_int.ker_to_zmod_pow PadicInt.ker_toZModPow
-/- warning: padic_int.zmod_cast_comp_to_zmod_pow -> PadicInt.zmod_cast_comp_toZModPow is a dubious translation:
-lean 3 declaration is
- forall {p : Nat} [hp_prime : Fact (Nat.Prime p)] (m : Nat) (n : Nat) (h : LE.le.{0} Nat Nat.hasLe m n), Eq.{1} (RingHom.{0, 0} (PadicInt p hp_prime) (ZMod (HPow.hPow.{0, 0, 0} Nat Nat Nat (instHPow.{0, 0} Nat Nat (Monoid.Pow.{0} Nat Nat.monoid)) p m)) (NonAssocRing.toNonAssocSemiring.{0} (PadicInt p hp_prime) (Ring.toNonAssocRing.{0} (PadicInt p hp_prime) (NormedRing.toRing.{0} (PadicInt p hp_prime) (NormedCommRing.toNormedRing.{0} (PadicInt p hp_prime) (PadicInt.normedCommRing p hp_prime))))) (NonAssocRing.toNonAssocSemiring.{0} (ZMod (HPow.hPow.{0, 0, 0} Nat Nat Nat (instHPow.{0, 0} Nat Nat (Monoid.Pow.{0} Nat Nat.monoid)) p m)) (Ring.toNonAssocRing.{0} (ZMod (HPow.hPow.{0, 0, 0} Nat Nat Nat (instHPow.{0, 0} Nat Nat (Monoid.Pow.{0} Nat Nat.monoid)) p m)) (CommRing.toRing.{0} (ZMod (HPow.hPow.{0, 0, 0} Nat Nat Nat (instHPow.{0, 0} Nat Nat (Monoid.Pow.{0} Nat Nat.monoid)) p m)) (ZMod.commRing (HPow.hPow.{0, 0, 0} Nat Nat Nat (instHPow.{0, 0} Nat Nat (Monoid.Pow.{0} Nat Nat.monoid)) p m)))))) (RingHom.comp.{0, 0, 0} (PadicInt p hp_prime) (ZMod (HPow.hPow.{0, 0, 0} Nat Nat Nat (instHPow.{0, 0} Nat Nat (Monoid.Pow.{0} Nat Nat.monoid)) p n)) (ZMod (HPow.hPow.{0, 0, 0} Nat Nat Nat (instHPow.{0, 0} Nat Nat (Monoid.Pow.{0} Nat Nat.monoid)) p m)) (NonAssocRing.toNonAssocSemiring.{0} (PadicInt p hp_prime) (Ring.toNonAssocRing.{0} (PadicInt p hp_prime) (NormedRing.toRing.{0} (PadicInt p hp_prime) (NormedCommRing.toNormedRing.{0} (PadicInt p hp_prime) (PadicInt.normedCommRing p hp_prime))))) (NonAssocRing.toNonAssocSemiring.{0} (ZMod (HPow.hPow.{0, 0, 0} Nat Nat Nat (instHPow.{0, 0} Nat Nat (Monoid.Pow.{0} Nat Nat.monoid)) p n)) (Ring.toNonAssocRing.{0} (ZMod (HPow.hPow.{0, 0, 0} Nat Nat Nat (instHPow.{0, 0} Nat Nat (Monoid.Pow.{0} Nat Nat.monoid)) p n)) (CommRing.toRing.{0} (ZMod (HPow.hPow.{0, 0, 0} Nat Nat Nat (instHPow.{0, 0} Nat Nat (Monoid.Pow.{0} Nat Nat.monoid)) p n)) (ZMod.commRing (HPow.hPow.{0, 0, 0} Nat Nat Nat (instHPow.{0, 0} Nat Nat (Monoid.Pow.{0} Nat Nat.monoid)) p n))))) (NonAssocRing.toNonAssocSemiring.{0} (ZMod (HPow.hPow.{0, 0, 0} Nat Nat Nat (instHPow.{0, 0} Nat Nat (Monoid.Pow.{0} Nat Nat.monoid)) p m)) (Ring.toNonAssocRing.{0} (ZMod (HPow.hPow.{0, 0, 0} Nat Nat Nat (instHPow.{0, 0} Nat Nat (Monoid.Pow.{0} Nat Nat.monoid)) p m)) (CommRing.toRing.{0} (ZMod (HPow.hPow.{0, 0, 0} Nat Nat Nat (instHPow.{0, 0} Nat Nat (Monoid.Pow.{0} Nat Nat.monoid)) p m)) (ZMod.commRing (HPow.hPow.{0, 0, 0} Nat Nat Nat (instHPow.{0, 0} Nat Nat (Monoid.Pow.{0} Nat Nat.monoid)) p m))))) (ZMod.castHom.{0} (HPow.hPow.{0, 0, 0} Nat Nat Nat (instHPow.{0, 0} Nat Nat (Monoid.Pow.{0} Nat Nat.monoid)) p n) (HPow.hPow.{0, 0, 0} Nat Nat Nat (instHPow.{0, 0} Nat Nat (Monoid.Pow.{0} Nat Nat.monoid)) p m) (pow_dvd_pow.{0} Nat Nat.monoid p m n h) (ZMod (HPow.hPow.{0, 0, 0} Nat Nat Nat (instHPow.{0, 0} Nat Nat (Monoid.Pow.{0} Nat Nat.monoid)) p m)) (CommRing.toRing.{0} (ZMod (HPow.hPow.{0, 0, 0} Nat Nat Nat (instHPow.{0, 0} Nat Nat (Monoid.Pow.{0} Nat Nat.monoid)) p m)) (ZMod.commRing (HPow.hPow.{0, 0, 0} Nat Nat Nat (instHPow.{0, 0} Nat Nat (Monoid.Pow.{0} Nat Nat.monoid)) p m))) (ZMod.charP (HPow.hPow.{0, 0, 0} Nat Nat Nat (instHPow.{0, 0} Nat Nat (Monoid.Pow.{0} Nat Nat.monoid)) p m))) (PadicInt.toZModPow p hp_prime n)) (PadicInt.toZModPow p hp_prime m)
-but is expected to have type
- forall {p : Nat} [hp_prime : Fact (Nat.Prime p)] (m : Nat) (n : Nat) (h : LE.le.{0} Nat instLENat m n), Eq.{1} (RingHom.{0, 0} (PadicInt p hp_prime) (ZMod (HPow.hPow.{0, 0, 0} Nat Nat Nat (instHPow.{0, 0} Nat Nat instPowNat) p m)) (Semiring.toNonAssocSemiring.{0} (PadicInt p hp_prime) (CommSemiring.toSemiring.{0} (PadicInt p hp_prime) (CommRing.toCommSemiring.{0} (PadicInt p hp_prime) (PadicInt.instCommRingPadicInt p hp_prime)))) (Semiring.toNonAssocSemiring.{0} (ZMod (HPow.hPow.{0, 0, 0} Nat Nat Nat (instHPow.{0, 0} Nat Nat instPowNat) p m)) (Ring.toSemiring.{0} (ZMod (HPow.hPow.{0, 0, 0} Nat Nat Nat (instHPow.{0, 0} Nat Nat instPowNat) p m)) (CommRing.toRing.{0} (ZMod (HPow.hPow.{0, 0, 0} Nat Nat Nat (instHPow.{0, 0} Nat Nat instPowNat) p m)) (ZMod.commRing (HPow.hPow.{0, 0, 0} Nat Nat Nat (instHPow.{0, 0} Nat Nat instPowNat) p m)))))) (RingHom.comp.{0, 0, 0} (PadicInt p hp_prime) (ZMod (HPow.hPow.{0, 0, 0} Nat Nat Nat (instHPow.{0, 0} Nat Nat (Monoid.Pow.{0} Nat Nat.monoid)) p n)) (ZMod (HPow.hPow.{0, 0, 0} Nat Nat Nat (instHPow.{0, 0} Nat Nat instPowNat) p m)) (Semiring.toNonAssocSemiring.{0} (PadicInt p hp_prime) (CommSemiring.toSemiring.{0} (PadicInt p hp_prime) (CommRing.toCommSemiring.{0} (PadicInt p hp_prime) (PadicInt.instCommRingPadicInt p hp_prime)))) (Semiring.toNonAssocSemiring.{0} (ZMod (HPow.hPow.{0, 0, 0} Nat Nat Nat (instHPow.{0, 0} Nat Nat (Monoid.Pow.{0} Nat Nat.monoid)) p n)) (CommSemiring.toSemiring.{0} (ZMod (HPow.hPow.{0, 0, 0} Nat Nat Nat (instHPow.{0, 0} Nat Nat (Monoid.Pow.{0} Nat Nat.monoid)) p n)) (CommRing.toCommSemiring.{0} (ZMod (HPow.hPow.{0, 0, 0} Nat Nat Nat (instHPow.{0, 0} Nat Nat (Monoid.Pow.{0} Nat Nat.monoid)) p n)) (ZMod.commRing (HPow.hPow.{0, 0, 0} Nat Nat Nat (instHPow.{0, 0} Nat Nat (Monoid.Pow.{0} Nat Nat.monoid)) p n))))) (Semiring.toNonAssocSemiring.{0} (ZMod (HPow.hPow.{0, 0, 0} Nat Nat Nat (instHPow.{0, 0} Nat Nat instPowNat) p m)) (Ring.toSemiring.{0} (ZMod (HPow.hPow.{0, 0, 0} Nat Nat Nat (instHPow.{0, 0} Nat Nat instPowNat) p m)) (CommRing.toRing.{0} (ZMod (HPow.hPow.{0, 0, 0} Nat Nat Nat (instHPow.{0, 0} Nat Nat instPowNat) p m)) (ZMod.commRing (HPow.hPow.{0, 0, 0} Nat Nat Nat (instHPow.{0, 0} Nat Nat instPowNat) p m))))) (ZMod.castHom.{0} (HPow.hPow.{0, 0, 0} Nat Nat Nat (instHPow.{0, 0} Nat Nat (Monoid.Pow.{0} Nat Nat.monoid)) p n) (HPow.hPow.{0, 0, 0} Nat Nat Nat (instHPow.{0, 0} Nat Nat (Monoid.Pow.{0} Nat Nat.monoid)) p m) (pow_dvd_pow.{0} Nat Nat.monoid p m n h) (ZMod (HPow.hPow.{0, 0, 0} Nat Nat Nat (instHPow.{0, 0} Nat Nat instPowNat) p m)) (CommRing.toRing.{0} (ZMod (HPow.hPow.{0, 0, 0} Nat Nat Nat (instHPow.{0, 0} Nat Nat instPowNat) p m)) (ZMod.commRing (HPow.hPow.{0, 0, 0} Nat Nat Nat (instHPow.{0, 0} Nat Nat instPowNat) p m))) (ZMod.charP (HPow.hPow.{0, 0, 0} Nat Nat Nat (instHPow.{0, 0} Nat Nat instPowNat) p m))) (PadicInt.toZModPow p hp_prime n)) (PadicInt.toZModPow p hp_prime m)
-Case conversion may be inaccurate. Consider using '#align padic_int.zmod_cast_comp_to_zmod_pow PadicInt.zmod_cast_comp_toZModPowₓ'. -/
@[simp]
theorem zmod_cast_comp_toZModPow (m n : ℕ) (h : m ≤ n) :
(ZMod.castHom (pow_dvd_pow p h) (ZMod (p ^ m))).comp (toZModPow n) = toZModPow m :=
@@ -559,20 +460,11 @@ theorem zmod_cast_comp_toZModPow (m n : ℕ) (h : m ≤ n) :
· infer_instance
#align padic_int.zmod_cast_comp_to_zmod_pow PadicInt.zmod_cast_comp_toZModPow
-/- warning: padic_int.cast_to_zmod_pow -> PadicInt.cast_toZModPow is a dubious translation:
-<too large>
-Case conversion may be inaccurate. Consider using '#align padic_int.cast_to_zmod_pow PadicInt.cast_toZModPowₓ'. -/
@[simp]
theorem cast_toZModPow (m n : ℕ) (h : m ≤ n) (x : ℤ_[p]) : ↑(toZModPow n x) = toZModPow m x := by
rw [← zmod_cast_comp_to_zmod_pow _ _ h]; rfl
#align padic_int.cast_to_zmod_pow PadicInt.cast_toZModPow
-/- warning: padic_int.dense_range_nat_cast -> PadicInt.denseRange_nat_cast is a dubious translation:
-lean 3 declaration is
- forall {p : Nat} [hp_prime : Fact (Nat.Prime p)], DenseRange.{0, 0} (PadicInt p hp_prime) (UniformSpace.toTopologicalSpace.{0} (PadicInt p hp_prime) (PseudoMetricSpace.toUniformSpace.{0} (PadicInt p hp_prime) (SeminormedRing.toPseudoMetricSpace.{0} (PadicInt p hp_prime) (SeminormedCommRing.toSemiNormedRing.{0} (PadicInt p hp_prime) (NormedCommRing.toSeminormedCommRing.{0} (PadicInt p hp_prime) (PadicInt.normedCommRing p hp_prime)))))) Nat (Nat.cast.{0} (PadicInt p hp_prime) (AddMonoidWithOne.toNatCast.{0} (PadicInt p hp_prime) (AddGroupWithOne.toAddMonoidWithOne.{0} (PadicInt p hp_prime) (AddCommGroupWithOne.toAddGroupWithOne.{0} (PadicInt p hp_prime) (Ring.toAddCommGroupWithOne.{0} (PadicInt p hp_prime) (NormedRing.toRing.{0} (PadicInt p hp_prime) (NormedCommRing.toNormedRing.{0} (PadicInt p hp_prime) (PadicInt.normedCommRing p hp_prime))))))))
-but is expected to have type
- forall {p : Nat} [hp_prime : Fact (Nat.Prime p)], DenseRange.{0, 0} (PadicInt p hp_prime) (UniformSpace.toTopologicalSpace.{0} (PadicInt p hp_prime) (PseudoMetricSpace.toUniformSpace.{0} (PadicInt p hp_prime) (SeminormedRing.toPseudoMetricSpace.{0} (PadicInt p hp_prime) (SeminormedCommRing.toSeminormedRing.{0} (PadicInt p hp_prime) (NormedCommRing.toSeminormedCommRing.{0} (PadicInt p hp_prime) (PadicInt.instNormedCommRingPadicInt p hp_prime)))))) Nat (Nat.cast.{0} (PadicInt p hp_prime) (Semiring.toNatCast.{0} (PadicInt p hp_prime) (CommSemiring.toSemiring.{0} (PadicInt p hp_prime) (CommRing.toCommSemiring.{0} (PadicInt p hp_prime) (PadicInt.instCommRingPadicInt p hp_prime)))))
-Case conversion may be inaccurate. Consider using '#align padic_int.dense_range_nat_cast PadicInt.denseRange_nat_castₓ'. -/
theorem denseRange_nat_cast : DenseRange (Nat.cast : ℕ → ℤ_[p]) :=
by
intro x
@@ -586,12 +478,6 @@ theorem denseRange_nat_cast : DenseRange (Nat.cast : ℕ → ℤ_[p]) :=
apply appr_spec
#align padic_int.dense_range_nat_cast PadicInt.denseRange_nat_cast
-/- warning: padic_int.dense_range_int_cast -> PadicInt.denseRange_int_cast is a dubious translation:
-lean 3 declaration is
- forall {p : Nat} [hp_prime : Fact (Nat.Prime p)], DenseRange.{0, 0} (PadicInt p hp_prime) (UniformSpace.toTopologicalSpace.{0} (PadicInt p hp_prime) (PseudoMetricSpace.toUniformSpace.{0} (PadicInt p hp_prime) (SeminormedRing.toPseudoMetricSpace.{0} (PadicInt p hp_prime) (SeminormedCommRing.toSemiNormedRing.{0} (PadicInt p hp_prime) (NormedCommRing.toSeminormedCommRing.{0} (PadicInt p hp_prime) (PadicInt.normedCommRing p hp_prime)))))) Int (Int.cast.{0} (PadicInt p hp_prime) (AddGroupWithOne.toHasIntCast.{0} (PadicInt p hp_prime) (AddCommGroupWithOne.toAddGroupWithOne.{0} (PadicInt p hp_prime) (Ring.toAddCommGroupWithOne.{0} (PadicInt p hp_prime) (NormedRing.toRing.{0} (PadicInt p hp_prime) (NormedCommRing.toNormedRing.{0} (PadicInt p hp_prime) (PadicInt.normedCommRing p hp_prime)))))))
-but is expected to have type
- forall {p : Nat} [hp_prime : Fact (Nat.Prime p)], DenseRange.{0, 0} (PadicInt p hp_prime) (UniformSpace.toTopologicalSpace.{0} (PadicInt p hp_prime) (PseudoMetricSpace.toUniformSpace.{0} (PadicInt p hp_prime) (SeminormedRing.toPseudoMetricSpace.{0} (PadicInt p hp_prime) (SeminormedCommRing.toSeminormedRing.{0} (PadicInt p hp_prime) (NormedCommRing.toSeminormedCommRing.{0} (PadicInt p hp_prime) (PadicInt.instNormedCommRingPadicInt p hp_prime)))))) Int (Int.cast.{0} (PadicInt p hp_prime) (Ring.toIntCast.{0} (PadicInt p hp_prime) (NormedRing.toRing.{0} (PadicInt p hp_prime) (NormedCommRing.toNormedRing.{0} (PadicInt p hp_prime) (PadicInt.instNormedCommRingPadicInt p hp_prime)))))
-Case conversion may be inaccurate. Consider using '#align padic_int.dense_range_int_cast PadicInt.denseRange_int_castₓ'. -/
theorem denseRange_int_cast : DenseRange (Int.cast : ℤ → ℤ_[p]) :=
by
intro x
@@ -627,12 +513,6 @@ def nthHom (r : R) : ℕ → ℤ := fun n => (f n r : ZMod (p ^ n)).val
#align padic_int.nth_hom PadicInt.nthHom
-/
-/- warning: padic_int.nth_hom_zero -> PadicInt.nthHom_zero is a dubious translation:
-lean 3 declaration is
- forall {p : Nat} {R : Type.{u1}} [_inst_1 : NonAssocSemiring.{u1} R] (f : forall (k : Nat), RingHom.{u1, 0} R (ZMod (HPow.hPow.{0, 0, 0} Nat Nat Nat (instHPow.{0, 0} Nat Nat (Monoid.Pow.{0} Nat Nat.monoid)) p k)) _inst_1 (NonAssocRing.toNonAssocSemiring.{0} (ZMod (HPow.hPow.{0, 0, 0} Nat Nat Nat (instHPow.{0, 0} Nat Nat (Monoid.Pow.{0} Nat Nat.monoid)) p k)) (Ring.toNonAssocRing.{0} (ZMod (HPow.hPow.{0, 0, 0} Nat Nat Nat (instHPow.{0, 0} Nat Nat (Monoid.Pow.{0} Nat Nat.monoid)) p k)) (CommRing.toRing.{0} (ZMod (HPow.hPow.{0, 0, 0} Nat Nat Nat (instHPow.{0, 0} Nat Nat (Monoid.Pow.{0} Nat Nat.monoid)) p k)) (ZMod.commRing (HPow.hPow.{0, 0, 0} Nat Nat Nat (instHPow.{0, 0} Nat Nat (Monoid.Pow.{0} Nat Nat.monoid)) p k)))))), Eq.{1} (Nat -> Int) (PadicInt.nthHom.{u1} p R _inst_1 f (OfNat.ofNat.{u1} R 0 (OfNat.mk.{u1} R 0 (Zero.zero.{u1} R (MulZeroClass.toHasZero.{u1} R (NonUnitalNonAssocSemiring.toMulZeroClass.{u1} R (NonAssocSemiring.toNonUnitalNonAssocSemiring.{u1} R _inst_1))))))) (OfNat.ofNat.{0} (Nat -> Int) 0 (OfNat.mk.{0} (Nat -> Int) 0 (Zero.zero.{0} (Nat -> Int) (Pi.instZero.{0, 0} Nat (fun (ᾰ : Nat) => Int) (fun (i : Nat) => Int.hasZero)))))
-but is expected to have type
- forall {p : Nat} {R : Type.{u1}} [_inst_1 : NonAssocSemiring.{u1} R] (f : forall (k : Nat), RingHom.{u1, 0} R (ZMod (HPow.hPow.{0, 0, 0} Nat Nat Nat (instHPow.{0, 0} Nat Nat instPowNat) p k)) _inst_1 (Semiring.toNonAssocSemiring.{0} (ZMod (HPow.hPow.{0, 0, 0} Nat Nat Nat (instHPow.{0, 0} Nat Nat instPowNat) p k)) (CommSemiring.toSemiring.{0} (ZMod (HPow.hPow.{0, 0, 0} Nat Nat Nat (instHPow.{0, 0} Nat Nat instPowNat) p k)) (CommRing.toCommSemiring.{0} (ZMod (HPow.hPow.{0, 0, 0} Nat Nat Nat (instHPow.{0, 0} Nat Nat instPowNat) p k)) (ZMod.commRing (HPow.hPow.{0, 0, 0} Nat Nat Nat (instHPow.{0, 0} Nat Nat instPowNat) p k)))))), Eq.{1} (Nat -> Int) (PadicInt.nthHom.{u1} p R _inst_1 f (OfNat.ofNat.{u1} R 0 (Zero.toOfNat0.{u1} R (MulZeroOneClass.toZero.{u1} R (NonAssocSemiring.toMulZeroOneClass.{u1} R _inst_1))))) (OfNat.ofNat.{0} (Nat -> Int) 0 (Zero.toOfNat0.{0} (Nat -> Int) (Pi.instZero.{0, 0} Nat (fun (a._@.Mathlib.NumberTheory.Padics.RingHoms._hyg.5670 : Nat) => Int) (fun (i : Nat) => CommMonoidWithZero.toZero.{0} Int (CancelCommMonoidWithZero.toCommMonoidWithZero.{0} Int (IsDomain.toCancelCommMonoidWithZero.{0} Int Int.instCommSemiringInt (LinearOrderedRing.isDomain.{0} Int (LinearOrderedCommRing.toLinearOrderedRing.{0} Int Int.linearOrderedCommRing))))))))
-Case conversion may be inaccurate. Consider using '#align padic_int.nth_hom_zero PadicInt.nthHom_zeroₓ'. -/
@[simp]
theorem nthHom_zero : nthHom f 0 = 0 := by simp [nth_hom] <;> rfl
#align padic_int.nth_hom_zero PadicInt.nthHom_zero
@@ -643,12 +523,6 @@ include hp_prime
include f_compat
-/- warning: padic_int.pow_dvd_nth_hom_sub -> PadicInt.pow_dvd_nthHom_sub is a dubious translation:
-lean 3 declaration is
- forall {p : Nat} [hp_prime : Fact (Nat.Prime p)] {R : Type.{u1}} [_inst_1 : NonAssocSemiring.{u1} R] {f : forall (k : Nat), RingHom.{u1, 0} R (ZMod (HPow.hPow.{0, 0, 0} Nat Nat Nat (instHPow.{0, 0} Nat Nat (Monoid.Pow.{0} Nat Nat.monoid)) p k)) _inst_1 (NonAssocRing.toNonAssocSemiring.{0} (ZMod (HPow.hPow.{0, 0, 0} Nat Nat Nat (instHPow.{0, 0} Nat Nat (Monoid.Pow.{0} Nat Nat.monoid)) p k)) (Ring.toNonAssocRing.{0} (ZMod (HPow.hPow.{0, 0, 0} Nat Nat Nat (instHPow.{0, 0} Nat Nat (Monoid.Pow.{0} Nat Nat.monoid)) p k)) (CommRing.toRing.{0} (ZMod (HPow.hPow.{0, 0, 0} Nat Nat Nat (instHPow.{0, 0} Nat Nat (Monoid.Pow.{0} Nat Nat.monoid)) p k)) (ZMod.commRing (HPow.hPow.{0, 0, 0} Nat Nat Nat (instHPow.{0, 0} Nat Nat (Monoid.Pow.{0} Nat Nat.monoid)) p k)))))}, (forall (k1 : Nat) (k2 : Nat) (hk : LE.le.{0} Nat Nat.hasLe k1 k2), Eq.{succ u1} (RingHom.{u1, 0} R (ZMod (HPow.hPow.{0, 0, 0} Nat Nat Nat (instHPow.{0, 0} Nat Nat (Monoid.Pow.{0} Nat Nat.monoid)) p k1)) _inst_1 (NonAssocRing.toNonAssocSemiring.{0} (ZMod (HPow.hPow.{0, 0, 0} Nat Nat Nat (instHPow.{0, 0} Nat Nat (Monoid.Pow.{0} Nat Nat.monoid)) p k1)) (Ring.toNonAssocRing.{0} (ZMod (HPow.hPow.{0, 0, 0} Nat Nat Nat (instHPow.{0, 0} Nat Nat (Monoid.Pow.{0} Nat Nat.monoid)) p k1)) (CommRing.toRing.{0} (ZMod (HPow.hPow.{0, 0, 0} Nat Nat Nat (instHPow.{0, 0} Nat Nat (Monoid.Pow.{0} Nat Nat.monoid)) p k1)) (ZMod.commRing (HPow.hPow.{0, 0, 0} Nat Nat Nat (instHPow.{0, 0} Nat Nat (Monoid.Pow.{0} Nat Nat.monoid)) p k1)))))) (RingHom.comp.{u1, 0, 0} R (ZMod (HPow.hPow.{0, 0, 0} Nat Nat Nat (instHPow.{0, 0} Nat Nat (Monoid.Pow.{0} Nat Nat.monoid)) p k2)) (ZMod (HPow.hPow.{0, 0, 0} Nat Nat Nat (instHPow.{0, 0} Nat Nat (Monoid.Pow.{0} Nat Nat.monoid)) p k1)) _inst_1 (NonAssocRing.toNonAssocSemiring.{0} (ZMod (HPow.hPow.{0, 0, 0} Nat Nat Nat (instHPow.{0, 0} Nat Nat (Monoid.Pow.{0} Nat Nat.monoid)) p k2)) (Ring.toNonAssocRing.{0} (ZMod (HPow.hPow.{0, 0, 0} Nat Nat Nat (instHPow.{0, 0} Nat Nat (Monoid.Pow.{0} Nat Nat.monoid)) p k2)) (CommRing.toRing.{0} (ZMod (HPow.hPow.{0, 0, 0} Nat Nat Nat (instHPow.{0, 0} Nat Nat (Monoid.Pow.{0} Nat Nat.monoid)) p k2)) (ZMod.commRing (HPow.hPow.{0, 0, 0} Nat Nat Nat (instHPow.{0, 0} Nat Nat (Monoid.Pow.{0} Nat Nat.monoid)) p k2))))) (NonAssocRing.toNonAssocSemiring.{0} (ZMod (HPow.hPow.{0, 0, 0} Nat Nat Nat (instHPow.{0, 0} Nat Nat (Monoid.Pow.{0} Nat Nat.monoid)) p k1)) (Ring.toNonAssocRing.{0} (ZMod (HPow.hPow.{0, 0, 0} Nat Nat Nat (instHPow.{0, 0} Nat Nat (Monoid.Pow.{0} Nat Nat.monoid)) p k1)) (CommRing.toRing.{0} (ZMod (HPow.hPow.{0, 0, 0} Nat Nat Nat (instHPow.{0, 0} Nat Nat (Monoid.Pow.{0} Nat Nat.monoid)) p k1)) (ZMod.commRing (HPow.hPow.{0, 0, 0} Nat Nat Nat (instHPow.{0, 0} Nat Nat (Monoid.Pow.{0} Nat Nat.monoid)) p k1))))) (ZMod.castHom.{0} (HPow.hPow.{0, 0, 0} Nat Nat Nat (instHPow.{0, 0} Nat Nat (Monoid.Pow.{0} Nat Nat.monoid)) p k2) (HPow.hPow.{0, 0, 0} Nat Nat Nat (instHPow.{0, 0} Nat Nat (Monoid.Pow.{0} Nat Nat.monoid)) p k1) (pow_dvd_pow.{0} Nat Nat.monoid p k1 k2 hk) (ZMod (HPow.hPow.{0, 0, 0} Nat Nat Nat (instHPow.{0, 0} Nat Nat (Monoid.Pow.{0} Nat Nat.monoid)) p k1)) (CommRing.toRing.{0} (ZMod (HPow.hPow.{0, 0, 0} Nat Nat Nat (instHPow.{0, 0} Nat Nat (Monoid.Pow.{0} Nat Nat.monoid)) p k1)) (ZMod.commRing (HPow.hPow.{0, 0, 0} Nat Nat Nat (instHPow.{0, 0} Nat Nat (Monoid.Pow.{0} Nat Nat.monoid)) p k1))) (ZMod.charP (HPow.hPow.{0, 0, 0} Nat Nat Nat (instHPow.{0, 0} Nat Nat (Monoid.Pow.{0} Nat Nat.monoid)) p k1))) (f k2)) (f k1)) -> (forall (r : R) (i : Nat) (j : Nat), (LE.le.{0} Nat Nat.hasLe i j) -> (Dvd.Dvd.{0} Int (semigroupDvd.{0} Int Int.semigroup) (HPow.hPow.{0, 0, 0} Int Nat Int (instHPow.{0, 0} Int Nat (Monoid.Pow.{0} Int Int.monoid)) ((fun (a : Type) (b : Type) [self : HasLiftT.{1, 1} a b] => self.0) Nat Int (HasLiftT.mk.{1, 1} Nat Int (CoeTCₓ.coe.{1, 1} Nat Int (coeBase.{1, 1} Nat Int Int.hasCoe))) p) i) (HSub.hSub.{0, 0, 0} Int Int Int (instHSub.{0} Int Int.hasSub) (PadicInt.nthHom.{u1} p R _inst_1 f r j) (PadicInt.nthHom.{u1} p R _inst_1 f r i))))
-but is expected to have type
- forall {p : Nat} [hp_prime : Fact (Nat.Prime p)] {R : Type.{u1}} [_inst_1 : NonAssocSemiring.{u1} R] {f : forall (k : Nat), RingHom.{u1, 0} R (ZMod (HPow.hPow.{0, 0, 0} Nat Nat Nat (instHPow.{0, 0} Nat Nat instPowNat) p k)) _inst_1 (Semiring.toNonAssocSemiring.{0} (ZMod (HPow.hPow.{0, 0, 0} Nat Nat Nat (instHPow.{0, 0} Nat Nat instPowNat) p k)) (CommSemiring.toSemiring.{0} (ZMod (HPow.hPow.{0, 0, 0} Nat Nat Nat (instHPow.{0, 0} Nat Nat instPowNat) p k)) (CommRing.toCommSemiring.{0} (ZMod (HPow.hPow.{0, 0, 0} Nat Nat Nat (instHPow.{0, 0} Nat Nat instPowNat) p k)) (ZMod.commRing (HPow.hPow.{0, 0, 0} Nat Nat Nat (instHPow.{0, 0} Nat Nat instPowNat) p k)))))}, (forall (k1 : Nat) (k2 : Nat) (hk : LE.le.{0} Nat instLENat k1 k2), Eq.{succ u1} (RingHom.{u1, 0} R (ZMod (HPow.hPow.{0, 0, 0} Nat Nat Nat (instHPow.{0, 0} Nat Nat instPowNat) p k1)) _inst_1 (Semiring.toNonAssocSemiring.{0} (ZMod (HPow.hPow.{0, 0, 0} Nat Nat Nat (instHPow.{0, 0} Nat Nat instPowNat) p k1)) (Ring.toSemiring.{0} (ZMod (HPow.hPow.{0, 0, 0} Nat Nat Nat (instHPow.{0, 0} Nat Nat instPowNat) p k1)) (CommRing.toRing.{0} (ZMod (HPow.hPow.{0, 0, 0} Nat Nat Nat (instHPow.{0, 0} Nat Nat instPowNat) p k1)) (ZMod.commRing (HPow.hPow.{0, 0, 0} Nat Nat Nat (instHPow.{0, 0} Nat Nat instPowNat) p k1)))))) (RingHom.comp.{u1, 0, 0} R (ZMod (HPow.hPow.{0, 0, 0} Nat Nat Nat (instHPow.{0, 0} Nat Nat (Monoid.Pow.{0} Nat Nat.monoid)) p k2)) (ZMod (HPow.hPow.{0, 0, 0} Nat Nat Nat (instHPow.{0, 0} Nat Nat instPowNat) p k1)) _inst_1 (Semiring.toNonAssocSemiring.{0} (ZMod (HPow.hPow.{0, 0, 0} Nat Nat Nat (instHPow.{0, 0} Nat Nat (Monoid.Pow.{0} Nat Nat.monoid)) p k2)) (CommSemiring.toSemiring.{0} (ZMod (HPow.hPow.{0, 0, 0} Nat Nat Nat (instHPow.{0, 0} Nat Nat (Monoid.Pow.{0} Nat Nat.monoid)) p k2)) (CommRing.toCommSemiring.{0} (ZMod (HPow.hPow.{0, 0, 0} Nat Nat Nat (instHPow.{0, 0} Nat Nat (Monoid.Pow.{0} Nat Nat.monoid)) p k2)) (ZMod.commRing (HPow.hPow.{0, 0, 0} Nat Nat Nat (instHPow.{0, 0} Nat Nat (Monoid.Pow.{0} Nat Nat.monoid)) p k2))))) (Semiring.toNonAssocSemiring.{0} (ZMod (HPow.hPow.{0, 0, 0} Nat Nat Nat (instHPow.{0, 0} Nat Nat instPowNat) p k1)) (Ring.toSemiring.{0} (ZMod (HPow.hPow.{0, 0, 0} Nat Nat Nat (instHPow.{0, 0} Nat Nat instPowNat) p k1)) (CommRing.toRing.{0} (ZMod (HPow.hPow.{0, 0, 0} Nat Nat Nat (instHPow.{0, 0} Nat Nat instPowNat) p k1)) (ZMod.commRing (HPow.hPow.{0, 0, 0} Nat Nat Nat (instHPow.{0, 0} Nat Nat instPowNat) p k1))))) (ZMod.castHom.{0} (HPow.hPow.{0, 0, 0} Nat Nat Nat (instHPow.{0, 0} Nat Nat (Monoid.Pow.{0} Nat Nat.monoid)) p k2) (HPow.hPow.{0, 0, 0} Nat Nat Nat (instHPow.{0, 0} Nat Nat (Monoid.Pow.{0} Nat Nat.monoid)) p k1) (pow_dvd_pow.{0} Nat Nat.monoid p k1 k2 hk) (ZMod (HPow.hPow.{0, 0, 0} Nat Nat Nat (instHPow.{0, 0} Nat Nat instPowNat) p k1)) (CommRing.toRing.{0} (ZMod (HPow.hPow.{0, 0, 0} Nat Nat Nat (instHPow.{0, 0} Nat Nat instPowNat) p k1)) (ZMod.commRing (HPow.hPow.{0, 0, 0} Nat Nat Nat (instHPow.{0, 0} Nat Nat instPowNat) p k1))) (ZMod.charP (HPow.hPow.{0, 0, 0} Nat Nat Nat (instHPow.{0, 0} Nat Nat instPowNat) p k1))) (f k2)) (f k1)) -> (forall (r : R) (i : Nat) (j : Nat), (LE.le.{0} Nat instLENat i j) -> (Dvd.dvd.{0} Int Int.instDvdInt (HPow.hPow.{0, 0, 0} Int Nat Int Int.instHPowIntNat (Nat.cast.{0} Int instNatCastInt p) i) (HSub.hSub.{0, 0, 0} Int Int Int (instHSub.{0} Int Int.instSubInt) (PadicInt.nthHom.{u1} p R _inst_1 f r j) (PadicInt.nthHom.{u1} p R _inst_1 f r i))))
-Case conversion may be inaccurate. Consider using '#align padic_int.pow_dvd_nth_hom_sub PadicInt.pow_dvd_nthHom_subₓ'. -/
theorem pow_dvd_nthHom_sub (r : R) (i j : ℕ) (h : i ≤ j) : ↑p ^ i ∣ nthHom f r j - nthHom f r i :=
by
specialize f_compat i j h
@@ -658,12 +532,6 @@ theorem pow_dvd_nthHom_sub (r : R) (i j : ℕ) (h : i ≤ j) : ↑p ^ i ∣ nthH
simp only [ZMod.cast_id, ZMod.castHom_apply, sub_self, ZMod.nat_cast_val, ZMod.int_cast_cast]
#align padic_int.pow_dvd_nth_hom_sub PadicInt.pow_dvd_nthHom_sub
-/- warning: padic_int.is_cau_seq_nth_hom -> PadicInt.isCauSeq_nthHom is a dubious translation:
-lean 3 declaration is
- forall {p : Nat} [hp_prime : Fact (Nat.Prime p)] {R : Type.{u1}} [_inst_1 : NonAssocSemiring.{u1} R] {f : forall (k : Nat), RingHom.{u1, 0} R (ZMod (HPow.hPow.{0, 0, 0} Nat Nat Nat (instHPow.{0, 0} Nat Nat (Monoid.Pow.{0} Nat Nat.monoid)) p k)) _inst_1 (NonAssocRing.toNonAssocSemiring.{0} (ZMod (HPow.hPow.{0, 0, 0} Nat Nat Nat (instHPow.{0, 0} Nat Nat (Monoid.Pow.{0} Nat Nat.monoid)) p k)) (Ring.toNonAssocRing.{0} (ZMod (HPow.hPow.{0, 0, 0} Nat Nat Nat (instHPow.{0, 0} Nat Nat (Monoid.Pow.{0} Nat Nat.monoid)) p k)) (CommRing.toRing.{0} (ZMod (HPow.hPow.{0, 0, 0} Nat Nat Nat (instHPow.{0, 0} Nat Nat (Monoid.Pow.{0} Nat Nat.monoid)) p k)) (ZMod.commRing (HPow.hPow.{0, 0, 0} Nat Nat Nat (instHPow.{0, 0} Nat Nat (Monoid.Pow.{0} Nat Nat.monoid)) p k)))))}, (forall (k1 : Nat) (k2 : Nat) (hk : LE.le.{0} Nat Nat.hasLe k1 k2), Eq.{succ u1} (RingHom.{u1, 0} R (ZMod (HPow.hPow.{0, 0, 0} Nat Nat Nat (instHPow.{0, 0} Nat Nat (Monoid.Pow.{0} Nat Nat.monoid)) p k1)) _inst_1 (NonAssocRing.toNonAssocSemiring.{0} (ZMod (HPow.hPow.{0, 0, 0} Nat Nat Nat (instHPow.{0, 0} Nat Nat (Monoid.Pow.{0} Nat Nat.monoid)) p k1)) (Ring.toNonAssocRing.{0} (ZMod (HPow.hPow.{0, 0, 0} Nat Nat Nat (instHPow.{0, 0} Nat Nat (Monoid.Pow.{0} Nat Nat.monoid)) p k1)) (CommRing.toRing.{0} (ZMod (HPow.hPow.{0, 0, 0} Nat Nat Nat (instHPow.{0, 0} Nat Nat (Monoid.Pow.{0} Nat Nat.monoid)) p k1)) (ZMod.commRing (HPow.hPow.{0, 0, 0} Nat Nat Nat (instHPow.{0, 0} Nat Nat (Monoid.Pow.{0} Nat Nat.monoid)) p k1)))))) (RingHom.comp.{u1, 0, 0} R (ZMod (HPow.hPow.{0, 0, 0} Nat Nat Nat (instHPow.{0, 0} Nat Nat (Monoid.Pow.{0} Nat Nat.monoid)) p k2)) (ZMod (HPow.hPow.{0, 0, 0} Nat Nat Nat (instHPow.{0, 0} Nat Nat (Monoid.Pow.{0} Nat Nat.monoid)) p k1)) _inst_1 (NonAssocRing.toNonAssocSemiring.{0} (ZMod (HPow.hPow.{0, 0, 0} Nat Nat Nat (instHPow.{0, 0} Nat Nat (Monoid.Pow.{0} Nat Nat.monoid)) p k2)) (Ring.toNonAssocRing.{0} (ZMod (HPow.hPow.{0, 0, 0} Nat Nat Nat (instHPow.{0, 0} Nat Nat (Monoid.Pow.{0} Nat Nat.monoid)) p k2)) (CommRing.toRing.{0} (ZMod (HPow.hPow.{0, 0, 0} Nat Nat Nat (instHPow.{0, 0} Nat Nat (Monoid.Pow.{0} Nat Nat.monoid)) p k2)) (ZMod.commRing (HPow.hPow.{0, 0, 0} Nat Nat Nat (instHPow.{0, 0} Nat Nat (Monoid.Pow.{0} Nat Nat.monoid)) p k2))))) (NonAssocRing.toNonAssocSemiring.{0} (ZMod (HPow.hPow.{0, 0, 0} Nat Nat Nat (instHPow.{0, 0} Nat Nat (Monoid.Pow.{0} Nat Nat.monoid)) p k1)) (Ring.toNonAssocRing.{0} (ZMod (HPow.hPow.{0, 0, 0} Nat Nat Nat (instHPow.{0, 0} Nat Nat (Monoid.Pow.{0} Nat Nat.monoid)) p k1)) (CommRing.toRing.{0} (ZMod (HPow.hPow.{0, 0, 0} Nat Nat Nat (instHPow.{0, 0} Nat Nat (Monoid.Pow.{0} Nat Nat.monoid)) p k1)) (ZMod.commRing (HPow.hPow.{0, 0, 0} Nat Nat Nat (instHPow.{0, 0} Nat Nat (Monoid.Pow.{0} Nat Nat.monoid)) p k1))))) (ZMod.castHom.{0} (HPow.hPow.{0, 0, 0} Nat Nat Nat (instHPow.{0, 0} Nat Nat (Monoid.Pow.{0} Nat Nat.monoid)) p k2) (HPow.hPow.{0, 0, 0} Nat Nat Nat (instHPow.{0, 0} Nat Nat (Monoid.Pow.{0} Nat Nat.monoid)) p k1) (pow_dvd_pow.{0} Nat Nat.monoid p k1 k2 hk) (ZMod (HPow.hPow.{0, 0, 0} Nat Nat Nat (instHPow.{0, 0} Nat Nat (Monoid.Pow.{0} Nat Nat.monoid)) p k1)) (CommRing.toRing.{0} (ZMod (HPow.hPow.{0, 0, 0} Nat Nat Nat (instHPow.{0, 0} Nat Nat (Monoid.Pow.{0} Nat Nat.monoid)) p k1)) (ZMod.commRing (HPow.hPow.{0, 0, 0} Nat Nat Nat (instHPow.{0, 0} Nat Nat (Monoid.Pow.{0} Nat Nat.monoid)) p k1))) (ZMod.charP (HPow.hPow.{0, 0, 0} Nat Nat Nat (instHPow.{0, 0} Nat Nat (Monoid.Pow.{0} Nat Nat.monoid)) p k1))) (f k2)) (f k1)) -> (forall (r : R), IsCauSeq.{0, 0} Rat Rat.linearOrderedField Rat (NormedRing.toRing.{0} Rat (NormedCommRing.toNormedRing.{0} Rat (NormedField.toNormedCommRing.{0} Rat Rat.normedField))) (padicNorm p) (fun (n : Nat) => (fun (a : Type) (b : Type) [self : HasLiftT.{1, 1} a b] => self.0) Int Rat (HasLiftT.mk.{1, 1} Int Rat (CoeTCₓ.coe.{1, 1} Int Rat (Int.castCoe.{0} Rat Rat.hasIntCast))) (PadicInt.nthHom.{u1} p R _inst_1 f r n)))
-but is expected to have type
- forall {p : Nat} [hp_prime : Fact (Nat.Prime p)] {R : Type.{u1}} [_inst_1 : NonAssocSemiring.{u1} R] {f : forall (k : Nat), RingHom.{u1, 0} R (ZMod (HPow.hPow.{0, 0, 0} Nat Nat Nat (instHPow.{0, 0} Nat Nat instPowNat) p k)) _inst_1 (Semiring.toNonAssocSemiring.{0} (ZMod (HPow.hPow.{0, 0, 0} Nat Nat Nat (instHPow.{0, 0} Nat Nat instPowNat) p k)) (CommSemiring.toSemiring.{0} (ZMod (HPow.hPow.{0, 0, 0} Nat Nat Nat (instHPow.{0, 0} Nat Nat instPowNat) p k)) (CommRing.toCommSemiring.{0} (ZMod (HPow.hPow.{0, 0, 0} Nat Nat Nat (instHPow.{0, 0} Nat Nat instPowNat) p k)) (ZMod.commRing (HPow.hPow.{0, 0, 0} Nat Nat Nat (instHPow.{0, 0} Nat Nat instPowNat) p k)))))}, (forall (k1 : Nat) (k2 : Nat) (hk : LE.le.{0} Nat instLENat k1 k2), Eq.{succ u1} (RingHom.{u1, 0} R (ZMod (HPow.hPow.{0, 0, 0} Nat Nat Nat (instHPow.{0, 0} Nat Nat instPowNat) p k1)) _inst_1 (Semiring.toNonAssocSemiring.{0} (ZMod (HPow.hPow.{0, 0, 0} Nat Nat Nat (instHPow.{0, 0} Nat Nat instPowNat) p k1)) (Ring.toSemiring.{0} (ZMod (HPow.hPow.{0, 0, 0} Nat Nat Nat (instHPow.{0, 0} Nat Nat instPowNat) p k1)) (CommRing.toRing.{0} (ZMod (HPow.hPow.{0, 0, 0} Nat Nat Nat (instHPow.{0, 0} Nat Nat instPowNat) p k1)) (ZMod.commRing (HPow.hPow.{0, 0, 0} Nat Nat Nat (instHPow.{0, 0} Nat Nat instPowNat) p k1)))))) (RingHom.comp.{u1, 0, 0} R (ZMod (HPow.hPow.{0, 0, 0} Nat Nat Nat (instHPow.{0, 0} Nat Nat (Monoid.Pow.{0} Nat Nat.monoid)) p k2)) (ZMod (HPow.hPow.{0, 0, 0} Nat Nat Nat (instHPow.{0, 0} Nat Nat instPowNat) p k1)) _inst_1 (Semiring.toNonAssocSemiring.{0} (ZMod (HPow.hPow.{0, 0, 0} Nat Nat Nat (instHPow.{0, 0} Nat Nat (Monoid.Pow.{0} Nat Nat.monoid)) p k2)) (CommSemiring.toSemiring.{0} (ZMod (HPow.hPow.{0, 0, 0} Nat Nat Nat (instHPow.{0, 0} Nat Nat (Monoid.Pow.{0} Nat Nat.monoid)) p k2)) (CommRing.toCommSemiring.{0} (ZMod (HPow.hPow.{0, 0, 0} Nat Nat Nat (instHPow.{0, 0} Nat Nat (Monoid.Pow.{0} Nat Nat.monoid)) p k2)) (ZMod.commRing (HPow.hPow.{0, 0, 0} Nat Nat Nat (instHPow.{0, 0} Nat Nat (Monoid.Pow.{0} Nat Nat.monoid)) p k2))))) (Semiring.toNonAssocSemiring.{0} (ZMod (HPow.hPow.{0, 0, 0} Nat Nat Nat (instHPow.{0, 0} Nat Nat instPowNat) p k1)) (Ring.toSemiring.{0} (ZMod (HPow.hPow.{0, 0, 0} Nat Nat Nat (instHPow.{0, 0} Nat Nat instPowNat) p k1)) (CommRing.toRing.{0} (ZMod (HPow.hPow.{0, 0, 0} Nat Nat Nat (instHPow.{0, 0} Nat Nat instPowNat) p k1)) (ZMod.commRing (HPow.hPow.{0, 0, 0} Nat Nat Nat (instHPow.{0, 0} Nat Nat instPowNat) p k1))))) (ZMod.castHom.{0} (HPow.hPow.{0, 0, 0} Nat Nat Nat (instHPow.{0, 0} Nat Nat (Monoid.Pow.{0} Nat Nat.monoid)) p k2) (HPow.hPow.{0, 0, 0} Nat Nat Nat (instHPow.{0, 0} Nat Nat (Monoid.Pow.{0} Nat Nat.monoid)) p k1) (pow_dvd_pow.{0} Nat Nat.monoid p k1 k2 hk) (ZMod (HPow.hPow.{0, 0, 0} Nat Nat Nat (instHPow.{0, 0} Nat Nat instPowNat) p k1)) (CommRing.toRing.{0} (ZMod (HPow.hPow.{0, 0, 0} Nat Nat Nat (instHPow.{0, 0} Nat Nat instPowNat) p k1)) (ZMod.commRing (HPow.hPow.{0, 0, 0} Nat Nat Nat (instHPow.{0, 0} Nat Nat instPowNat) p k1))) (ZMod.charP (HPow.hPow.{0, 0, 0} Nat Nat Nat (instHPow.{0, 0} Nat Nat instPowNat) p k1))) (f k2)) (f k1)) -> (forall (r : R), IsCauSeq.{0, 0} Rat Rat.instLinearOrderedFieldRat Rat (NormedRing.toRing.{0} Rat (NormedCommRing.toNormedRing.{0} Rat (NormedField.toNormedCommRing.{0} Rat Rat.normedField))) (padicNorm p) (fun (n : Nat) => Int.cast.{0} Rat Rat.instIntCastRat (PadicInt.nthHom.{u1} p R _inst_1 f r n)))
-Case conversion may be inaccurate. Consider using '#align padic_int.is_cau_seq_nth_hom PadicInt.isCauSeq_nthHomₓ'. -/
theorem isCauSeq_nthHom (r : R) : IsCauSeq (padicNorm p) fun n => nthHom f r n :=
by
intro ε hε
@@ -686,12 +554,6 @@ def nthHomSeq (r : R) : PadicSeq p :=
#align padic_int.nth_hom_seq PadicInt.nthHomSeq
-/
-/- warning: padic_int.nth_hom_seq_one -> PadicInt.nthHomSeq_one is a dubious translation:
-lean 3 declaration is
- forall {p : Nat} [hp_prime : Fact (Nat.Prime p)] {R : Type.{u1}} [_inst_1 : NonAssocSemiring.{u1} R] {f : forall (k : Nat), RingHom.{u1, 0} R (ZMod (HPow.hPow.{0, 0, 0} Nat Nat Nat (instHPow.{0, 0} Nat Nat (Monoid.Pow.{0} Nat Nat.monoid)) p k)) _inst_1 (NonAssocRing.toNonAssocSemiring.{0} (ZMod (HPow.hPow.{0, 0, 0} Nat Nat Nat (instHPow.{0, 0} Nat Nat (Monoid.Pow.{0} Nat Nat.monoid)) p k)) (Ring.toNonAssocRing.{0} (ZMod (HPow.hPow.{0, 0, 0} Nat Nat Nat (instHPow.{0, 0} Nat Nat (Monoid.Pow.{0} Nat Nat.monoid)) p k)) (CommRing.toRing.{0} (ZMod (HPow.hPow.{0, 0, 0} Nat Nat Nat (instHPow.{0, 0} Nat Nat (Monoid.Pow.{0} Nat Nat.monoid)) p k)) (ZMod.commRing (HPow.hPow.{0, 0, 0} Nat Nat Nat (instHPow.{0, 0} Nat Nat (Monoid.Pow.{0} Nat Nat.monoid)) p k)))))} (f_compat : forall (k1 : Nat) (k2 : Nat) (hk : LE.le.{0} Nat Nat.hasLe k1 k2), Eq.{succ u1} (RingHom.{u1, 0} R (ZMod (HPow.hPow.{0, 0, 0} Nat Nat Nat (instHPow.{0, 0} Nat Nat (Monoid.Pow.{0} Nat Nat.monoid)) p k1)) _inst_1 (NonAssocRing.toNonAssocSemiring.{0} (ZMod (HPow.hPow.{0, 0, 0} Nat Nat Nat (instHPow.{0, 0} Nat Nat (Monoid.Pow.{0} Nat Nat.monoid)) p k1)) (Ring.toNonAssocRing.{0} (ZMod (HPow.hPow.{0, 0, 0} Nat Nat Nat (instHPow.{0, 0} Nat Nat (Monoid.Pow.{0} Nat Nat.monoid)) p k1)) (CommRing.toRing.{0} (ZMod (HPow.hPow.{0, 0, 0} Nat Nat Nat (instHPow.{0, 0} Nat Nat (Monoid.Pow.{0} Nat Nat.monoid)) p k1)) (ZMod.commRing (HPow.hPow.{0, 0, 0} Nat Nat Nat (instHPow.{0, 0} Nat Nat (Monoid.Pow.{0} Nat Nat.monoid)) p k1)))))) (RingHom.comp.{u1, 0, 0} R (ZMod (HPow.hPow.{0, 0, 0} Nat Nat Nat (instHPow.{0, 0} Nat Nat (Monoid.Pow.{0} Nat Nat.monoid)) p k2)) (ZMod (HPow.hPow.{0, 0, 0} Nat Nat Nat (instHPow.{0, 0} Nat Nat (Monoid.Pow.{0} Nat Nat.monoid)) p k1)) _inst_1 (NonAssocRing.toNonAssocSemiring.{0} (ZMod (HPow.hPow.{0, 0, 0} Nat Nat Nat (instHPow.{0, 0} Nat Nat (Monoid.Pow.{0} Nat Nat.monoid)) p k2)) (Ring.toNonAssocRing.{0} (ZMod (HPow.hPow.{0, 0, 0} Nat Nat Nat (instHPow.{0, 0} Nat Nat (Monoid.Pow.{0} Nat Nat.monoid)) p k2)) (CommRing.toRing.{0} (ZMod (HPow.hPow.{0, 0, 0} Nat Nat Nat (instHPow.{0, 0} Nat Nat (Monoid.Pow.{0} Nat Nat.monoid)) p k2)) (ZMod.commRing (HPow.hPow.{0, 0, 0} Nat Nat Nat (instHPow.{0, 0} Nat Nat (Monoid.Pow.{0} Nat Nat.monoid)) p k2))))) (NonAssocRing.toNonAssocSemiring.{0} (ZMod (HPow.hPow.{0, 0, 0} Nat Nat Nat (instHPow.{0, 0} Nat Nat (Monoid.Pow.{0} Nat Nat.monoid)) p k1)) (Ring.toNonAssocRing.{0} (ZMod (HPow.hPow.{0, 0, 0} Nat Nat Nat (instHPow.{0, 0} Nat Nat (Monoid.Pow.{0} Nat Nat.monoid)) p k1)) (CommRing.toRing.{0} (ZMod (HPow.hPow.{0, 0, 0} Nat Nat Nat (instHPow.{0, 0} Nat Nat (Monoid.Pow.{0} Nat Nat.monoid)) p k1)) (ZMod.commRing (HPow.hPow.{0, 0, 0} Nat Nat Nat (instHPow.{0, 0} Nat Nat (Monoid.Pow.{0} Nat Nat.monoid)) p k1))))) (ZMod.castHom.{0} (HPow.hPow.{0, 0, 0} Nat Nat Nat (instHPow.{0, 0} Nat Nat (Monoid.Pow.{0} Nat Nat.monoid)) p k2) (HPow.hPow.{0, 0, 0} Nat Nat Nat (instHPow.{0, 0} Nat Nat (Monoid.Pow.{0} Nat Nat.monoid)) p k1) (pow_dvd_pow.{0} Nat Nat.monoid p k1 k2 hk) (ZMod (HPow.hPow.{0, 0, 0} Nat Nat Nat (instHPow.{0, 0} Nat Nat (Monoid.Pow.{0} Nat Nat.monoid)) p k1)) (CommRing.toRing.{0} (ZMod (HPow.hPow.{0, 0, 0} Nat Nat Nat (instHPow.{0, 0} Nat Nat (Monoid.Pow.{0} Nat Nat.monoid)) p k1)) (ZMod.commRing (HPow.hPow.{0, 0, 0} Nat Nat Nat (instHPow.{0, 0} Nat Nat (Monoid.Pow.{0} Nat Nat.monoid)) p k1))) (ZMod.charP (HPow.hPow.{0, 0, 0} Nat Nat Nat (instHPow.{0, 0} Nat Nat (Monoid.Pow.{0} Nat Nat.monoid)) p k1))) (f k2)) (f k1)), HasEquivₓ.Equiv.{1} (PadicSeq p) (setoidHasEquiv.{1} (PadicSeq p) (CauSeq.equiv.{0, 0} Rat Rat Rat.linearOrderedField (NormedRing.toRing.{0} Rat (NormedCommRing.toNormedRing.{0} Rat (NormedField.toNormedCommRing.{0} Rat Rat.normedField))) (padicNorm p) (padicNorm.isAbsoluteValue p hp_prime))) (PadicInt.nthHomSeq.{u1} p hp_prime R _inst_1 (fun (k2 : Nat) => f k2) f_compat (OfNat.ofNat.{u1} R 1 (OfNat.mk.{u1} R 1 (One.one.{u1} R (AddMonoidWithOne.toOne.{u1} R (AddCommMonoidWithOne.toAddMonoidWithOne.{u1} R (NonAssocSemiring.toAddCommMonoidWithOne.{u1} R _inst_1))))))) (OfNat.ofNat.{0} (PadicSeq p) 1 (OfNat.mk.{0} (PadicSeq p) 1 (One.one.{0} (PadicSeq p) (CauSeq.hasOne.{0, 0} Rat Rat Rat.linearOrderedField (NormedRing.toRing.{0} Rat (NormedCommRing.toNormedRing.{0} Rat (NormedField.toNormedCommRing.{0} Rat Rat.normedField))) (padicNorm p) (padicNorm.isAbsoluteValue p hp_prime)))))
-but is expected to have type
- forall {p : Nat} [hp_prime : Fact (Nat.Prime p)] {R : Type.{u1}} [_inst_1 : NonAssocSemiring.{u1} R] {f : forall (k : Nat), RingHom.{u1, 0} R (ZMod (HPow.hPow.{0, 0, 0} Nat Nat Nat (instHPow.{0, 0} Nat Nat instPowNat) p k)) _inst_1 (Semiring.toNonAssocSemiring.{0} (ZMod (HPow.hPow.{0, 0, 0} Nat Nat Nat (instHPow.{0, 0} Nat Nat instPowNat) p k)) (CommSemiring.toSemiring.{0} (ZMod (HPow.hPow.{0, 0, 0} Nat Nat Nat (instHPow.{0, 0} Nat Nat instPowNat) p k)) (CommRing.toCommSemiring.{0} (ZMod (HPow.hPow.{0, 0, 0} Nat Nat Nat (instHPow.{0, 0} Nat Nat instPowNat) p k)) (ZMod.commRing (HPow.hPow.{0, 0, 0} Nat Nat Nat (instHPow.{0, 0} Nat Nat instPowNat) p k)))))} (f_compat : forall (k1 : Nat) (k2 : Nat) (hk : LE.le.{0} Nat instLENat k1 k2), Eq.{succ u1} (RingHom.{u1, 0} R (ZMod (HPow.hPow.{0, 0, 0} Nat Nat Nat (instHPow.{0, 0} Nat Nat instPowNat) p k1)) _inst_1 (Semiring.toNonAssocSemiring.{0} (ZMod (HPow.hPow.{0, 0, 0} Nat Nat Nat (instHPow.{0, 0} Nat Nat instPowNat) p k1)) (Ring.toSemiring.{0} (ZMod (HPow.hPow.{0, 0, 0} Nat Nat Nat (instHPow.{0, 0} Nat Nat instPowNat) p k1)) (CommRing.toRing.{0} (ZMod (HPow.hPow.{0, 0, 0} Nat Nat Nat (instHPow.{0, 0} Nat Nat instPowNat) p k1)) (ZMod.commRing (HPow.hPow.{0, 0, 0} Nat Nat Nat (instHPow.{0, 0} Nat Nat instPowNat) p k1)))))) (RingHom.comp.{u1, 0, 0} R (ZMod (HPow.hPow.{0, 0, 0} Nat Nat Nat (instHPow.{0, 0} Nat Nat (Monoid.Pow.{0} Nat Nat.monoid)) p k2)) (ZMod (HPow.hPow.{0, 0, 0} Nat Nat Nat (instHPow.{0, 0} Nat Nat instPowNat) p k1)) _inst_1 (Semiring.toNonAssocSemiring.{0} (ZMod (HPow.hPow.{0, 0, 0} Nat Nat Nat (instHPow.{0, 0} Nat Nat (Monoid.Pow.{0} Nat Nat.monoid)) p k2)) (CommSemiring.toSemiring.{0} (ZMod (HPow.hPow.{0, 0, 0} Nat Nat Nat (instHPow.{0, 0} Nat Nat (Monoid.Pow.{0} Nat Nat.monoid)) p k2)) (CommRing.toCommSemiring.{0} (ZMod (HPow.hPow.{0, 0, 0} Nat Nat Nat (instHPow.{0, 0} Nat Nat (Monoid.Pow.{0} Nat Nat.monoid)) p k2)) (ZMod.commRing (HPow.hPow.{0, 0, 0} Nat Nat Nat (instHPow.{0, 0} Nat Nat (Monoid.Pow.{0} Nat Nat.monoid)) p k2))))) (Semiring.toNonAssocSemiring.{0} (ZMod (HPow.hPow.{0, 0, 0} Nat Nat Nat (instHPow.{0, 0} Nat Nat instPowNat) p k1)) (Ring.toSemiring.{0} (ZMod (HPow.hPow.{0, 0, 0} Nat Nat Nat (instHPow.{0, 0} Nat Nat instPowNat) p k1)) (CommRing.toRing.{0} (ZMod (HPow.hPow.{0, 0, 0} Nat Nat Nat (instHPow.{0, 0} Nat Nat instPowNat) p k1)) (ZMod.commRing (HPow.hPow.{0, 0, 0} Nat Nat Nat (instHPow.{0, 0} Nat Nat instPowNat) p k1))))) (ZMod.castHom.{0} (HPow.hPow.{0, 0, 0} Nat Nat Nat (instHPow.{0, 0} Nat Nat (Monoid.Pow.{0} Nat Nat.monoid)) p k2) (HPow.hPow.{0, 0, 0} Nat Nat Nat (instHPow.{0, 0} Nat Nat (Monoid.Pow.{0} Nat Nat.monoid)) p k1) (pow_dvd_pow.{0} Nat Nat.monoid p k1 k2 hk) (ZMod (HPow.hPow.{0, 0, 0} Nat Nat Nat (instHPow.{0, 0} Nat Nat instPowNat) p k1)) (CommRing.toRing.{0} (ZMod (HPow.hPow.{0, 0, 0} Nat Nat Nat (instHPow.{0, 0} Nat Nat instPowNat) p k1)) (ZMod.commRing (HPow.hPow.{0, 0, 0} Nat Nat Nat (instHPow.{0, 0} Nat Nat instPowNat) p k1))) (ZMod.charP (HPow.hPow.{0, 0, 0} Nat Nat Nat (instHPow.{0, 0} Nat Nat instPowNat) p k1))) (f k2)) (f k1)), HasEquiv.Equiv.{1, 0} (PadicSeq p) (instHasEquiv.{1} (PadicSeq p) (CauSeq.equiv.{0, 0} Rat Rat Rat.instLinearOrderedFieldRat (NormedRing.toRing.{0} Rat (NormedCommRing.toNormedRing.{0} Rat (NormedField.toNormedCommRing.{0} Rat Rat.normedField))) (padicNorm p) (padicNorm.instIsAbsoluteValueRatInstOrderedSemiringRatSemiringPadicNorm p hp_prime))) (PadicInt.nthHomSeq.{u1} p hp_prime R _inst_1 (fun (k2 : Nat) => f k2) f_compat (OfNat.ofNat.{u1} R 1 (One.toOfNat1.{u1} R (NonAssocSemiring.toOne.{u1} R _inst_1)))) (OfNat.ofNat.{0} (PadicSeq p) 1 (One.toOfNat1.{0} (PadicSeq p) (CauSeq.instOneCauSeq.{0, 0} Rat Rat Rat.instLinearOrderedFieldRat (NormedRing.toRing.{0} Rat (NormedCommRing.toNormedRing.{0} Rat (NormedField.toNormedCommRing.{0} Rat Rat.normedField))) (padicNorm p) (padicNorm.instIsAbsoluteValueRatInstOrderedSemiringRatSemiringPadicNorm p hp_prime))))
-Case conversion may be inaccurate. Consider using '#align padic_int.nth_hom_seq_one PadicInt.nthHomSeq_oneₓ'. -/
-- this lemma ran into issues after changing to `ne_zero` and I'm not sure why.
theorem nthHomSeq_one : nthHomSeq f_compat 1 ≈ 1 :=
by
@@ -704,12 +566,6 @@ theorem nthHomSeq_one : nthHomSeq f_compat 1 ≈ 1 :=
rw [ZMod.cast_eq_val, ZMod.val_one, Nat.cast_one]
#align padic_int.nth_hom_seq_one PadicInt.nthHomSeq_one
-/- warning: padic_int.nth_hom_seq_add -> PadicInt.nthHomSeq_add is a dubious translation:
-lean 3 declaration is
- forall {p : Nat} [hp_prime : Fact (Nat.Prime p)] {R : Type.{u1}} [_inst_1 : NonAssocSemiring.{u1} R] {f : forall (k : Nat), RingHom.{u1, 0} R (ZMod (HPow.hPow.{0, 0, 0} Nat Nat Nat (instHPow.{0, 0} Nat Nat (Monoid.Pow.{0} Nat Nat.monoid)) p k)) _inst_1 (NonAssocRing.toNonAssocSemiring.{0} (ZMod (HPow.hPow.{0, 0, 0} Nat Nat Nat (instHPow.{0, 0} Nat Nat (Monoid.Pow.{0} Nat Nat.monoid)) p k)) (Ring.toNonAssocRing.{0} (ZMod (HPow.hPow.{0, 0, 0} Nat Nat Nat (instHPow.{0, 0} Nat Nat (Monoid.Pow.{0} Nat Nat.monoid)) p k)) (CommRing.toRing.{0} (ZMod (HPow.hPow.{0, 0, 0} Nat Nat Nat (instHPow.{0, 0} Nat Nat (Monoid.Pow.{0} Nat Nat.monoid)) p k)) (ZMod.commRing (HPow.hPow.{0, 0, 0} Nat Nat Nat (instHPow.{0, 0} Nat Nat (Monoid.Pow.{0} Nat Nat.monoid)) p k)))))} (f_compat : forall (k1 : Nat) (k2 : Nat) (hk : LE.le.{0} Nat Nat.hasLe k1 k2), Eq.{succ u1} (RingHom.{u1, 0} R (ZMod (HPow.hPow.{0, 0, 0} Nat Nat Nat (instHPow.{0, 0} Nat Nat (Monoid.Pow.{0} Nat Nat.monoid)) p k1)) _inst_1 (NonAssocRing.toNonAssocSemiring.{0} (ZMod (HPow.hPow.{0, 0, 0} Nat Nat Nat (instHPow.{0, 0} Nat Nat (Monoid.Pow.{0} Nat Nat.monoid)) p k1)) (Ring.toNonAssocRing.{0} (ZMod (HPow.hPow.{0, 0, 0} Nat Nat Nat (instHPow.{0, 0} Nat Nat (Monoid.Pow.{0} Nat Nat.monoid)) p k1)) (CommRing.toRing.{0} (ZMod (HPow.hPow.{0, 0, 0} Nat Nat Nat (instHPow.{0, 0} Nat Nat (Monoid.Pow.{0} Nat Nat.monoid)) p k1)) (ZMod.commRing (HPow.hPow.{0, 0, 0} Nat Nat Nat (instHPow.{0, 0} Nat Nat (Monoid.Pow.{0} Nat Nat.monoid)) p k1)))))) (RingHom.comp.{u1, 0, 0} R (ZMod (HPow.hPow.{0, 0, 0} Nat Nat Nat (instHPow.{0, 0} Nat Nat (Monoid.Pow.{0} Nat Nat.monoid)) p k2)) (ZMod (HPow.hPow.{0, 0, 0} Nat Nat Nat (instHPow.{0, 0} Nat Nat (Monoid.Pow.{0} Nat Nat.monoid)) p k1)) _inst_1 (NonAssocRing.toNonAssocSemiring.{0} (ZMod (HPow.hPow.{0, 0, 0} Nat Nat Nat (instHPow.{0, 0} Nat Nat (Monoid.Pow.{0} Nat Nat.monoid)) p k2)) (Ring.toNonAssocRing.{0} (ZMod (HPow.hPow.{0, 0, 0} Nat Nat Nat (instHPow.{0, 0} Nat Nat (Monoid.Pow.{0} Nat Nat.monoid)) p k2)) (CommRing.toRing.{0} (ZMod (HPow.hPow.{0, 0, 0} Nat Nat Nat (instHPow.{0, 0} Nat Nat (Monoid.Pow.{0} Nat Nat.monoid)) p k2)) (ZMod.commRing (HPow.hPow.{0, 0, 0} Nat Nat Nat (instHPow.{0, 0} Nat Nat (Monoid.Pow.{0} Nat Nat.monoid)) p k2))))) (NonAssocRing.toNonAssocSemiring.{0} (ZMod (HPow.hPow.{0, 0, 0} Nat Nat Nat (instHPow.{0, 0} Nat Nat (Monoid.Pow.{0} Nat Nat.monoid)) p k1)) (Ring.toNonAssocRing.{0} (ZMod (HPow.hPow.{0, 0, 0} Nat Nat Nat (instHPow.{0, 0} Nat Nat (Monoid.Pow.{0} Nat Nat.monoid)) p k1)) (CommRing.toRing.{0} (ZMod (HPow.hPow.{0, 0, 0} Nat Nat Nat (instHPow.{0, 0} Nat Nat (Monoid.Pow.{0} Nat Nat.monoid)) p k1)) (ZMod.commRing (HPow.hPow.{0, 0, 0} Nat Nat Nat (instHPow.{0, 0} Nat Nat (Monoid.Pow.{0} Nat Nat.monoid)) p k1))))) (ZMod.castHom.{0} (HPow.hPow.{0, 0, 0} Nat Nat Nat (instHPow.{0, 0} Nat Nat (Monoid.Pow.{0} Nat Nat.monoid)) p k2) (HPow.hPow.{0, 0, 0} Nat Nat Nat (instHPow.{0, 0} Nat Nat (Monoid.Pow.{0} Nat Nat.monoid)) p k1) (pow_dvd_pow.{0} Nat Nat.monoid p k1 k2 hk) (ZMod (HPow.hPow.{0, 0, 0} Nat Nat Nat (instHPow.{0, 0} Nat Nat (Monoid.Pow.{0} Nat Nat.monoid)) p k1)) (CommRing.toRing.{0} (ZMod (HPow.hPow.{0, 0, 0} Nat Nat Nat (instHPow.{0, 0} Nat Nat (Monoid.Pow.{0} Nat Nat.monoid)) p k1)) (ZMod.commRing (HPow.hPow.{0, 0, 0} Nat Nat Nat (instHPow.{0, 0} Nat Nat (Monoid.Pow.{0} Nat Nat.monoid)) p k1))) (ZMod.charP (HPow.hPow.{0, 0, 0} Nat Nat Nat (instHPow.{0, 0} Nat Nat (Monoid.Pow.{0} Nat Nat.monoid)) p k1))) (f k2)) (f k1)) (r : R) (s : R), HasEquivₓ.Equiv.{1} (PadicSeq p) (setoidHasEquiv.{1} (PadicSeq p) (CauSeq.equiv.{0, 0} Rat Rat Rat.linearOrderedField (NormedRing.toRing.{0} Rat (NormedCommRing.toNormedRing.{0} Rat (NormedField.toNormedCommRing.{0} Rat Rat.normedField))) (padicNorm p) (padicNorm.isAbsoluteValue p hp_prime))) (PadicInt.nthHomSeq.{u1} p hp_prime R _inst_1 (fun (k2 : Nat) => f k2) f_compat (HAdd.hAdd.{u1, u1, u1} R R R (instHAdd.{u1} R (Distrib.toHasAdd.{u1} R (NonUnitalNonAssocSemiring.toDistrib.{u1} R (NonAssocSemiring.toNonUnitalNonAssocSemiring.{u1} R _inst_1)))) r s)) (HAdd.hAdd.{0, 0, 0} (PadicSeq p) (PadicSeq p) (PadicSeq p) (instHAdd.{0} (PadicSeq p) (CauSeq.hasAdd.{0, 0} Rat Rat Rat.linearOrderedField (NormedRing.toRing.{0} Rat (NormedCommRing.toNormedRing.{0} Rat (NormedField.toNormedCommRing.{0} Rat Rat.normedField))) (padicNorm p) (padicNorm.isAbsoluteValue p hp_prime))) (PadicInt.nthHomSeq.{u1} p hp_prime R _inst_1 (fun (k2 : Nat) => f k2) f_compat r) (PadicInt.nthHomSeq.{u1} p hp_prime R _inst_1 (fun (k2 : Nat) => f k2) f_compat s))
-but is expected to have type
- forall {p : Nat} [hp_prime : Fact (Nat.Prime p)] {R : Type.{u1}} [_inst_1 : NonAssocSemiring.{u1} R] {f : forall (k : Nat), RingHom.{u1, 0} R (ZMod (HPow.hPow.{0, 0, 0} Nat Nat Nat (instHPow.{0, 0} Nat Nat instPowNat) p k)) _inst_1 (Semiring.toNonAssocSemiring.{0} (ZMod (HPow.hPow.{0, 0, 0} Nat Nat Nat (instHPow.{0, 0} Nat Nat instPowNat) p k)) (CommSemiring.toSemiring.{0} (ZMod (HPow.hPow.{0, 0, 0} Nat Nat Nat (instHPow.{0, 0} Nat Nat instPowNat) p k)) (CommRing.toCommSemiring.{0} (ZMod (HPow.hPow.{0, 0, 0} Nat Nat Nat (instHPow.{0, 0} Nat Nat instPowNat) p k)) (ZMod.commRing (HPow.hPow.{0, 0, 0} Nat Nat Nat (instHPow.{0, 0} Nat Nat instPowNat) p k)))))} (f_compat : forall (k1 : Nat) (k2 : Nat) (hk : LE.le.{0} Nat instLENat k1 k2), Eq.{succ u1} (RingHom.{u1, 0} R (ZMod (HPow.hPow.{0, 0, 0} Nat Nat Nat (instHPow.{0, 0} Nat Nat instPowNat) p k1)) _inst_1 (Semiring.toNonAssocSemiring.{0} (ZMod (HPow.hPow.{0, 0, 0} Nat Nat Nat (instHPow.{0, 0} Nat Nat instPowNat) p k1)) (Ring.toSemiring.{0} (ZMod (HPow.hPow.{0, 0, 0} Nat Nat Nat (instHPow.{0, 0} Nat Nat instPowNat) p k1)) (CommRing.toRing.{0} (ZMod (HPow.hPow.{0, 0, 0} Nat Nat Nat (instHPow.{0, 0} Nat Nat instPowNat) p k1)) (ZMod.commRing (HPow.hPow.{0, 0, 0} Nat Nat Nat (instHPow.{0, 0} Nat Nat instPowNat) p k1)))))) (RingHom.comp.{u1, 0, 0} R (ZMod (HPow.hPow.{0, 0, 0} Nat Nat Nat (instHPow.{0, 0} Nat Nat (Monoid.Pow.{0} Nat Nat.monoid)) p k2)) (ZMod (HPow.hPow.{0, 0, 0} Nat Nat Nat (instHPow.{0, 0} Nat Nat instPowNat) p k1)) _inst_1 (Semiring.toNonAssocSemiring.{0} (ZMod (HPow.hPow.{0, 0, 0} Nat Nat Nat (instHPow.{0, 0} Nat Nat (Monoid.Pow.{0} Nat Nat.monoid)) p k2)) (CommSemiring.toSemiring.{0} (ZMod (HPow.hPow.{0, 0, 0} Nat Nat Nat (instHPow.{0, 0} Nat Nat (Monoid.Pow.{0} Nat Nat.monoid)) p k2)) (CommRing.toCommSemiring.{0} (ZMod (HPow.hPow.{0, 0, 0} Nat Nat Nat (instHPow.{0, 0} Nat Nat (Monoid.Pow.{0} Nat Nat.monoid)) p k2)) (ZMod.commRing (HPow.hPow.{0, 0, 0} Nat Nat Nat (instHPow.{0, 0} Nat Nat (Monoid.Pow.{0} Nat Nat.monoid)) p k2))))) (Semiring.toNonAssocSemiring.{0} (ZMod (HPow.hPow.{0, 0, 0} Nat Nat Nat (instHPow.{0, 0} Nat Nat instPowNat) p k1)) (Ring.toSemiring.{0} (ZMod (HPow.hPow.{0, 0, 0} Nat Nat Nat (instHPow.{0, 0} Nat Nat instPowNat) p k1)) (CommRing.toRing.{0} (ZMod (HPow.hPow.{0, 0, 0} Nat Nat Nat (instHPow.{0, 0} Nat Nat instPowNat) p k1)) (ZMod.commRing (HPow.hPow.{0, 0, 0} Nat Nat Nat (instHPow.{0, 0} Nat Nat instPowNat) p k1))))) (ZMod.castHom.{0} (HPow.hPow.{0, 0, 0} Nat Nat Nat (instHPow.{0, 0} Nat Nat (Monoid.Pow.{0} Nat Nat.monoid)) p k2) (HPow.hPow.{0, 0, 0} Nat Nat Nat (instHPow.{0, 0} Nat Nat (Monoid.Pow.{0} Nat Nat.monoid)) p k1) (pow_dvd_pow.{0} Nat Nat.monoid p k1 k2 hk) (ZMod (HPow.hPow.{0, 0, 0} Nat Nat Nat (instHPow.{0, 0} Nat Nat instPowNat) p k1)) (CommRing.toRing.{0} (ZMod (HPow.hPow.{0, 0, 0} Nat Nat Nat (instHPow.{0, 0} Nat Nat instPowNat) p k1)) (ZMod.commRing (HPow.hPow.{0, 0, 0} Nat Nat Nat (instHPow.{0, 0} Nat Nat instPowNat) p k1))) (ZMod.charP (HPow.hPow.{0, 0, 0} Nat Nat Nat (instHPow.{0, 0} Nat Nat instPowNat) p k1))) (f k2)) (f k1)) (r : R) (s : R), HasEquiv.Equiv.{1, 0} (PadicSeq p) (instHasEquiv.{1} (PadicSeq p) (CauSeq.equiv.{0, 0} Rat Rat Rat.instLinearOrderedFieldRat (NormedRing.toRing.{0} Rat (NormedCommRing.toNormedRing.{0} Rat (NormedField.toNormedCommRing.{0} Rat Rat.normedField))) (padicNorm p) (padicNorm.instIsAbsoluteValueRatInstOrderedSemiringRatSemiringPadicNorm p hp_prime))) (PadicInt.nthHomSeq.{u1} p hp_prime R _inst_1 (fun (k2 : Nat) => f k2) f_compat (HAdd.hAdd.{u1, u1, u1} R R R (instHAdd.{u1} R (Distrib.toAdd.{u1} R (NonUnitalNonAssocSemiring.toDistrib.{u1} R (NonAssocSemiring.toNonUnitalNonAssocSemiring.{u1} R _inst_1)))) r s)) (HAdd.hAdd.{0, 0, 0} (PadicSeq p) (PadicSeq p) (PadicSeq p) (instHAdd.{0} (PadicSeq p) (CauSeq.instAddCauSeq.{0, 0} Rat Rat Rat.instLinearOrderedFieldRat (NormedRing.toRing.{0} Rat (NormedCommRing.toNormedRing.{0} Rat (NormedField.toNormedCommRing.{0} Rat Rat.normedField))) (padicNorm p) (padicNorm.instIsAbsoluteValueRatInstOrderedSemiringRatSemiringPadicNorm p hp_prime))) (PadicInt.nthHomSeq.{u1} p hp_prime R _inst_1 (fun (k2 : Nat) => f k2) f_compat r) (PadicInt.nthHomSeq.{u1} p hp_prime R _inst_1 (fun (k2 : Nat) => f k2) f_compat s))
-Case conversion may be inaccurate. Consider using '#align padic_int.nth_hom_seq_add PadicInt.nthHomSeq_addₓ'. -/
theorem nthHomSeq_add (r s : R) :
nthHomSeq f_compat (r + s) ≈ nthHomSeq f_compat r + nthHomSeq f_compat s :=
by
@@ -727,12 +583,6 @@ theorem nthHomSeq_add (r s : R) :
· infer_instance
#align padic_int.nth_hom_seq_add PadicInt.nthHomSeq_add
-/- warning: padic_int.nth_hom_seq_mul -> PadicInt.nthHomSeq_mul is a dubious translation:
-lean 3 declaration is
- forall {p : Nat} [hp_prime : Fact (Nat.Prime p)] {R : Type.{u1}} [_inst_1 : NonAssocSemiring.{u1} R] {f : forall (k : Nat), RingHom.{u1, 0} R (ZMod (HPow.hPow.{0, 0, 0} Nat Nat Nat (instHPow.{0, 0} Nat Nat (Monoid.Pow.{0} Nat Nat.monoid)) p k)) _inst_1 (NonAssocRing.toNonAssocSemiring.{0} (ZMod (HPow.hPow.{0, 0, 0} Nat Nat Nat (instHPow.{0, 0} Nat Nat (Monoid.Pow.{0} Nat Nat.monoid)) p k)) (Ring.toNonAssocRing.{0} (ZMod (HPow.hPow.{0, 0, 0} Nat Nat Nat (instHPow.{0, 0} Nat Nat (Monoid.Pow.{0} Nat Nat.monoid)) p k)) (CommRing.toRing.{0} (ZMod (HPow.hPow.{0, 0, 0} Nat Nat Nat (instHPow.{0, 0} Nat Nat (Monoid.Pow.{0} Nat Nat.monoid)) p k)) (ZMod.commRing (HPow.hPow.{0, 0, 0} Nat Nat Nat (instHPow.{0, 0} Nat Nat (Monoid.Pow.{0} Nat Nat.monoid)) p k)))))} (f_compat : forall (k1 : Nat) (k2 : Nat) (hk : LE.le.{0} Nat Nat.hasLe k1 k2), Eq.{succ u1} (RingHom.{u1, 0} R (ZMod (HPow.hPow.{0, 0, 0} Nat Nat Nat (instHPow.{0, 0} Nat Nat (Monoid.Pow.{0} Nat Nat.monoid)) p k1)) _inst_1 (NonAssocRing.toNonAssocSemiring.{0} (ZMod (HPow.hPow.{0, 0, 0} Nat Nat Nat (instHPow.{0, 0} Nat Nat (Monoid.Pow.{0} Nat Nat.monoid)) p k1)) (Ring.toNonAssocRing.{0} (ZMod (HPow.hPow.{0, 0, 0} Nat Nat Nat (instHPow.{0, 0} Nat Nat (Monoid.Pow.{0} Nat Nat.monoid)) p k1)) (CommRing.toRing.{0} (ZMod (HPow.hPow.{0, 0, 0} Nat Nat Nat (instHPow.{0, 0} Nat Nat (Monoid.Pow.{0} Nat Nat.monoid)) p k1)) (ZMod.commRing (HPow.hPow.{0, 0, 0} Nat Nat Nat (instHPow.{0, 0} Nat Nat (Monoid.Pow.{0} Nat Nat.monoid)) p k1)))))) (RingHom.comp.{u1, 0, 0} R (ZMod (HPow.hPow.{0, 0, 0} Nat Nat Nat (instHPow.{0, 0} Nat Nat (Monoid.Pow.{0} Nat Nat.monoid)) p k2)) (ZMod (HPow.hPow.{0, 0, 0} Nat Nat Nat (instHPow.{0, 0} Nat Nat (Monoid.Pow.{0} Nat Nat.monoid)) p k1)) _inst_1 (NonAssocRing.toNonAssocSemiring.{0} (ZMod (HPow.hPow.{0, 0, 0} Nat Nat Nat (instHPow.{0, 0} Nat Nat (Monoid.Pow.{0} Nat Nat.monoid)) p k2)) (Ring.toNonAssocRing.{0} (ZMod (HPow.hPow.{0, 0, 0} Nat Nat Nat (instHPow.{0, 0} Nat Nat (Monoid.Pow.{0} Nat Nat.monoid)) p k2)) (CommRing.toRing.{0} (ZMod (HPow.hPow.{0, 0, 0} Nat Nat Nat (instHPow.{0, 0} Nat Nat (Monoid.Pow.{0} Nat Nat.monoid)) p k2)) (ZMod.commRing (HPow.hPow.{0, 0, 0} Nat Nat Nat (instHPow.{0, 0} Nat Nat (Monoid.Pow.{0} Nat Nat.monoid)) p k2))))) (NonAssocRing.toNonAssocSemiring.{0} (ZMod (HPow.hPow.{0, 0, 0} Nat Nat Nat (instHPow.{0, 0} Nat Nat (Monoid.Pow.{0} Nat Nat.monoid)) p k1)) (Ring.toNonAssocRing.{0} (ZMod (HPow.hPow.{0, 0, 0} Nat Nat Nat (instHPow.{0, 0} Nat Nat (Monoid.Pow.{0} Nat Nat.monoid)) p k1)) (CommRing.toRing.{0} (ZMod (HPow.hPow.{0, 0, 0} Nat Nat Nat (instHPow.{0, 0} Nat Nat (Monoid.Pow.{0} Nat Nat.monoid)) p k1)) (ZMod.commRing (HPow.hPow.{0, 0, 0} Nat Nat Nat (instHPow.{0, 0} Nat Nat (Monoid.Pow.{0} Nat Nat.monoid)) p k1))))) (ZMod.castHom.{0} (HPow.hPow.{0, 0, 0} Nat Nat Nat (instHPow.{0, 0} Nat Nat (Monoid.Pow.{0} Nat Nat.monoid)) p k2) (HPow.hPow.{0, 0, 0} Nat Nat Nat (instHPow.{0, 0} Nat Nat (Monoid.Pow.{0} Nat Nat.monoid)) p k1) (pow_dvd_pow.{0} Nat Nat.monoid p k1 k2 hk) (ZMod (HPow.hPow.{0, 0, 0} Nat Nat Nat (instHPow.{0, 0} Nat Nat (Monoid.Pow.{0} Nat Nat.monoid)) p k1)) (CommRing.toRing.{0} (ZMod (HPow.hPow.{0, 0, 0} Nat Nat Nat (instHPow.{0, 0} Nat Nat (Monoid.Pow.{0} Nat Nat.monoid)) p k1)) (ZMod.commRing (HPow.hPow.{0, 0, 0} Nat Nat Nat (instHPow.{0, 0} Nat Nat (Monoid.Pow.{0} Nat Nat.monoid)) p k1))) (ZMod.charP (HPow.hPow.{0, 0, 0} Nat Nat Nat (instHPow.{0, 0} Nat Nat (Monoid.Pow.{0} Nat Nat.monoid)) p k1))) (f k2)) (f k1)) (r : R) (s : R), HasEquivₓ.Equiv.{1} (PadicSeq p) (setoidHasEquiv.{1} (PadicSeq p) (CauSeq.equiv.{0, 0} Rat Rat Rat.linearOrderedField (NormedRing.toRing.{0} Rat (NormedCommRing.toNormedRing.{0} Rat (NormedField.toNormedCommRing.{0} Rat Rat.normedField))) (padicNorm p) (padicNorm.isAbsoluteValue p hp_prime))) (PadicInt.nthHomSeq.{u1} p hp_prime R _inst_1 (fun (k2 : Nat) => f k2) f_compat (HMul.hMul.{u1, u1, u1} R R R (instHMul.{u1} R (Distrib.toHasMul.{u1} R (NonUnitalNonAssocSemiring.toDistrib.{u1} R (NonAssocSemiring.toNonUnitalNonAssocSemiring.{u1} R _inst_1)))) r s)) (HMul.hMul.{0, 0, 0} (PadicSeq p) (PadicSeq p) (PadicSeq p) (instHMul.{0} (PadicSeq p) (CauSeq.hasMul.{0, 0} Rat Rat Rat.linearOrderedField (NormedRing.toRing.{0} Rat (NormedCommRing.toNormedRing.{0} Rat (NormedField.toNormedCommRing.{0} Rat Rat.normedField))) (padicNorm p) (padicNorm.isAbsoluteValue p hp_prime))) (PadicInt.nthHomSeq.{u1} p hp_prime R _inst_1 (fun (k2 : Nat) => f k2) f_compat r) (PadicInt.nthHomSeq.{u1} p hp_prime R _inst_1 (fun (k2 : Nat) => f k2) f_compat s))
-but is expected to have type
- forall {p : Nat} [hp_prime : Fact (Nat.Prime p)] {R : Type.{u1}} [_inst_1 : NonAssocSemiring.{u1} R] {f : forall (k : Nat), RingHom.{u1, 0} R (ZMod (HPow.hPow.{0, 0, 0} Nat Nat Nat (instHPow.{0, 0} Nat Nat instPowNat) p k)) _inst_1 (Semiring.toNonAssocSemiring.{0} (ZMod (HPow.hPow.{0, 0, 0} Nat Nat Nat (instHPow.{0, 0} Nat Nat instPowNat) p k)) (CommSemiring.toSemiring.{0} (ZMod (HPow.hPow.{0, 0, 0} Nat Nat Nat (instHPow.{0, 0} Nat Nat instPowNat) p k)) (CommRing.toCommSemiring.{0} (ZMod (HPow.hPow.{0, 0, 0} Nat Nat Nat (instHPow.{0, 0} Nat Nat instPowNat) p k)) (ZMod.commRing (HPow.hPow.{0, 0, 0} Nat Nat Nat (instHPow.{0, 0} Nat Nat instPowNat) p k)))))} (f_compat : forall (k1 : Nat) (k2 : Nat) (hk : LE.le.{0} Nat instLENat k1 k2), Eq.{succ u1} (RingHom.{u1, 0} R (ZMod (HPow.hPow.{0, 0, 0} Nat Nat Nat (instHPow.{0, 0} Nat Nat instPowNat) p k1)) _inst_1 (Semiring.toNonAssocSemiring.{0} (ZMod (HPow.hPow.{0, 0, 0} Nat Nat Nat (instHPow.{0, 0} Nat Nat instPowNat) p k1)) (Ring.toSemiring.{0} (ZMod (HPow.hPow.{0, 0, 0} Nat Nat Nat (instHPow.{0, 0} Nat Nat instPowNat) p k1)) (CommRing.toRing.{0} (ZMod (HPow.hPow.{0, 0, 0} Nat Nat Nat (instHPow.{0, 0} Nat Nat instPowNat) p k1)) (ZMod.commRing (HPow.hPow.{0, 0, 0} Nat Nat Nat (instHPow.{0, 0} Nat Nat instPowNat) p k1)))))) (RingHom.comp.{u1, 0, 0} R (ZMod (HPow.hPow.{0, 0, 0} Nat Nat Nat (instHPow.{0, 0} Nat Nat (Monoid.Pow.{0} Nat Nat.monoid)) p k2)) (ZMod (HPow.hPow.{0, 0, 0} Nat Nat Nat (instHPow.{0, 0} Nat Nat instPowNat) p k1)) _inst_1 (Semiring.toNonAssocSemiring.{0} (ZMod (HPow.hPow.{0, 0, 0} Nat Nat Nat (instHPow.{0, 0} Nat Nat (Monoid.Pow.{0} Nat Nat.monoid)) p k2)) (CommSemiring.toSemiring.{0} (ZMod (HPow.hPow.{0, 0, 0} Nat Nat Nat (instHPow.{0, 0} Nat Nat (Monoid.Pow.{0} Nat Nat.monoid)) p k2)) (CommRing.toCommSemiring.{0} (ZMod (HPow.hPow.{0, 0, 0} Nat Nat Nat (instHPow.{0, 0} Nat Nat (Monoid.Pow.{0} Nat Nat.monoid)) p k2)) (ZMod.commRing (HPow.hPow.{0, 0, 0} Nat Nat Nat (instHPow.{0, 0} Nat Nat (Monoid.Pow.{0} Nat Nat.monoid)) p k2))))) (Semiring.toNonAssocSemiring.{0} (ZMod (HPow.hPow.{0, 0, 0} Nat Nat Nat (instHPow.{0, 0} Nat Nat instPowNat) p k1)) (Ring.toSemiring.{0} (ZMod (HPow.hPow.{0, 0, 0} Nat Nat Nat (instHPow.{0, 0} Nat Nat instPowNat) p k1)) (CommRing.toRing.{0} (ZMod (HPow.hPow.{0, 0, 0} Nat Nat Nat (instHPow.{0, 0} Nat Nat instPowNat) p k1)) (ZMod.commRing (HPow.hPow.{0, 0, 0} Nat Nat Nat (instHPow.{0, 0} Nat Nat instPowNat) p k1))))) (ZMod.castHom.{0} (HPow.hPow.{0, 0, 0} Nat Nat Nat (instHPow.{0, 0} Nat Nat (Monoid.Pow.{0} Nat Nat.monoid)) p k2) (HPow.hPow.{0, 0, 0} Nat Nat Nat (instHPow.{0, 0} Nat Nat (Monoid.Pow.{0} Nat Nat.monoid)) p k1) (pow_dvd_pow.{0} Nat Nat.monoid p k1 k2 hk) (ZMod (HPow.hPow.{0, 0, 0} Nat Nat Nat (instHPow.{0, 0} Nat Nat instPowNat) p k1)) (CommRing.toRing.{0} (ZMod (HPow.hPow.{0, 0, 0} Nat Nat Nat (instHPow.{0, 0} Nat Nat instPowNat) p k1)) (ZMod.commRing (HPow.hPow.{0, 0, 0} Nat Nat Nat (instHPow.{0, 0} Nat Nat instPowNat) p k1))) (ZMod.charP (HPow.hPow.{0, 0, 0} Nat Nat Nat (instHPow.{0, 0} Nat Nat instPowNat) p k1))) (f k2)) (f k1)) (r : R) (s : R), HasEquiv.Equiv.{1, 0} (PadicSeq p) (instHasEquiv.{1} (PadicSeq p) (CauSeq.equiv.{0, 0} Rat Rat Rat.instLinearOrderedFieldRat (NormedRing.toRing.{0} Rat (NormedCommRing.toNormedRing.{0} Rat (NormedField.toNormedCommRing.{0} Rat Rat.normedField))) (padicNorm p) (padicNorm.instIsAbsoluteValueRatInstOrderedSemiringRatSemiringPadicNorm p hp_prime))) (PadicInt.nthHomSeq.{u1} p hp_prime R _inst_1 (fun (k2 : Nat) => f k2) f_compat (HMul.hMul.{u1, u1, u1} R R R (instHMul.{u1} R (NonUnitalNonAssocSemiring.toMul.{u1} R (NonAssocSemiring.toNonUnitalNonAssocSemiring.{u1} R _inst_1))) r s)) (HMul.hMul.{0, 0, 0} (PadicSeq p) (PadicSeq p) (PadicSeq p) (instHMul.{0} (PadicSeq p) (CauSeq.instMulCauSeq.{0, 0} Rat Rat Rat.instLinearOrderedFieldRat (NormedRing.toRing.{0} Rat (NormedCommRing.toNormedRing.{0} Rat (NormedField.toNormedCommRing.{0} Rat Rat.normedField))) (padicNorm p) (padicNorm.instIsAbsoluteValueRatInstOrderedSemiringRatSemiringPadicNorm p hp_prime))) (PadicInt.nthHomSeq.{u1} p hp_prime R _inst_1 (fun (k2 : Nat) => f k2) f_compat r) (PadicInt.nthHomSeq.{u1} p hp_prime R _inst_1 (fun (k2 : Nat) => f k2) f_compat s))
-Case conversion may be inaccurate. Consider using '#align padic_int.nth_hom_seq_mul PadicInt.nthHomSeq_mulₓ'. -/
theorem nthHomSeq_mul (r s : R) :
nthHomSeq f_compat (r * s) ≈ nthHomSeq f_compat r * nthHomSeq f_compat s :=
by
@@ -760,12 +610,6 @@ def limNthHom (r : R) : ℤ_[p] :=
#align padic_int.lim_nth_hom PadicInt.limNthHom
-/
-/- warning: padic_int.lim_nth_hom_spec -> PadicInt.limNthHom_spec is a dubious translation:
-lean 3 declaration is
- forall {p : Nat} [hp_prime : Fact (Nat.Prime p)] {R : Type.{u1}} [_inst_1 : NonAssocSemiring.{u1} R] {f : forall (k : Nat), RingHom.{u1, 0} R (ZMod (HPow.hPow.{0, 0, 0} Nat Nat Nat (instHPow.{0, 0} Nat Nat (Monoid.Pow.{0} Nat Nat.monoid)) p k)) _inst_1 (NonAssocRing.toNonAssocSemiring.{0} (ZMod (HPow.hPow.{0, 0, 0} Nat Nat Nat (instHPow.{0, 0} Nat Nat (Monoid.Pow.{0} Nat Nat.monoid)) p k)) (Ring.toNonAssocRing.{0} (ZMod (HPow.hPow.{0, 0, 0} Nat Nat Nat (instHPow.{0, 0} Nat Nat (Monoid.Pow.{0} Nat Nat.monoid)) p k)) (CommRing.toRing.{0} (ZMod (HPow.hPow.{0, 0, 0} Nat Nat Nat (instHPow.{0, 0} Nat Nat (Monoid.Pow.{0} Nat Nat.monoid)) p k)) (ZMod.commRing (HPow.hPow.{0, 0, 0} Nat Nat Nat (instHPow.{0, 0} Nat Nat (Monoid.Pow.{0} Nat Nat.monoid)) p k)))))} (f_compat : forall (k1 : Nat) (k2 : Nat) (hk : LE.le.{0} Nat Nat.hasLe k1 k2), Eq.{succ u1} (RingHom.{u1, 0} R (ZMod (HPow.hPow.{0, 0, 0} Nat Nat Nat (instHPow.{0, 0} Nat Nat (Monoid.Pow.{0} Nat Nat.monoid)) p k1)) _inst_1 (NonAssocRing.toNonAssocSemiring.{0} (ZMod (HPow.hPow.{0, 0, 0} Nat Nat Nat (instHPow.{0, 0} Nat Nat (Monoid.Pow.{0} Nat Nat.monoid)) p k1)) (Ring.toNonAssocRing.{0} (ZMod (HPow.hPow.{0, 0, 0} Nat Nat Nat (instHPow.{0, 0} Nat Nat (Monoid.Pow.{0} Nat Nat.monoid)) p k1)) (CommRing.toRing.{0} (ZMod (HPow.hPow.{0, 0, 0} Nat Nat Nat (instHPow.{0, 0} Nat Nat (Monoid.Pow.{0} Nat Nat.monoid)) p k1)) (ZMod.commRing (HPow.hPow.{0, 0, 0} Nat Nat Nat (instHPow.{0, 0} Nat Nat (Monoid.Pow.{0} Nat Nat.monoid)) p k1)))))) (RingHom.comp.{u1, 0, 0} R (ZMod (HPow.hPow.{0, 0, 0} Nat Nat Nat (instHPow.{0, 0} Nat Nat (Monoid.Pow.{0} Nat Nat.monoid)) p k2)) (ZMod (HPow.hPow.{0, 0, 0} Nat Nat Nat (instHPow.{0, 0} Nat Nat (Monoid.Pow.{0} Nat Nat.monoid)) p k1)) _inst_1 (NonAssocRing.toNonAssocSemiring.{0} (ZMod (HPow.hPow.{0, 0, 0} Nat Nat Nat (instHPow.{0, 0} Nat Nat (Monoid.Pow.{0} Nat Nat.monoid)) p k2)) (Ring.toNonAssocRing.{0} (ZMod (HPow.hPow.{0, 0, 0} Nat Nat Nat (instHPow.{0, 0} Nat Nat (Monoid.Pow.{0} Nat Nat.monoid)) p k2)) (CommRing.toRing.{0} (ZMod (HPow.hPow.{0, 0, 0} Nat Nat Nat (instHPow.{0, 0} Nat Nat (Monoid.Pow.{0} Nat Nat.monoid)) p k2)) (ZMod.commRing (HPow.hPow.{0, 0, 0} Nat Nat Nat (instHPow.{0, 0} Nat Nat (Monoid.Pow.{0} Nat Nat.monoid)) p k2))))) (NonAssocRing.toNonAssocSemiring.{0} (ZMod (HPow.hPow.{0, 0, 0} Nat Nat Nat (instHPow.{0, 0} Nat Nat (Monoid.Pow.{0} Nat Nat.monoid)) p k1)) (Ring.toNonAssocRing.{0} (ZMod (HPow.hPow.{0, 0, 0} Nat Nat Nat (instHPow.{0, 0} Nat Nat (Monoid.Pow.{0} Nat Nat.monoid)) p k1)) (CommRing.toRing.{0} (ZMod (HPow.hPow.{0, 0, 0} Nat Nat Nat (instHPow.{0, 0} Nat Nat (Monoid.Pow.{0} Nat Nat.monoid)) p k1)) (ZMod.commRing (HPow.hPow.{0, 0, 0} Nat Nat Nat (instHPow.{0, 0} Nat Nat (Monoid.Pow.{0} Nat Nat.monoid)) p k1))))) (ZMod.castHom.{0} (HPow.hPow.{0, 0, 0} Nat Nat Nat (instHPow.{0, 0} Nat Nat (Monoid.Pow.{0} Nat Nat.monoid)) p k2) (HPow.hPow.{0, 0, 0} Nat Nat Nat (instHPow.{0, 0} Nat Nat (Monoid.Pow.{0} Nat Nat.monoid)) p k1) (pow_dvd_pow.{0} Nat Nat.monoid p k1 k2 hk) (ZMod (HPow.hPow.{0, 0, 0} Nat Nat Nat (instHPow.{0, 0} Nat Nat (Monoid.Pow.{0} Nat Nat.monoid)) p k1)) (CommRing.toRing.{0} (ZMod (HPow.hPow.{0, 0, 0} Nat Nat Nat (instHPow.{0, 0} Nat Nat (Monoid.Pow.{0} Nat Nat.monoid)) p k1)) (ZMod.commRing (HPow.hPow.{0, 0, 0} Nat Nat Nat (instHPow.{0, 0} Nat Nat (Monoid.Pow.{0} Nat Nat.monoid)) p k1))) (ZMod.charP (HPow.hPow.{0, 0, 0} Nat Nat Nat (instHPow.{0, 0} Nat Nat (Monoid.Pow.{0} Nat Nat.monoid)) p k1))) (f k2)) (f k1)) (r : R) (ε : Real), (LT.lt.{0} Real Real.hasLt (OfNat.ofNat.{0} Real 0 (OfNat.mk.{0} Real 0 (Zero.zero.{0} Real Real.hasZero))) ε) -> (Exists.{1} Nat (fun (N : Nat) => forall (n : Nat), (GE.ge.{0} Nat Nat.hasLe n N) -> (LT.lt.{0} Real Real.hasLt (Norm.norm.{0} (PadicInt p hp_prime) (PadicInt.hasNorm p hp_prime) (HSub.hSub.{0, 0, 0} (PadicInt p hp_prime) (PadicInt p hp_prime) (PadicInt p hp_prime) (instHSub.{0} (PadicInt p hp_prime) (PadicInt.hasSub p hp_prime)) (PadicInt.limNthHom.{u1} p hp_prime R _inst_1 (fun (k2 : Nat) => f k2) f_compat r) ((fun (a : Type) (b : Type) [self : HasLiftT.{1, 1} a b] => self.0) Int (PadicInt p hp_prime) (HasLiftT.mk.{1, 1} Int (PadicInt p hp_prime) (CoeTCₓ.coe.{1, 1} Int (PadicInt p hp_prime) (Int.castCoe.{0} (PadicInt p hp_prime) (AddGroupWithOne.toHasIntCast.{0} (PadicInt p hp_prime) (AddCommGroupWithOne.toAddGroupWithOne.{0} (PadicInt p hp_prime) (Ring.toAddCommGroupWithOne.{0} (PadicInt p hp_prime) (NormedRing.toRing.{0} (PadicInt p hp_prime) (NormedCommRing.toNormedRing.{0} (PadicInt p hp_prime) (PadicInt.normedCommRing p hp_prime))))))))) (PadicInt.nthHom.{u1} p R _inst_1 f r n)))) ε)))
-but is expected to have type
- forall {p : Nat} [hp_prime : Fact (Nat.Prime p)] {R : Type.{u1}} [_inst_1 : NonAssocSemiring.{u1} R] {f : forall (k : Nat), RingHom.{u1, 0} R (ZMod (HPow.hPow.{0, 0, 0} Nat Nat Nat (instHPow.{0, 0} Nat Nat instPowNat) p k)) _inst_1 (Semiring.toNonAssocSemiring.{0} (ZMod (HPow.hPow.{0, 0, 0} Nat Nat Nat (instHPow.{0, 0} Nat Nat instPowNat) p k)) (CommSemiring.toSemiring.{0} (ZMod (HPow.hPow.{0, 0, 0} Nat Nat Nat (instHPow.{0, 0} Nat Nat instPowNat) p k)) (CommRing.toCommSemiring.{0} (ZMod (HPow.hPow.{0, 0, 0} Nat Nat Nat (instHPow.{0, 0} Nat Nat instPowNat) p k)) (ZMod.commRing (HPow.hPow.{0, 0, 0} Nat Nat Nat (instHPow.{0, 0} Nat Nat instPowNat) p k)))))} (f_compat : forall (k1 : Nat) (k2 : Nat) (hk : LE.le.{0} Nat instLENat k1 k2), Eq.{succ u1} (RingHom.{u1, 0} R (ZMod (HPow.hPow.{0, 0, 0} Nat Nat Nat (instHPow.{0, 0} Nat Nat instPowNat) p k1)) _inst_1 (Semiring.toNonAssocSemiring.{0} (ZMod (HPow.hPow.{0, 0, 0} Nat Nat Nat (instHPow.{0, 0} Nat Nat instPowNat) p k1)) (Ring.toSemiring.{0} (ZMod (HPow.hPow.{0, 0, 0} Nat Nat Nat (instHPow.{0, 0} Nat Nat instPowNat) p k1)) (CommRing.toRing.{0} (ZMod (HPow.hPow.{0, 0, 0} Nat Nat Nat (instHPow.{0, 0} Nat Nat instPowNat) p k1)) (ZMod.commRing (HPow.hPow.{0, 0, 0} Nat Nat Nat (instHPow.{0, 0} Nat Nat instPowNat) p k1)))))) (RingHom.comp.{u1, 0, 0} R (ZMod (HPow.hPow.{0, 0, 0} Nat Nat Nat (instHPow.{0, 0} Nat Nat (Monoid.Pow.{0} Nat Nat.monoid)) p k2)) (ZMod (HPow.hPow.{0, 0, 0} Nat Nat Nat (instHPow.{0, 0} Nat Nat instPowNat) p k1)) _inst_1 (Semiring.toNonAssocSemiring.{0} (ZMod (HPow.hPow.{0, 0, 0} Nat Nat Nat (instHPow.{0, 0} Nat Nat (Monoid.Pow.{0} Nat Nat.monoid)) p k2)) (CommSemiring.toSemiring.{0} (ZMod (HPow.hPow.{0, 0, 0} Nat Nat Nat (instHPow.{0, 0} Nat Nat (Monoid.Pow.{0} Nat Nat.monoid)) p k2)) (CommRing.toCommSemiring.{0} (ZMod (HPow.hPow.{0, 0, 0} Nat Nat Nat (instHPow.{0, 0} Nat Nat (Monoid.Pow.{0} Nat Nat.monoid)) p k2)) (ZMod.commRing (HPow.hPow.{0, 0, 0} Nat Nat Nat (instHPow.{0, 0} Nat Nat (Monoid.Pow.{0} Nat Nat.monoid)) p k2))))) (Semiring.toNonAssocSemiring.{0} (ZMod (HPow.hPow.{0, 0, 0} Nat Nat Nat (instHPow.{0, 0} Nat Nat instPowNat) p k1)) (Ring.toSemiring.{0} (ZMod (HPow.hPow.{0, 0, 0} Nat Nat Nat (instHPow.{0, 0} Nat Nat instPowNat) p k1)) (CommRing.toRing.{0} (ZMod (HPow.hPow.{0, 0, 0} Nat Nat Nat (instHPow.{0, 0} Nat Nat instPowNat) p k1)) (ZMod.commRing (HPow.hPow.{0, 0, 0} Nat Nat Nat (instHPow.{0, 0} Nat Nat instPowNat) p k1))))) (ZMod.castHom.{0} (HPow.hPow.{0, 0, 0} Nat Nat Nat (instHPow.{0, 0} Nat Nat (Monoid.Pow.{0} Nat Nat.monoid)) p k2) (HPow.hPow.{0, 0, 0} Nat Nat Nat (instHPow.{0, 0} Nat Nat (Monoid.Pow.{0} Nat Nat.monoid)) p k1) (pow_dvd_pow.{0} Nat Nat.monoid p k1 k2 hk) (ZMod (HPow.hPow.{0, 0, 0} Nat Nat Nat (instHPow.{0, 0} Nat Nat instPowNat) p k1)) (CommRing.toRing.{0} (ZMod (HPow.hPow.{0, 0, 0} Nat Nat Nat (instHPow.{0, 0} Nat Nat instPowNat) p k1)) (ZMod.commRing (HPow.hPow.{0, 0, 0} Nat Nat Nat (instHPow.{0, 0} Nat Nat instPowNat) p k1))) (ZMod.charP (HPow.hPow.{0, 0, 0} Nat Nat Nat (instHPow.{0, 0} Nat Nat instPowNat) p k1))) (f k2)) (f k1)) (r : R) (ε : Real), (LT.lt.{0} Real Real.instLTReal (OfNat.ofNat.{0} Real 0 (Zero.toOfNat0.{0} Real Real.instZeroReal)) ε) -> (Exists.{1} Nat (fun (N : Nat) => forall (n : Nat), (GE.ge.{0} Nat instLENat n N) -> (LT.lt.{0} Real Real.instLTReal (Norm.norm.{0} (PadicInt p hp_prime) (PadicInt.instNormPadicInt p hp_prime) (HSub.hSub.{0, 0, 0} (PadicInt p hp_prime) (PadicInt p hp_prime) (PadicInt p hp_prime) (instHSub.{0} (PadicInt p hp_prime) (PadicInt.instSubPadicInt p hp_prime)) (PadicInt.limNthHom.{u1} p hp_prime R _inst_1 (fun (k2 : Nat) => f k2) f_compat r) (Int.cast.{0} (PadicInt p hp_prime) (Ring.toIntCast.{0} (PadicInt p hp_prime) (NormedRing.toRing.{0} (PadicInt p hp_prime) (NormedCommRing.toNormedRing.{0} (PadicInt p hp_prime) (PadicInt.instNormedCommRingPadicInt p hp_prime)))) (PadicInt.nthHom.{u1} p R _inst_1 f r n)))) ε)))
-Case conversion may be inaccurate. Consider using '#align padic_int.lim_nth_hom_spec PadicInt.limNthHom_specₓ'. -/
theorem limNthHom_spec (r : R) :
∀ ε : ℝ, 0 < ε → ∃ N : ℕ, ∀ n ≥ N, ‖limNthHom f_compat r - nthHom f r n‖ < ε :=
by
@@ -781,53 +625,23 @@ theorem limNthHom_spec (r : R) :
exact hN _ hn
#align padic_int.lim_nth_hom_spec PadicInt.limNthHom_spec
-/- warning: padic_int.lim_nth_hom_zero -> PadicInt.limNthHom_zero is a dubious translation:
-lean 3 declaration is
- forall {p : Nat} [hp_prime : Fact (Nat.Prime p)] {R : Type.{u1}} [_inst_1 : NonAssocSemiring.{u1} R] {f : forall (k : Nat), RingHom.{u1, 0} R (ZMod (HPow.hPow.{0, 0, 0} Nat Nat Nat (instHPow.{0, 0} Nat Nat (Monoid.Pow.{0} Nat Nat.monoid)) p k)) _inst_1 (NonAssocRing.toNonAssocSemiring.{0} (ZMod (HPow.hPow.{0, 0, 0} Nat Nat Nat (instHPow.{0, 0} Nat Nat (Monoid.Pow.{0} Nat Nat.monoid)) p k)) (Ring.toNonAssocRing.{0} (ZMod (HPow.hPow.{0, 0, 0} Nat Nat Nat (instHPow.{0, 0} Nat Nat (Monoid.Pow.{0} Nat Nat.monoid)) p k)) (CommRing.toRing.{0} (ZMod (HPow.hPow.{0, 0, 0} Nat Nat Nat (instHPow.{0, 0} Nat Nat (Monoid.Pow.{0} Nat Nat.monoid)) p k)) (ZMod.commRing (HPow.hPow.{0, 0, 0} Nat Nat Nat (instHPow.{0, 0} Nat Nat (Monoid.Pow.{0} Nat Nat.monoid)) p k)))))} (f_compat : forall (k1 : Nat) (k2 : Nat) (hk : LE.le.{0} Nat Nat.hasLe k1 k2), Eq.{succ u1} (RingHom.{u1, 0} R (ZMod (HPow.hPow.{0, 0, 0} Nat Nat Nat (instHPow.{0, 0} Nat Nat (Monoid.Pow.{0} Nat Nat.monoid)) p k1)) _inst_1 (NonAssocRing.toNonAssocSemiring.{0} (ZMod (HPow.hPow.{0, 0, 0} Nat Nat Nat (instHPow.{0, 0} Nat Nat (Monoid.Pow.{0} Nat Nat.monoid)) p k1)) (Ring.toNonAssocRing.{0} (ZMod (HPow.hPow.{0, 0, 0} Nat Nat Nat (instHPow.{0, 0} Nat Nat (Monoid.Pow.{0} Nat Nat.monoid)) p k1)) (CommRing.toRing.{0} (ZMod (HPow.hPow.{0, 0, 0} Nat Nat Nat (instHPow.{0, 0} Nat Nat (Monoid.Pow.{0} Nat Nat.monoid)) p k1)) (ZMod.commRing (HPow.hPow.{0, 0, 0} Nat Nat Nat (instHPow.{0, 0} Nat Nat (Monoid.Pow.{0} Nat Nat.monoid)) p k1)))))) (RingHom.comp.{u1, 0, 0} R (ZMod (HPow.hPow.{0, 0, 0} Nat Nat Nat (instHPow.{0, 0} Nat Nat (Monoid.Pow.{0} Nat Nat.monoid)) p k2)) (ZMod (HPow.hPow.{0, 0, 0} Nat Nat Nat (instHPow.{0, 0} Nat Nat (Monoid.Pow.{0} Nat Nat.monoid)) p k1)) _inst_1 (NonAssocRing.toNonAssocSemiring.{0} (ZMod (HPow.hPow.{0, 0, 0} Nat Nat Nat (instHPow.{0, 0} Nat Nat (Monoid.Pow.{0} Nat Nat.monoid)) p k2)) (Ring.toNonAssocRing.{0} (ZMod (HPow.hPow.{0, 0, 0} Nat Nat Nat (instHPow.{0, 0} Nat Nat (Monoid.Pow.{0} Nat Nat.monoid)) p k2)) (CommRing.toRing.{0} (ZMod (HPow.hPow.{0, 0, 0} Nat Nat Nat (instHPow.{0, 0} Nat Nat (Monoid.Pow.{0} Nat Nat.monoid)) p k2)) (ZMod.commRing (HPow.hPow.{0, 0, 0} Nat Nat Nat (instHPow.{0, 0} Nat Nat (Monoid.Pow.{0} Nat Nat.monoid)) p k2))))) (NonAssocRing.toNonAssocSemiring.{0} (ZMod (HPow.hPow.{0, 0, 0} Nat Nat Nat (instHPow.{0, 0} Nat Nat (Monoid.Pow.{0} Nat Nat.monoid)) p k1)) (Ring.toNonAssocRing.{0} (ZMod (HPow.hPow.{0, 0, 0} Nat Nat Nat (instHPow.{0, 0} Nat Nat (Monoid.Pow.{0} Nat Nat.monoid)) p k1)) (CommRing.toRing.{0} (ZMod (HPow.hPow.{0, 0, 0} Nat Nat Nat (instHPow.{0, 0} Nat Nat (Monoid.Pow.{0} Nat Nat.monoid)) p k1)) (ZMod.commRing (HPow.hPow.{0, 0, 0} Nat Nat Nat (instHPow.{0, 0} Nat Nat (Monoid.Pow.{0} Nat Nat.monoid)) p k1))))) (ZMod.castHom.{0} (HPow.hPow.{0, 0, 0} Nat Nat Nat (instHPow.{0, 0} Nat Nat (Monoid.Pow.{0} Nat Nat.monoid)) p k2) (HPow.hPow.{0, 0, 0} Nat Nat Nat (instHPow.{0, 0} Nat Nat (Monoid.Pow.{0} Nat Nat.monoid)) p k1) (pow_dvd_pow.{0} Nat Nat.monoid p k1 k2 hk) (ZMod (HPow.hPow.{0, 0, 0} Nat Nat Nat (instHPow.{0, 0} Nat Nat (Monoid.Pow.{0} Nat Nat.monoid)) p k1)) (CommRing.toRing.{0} (ZMod (HPow.hPow.{0, 0, 0} Nat Nat Nat (instHPow.{0, 0} Nat Nat (Monoid.Pow.{0} Nat Nat.monoid)) p k1)) (ZMod.commRing (HPow.hPow.{0, 0, 0} Nat Nat Nat (instHPow.{0, 0} Nat Nat (Monoid.Pow.{0} Nat Nat.monoid)) p k1))) (ZMod.charP (HPow.hPow.{0, 0, 0} Nat Nat Nat (instHPow.{0, 0} Nat Nat (Monoid.Pow.{0} Nat Nat.monoid)) p k1))) (f k2)) (f k1)), Eq.{1} (PadicInt p hp_prime) (PadicInt.limNthHom.{u1} p hp_prime R _inst_1 (fun (k2 : Nat) => f k2) f_compat (OfNat.ofNat.{u1} R 0 (OfNat.mk.{u1} R 0 (Zero.zero.{u1} R (MulZeroClass.toHasZero.{u1} R (NonUnitalNonAssocSemiring.toMulZeroClass.{u1} R (NonAssocSemiring.toNonUnitalNonAssocSemiring.{u1} R _inst_1))))))) (OfNat.ofNat.{0} (PadicInt p hp_prime) 0 (OfNat.mk.{0} (PadicInt p hp_prime) 0 (Zero.zero.{0} (PadicInt p hp_prime) (PadicInt.hasZero p hp_prime))))
-but is expected to have type
- forall {p : Nat} [hp_prime : Fact (Nat.Prime p)] {R : Type.{u1}} [_inst_1 : NonAssocSemiring.{u1} R] {f : forall (k : Nat), RingHom.{u1, 0} R (ZMod (HPow.hPow.{0, 0, 0} Nat Nat Nat (instHPow.{0, 0} Nat Nat instPowNat) p k)) _inst_1 (Semiring.toNonAssocSemiring.{0} (ZMod (HPow.hPow.{0, 0, 0} Nat Nat Nat (instHPow.{0, 0} Nat Nat instPowNat) p k)) (CommSemiring.toSemiring.{0} (ZMod (HPow.hPow.{0, 0, 0} Nat Nat Nat (instHPow.{0, 0} Nat Nat instPowNat) p k)) (CommRing.toCommSemiring.{0} (ZMod (HPow.hPow.{0, 0, 0} Nat Nat Nat (instHPow.{0, 0} Nat Nat instPowNat) p k)) (ZMod.commRing (HPow.hPow.{0, 0, 0} Nat Nat Nat (instHPow.{0, 0} Nat Nat instPowNat) p k)))))} (f_compat : forall (k1 : Nat) (k2 : Nat) (hk : LE.le.{0} Nat instLENat k1 k2), Eq.{succ u1} (RingHom.{u1, 0} R (ZMod (HPow.hPow.{0, 0, 0} Nat Nat Nat (instHPow.{0, 0} Nat Nat instPowNat) p k1)) _inst_1 (Semiring.toNonAssocSemiring.{0} (ZMod (HPow.hPow.{0, 0, 0} Nat Nat Nat (instHPow.{0, 0} Nat Nat instPowNat) p k1)) (Ring.toSemiring.{0} (ZMod (HPow.hPow.{0, 0, 0} Nat Nat Nat (instHPow.{0, 0} Nat Nat instPowNat) p k1)) (CommRing.toRing.{0} (ZMod (HPow.hPow.{0, 0, 0} Nat Nat Nat (instHPow.{0, 0} Nat Nat instPowNat) p k1)) (ZMod.commRing (HPow.hPow.{0, 0, 0} Nat Nat Nat (instHPow.{0, 0} Nat Nat instPowNat) p k1)))))) (RingHom.comp.{u1, 0, 0} R (ZMod (HPow.hPow.{0, 0, 0} Nat Nat Nat (instHPow.{0, 0} Nat Nat (Monoid.Pow.{0} Nat Nat.monoid)) p k2)) (ZMod (HPow.hPow.{0, 0, 0} Nat Nat Nat (instHPow.{0, 0} Nat Nat instPowNat) p k1)) _inst_1 (Semiring.toNonAssocSemiring.{0} (ZMod (HPow.hPow.{0, 0, 0} Nat Nat Nat (instHPow.{0, 0} Nat Nat (Monoid.Pow.{0} Nat Nat.monoid)) p k2)) (CommSemiring.toSemiring.{0} (ZMod (HPow.hPow.{0, 0, 0} Nat Nat Nat (instHPow.{0, 0} Nat Nat (Monoid.Pow.{0} Nat Nat.monoid)) p k2)) (CommRing.toCommSemiring.{0} (ZMod (HPow.hPow.{0, 0, 0} Nat Nat Nat (instHPow.{0, 0} Nat Nat (Monoid.Pow.{0} Nat Nat.monoid)) p k2)) (ZMod.commRing (HPow.hPow.{0, 0, 0} Nat Nat Nat (instHPow.{0, 0} Nat Nat (Monoid.Pow.{0} Nat Nat.monoid)) p k2))))) (Semiring.toNonAssocSemiring.{0} (ZMod (HPow.hPow.{0, 0, 0} Nat Nat Nat (instHPow.{0, 0} Nat Nat instPowNat) p k1)) (Ring.toSemiring.{0} (ZMod (HPow.hPow.{0, 0, 0} Nat Nat Nat (instHPow.{0, 0} Nat Nat instPowNat) p k1)) (CommRing.toRing.{0} (ZMod (HPow.hPow.{0, 0, 0} Nat Nat Nat (instHPow.{0, 0} Nat Nat instPowNat) p k1)) (ZMod.commRing (HPow.hPow.{0, 0, 0} Nat Nat Nat (instHPow.{0, 0} Nat Nat instPowNat) p k1))))) (ZMod.castHom.{0} (HPow.hPow.{0, 0, 0} Nat Nat Nat (instHPow.{0, 0} Nat Nat (Monoid.Pow.{0} Nat Nat.monoid)) p k2) (HPow.hPow.{0, 0, 0} Nat Nat Nat (instHPow.{0, 0} Nat Nat (Monoid.Pow.{0} Nat Nat.monoid)) p k1) (pow_dvd_pow.{0} Nat Nat.monoid p k1 k2 hk) (ZMod (HPow.hPow.{0, 0, 0} Nat Nat Nat (instHPow.{0, 0} Nat Nat instPowNat) p k1)) (CommRing.toRing.{0} (ZMod (HPow.hPow.{0, 0, 0} Nat Nat Nat (instHPow.{0, 0} Nat Nat instPowNat) p k1)) (ZMod.commRing (HPow.hPow.{0, 0, 0} Nat Nat Nat (instHPow.{0, 0} Nat Nat instPowNat) p k1))) (ZMod.charP (HPow.hPow.{0, 0, 0} Nat Nat Nat (instHPow.{0, 0} Nat Nat instPowNat) p k1))) (f k2)) (f k1)), Eq.{1} (PadicInt p hp_prime) (PadicInt.limNthHom.{u1} p hp_prime R _inst_1 (fun (k2 : Nat) => f k2) f_compat (OfNat.ofNat.{u1} R 0 (Zero.toOfNat0.{u1} R (MulZeroOneClass.toZero.{u1} R (NonAssocSemiring.toMulZeroOneClass.{u1} R _inst_1))))) (OfNat.ofNat.{0} (PadicInt p hp_prime) 0 (Zero.toOfNat0.{0} (PadicInt p hp_prime) (PadicInt.instZeroPadicInt p hp_prime)))
-Case conversion may be inaccurate. Consider using '#align padic_int.lim_nth_hom_zero PadicInt.limNthHom_zeroₓ'. -/
theorem limNthHom_zero : limNthHom f_compat 0 = 0 := by simp [lim_nth_hom] <;> rfl
#align padic_int.lim_nth_hom_zero PadicInt.limNthHom_zero
-/- warning: padic_int.lim_nth_hom_one -> PadicInt.limNthHom_one is a dubious translation:
-lean 3 declaration is
- forall {p : Nat} [hp_prime : Fact (Nat.Prime p)] {R : Type.{u1}} [_inst_1 : NonAssocSemiring.{u1} R] {f : forall (k : Nat), RingHom.{u1, 0} R (ZMod (HPow.hPow.{0, 0, 0} Nat Nat Nat (instHPow.{0, 0} Nat Nat (Monoid.Pow.{0} Nat Nat.monoid)) p k)) _inst_1 (NonAssocRing.toNonAssocSemiring.{0} (ZMod (HPow.hPow.{0, 0, 0} Nat Nat Nat (instHPow.{0, 0} Nat Nat (Monoid.Pow.{0} Nat Nat.monoid)) p k)) (Ring.toNonAssocRing.{0} (ZMod (HPow.hPow.{0, 0, 0} Nat Nat Nat (instHPow.{0, 0} Nat Nat (Monoid.Pow.{0} Nat Nat.monoid)) p k)) (CommRing.toRing.{0} (ZMod (HPow.hPow.{0, 0, 0} Nat Nat Nat (instHPow.{0, 0} Nat Nat (Monoid.Pow.{0} Nat Nat.monoid)) p k)) (ZMod.commRing (HPow.hPow.{0, 0, 0} Nat Nat Nat (instHPow.{0, 0} Nat Nat (Monoid.Pow.{0} Nat Nat.monoid)) p k)))))} (f_compat : forall (k1 : Nat) (k2 : Nat) (hk : LE.le.{0} Nat Nat.hasLe k1 k2), Eq.{succ u1} (RingHom.{u1, 0} R (ZMod (HPow.hPow.{0, 0, 0} Nat Nat Nat (instHPow.{0, 0} Nat Nat (Monoid.Pow.{0} Nat Nat.monoid)) p k1)) _inst_1 (NonAssocRing.toNonAssocSemiring.{0} (ZMod (HPow.hPow.{0, 0, 0} Nat Nat Nat (instHPow.{0, 0} Nat Nat (Monoid.Pow.{0} Nat Nat.monoid)) p k1)) (Ring.toNonAssocRing.{0} (ZMod (HPow.hPow.{0, 0, 0} Nat Nat Nat (instHPow.{0, 0} Nat Nat (Monoid.Pow.{0} Nat Nat.monoid)) p k1)) (CommRing.toRing.{0} (ZMod (HPow.hPow.{0, 0, 0} Nat Nat Nat (instHPow.{0, 0} Nat Nat (Monoid.Pow.{0} Nat Nat.monoid)) p k1)) (ZMod.commRing (HPow.hPow.{0, 0, 0} Nat Nat Nat (instHPow.{0, 0} Nat Nat (Monoid.Pow.{0} Nat Nat.monoid)) p k1)))))) (RingHom.comp.{u1, 0, 0} R (ZMod (HPow.hPow.{0, 0, 0} Nat Nat Nat (instHPow.{0, 0} Nat Nat (Monoid.Pow.{0} Nat Nat.monoid)) p k2)) (ZMod (HPow.hPow.{0, 0, 0} Nat Nat Nat (instHPow.{0, 0} Nat Nat (Monoid.Pow.{0} Nat Nat.monoid)) p k1)) _inst_1 (NonAssocRing.toNonAssocSemiring.{0} (ZMod (HPow.hPow.{0, 0, 0} Nat Nat Nat (instHPow.{0, 0} Nat Nat (Monoid.Pow.{0} Nat Nat.monoid)) p k2)) (Ring.toNonAssocRing.{0} (ZMod (HPow.hPow.{0, 0, 0} Nat Nat Nat (instHPow.{0, 0} Nat Nat (Monoid.Pow.{0} Nat Nat.monoid)) p k2)) (CommRing.toRing.{0} (ZMod (HPow.hPow.{0, 0, 0} Nat Nat Nat (instHPow.{0, 0} Nat Nat (Monoid.Pow.{0} Nat Nat.monoid)) p k2)) (ZMod.commRing (HPow.hPow.{0, 0, 0} Nat Nat Nat (instHPow.{0, 0} Nat Nat (Monoid.Pow.{0} Nat Nat.monoid)) p k2))))) (NonAssocRing.toNonAssocSemiring.{0} (ZMod (HPow.hPow.{0, 0, 0} Nat Nat Nat (instHPow.{0, 0} Nat Nat (Monoid.Pow.{0} Nat Nat.monoid)) p k1)) (Ring.toNonAssocRing.{0} (ZMod (HPow.hPow.{0, 0, 0} Nat Nat Nat (instHPow.{0, 0} Nat Nat (Monoid.Pow.{0} Nat Nat.monoid)) p k1)) (CommRing.toRing.{0} (ZMod (HPow.hPow.{0, 0, 0} Nat Nat Nat (instHPow.{0, 0} Nat Nat (Monoid.Pow.{0} Nat Nat.monoid)) p k1)) (ZMod.commRing (HPow.hPow.{0, 0, 0} Nat Nat Nat (instHPow.{0, 0} Nat Nat (Monoid.Pow.{0} Nat Nat.monoid)) p k1))))) (ZMod.castHom.{0} (HPow.hPow.{0, 0, 0} Nat Nat Nat (instHPow.{0, 0} Nat Nat (Monoid.Pow.{0} Nat Nat.monoid)) p k2) (HPow.hPow.{0, 0, 0} Nat Nat Nat (instHPow.{0, 0} Nat Nat (Monoid.Pow.{0} Nat Nat.monoid)) p k1) (pow_dvd_pow.{0} Nat Nat.monoid p k1 k2 hk) (ZMod (HPow.hPow.{0, 0, 0} Nat Nat Nat (instHPow.{0, 0} Nat Nat (Monoid.Pow.{0} Nat Nat.monoid)) p k1)) (CommRing.toRing.{0} (ZMod (HPow.hPow.{0, 0, 0} Nat Nat Nat (instHPow.{0, 0} Nat Nat (Monoid.Pow.{0} Nat Nat.monoid)) p k1)) (ZMod.commRing (HPow.hPow.{0, 0, 0} Nat Nat Nat (instHPow.{0, 0} Nat Nat (Monoid.Pow.{0} Nat Nat.monoid)) p k1))) (ZMod.charP (HPow.hPow.{0, 0, 0} Nat Nat Nat (instHPow.{0, 0} Nat Nat (Monoid.Pow.{0} Nat Nat.monoid)) p k1))) (f k2)) (f k1)), Eq.{1} (PadicInt p hp_prime) (PadicInt.limNthHom.{u1} p hp_prime R _inst_1 (fun (k2 : Nat) => f k2) f_compat (OfNat.ofNat.{u1} R 1 (OfNat.mk.{u1} R 1 (One.one.{u1} R (AddMonoidWithOne.toOne.{u1} R (AddCommMonoidWithOne.toAddMonoidWithOne.{u1} R (NonAssocSemiring.toAddCommMonoidWithOne.{u1} R _inst_1))))))) (OfNat.ofNat.{0} (PadicInt p hp_prime) 1 (OfNat.mk.{0} (PadicInt p hp_prime) 1 (One.one.{0} (PadicInt p hp_prime) (PadicInt.hasOne p hp_prime))))
-but is expected to have type
- forall {p : Nat} [hp_prime : Fact (Nat.Prime p)] {R : Type.{u1}} [_inst_1 : NonAssocSemiring.{u1} R] {f : forall (k : Nat), RingHom.{u1, 0} R (ZMod (HPow.hPow.{0, 0, 0} Nat Nat Nat (instHPow.{0, 0} Nat Nat instPowNat) p k)) _inst_1 (Semiring.toNonAssocSemiring.{0} (ZMod (HPow.hPow.{0, 0, 0} Nat Nat Nat (instHPow.{0, 0} Nat Nat instPowNat) p k)) (CommSemiring.toSemiring.{0} (ZMod (HPow.hPow.{0, 0, 0} Nat Nat Nat (instHPow.{0, 0} Nat Nat instPowNat) p k)) (CommRing.toCommSemiring.{0} (ZMod (HPow.hPow.{0, 0, 0} Nat Nat Nat (instHPow.{0, 0} Nat Nat instPowNat) p k)) (ZMod.commRing (HPow.hPow.{0, 0, 0} Nat Nat Nat (instHPow.{0, 0} Nat Nat instPowNat) p k)))))} (f_compat : forall (k1 : Nat) (k2 : Nat) (hk : LE.le.{0} Nat instLENat k1 k2), Eq.{succ u1} (RingHom.{u1, 0} R (ZMod (HPow.hPow.{0, 0, 0} Nat Nat Nat (instHPow.{0, 0} Nat Nat instPowNat) p k1)) _inst_1 (Semiring.toNonAssocSemiring.{0} (ZMod (HPow.hPow.{0, 0, 0} Nat Nat Nat (instHPow.{0, 0} Nat Nat instPowNat) p k1)) (Ring.toSemiring.{0} (ZMod (HPow.hPow.{0, 0, 0} Nat Nat Nat (instHPow.{0, 0} Nat Nat instPowNat) p k1)) (CommRing.toRing.{0} (ZMod (HPow.hPow.{0, 0, 0} Nat Nat Nat (instHPow.{0, 0} Nat Nat instPowNat) p k1)) (ZMod.commRing (HPow.hPow.{0, 0, 0} Nat Nat Nat (instHPow.{0, 0} Nat Nat instPowNat) p k1)))))) (RingHom.comp.{u1, 0, 0} R (ZMod (HPow.hPow.{0, 0, 0} Nat Nat Nat (instHPow.{0, 0} Nat Nat (Monoid.Pow.{0} Nat Nat.monoid)) p k2)) (ZMod (HPow.hPow.{0, 0, 0} Nat Nat Nat (instHPow.{0, 0} Nat Nat instPowNat) p k1)) _inst_1 (Semiring.toNonAssocSemiring.{0} (ZMod (HPow.hPow.{0, 0, 0} Nat Nat Nat (instHPow.{0, 0} Nat Nat (Monoid.Pow.{0} Nat Nat.monoid)) p k2)) (CommSemiring.toSemiring.{0} (ZMod (HPow.hPow.{0, 0, 0} Nat Nat Nat (instHPow.{0, 0} Nat Nat (Monoid.Pow.{0} Nat Nat.monoid)) p k2)) (CommRing.toCommSemiring.{0} (ZMod (HPow.hPow.{0, 0, 0} Nat Nat Nat (instHPow.{0, 0} Nat Nat (Monoid.Pow.{0} Nat Nat.monoid)) p k2)) (ZMod.commRing (HPow.hPow.{0, 0, 0} Nat Nat Nat (instHPow.{0, 0} Nat Nat (Monoid.Pow.{0} Nat Nat.monoid)) p k2))))) (Semiring.toNonAssocSemiring.{0} (ZMod (HPow.hPow.{0, 0, 0} Nat Nat Nat (instHPow.{0, 0} Nat Nat instPowNat) p k1)) (Ring.toSemiring.{0} (ZMod (HPow.hPow.{0, 0, 0} Nat Nat Nat (instHPow.{0, 0} Nat Nat instPowNat) p k1)) (CommRing.toRing.{0} (ZMod (HPow.hPow.{0, 0, 0} Nat Nat Nat (instHPow.{0, 0} Nat Nat instPowNat) p k1)) (ZMod.commRing (HPow.hPow.{0, 0, 0} Nat Nat Nat (instHPow.{0, 0} Nat Nat instPowNat) p k1))))) (ZMod.castHom.{0} (HPow.hPow.{0, 0, 0} Nat Nat Nat (instHPow.{0, 0} Nat Nat (Monoid.Pow.{0} Nat Nat.monoid)) p k2) (HPow.hPow.{0, 0, 0} Nat Nat Nat (instHPow.{0, 0} Nat Nat (Monoid.Pow.{0} Nat Nat.monoid)) p k1) (pow_dvd_pow.{0} Nat Nat.monoid p k1 k2 hk) (ZMod (HPow.hPow.{0, 0, 0} Nat Nat Nat (instHPow.{0, 0} Nat Nat instPowNat) p k1)) (CommRing.toRing.{0} (ZMod (HPow.hPow.{0, 0, 0} Nat Nat Nat (instHPow.{0, 0} Nat Nat instPowNat) p k1)) (ZMod.commRing (HPow.hPow.{0, 0, 0} Nat Nat Nat (instHPow.{0, 0} Nat Nat instPowNat) p k1))) (ZMod.charP (HPow.hPow.{0, 0, 0} Nat Nat Nat (instHPow.{0, 0} Nat Nat instPowNat) p k1))) (f k2)) (f k1)), Eq.{1} (PadicInt p hp_prime) (PadicInt.limNthHom.{u1} p hp_prime R _inst_1 (fun (k2 : Nat) => f k2) f_compat (OfNat.ofNat.{u1} R 1 (One.toOfNat1.{u1} R (NonAssocSemiring.toOne.{u1} R _inst_1)))) (OfNat.ofNat.{0} (PadicInt p hp_prime) 1 (One.toOfNat1.{0} (PadicInt p hp_prime) (PadicInt.instOnePadicInt p hp_prime)))
-Case conversion may be inaccurate. Consider using '#align padic_int.lim_nth_hom_one PadicInt.limNthHom_oneₓ'. -/
theorem limNthHom_one : limNthHom f_compat 1 = 1 :=
Subtype.ext <| Quot.sound <| nthHomSeq_one _
#align padic_int.lim_nth_hom_one PadicInt.limNthHom_one
-/- warning: padic_int.lim_nth_hom_add -> PadicInt.limNthHom_add is a dubious translation:
-lean 3 declaration is
- forall {p : Nat} [hp_prime : Fact (Nat.Prime p)] {R : Type.{u1}} [_inst_1 : NonAssocSemiring.{u1} R] {f : forall (k : Nat), RingHom.{u1, 0} R (ZMod (HPow.hPow.{0, 0, 0} Nat Nat Nat (instHPow.{0, 0} Nat Nat (Monoid.Pow.{0} Nat Nat.monoid)) p k)) _inst_1 (NonAssocRing.toNonAssocSemiring.{0} (ZMod (HPow.hPow.{0, 0, 0} Nat Nat Nat (instHPow.{0, 0} Nat Nat (Monoid.Pow.{0} Nat Nat.monoid)) p k)) (Ring.toNonAssocRing.{0} (ZMod (HPow.hPow.{0, 0, 0} Nat Nat Nat (instHPow.{0, 0} Nat Nat (Monoid.Pow.{0} Nat Nat.monoid)) p k)) (CommRing.toRing.{0} (ZMod (HPow.hPow.{0, 0, 0} Nat Nat Nat (instHPow.{0, 0} Nat Nat (Monoid.Pow.{0} Nat Nat.monoid)) p k)) (ZMod.commRing (HPow.hPow.{0, 0, 0} Nat Nat Nat (instHPow.{0, 0} Nat Nat (Monoid.Pow.{0} Nat Nat.monoid)) p k)))))} (f_compat : forall (k1 : Nat) (k2 : Nat) (hk : LE.le.{0} Nat Nat.hasLe k1 k2), Eq.{succ u1} (RingHom.{u1, 0} R (ZMod (HPow.hPow.{0, 0, 0} Nat Nat Nat (instHPow.{0, 0} Nat Nat (Monoid.Pow.{0} Nat Nat.monoid)) p k1)) _inst_1 (NonAssocRing.toNonAssocSemiring.{0} (ZMod (HPow.hPow.{0, 0, 0} Nat Nat Nat (instHPow.{0, 0} Nat Nat (Monoid.Pow.{0} Nat Nat.monoid)) p k1)) (Ring.toNonAssocRing.{0} (ZMod (HPow.hPow.{0, 0, 0} Nat Nat Nat (instHPow.{0, 0} Nat Nat (Monoid.Pow.{0} Nat Nat.monoid)) p k1)) (CommRing.toRing.{0} (ZMod (HPow.hPow.{0, 0, 0} Nat Nat Nat (instHPow.{0, 0} Nat Nat (Monoid.Pow.{0} Nat Nat.monoid)) p k1)) (ZMod.commRing (HPow.hPow.{0, 0, 0} Nat Nat Nat (instHPow.{0, 0} Nat Nat (Monoid.Pow.{0} Nat Nat.monoid)) p k1)))))) (RingHom.comp.{u1, 0, 0} R (ZMod (HPow.hPow.{0, 0, 0} Nat Nat Nat (instHPow.{0, 0} Nat Nat (Monoid.Pow.{0} Nat Nat.monoid)) p k2)) (ZMod (HPow.hPow.{0, 0, 0} Nat Nat Nat (instHPow.{0, 0} Nat Nat (Monoid.Pow.{0} Nat Nat.monoid)) p k1)) _inst_1 (NonAssocRing.toNonAssocSemiring.{0} (ZMod (HPow.hPow.{0, 0, 0} Nat Nat Nat (instHPow.{0, 0} Nat Nat (Monoid.Pow.{0} Nat Nat.monoid)) p k2)) (Ring.toNonAssocRing.{0} (ZMod (HPow.hPow.{0, 0, 0} Nat Nat Nat (instHPow.{0, 0} Nat Nat (Monoid.Pow.{0} Nat Nat.monoid)) p k2)) (CommRing.toRing.{0} (ZMod (HPow.hPow.{0, 0, 0} Nat Nat Nat (instHPow.{0, 0} Nat Nat (Monoid.Pow.{0} Nat Nat.monoid)) p k2)) (ZMod.commRing (HPow.hPow.{0, 0, 0} Nat Nat Nat (instHPow.{0, 0} Nat Nat (Monoid.Pow.{0} Nat Nat.monoid)) p k2))))) (NonAssocRing.toNonAssocSemiring.{0} (ZMod (HPow.hPow.{0, 0, 0} Nat Nat Nat (instHPow.{0, 0} Nat Nat (Monoid.Pow.{0} Nat Nat.monoid)) p k1)) (Ring.toNonAssocRing.{0} (ZMod (HPow.hPow.{0, 0, 0} Nat Nat Nat (instHPow.{0, 0} Nat Nat (Monoid.Pow.{0} Nat Nat.monoid)) p k1)) (CommRing.toRing.{0} (ZMod (HPow.hPow.{0, 0, 0} Nat Nat Nat (instHPow.{0, 0} Nat Nat (Monoid.Pow.{0} Nat Nat.monoid)) p k1)) (ZMod.commRing (HPow.hPow.{0, 0, 0} Nat Nat Nat (instHPow.{0, 0} Nat Nat (Monoid.Pow.{0} Nat Nat.monoid)) p k1))))) (ZMod.castHom.{0} (HPow.hPow.{0, 0, 0} Nat Nat Nat (instHPow.{0, 0} Nat Nat (Monoid.Pow.{0} Nat Nat.monoid)) p k2) (HPow.hPow.{0, 0, 0} Nat Nat Nat (instHPow.{0, 0} Nat Nat (Monoid.Pow.{0} Nat Nat.monoid)) p k1) (pow_dvd_pow.{0} Nat Nat.monoid p k1 k2 hk) (ZMod (HPow.hPow.{0, 0, 0} Nat Nat Nat (instHPow.{0, 0} Nat Nat (Monoid.Pow.{0} Nat Nat.monoid)) p k1)) (CommRing.toRing.{0} (ZMod (HPow.hPow.{0, 0, 0} Nat Nat Nat (instHPow.{0, 0} Nat Nat (Monoid.Pow.{0} Nat Nat.monoid)) p k1)) (ZMod.commRing (HPow.hPow.{0, 0, 0} Nat Nat Nat (instHPow.{0, 0} Nat Nat (Monoid.Pow.{0} Nat Nat.monoid)) p k1))) (ZMod.charP (HPow.hPow.{0, 0, 0} Nat Nat Nat (instHPow.{0, 0} Nat Nat (Monoid.Pow.{0} Nat Nat.monoid)) p k1))) (f k2)) (f k1)) (r : R) (s : R), Eq.{1} (PadicInt p hp_prime) (PadicInt.limNthHom.{u1} p hp_prime R _inst_1 (fun (k2 : Nat) => f k2) f_compat (HAdd.hAdd.{u1, u1, u1} R R R (instHAdd.{u1} R (Distrib.toHasAdd.{u1} R (NonUnitalNonAssocSemiring.toDistrib.{u1} R (NonAssocSemiring.toNonUnitalNonAssocSemiring.{u1} R _inst_1)))) r s)) (HAdd.hAdd.{0, 0, 0} (PadicInt p hp_prime) (PadicInt p hp_prime) (PadicInt p hp_prime) (instHAdd.{0} (PadicInt p hp_prime) (PadicInt.hasAdd p hp_prime)) (PadicInt.limNthHom.{u1} p hp_prime R _inst_1 (fun (k2 : Nat) => f k2) f_compat r) (PadicInt.limNthHom.{u1} p hp_prime R _inst_1 (fun (k2 : Nat) => f k2) f_compat s))
-but is expected to have type
- forall {p : Nat} [hp_prime : Fact (Nat.Prime p)] {R : Type.{u1}} [_inst_1 : NonAssocSemiring.{u1} R] {f : forall (k : Nat), RingHom.{u1, 0} R (ZMod (HPow.hPow.{0, 0, 0} Nat Nat Nat (instHPow.{0, 0} Nat Nat instPowNat) p k)) _inst_1 (Semiring.toNonAssocSemiring.{0} (ZMod (HPow.hPow.{0, 0, 0} Nat Nat Nat (instHPow.{0, 0} Nat Nat instPowNat) p k)) (CommSemiring.toSemiring.{0} (ZMod (HPow.hPow.{0, 0, 0} Nat Nat Nat (instHPow.{0, 0} Nat Nat instPowNat) p k)) (CommRing.toCommSemiring.{0} (ZMod (HPow.hPow.{0, 0, 0} Nat Nat Nat (instHPow.{0, 0} Nat Nat instPowNat) p k)) (ZMod.commRing (HPow.hPow.{0, 0, 0} Nat Nat Nat (instHPow.{0, 0} Nat Nat instPowNat) p k)))))} (f_compat : forall (k1 : Nat) (k2 : Nat) (hk : LE.le.{0} Nat instLENat k1 k2), Eq.{succ u1} (RingHom.{u1, 0} R (ZMod (HPow.hPow.{0, 0, 0} Nat Nat Nat (instHPow.{0, 0} Nat Nat instPowNat) p k1)) _inst_1 (Semiring.toNonAssocSemiring.{0} (ZMod (HPow.hPow.{0, 0, 0} Nat Nat Nat (instHPow.{0, 0} Nat Nat instPowNat) p k1)) (Ring.toSemiring.{0} (ZMod (HPow.hPow.{0, 0, 0} Nat Nat Nat (instHPow.{0, 0} Nat Nat instPowNat) p k1)) (CommRing.toRing.{0} (ZMod (HPow.hPow.{0, 0, 0} Nat Nat Nat (instHPow.{0, 0} Nat Nat instPowNat) p k1)) (ZMod.commRing (HPow.hPow.{0, 0, 0} Nat Nat Nat (instHPow.{0, 0} Nat Nat instPowNat) p k1)))))) (RingHom.comp.{u1, 0, 0} R (ZMod (HPow.hPow.{0, 0, 0} Nat Nat Nat (instHPow.{0, 0} Nat Nat (Monoid.Pow.{0} Nat Nat.monoid)) p k2)) (ZMod (HPow.hPow.{0, 0, 0} Nat Nat Nat (instHPow.{0, 0} Nat Nat instPowNat) p k1)) _inst_1 (Semiring.toNonAssocSemiring.{0} (ZMod (HPow.hPow.{0, 0, 0} Nat Nat Nat (instHPow.{0, 0} Nat Nat (Monoid.Pow.{0} Nat Nat.monoid)) p k2)) (CommSemiring.toSemiring.{0} (ZMod (HPow.hPow.{0, 0, 0} Nat Nat Nat (instHPow.{0, 0} Nat Nat (Monoid.Pow.{0} Nat Nat.monoid)) p k2)) (CommRing.toCommSemiring.{0} (ZMod (HPow.hPow.{0, 0, 0} Nat Nat Nat (instHPow.{0, 0} Nat Nat (Monoid.Pow.{0} Nat Nat.monoid)) p k2)) (ZMod.commRing (HPow.hPow.{0, 0, 0} Nat Nat Nat (instHPow.{0, 0} Nat Nat (Monoid.Pow.{0} Nat Nat.monoid)) p k2))))) (Semiring.toNonAssocSemiring.{0} (ZMod (HPow.hPow.{0, 0, 0} Nat Nat Nat (instHPow.{0, 0} Nat Nat instPowNat) p k1)) (Ring.toSemiring.{0} (ZMod (HPow.hPow.{0, 0, 0} Nat Nat Nat (instHPow.{0, 0} Nat Nat instPowNat) p k1)) (CommRing.toRing.{0} (ZMod (HPow.hPow.{0, 0, 0} Nat Nat Nat (instHPow.{0, 0} Nat Nat instPowNat) p k1)) (ZMod.commRing (HPow.hPow.{0, 0, 0} Nat Nat Nat (instHPow.{0, 0} Nat Nat instPowNat) p k1))))) (ZMod.castHom.{0} (HPow.hPow.{0, 0, 0} Nat Nat Nat (instHPow.{0, 0} Nat Nat (Monoid.Pow.{0} Nat Nat.monoid)) p k2) (HPow.hPow.{0, 0, 0} Nat Nat Nat (instHPow.{0, 0} Nat Nat (Monoid.Pow.{0} Nat Nat.monoid)) p k1) (pow_dvd_pow.{0} Nat Nat.monoid p k1 k2 hk) (ZMod (HPow.hPow.{0, 0, 0} Nat Nat Nat (instHPow.{0, 0} Nat Nat instPowNat) p k1)) (CommRing.toRing.{0} (ZMod (HPow.hPow.{0, 0, 0} Nat Nat Nat (instHPow.{0, 0} Nat Nat instPowNat) p k1)) (ZMod.commRing (HPow.hPow.{0, 0, 0} Nat Nat Nat (instHPow.{0, 0} Nat Nat instPowNat) p k1))) (ZMod.charP (HPow.hPow.{0, 0, 0} Nat Nat Nat (instHPow.{0, 0} Nat Nat instPowNat) p k1))) (f k2)) (f k1)) (r : R) (s : R), Eq.{1} (PadicInt p hp_prime) (PadicInt.limNthHom.{u1} p hp_prime R _inst_1 (fun (k2 : Nat) => f k2) f_compat (HAdd.hAdd.{u1, u1, u1} R R R (instHAdd.{u1} R (Distrib.toAdd.{u1} R (NonUnitalNonAssocSemiring.toDistrib.{u1} R (NonAssocSemiring.toNonUnitalNonAssocSemiring.{u1} R _inst_1)))) r s)) (HAdd.hAdd.{0, 0, 0} (PadicInt p hp_prime) (PadicInt p hp_prime) (PadicInt p hp_prime) (instHAdd.{0} (PadicInt p hp_prime) (PadicInt.instAddPadicInt p hp_prime)) (PadicInt.limNthHom.{u1} p hp_prime R _inst_1 (fun (k2 : Nat) => f k2) f_compat r) (PadicInt.limNthHom.{u1} p hp_prime R _inst_1 (fun (k2 : Nat) => f k2) f_compat s))
-Case conversion may be inaccurate. Consider using '#align padic_int.lim_nth_hom_add PadicInt.limNthHom_addₓ'. -/
theorem limNthHom_add (r s : R) :
limNthHom f_compat (r + s) = limNthHom f_compat r + limNthHom f_compat s :=
Subtype.ext <| Quot.sound <| nthHomSeq_add _ _ _
#align padic_int.lim_nth_hom_add PadicInt.limNthHom_add
-/- warning: padic_int.lim_nth_hom_mul -> PadicInt.limNthHom_mul is a dubious translation:
-lean 3 declaration is
- forall {p : Nat} [hp_prime : Fact (Nat.Prime p)] {R : Type.{u1}} [_inst_1 : NonAssocSemiring.{u1} R] {f : forall (k : Nat), RingHom.{u1, 0} R (ZMod (HPow.hPow.{0, 0, 0} Nat Nat Nat (instHPow.{0, 0} Nat Nat (Monoid.Pow.{0} Nat Nat.monoid)) p k)) _inst_1 (NonAssocRing.toNonAssocSemiring.{0} (ZMod (HPow.hPow.{0, 0, 0} Nat Nat Nat (instHPow.{0, 0} Nat Nat (Monoid.Pow.{0} Nat Nat.monoid)) p k)) (Ring.toNonAssocRing.{0} (ZMod (HPow.hPow.{0, 0, 0} Nat Nat Nat (instHPow.{0, 0} Nat Nat (Monoid.Pow.{0} Nat Nat.monoid)) p k)) (CommRing.toRing.{0} (ZMod (HPow.hPow.{0, 0, 0} Nat Nat Nat (instHPow.{0, 0} Nat Nat (Monoid.Pow.{0} Nat Nat.monoid)) p k)) (ZMod.commRing (HPow.hPow.{0, 0, 0} Nat Nat Nat (instHPow.{0, 0} Nat Nat (Monoid.Pow.{0} Nat Nat.monoid)) p k)))))} (f_compat : forall (k1 : Nat) (k2 : Nat) (hk : LE.le.{0} Nat Nat.hasLe k1 k2), Eq.{succ u1} (RingHom.{u1, 0} R (ZMod (HPow.hPow.{0, 0, 0} Nat Nat Nat (instHPow.{0, 0} Nat Nat (Monoid.Pow.{0} Nat Nat.monoid)) p k1)) _inst_1 (NonAssocRing.toNonAssocSemiring.{0} (ZMod (HPow.hPow.{0, 0, 0} Nat Nat Nat (instHPow.{0, 0} Nat Nat (Monoid.Pow.{0} Nat Nat.monoid)) p k1)) (Ring.toNonAssocRing.{0} (ZMod (HPow.hPow.{0, 0, 0} Nat Nat Nat (instHPow.{0, 0} Nat Nat (Monoid.Pow.{0} Nat Nat.monoid)) p k1)) (CommRing.toRing.{0} (ZMod (HPow.hPow.{0, 0, 0} Nat Nat Nat (instHPow.{0, 0} Nat Nat (Monoid.Pow.{0} Nat Nat.monoid)) p k1)) (ZMod.commRing (HPow.hPow.{0, 0, 0} Nat Nat Nat (instHPow.{0, 0} Nat Nat (Monoid.Pow.{0} Nat Nat.monoid)) p k1)))))) (RingHom.comp.{u1, 0, 0} R (ZMod (HPow.hPow.{0, 0, 0} Nat Nat Nat (instHPow.{0, 0} Nat Nat (Monoid.Pow.{0} Nat Nat.monoid)) p k2)) (ZMod (HPow.hPow.{0, 0, 0} Nat Nat Nat (instHPow.{0, 0} Nat Nat (Monoid.Pow.{0} Nat Nat.monoid)) p k1)) _inst_1 (NonAssocRing.toNonAssocSemiring.{0} (ZMod (HPow.hPow.{0, 0, 0} Nat Nat Nat (instHPow.{0, 0} Nat Nat (Monoid.Pow.{0} Nat Nat.monoid)) p k2)) (Ring.toNonAssocRing.{0} (ZMod (HPow.hPow.{0, 0, 0} Nat Nat Nat (instHPow.{0, 0} Nat Nat (Monoid.Pow.{0} Nat Nat.monoid)) p k2)) (CommRing.toRing.{0} (ZMod (HPow.hPow.{0, 0, 0} Nat Nat Nat (instHPow.{0, 0} Nat Nat (Monoid.Pow.{0} Nat Nat.monoid)) p k2)) (ZMod.commRing (HPow.hPow.{0, 0, 0} Nat Nat Nat (instHPow.{0, 0} Nat Nat (Monoid.Pow.{0} Nat Nat.monoid)) p k2))))) (NonAssocRing.toNonAssocSemiring.{0} (ZMod (HPow.hPow.{0, 0, 0} Nat Nat Nat (instHPow.{0, 0} Nat Nat (Monoid.Pow.{0} Nat Nat.monoid)) p k1)) (Ring.toNonAssocRing.{0} (ZMod (HPow.hPow.{0, 0, 0} Nat Nat Nat (instHPow.{0, 0} Nat Nat (Monoid.Pow.{0} Nat Nat.monoid)) p k1)) (CommRing.toRing.{0} (ZMod (HPow.hPow.{0, 0, 0} Nat Nat Nat (instHPow.{0, 0} Nat Nat (Monoid.Pow.{0} Nat Nat.monoid)) p k1)) (ZMod.commRing (HPow.hPow.{0, 0, 0} Nat Nat Nat (instHPow.{0, 0} Nat Nat (Monoid.Pow.{0} Nat Nat.monoid)) p k1))))) (ZMod.castHom.{0} (HPow.hPow.{0, 0, 0} Nat Nat Nat (instHPow.{0, 0} Nat Nat (Monoid.Pow.{0} Nat Nat.monoid)) p k2) (HPow.hPow.{0, 0, 0} Nat Nat Nat (instHPow.{0, 0} Nat Nat (Monoid.Pow.{0} Nat Nat.monoid)) p k1) (pow_dvd_pow.{0} Nat Nat.monoid p k1 k2 hk) (ZMod (HPow.hPow.{0, 0, 0} Nat Nat Nat (instHPow.{0, 0} Nat Nat (Monoid.Pow.{0} Nat Nat.monoid)) p k1)) (CommRing.toRing.{0} (ZMod (HPow.hPow.{0, 0, 0} Nat Nat Nat (instHPow.{0, 0} Nat Nat (Monoid.Pow.{0} Nat Nat.monoid)) p k1)) (ZMod.commRing (HPow.hPow.{0, 0, 0} Nat Nat Nat (instHPow.{0, 0} Nat Nat (Monoid.Pow.{0} Nat Nat.monoid)) p k1))) (ZMod.charP (HPow.hPow.{0, 0, 0} Nat Nat Nat (instHPow.{0, 0} Nat Nat (Monoid.Pow.{0} Nat Nat.monoid)) p k1))) (f k2)) (f k1)) (r : R) (s : R), Eq.{1} (PadicInt p hp_prime) (PadicInt.limNthHom.{u1} p hp_prime R _inst_1 (fun (k2 : Nat) => f k2) f_compat (HMul.hMul.{u1, u1, u1} R R R (instHMul.{u1} R (Distrib.toHasMul.{u1} R (NonUnitalNonAssocSemiring.toDistrib.{u1} R (NonAssocSemiring.toNonUnitalNonAssocSemiring.{u1} R _inst_1)))) r s)) (HMul.hMul.{0, 0, 0} (PadicInt p hp_prime) (PadicInt p hp_prime) (PadicInt p hp_prime) (instHMul.{0} (PadicInt p hp_prime) (PadicInt.hasMul p hp_prime)) (PadicInt.limNthHom.{u1} p hp_prime R _inst_1 (fun (k2 : Nat) => f k2) f_compat r) (PadicInt.limNthHom.{u1} p hp_prime R _inst_1 (fun (k2 : Nat) => f k2) f_compat s))
-but is expected to have type
- forall {p : Nat} [hp_prime : Fact (Nat.Prime p)] {R : Type.{u1}} [_inst_1 : NonAssocSemiring.{u1} R] {f : forall (k : Nat), RingHom.{u1, 0} R (ZMod (HPow.hPow.{0, 0, 0} Nat Nat Nat (instHPow.{0, 0} Nat Nat instPowNat) p k)) _inst_1 (Semiring.toNonAssocSemiring.{0} (ZMod (HPow.hPow.{0, 0, 0} Nat Nat Nat (instHPow.{0, 0} Nat Nat instPowNat) p k)) (CommSemiring.toSemiring.{0} (ZMod (HPow.hPow.{0, 0, 0} Nat Nat Nat (instHPow.{0, 0} Nat Nat instPowNat) p k)) (CommRing.toCommSemiring.{0} (ZMod (HPow.hPow.{0, 0, 0} Nat Nat Nat (instHPow.{0, 0} Nat Nat instPowNat) p k)) (ZMod.commRing (HPow.hPow.{0, 0, 0} Nat Nat Nat (instHPow.{0, 0} Nat Nat instPowNat) p k)))))} (f_compat : forall (k1 : Nat) (k2 : Nat) (hk : LE.le.{0} Nat instLENat k1 k2), Eq.{succ u1} (RingHom.{u1, 0} R (ZMod (HPow.hPow.{0, 0, 0} Nat Nat Nat (instHPow.{0, 0} Nat Nat instPowNat) p k1)) _inst_1 (Semiring.toNonAssocSemiring.{0} (ZMod (HPow.hPow.{0, 0, 0} Nat Nat Nat (instHPow.{0, 0} Nat Nat instPowNat) p k1)) (Ring.toSemiring.{0} (ZMod (HPow.hPow.{0, 0, 0} Nat Nat Nat (instHPow.{0, 0} Nat Nat instPowNat) p k1)) (CommRing.toRing.{0} (ZMod (HPow.hPow.{0, 0, 0} Nat Nat Nat (instHPow.{0, 0} Nat Nat instPowNat) p k1)) (ZMod.commRing (HPow.hPow.{0, 0, 0} Nat Nat Nat (instHPow.{0, 0} Nat Nat instPowNat) p k1)))))) (RingHom.comp.{u1, 0, 0} R (ZMod (HPow.hPow.{0, 0, 0} Nat Nat Nat (instHPow.{0, 0} Nat Nat (Monoid.Pow.{0} Nat Nat.monoid)) p k2)) (ZMod (HPow.hPow.{0, 0, 0} Nat Nat Nat (instHPow.{0, 0} Nat Nat instPowNat) p k1)) _inst_1 (Semiring.toNonAssocSemiring.{0} (ZMod (HPow.hPow.{0, 0, 0} Nat Nat Nat (instHPow.{0, 0} Nat Nat (Monoid.Pow.{0} Nat Nat.monoid)) p k2)) (CommSemiring.toSemiring.{0} (ZMod (HPow.hPow.{0, 0, 0} Nat Nat Nat (instHPow.{0, 0} Nat Nat (Monoid.Pow.{0} Nat Nat.monoid)) p k2)) (CommRing.toCommSemiring.{0} (ZMod (HPow.hPow.{0, 0, 0} Nat Nat Nat (instHPow.{0, 0} Nat Nat (Monoid.Pow.{0} Nat Nat.monoid)) p k2)) (ZMod.commRing (HPow.hPow.{0, 0, 0} Nat Nat Nat (instHPow.{0, 0} Nat Nat (Monoid.Pow.{0} Nat Nat.monoid)) p k2))))) (Semiring.toNonAssocSemiring.{0} (ZMod (HPow.hPow.{0, 0, 0} Nat Nat Nat (instHPow.{0, 0} Nat Nat instPowNat) p k1)) (Ring.toSemiring.{0} (ZMod (HPow.hPow.{0, 0, 0} Nat Nat Nat (instHPow.{0, 0} Nat Nat instPowNat) p k1)) (CommRing.toRing.{0} (ZMod (HPow.hPow.{0, 0, 0} Nat Nat Nat (instHPow.{0, 0} Nat Nat instPowNat) p k1)) (ZMod.commRing (HPow.hPow.{0, 0, 0} Nat Nat Nat (instHPow.{0, 0} Nat Nat instPowNat) p k1))))) (ZMod.castHom.{0} (HPow.hPow.{0, 0, 0} Nat Nat Nat (instHPow.{0, 0} Nat Nat (Monoid.Pow.{0} Nat Nat.monoid)) p k2) (HPow.hPow.{0, 0, 0} Nat Nat Nat (instHPow.{0, 0} Nat Nat (Monoid.Pow.{0} Nat Nat.monoid)) p k1) (pow_dvd_pow.{0} Nat Nat.monoid p k1 k2 hk) (ZMod (HPow.hPow.{0, 0, 0} Nat Nat Nat (instHPow.{0, 0} Nat Nat instPowNat) p k1)) (CommRing.toRing.{0} (ZMod (HPow.hPow.{0, 0, 0} Nat Nat Nat (instHPow.{0, 0} Nat Nat instPowNat) p k1)) (ZMod.commRing (HPow.hPow.{0, 0, 0} Nat Nat Nat (instHPow.{0, 0} Nat Nat instPowNat) p k1))) (ZMod.charP (HPow.hPow.{0, 0, 0} Nat Nat Nat (instHPow.{0, 0} Nat Nat instPowNat) p k1))) (f k2)) (f k1)) (r : R) (s : R), Eq.{1} (PadicInt p hp_prime) (PadicInt.limNthHom.{u1} p hp_prime R _inst_1 (fun (k2 : Nat) => f k2) f_compat (HMul.hMul.{u1, u1, u1} R R R (instHMul.{u1} R (NonUnitalNonAssocSemiring.toMul.{u1} R (NonAssocSemiring.toNonUnitalNonAssocSemiring.{u1} R _inst_1))) r s)) (HMul.hMul.{0, 0, 0} (PadicInt p hp_prime) (PadicInt p hp_prime) (PadicInt p hp_prime) (instHMul.{0} (PadicInt p hp_prime) (PadicInt.instMulPadicInt p hp_prime)) (PadicInt.limNthHom.{u1} p hp_prime R _inst_1 (fun (k2 : Nat) => f k2) f_compat r) (PadicInt.limNthHom.{u1} p hp_prime R _inst_1 (fun (k2 : Nat) => f k2) f_compat s))
-Case conversion may be inaccurate. Consider using '#align padic_int.lim_nth_hom_mul PadicInt.limNthHom_mulₓ'. -/
theorem limNthHom_mul (r s : R) :
limNthHom f_compat (r * s) = limNthHom f_compat r * limNthHom f_compat s :=
Subtype.ext <| Quot.sound <| nthHomSeq_mul _ _ _
#align padic_int.lim_nth_hom_mul PadicInt.limNthHom_mul
-/- warning: padic_int.lift -> PadicInt.lift is a dubious translation:
-lean 3 declaration is
- forall {p : Nat} [hp_prime : Fact (Nat.Prime p)] {R : Type.{u1}} [_inst_1 : NonAssocSemiring.{u1} R] {f : forall (k : Nat), RingHom.{u1, 0} R (ZMod (HPow.hPow.{0, 0, 0} Nat Nat Nat (instHPow.{0, 0} Nat Nat (Monoid.Pow.{0} Nat Nat.monoid)) p k)) _inst_1 (NonAssocRing.toNonAssocSemiring.{0} (ZMod (HPow.hPow.{0, 0, 0} Nat Nat Nat (instHPow.{0, 0} Nat Nat (Monoid.Pow.{0} Nat Nat.monoid)) p k)) (Ring.toNonAssocRing.{0} (ZMod (HPow.hPow.{0, 0, 0} Nat Nat Nat (instHPow.{0, 0} Nat Nat (Monoid.Pow.{0} Nat Nat.monoid)) p k)) (CommRing.toRing.{0} (ZMod (HPow.hPow.{0, 0, 0} Nat Nat Nat (instHPow.{0, 0} Nat Nat (Monoid.Pow.{0} Nat Nat.monoid)) p k)) (ZMod.commRing (HPow.hPow.{0, 0, 0} Nat Nat Nat (instHPow.{0, 0} Nat Nat (Monoid.Pow.{0} Nat Nat.monoid)) p k)))))}, (forall (k1 : Nat) (k2 : Nat) (hk : LE.le.{0} Nat Nat.hasLe k1 k2), Eq.{succ u1} (RingHom.{u1, 0} R (ZMod (HPow.hPow.{0, 0, 0} Nat Nat Nat (instHPow.{0, 0} Nat Nat (Monoid.Pow.{0} Nat Nat.monoid)) p k1)) _inst_1 (NonAssocRing.toNonAssocSemiring.{0} (ZMod (HPow.hPow.{0, 0, 0} Nat Nat Nat (instHPow.{0, 0} Nat Nat (Monoid.Pow.{0} Nat Nat.monoid)) p k1)) (Ring.toNonAssocRing.{0} (ZMod (HPow.hPow.{0, 0, 0} Nat Nat Nat (instHPow.{0, 0} Nat Nat (Monoid.Pow.{0} Nat Nat.monoid)) p k1)) (CommRing.toRing.{0} (ZMod (HPow.hPow.{0, 0, 0} Nat Nat Nat (instHPow.{0, 0} Nat Nat (Monoid.Pow.{0} Nat Nat.monoid)) p k1)) (ZMod.commRing (HPow.hPow.{0, 0, 0} Nat Nat Nat (instHPow.{0, 0} Nat Nat (Monoid.Pow.{0} Nat Nat.monoid)) p k1)))))) (RingHom.comp.{u1, 0, 0} R (ZMod (HPow.hPow.{0, 0, 0} Nat Nat Nat (instHPow.{0, 0} Nat Nat (Monoid.Pow.{0} Nat Nat.monoid)) p k2)) (ZMod (HPow.hPow.{0, 0, 0} Nat Nat Nat (instHPow.{0, 0} Nat Nat (Monoid.Pow.{0} Nat Nat.monoid)) p k1)) _inst_1 (NonAssocRing.toNonAssocSemiring.{0} (ZMod (HPow.hPow.{0, 0, 0} Nat Nat Nat (instHPow.{0, 0} Nat Nat (Monoid.Pow.{0} Nat Nat.monoid)) p k2)) (Ring.toNonAssocRing.{0} (ZMod (HPow.hPow.{0, 0, 0} Nat Nat Nat (instHPow.{0, 0} Nat Nat (Monoid.Pow.{0} Nat Nat.monoid)) p k2)) (CommRing.toRing.{0} (ZMod (HPow.hPow.{0, 0, 0} Nat Nat Nat (instHPow.{0, 0} Nat Nat (Monoid.Pow.{0} Nat Nat.monoid)) p k2)) (ZMod.commRing (HPow.hPow.{0, 0, 0} Nat Nat Nat (instHPow.{0, 0} Nat Nat (Monoid.Pow.{0} Nat Nat.monoid)) p k2))))) (NonAssocRing.toNonAssocSemiring.{0} (ZMod (HPow.hPow.{0, 0, 0} Nat Nat Nat (instHPow.{0, 0} Nat Nat (Monoid.Pow.{0} Nat Nat.monoid)) p k1)) (Ring.toNonAssocRing.{0} (ZMod (HPow.hPow.{0, 0, 0} Nat Nat Nat (instHPow.{0, 0} Nat Nat (Monoid.Pow.{0} Nat Nat.monoid)) p k1)) (CommRing.toRing.{0} (ZMod (HPow.hPow.{0, 0, 0} Nat Nat Nat (instHPow.{0, 0} Nat Nat (Monoid.Pow.{0} Nat Nat.monoid)) p k1)) (ZMod.commRing (HPow.hPow.{0, 0, 0} Nat Nat Nat (instHPow.{0, 0} Nat Nat (Monoid.Pow.{0} Nat Nat.monoid)) p k1))))) (ZMod.castHom.{0} (HPow.hPow.{0, 0, 0} Nat Nat Nat (instHPow.{0, 0} Nat Nat (Monoid.Pow.{0} Nat Nat.monoid)) p k2) (HPow.hPow.{0, 0, 0} Nat Nat Nat (instHPow.{0, 0} Nat Nat (Monoid.Pow.{0} Nat Nat.monoid)) p k1) (pow_dvd_pow.{0} Nat Nat.monoid p k1 k2 hk) (ZMod (HPow.hPow.{0, 0, 0} Nat Nat Nat (instHPow.{0, 0} Nat Nat (Monoid.Pow.{0} Nat Nat.monoid)) p k1)) (CommRing.toRing.{0} (ZMod (HPow.hPow.{0, 0, 0} Nat Nat Nat (instHPow.{0, 0} Nat Nat (Monoid.Pow.{0} Nat Nat.monoid)) p k1)) (ZMod.commRing (HPow.hPow.{0, 0, 0} Nat Nat Nat (instHPow.{0, 0} Nat Nat (Monoid.Pow.{0} Nat Nat.monoid)) p k1))) (PadicInt.lift._proof_1 p k1)) (f k2)) (f k1)) -> (RingHom.{u1, 0} R (PadicInt p hp_prime) _inst_1 (NonAssocRing.toNonAssocSemiring.{0} (PadicInt p hp_prime) (Ring.toNonAssocRing.{0} (PadicInt p hp_prime) (NormedRing.toRing.{0} (PadicInt p hp_prime) (NormedCommRing.toNormedRing.{0} (PadicInt p hp_prime) (PadicInt.normedCommRing p hp_prime))))))
-but is expected to have type
- forall {p : Nat} [hp_prime : Fact (Nat.Prime p)] {R : Type.{u1}} [_inst_1 : NonAssocSemiring.{u1} R] {f : forall (k : Nat), RingHom.{u1, 0} R (ZMod (HPow.hPow.{0, 0, 0} Nat Nat Nat (instHPow.{0, 0} Nat Nat instPowNat) p k)) _inst_1 (Semiring.toNonAssocSemiring.{0} (ZMod (HPow.hPow.{0, 0, 0} Nat Nat Nat (instHPow.{0, 0} Nat Nat instPowNat) p k)) (CommSemiring.toSemiring.{0} (ZMod (HPow.hPow.{0, 0, 0} Nat Nat Nat (instHPow.{0, 0} Nat Nat instPowNat) p k)) (CommRing.toCommSemiring.{0} (ZMod (HPow.hPow.{0, 0, 0} Nat Nat Nat (instHPow.{0, 0} Nat Nat instPowNat) p k)) (ZMod.commRing (HPow.hPow.{0, 0, 0} Nat Nat Nat (instHPow.{0, 0} Nat Nat instPowNat) p k)))))}, (forall (k1 : Nat) (k2 : Nat) (hk : LE.le.{0} Nat instLENat k1 k2), Eq.{succ u1} (RingHom.{u1, 0} R (ZMod (HPow.hPow.{0, 0, 0} Nat Nat Nat (instHPow.{0, 0} Nat Nat instPowNat) p k1)) _inst_1 (Semiring.toNonAssocSemiring.{0} (ZMod (HPow.hPow.{0, 0, 0} Nat Nat Nat (instHPow.{0, 0} Nat Nat instPowNat) p k1)) (Ring.toSemiring.{0} (ZMod (HPow.hPow.{0, 0, 0} Nat Nat Nat (instHPow.{0, 0} Nat Nat instPowNat) p k1)) (CommRing.toRing.{0} (ZMod (HPow.hPow.{0, 0, 0} Nat Nat Nat (instHPow.{0, 0} Nat Nat instPowNat) p k1)) (ZMod.commRing (HPow.hPow.{0, 0, 0} Nat Nat Nat (instHPow.{0, 0} Nat Nat instPowNat) p k1)))))) (RingHom.comp.{u1, 0, 0} R (ZMod (HPow.hPow.{0, 0, 0} Nat Nat Nat (instHPow.{0, 0} Nat Nat (Monoid.Pow.{0} Nat Nat.monoid)) p k2)) (ZMod (HPow.hPow.{0, 0, 0} Nat Nat Nat (instHPow.{0, 0} Nat Nat instPowNat) p k1)) _inst_1 (Semiring.toNonAssocSemiring.{0} (ZMod (HPow.hPow.{0, 0, 0} Nat Nat Nat (instHPow.{0, 0} Nat Nat (Monoid.Pow.{0} Nat Nat.monoid)) p k2)) (CommSemiring.toSemiring.{0} (ZMod (HPow.hPow.{0, 0, 0} Nat Nat Nat (instHPow.{0, 0} Nat Nat (Monoid.Pow.{0} Nat Nat.monoid)) p k2)) (CommRing.toCommSemiring.{0} (ZMod (HPow.hPow.{0, 0, 0} Nat Nat Nat (instHPow.{0, 0} Nat Nat (Monoid.Pow.{0} Nat Nat.monoid)) p k2)) (ZMod.commRing (HPow.hPow.{0, 0, 0} Nat Nat Nat (instHPow.{0, 0} Nat Nat (Monoid.Pow.{0} Nat Nat.monoid)) p k2))))) (Semiring.toNonAssocSemiring.{0} (ZMod (HPow.hPow.{0, 0, 0} Nat Nat Nat (instHPow.{0, 0} Nat Nat instPowNat) p k1)) (Ring.toSemiring.{0} (ZMod (HPow.hPow.{0, 0, 0} Nat Nat Nat (instHPow.{0, 0} Nat Nat instPowNat) p k1)) (CommRing.toRing.{0} (ZMod (HPow.hPow.{0, 0, 0} Nat Nat Nat (instHPow.{0, 0} Nat Nat instPowNat) p k1)) (ZMod.commRing (HPow.hPow.{0, 0, 0} Nat Nat Nat (instHPow.{0, 0} Nat Nat instPowNat) p k1))))) (ZMod.castHom.{0} (HPow.hPow.{0, 0, 0} Nat Nat Nat (instHPow.{0, 0} Nat Nat (Monoid.Pow.{0} Nat Nat.monoid)) p k2) (HPow.hPow.{0, 0, 0} Nat Nat Nat (instHPow.{0, 0} Nat Nat (Monoid.Pow.{0} Nat Nat.monoid)) p k1) (pow_dvd_pow.{0} Nat Nat.monoid p k1 k2 hk) (ZMod (HPow.hPow.{0, 0, 0} Nat Nat Nat (instHPow.{0, 0} Nat Nat instPowNat) p k1)) (CommRing.toRing.{0} (ZMod (HPow.hPow.{0, 0, 0} Nat Nat Nat (instHPow.{0, 0} Nat Nat instPowNat) p k1)) (ZMod.commRing (HPow.hPow.{0, 0, 0} Nat Nat Nat (instHPow.{0, 0} Nat Nat instPowNat) p k1))) (ZMod.charP (HPow.hPow.{0, 0, 0} Nat Nat Nat (instHPow.{0, 0} Nat Nat instPowNat) p k1))) (f k2)) (f k1)) -> (RingHom.{u1, 0} R (PadicInt p hp_prime) _inst_1 (Semiring.toNonAssocSemiring.{0} (PadicInt p hp_prime) (CommSemiring.toSemiring.{0} (PadicInt p hp_prime) (CommRing.toCommSemiring.{0} (PadicInt p hp_prime) (PadicInt.instCommRingPadicInt p hp_prime)))))
-Case conversion may be inaccurate. Consider using '#align padic_int.lift PadicInt.liftₓ'. -/
-- TODO: generalize this to arbitrary complete discrete valuation rings
/-- `lift f_compat` is the limit of a sequence `f` of compatible ring homs `R →+* zmod (p^k)`,
with the equality `lift f_compat r = padic_int.lim_nth_hom f_compat r`.
@@ -842,9 +656,6 @@ def lift : R →+* ℤ_[p] where
omit f_compat
-/- warning: padic_int.lift_sub_val_mem_span -> PadicInt.lift_sub_val_mem_span is a dubious translation:
-<too large>
-Case conversion may be inaccurate. Consider using '#align padic_int.lift_sub_val_mem_span PadicInt.lift_sub_val_mem_spanₓ'. -/
theorem lift_sub_val_mem_span (r : R) (n : ℕ) :
lift f_compat r - (f n r).val ∈ (Ideal.span {↑p ^ n} : Ideal ℤ_[p]) :=
by
@@ -874,9 +685,6 @@ theorem lift_spec (n : ℕ) : (toZModPow n).comp (lift f_compat) = f n :=
#align padic_int.lift_spec PadicInt.lift_spec
-/
-/- warning: padic_int.lift_unique -> PadicInt.lift_unique is a dubious translation:
-<too large>
-Case conversion may be inaccurate. Consider using '#align padic_int.lift_unique PadicInt.lift_uniqueₓ'. -/
/-- One part of the universal property of `ℤ_[p]` as a projective limit.
See also `padic_int.lift_spec`.
-/
@@ -891,12 +699,6 @@ theorem lift_unique (g : R →+* ℤ_[p]) (hg : ∀ n, (toZModPow n).comp g = f
RingHom.map_sub, ← RingHom.comp_apply, ← RingHom.comp_apply, lift_spec, hg, sub_self]
#align padic_int.lift_unique PadicInt.lift_unique
-/- warning: padic_int.lift_self -> PadicInt.lift_self is a dubious translation:
-lean 3 declaration is
- forall {p : Nat} [hp_prime : Fact (Nat.Prime p)] (z : PadicInt p hp_prime), Eq.{1} (PadicInt p hp_prime) (coeFn.{1, 1} (RingHom.{0, 0} (PadicInt p hp_prime) (PadicInt p hp_prime) (NonAssocRing.toNonAssocSemiring.{0} (PadicInt p hp_prime) (Ring.toNonAssocRing.{0} (PadicInt p hp_prime) (NormedRing.toRing.{0} (PadicInt p hp_prime) (NormedCommRing.toNormedRing.{0} (PadicInt p hp_prime) (PadicInt.normedCommRing p hp_prime))))) (NonAssocRing.toNonAssocSemiring.{0} (PadicInt p hp_prime) (Ring.toNonAssocRing.{0} (PadicInt p hp_prime) (NormedRing.toRing.{0} (PadicInt p hp_prime) (NormedCommRing.toNormedRing.{0} (PadicInt p hp_prime) (PadicInt.normedCommRing p hp_prime)))))) (fun (_x : RingHom.{0, 0} (PadicInt p hp_prime) (PadicInt p hp_prime) (NonAssocRing.toNonAssocSemiring.{0} (PadicInt p hp_prime) (Ring.toNonAssocRing.{0} (PadicInt p hp_prime) (NormedRing.toRing.{0} (PadicInt p hp_prime) (NormedCommRing.toNormedRing.{0} (PadicInt p hp_prime) (PadicInt.normedCommRing p hp_prime))))) (NonAssocRing.toNonAssocSemiring.{0} (PadicInt p hp_prime) (Ring.toNonAssocRing.{0} (PadicInt p hp_prime) (NormedRing.toRing.{0} (PadicInt p hp_prime) (NormedCommRing.toNormedRing.{0} (PadicInt p hp_prime) (PadicInt.normedCommRing p hp_prime)))))) => (PadicInt p hp_prime) -> (PadicInt p hp_prime)) (RingHom.hasCoeToFun.{0, 0} (PadicInt p hp_prime) (PadicInt p hp_prime) (NonAssocRing.toNonAssocSemiring.{0} (PadicInt p hp_prime) (Ring.toNonAssocRing.{0} (PadicInt p hp_prime) (NormedRing.toRing.{0} (PadicInt p hp_prime) (NormedCommRing.toNormedRing.{0} (PadicInt p hp_prime) (PadicInt.normedCommRing p hp_prime))))) (NonAssocRing.toNonAssocSemiring.{0} (PadicInt p hp_prime) (Ring.toNonAssocRing.{0} (PadicInt p hp_prime) (NormedRing.toRing.{0} (PadicInt p hp_prime) (NormedCommRing.toNormedRing.{0} (PadicInt p hp_prime) (PadicInt.normedCommRing p hp_prime)))))) (PadicInt.lift.{0} p hp_prime (PadicInt p hp_prime) (NonAssocRing.toNonAssocSemiring.{0} (PadicInt p hp_prime) (Ring.toNonAssocRing.{0} (PadicInt p hp_prime) (NormedRing.toRing.{0} (PadicInt p hp_prime) (NormedCommRing.toNormedRing.{0} (PadicInt p hp_prime) (PadicInt.normedCommRing p hp_prime))))) (PadicInt.toZModPow p hp_prime) (PadicInt.zmod_cast_comp_toZModPow p hp_prime)) z) z
-but is expected to have type
- forall {p : Nat} [hp_prime : Fact (Nat.Prime p)] (z : PadicInt p hp_prime), Eq.{1} ((fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2397 : PadicInt p hp_prime) => PadicInt p hp_prime) z) (FunLike.coe.{1, 1, 1} (RingHom.{0, 0} (PadicInt p hp_prime) (PadicInt p hp_prime) (Semiring.toNonAssocSemiring.{0} (PadicInt p hp_prime) (CommSemiring.toSemiring.{0} (PadicInt p hp_prime) (CommRing.toCommSemiring.{0} (PadicInt p hp_prime) (PadicInt.instCommRingPadicInt p hp_prime)))) (Semiring.toNonAssocSemiring.{0} (PadicInt p hp_prime) (CommSemiring.toSemiring.{0} (PadicInt p hp_prime) (CommRing.toCommSemiring.{0} (PadicInt p hp_prime) (PadicInt.instCommRingPadicInt p hp_prime))))) (PadicInt p hp_prime) (fun (_x : PadicInt p hp_prime) => (fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2397 : PadicInt p hp_prime) => PadicInt p hp_prime) _x) (MulHomClass.toFunLike.{0, 0, 0} (RingHom.{0, 0} (PadicInt p hp_prime) (PadicInt p hp_prime) (Semiring.toNonAssocSemiring.{0} (PadicInt p hp_prime) (CommSemiring.toSemiring.{0} (PadicInt p hp_prime) (CommRing.toCommSemiring.{0} (PadicInt p hp_prime) (PadicInt.instCommRingPadicInt p hp_prime)))) (Semiring.toNonAssocSemiring.{0} (PadicInt p hp_prime) (CommSemiring.toSemiring.{0} (PadicInt p hp_prime) (CommRing.toCommSemiring.{0} (PadicInt p hp_prime) (PadicInt.instCommRingPadicInt p hp_prime))))) (PadicInt p hp_prime) (PadicInt p hp_prime) (NonUnitalNonAssocSemiring.toMul.{0} (PadicInt p hp_prime) (NonAssocSemiring.toNonUnitalNonAssocSemiring.{0} (PadicInt p hp_prime) (Semiring.toNonAssocSemiring.{0} (PadicInt p hp_prime) (CommSemiring.toSemiring.{0} (PadicInt p hp_prime) (CommRing.toCommSemiring.{0} (PadicInt p hp_prime) (PadicInt.instCommRingPadicInt p hp_prime)))))) (NonUnitalNonAssocSemiring.toMul.{0} (PadicInt p hp_prime) (NonAssocSemiring.toNonUnitalNonAssocSemiring.{0} (PadicInt p hp_prime) (Semiring.toNonAssocSemiring.{0} (PadicInt p hp_prime) (CommSemiring.toSemiring.{0} (PadicInt p hp_prime) (CommRing.toCommSemiring.{0} (PadicInt p hp_prime) (PadicInt.instCommRingPadicInt p hp_prime)))))) (NonUnitalRingHomClass.toMulHomClass.{0, 0, 0} (RingHom.{0, 0} (PadicInt p hp_prime) (PadicInt p hp_prime) (Semiring.toNonAssocSemiring.{0} (PadicInt p hp_prime) (CommSemiring.toSemiring.{0} (PadicInt p hp_prime) (CommRing.toCommSemiring.{0} (PadicInt p hp_prime) (PadicInt.instCommRingPadicInt p hp_prime)))) (Semiring.toNonAssocSemiring.{0} (PadicInt p hp_prime) (CommSemiring.toSemiring.{0} (PadicInt p hp_prime) (CommRing.toCommSemiring.{0} (PadicInt p hp_prime) (PadicInt.instCommRingPadicInt p hp_prime))))) (PadicInt p hp_prime) (PadicInt p hp_prime) (NonAssocSemiring.toNonUnitalNonAssocSemiring.{0} (PadicInt p hp_prime) (Semiring.toNonAssocSemiring.{0} (PadicInt p hp_prime) (CommSemiring.toSemiring.{0} (PadicInt p hp_prime) (CommRing.toCommSemiring.{0} (PadicInt p hp_prime) (PadicInt.instCommRingPadicInt p hp_prime))))) (NonAssocSemiring.toNonUnitalNonAssocSemiring.{0} (PadicInt p hp_prime) (Semiring.toNonAssocSemiring.{0} (PadicInt p hp_prime) (CommSemiring.toSemiring.{0} (PadicInt p hp_prime) (CommRing.toCommSemiring.{0} (PadicInt p hp_prime) (PadicInt.instCommRingPadicInt p hp_prime))))) (RingHomClass.toNonUnitalRingHomClass.{0, 0, 0} (RingHom.{0, 0} (PadicInt p hp_prime) (PadicInt p hp_prime) (Semiring.toNonAssocSemiring.{0} (PadicInt p hp_prime) (CommSemiring.toSemiring.{0} (PadicInt p hp_prime) (CommRing.toCommSemiring.{0} (PadicInt p hp_prime) (PadicInt.instCommRingPadicInt p hp_prime)))) (Semiring.toNonAssocSemiring.{0} (PadicInt p hp_prime) (CommSemiring.toSemiring.{0} (PadicInt p hp_prime) (CommRing.toCommSemiring.{0} (PadicInt p hp_prime) (PadicInt.instCommRingPadicInt p hp_prime))))) (PadicInt p hp_prime) (PadicInt p hp_prime) (Semiring.toNonAssocSemiring.{0} (PadicInt p hp_prime) (CommSemiring.toSemiring.{0} (PadicInt p hp_prime) (CommRing.toCommSemiring.{0} (PadicInt p hp_prime) (PadicInt.instCommRingPadicInt p hp_prime)))) (Semiring.toNonAssocSemiring.{0} (PadicInt p hp_prime) (CommSemiring.toSemiring.{0} (PadicInt p hp_prime) (CommRing.toCommSemiring.{0} (PadicInt p hp_prime) (PadicInt.instCommRingPadicInt p hp_prime)))) (RingHom.instRingHomClassRingHom.{0, 0} (PadicInt p hp_prime) (PadicInt p hp_prime) (Semiring.toNonAssocSemiring.{0} (PadicInt p hp_prime) (CommSemiring.toSemiring.{0} (PadicInt p hp_prime) (CommRing.toCommSemiring.{0} (PadicInt p hp_prime) (PadicInt.instCommRingPadicInt p hp_prime)))) (Semiring.toNonAssocSemiring.{0} (PadicInt p hp_prime) (CommSemiring.toSemiring.{0} (PadicInt p hp_prime) (CommRing.toCommSemiring.{0} (PadicInt p hp_prime) (PadicInt.instCommRingPadicInt p hp_prime)))))))) (PadicInt.lift.{0} p hp_prime (PadicInt p hp_prime) (Semiring.toNonAssocSemiring.{0} (PadicInt p hp_prime) (CommSemiring.toSemiring.{0} (PadicInt p hp_prime) (CommRing.toCommSemiring.{0} (PadicInt p hp_prime) (PadicInt.instCommRingPadicInt p hp_prime)))) (PadicInt.toZModPow p hp_prime) (PadicInt.zmod_cast_comp_toZModPow p hp_prime)) z) z
-Case conversion may be inaccurate. Consider using '#align padic_int.lift_self PadicInt.lift_selfₓ'. -/
@[simp]
theorem lift_self (z : ℤ_[p]) : @lift p _ ℤ_[p] _ toZModPow zmod_cast_comp_toZModPow z = z :=
by
@@ -907,9 +709,6 @@ theorem lift_self (z : ℤ_[p]) : @lift p _ ℤ_[p] _ toZModPow zmod_cast_comp_t
end lift
-/- warning: padic_int.ext_of_to_zmod_pow -> PadicInt.ext_of_toZModPow is a dubious translation:
-<too large>
-Case conversion may be inaccurate. Consider using '#align padic_int.ext_of_to_zmod_pow PadicInt.ext_of_toZModPowₓ'. -/
theorem ext_of_toZModPow {x y : ℤ_[p]} : (∀ n, toZModPow n x = toZModPow n y) ↔ x = y :=
by
constructor
@@ -919,12 +718,6 @@ theorem ext_of_toZModPow {x y : ℤ_[p]} : (∀ n, toZModPow n x = toZModPow n y
· rintro rfl _; rfl
#align padic_int.ext_of_to_zmod_pow PadicInt.ext_of_toZModPow
-/- warning: padic_int.to_zmod_pow_eq_iff_ext -> PadicInt.toZModPow_eq_iff_ext is a dubious translation:
-lean 3 declaration is
- forall {p : Nat} [hp_prime : Fact (Nat.Prime p)] {R : Type.{u1}} [_inst_1 : NonAssocSemiring.{u1} R] {g : RingHom.{u1, 0} R (PadicInt p hp_prime) _inst_1 (NonAssocRing.toNonAssocSemiring.{0} (PadicInt p hp_prime) (Ring.toNonAssocRing.{0} (PadicInt p hp_prime) (NormedRing.toRing.{0} (PadicInt p hp_prime) (NormedCommRing.toNormedRing.{0} (PadicInt p hp_prime) (PadicInt.normedCommRing p hp_prime)))))} {g' : RingHom.{u1, 0} R (PadicInt p hp_prime) _inst_1 (NonAssocRing.toNonAssocSemiring.{0} (PadicInt p hp_prime) (Ring.toNonAssocRing.{0} (PadicInt p hp_prime) (NormedRing.toRing.{0} (PadicInt p hp_prime) (NormedCommRing.toNormedRing.{0} (PadicInt p hp_prime) (PadicInt.normedCommRing p hp_prime)))))}, Iff (forall (n : Nat), Eq.{succ u1} (RingHom.{u1, 0} R (ZMod (HPow.hPow.{0, 0, 0} Nat Nat Nat (instHPow.{0, 0} Nat Nat (Monoid.Pow.{0} Nat Nat.monoid)) p n)) _inst_1 (NonAssocRing.toNonAssocSemiring.{0} (ZMod (HPow.hPow.{0, 0, 0} Nat Nat Nat (instHPow.{0, 0} Nat Nat (Monoid.Pow.{0} Nat Nat.monoid)) p n)) (Ring.toNonAssocRing.{0} (ZMod (HPow.hPow.{0, 0, 0} Nat Nat Nat (instHPow.{0, 0} Nat Nat (Monoid.Pow.{0} Nat Nat.monoid)) p n)) (CommRing.toRing.{0} (ZMod (HPow.hPow.{0, 0, 0} Nat Nat Nat (instHPow.{0, 0} Nat Nat (Monoid.Pow.{0} Nat Nat.monoid)) p n)) (ZMod.commRing (HPow.hPow.{0, 0, 0} Nat Nat Nat (instHPow.{0, 0} Nat Nat (Monoid.Pow.{0} Nat Nat.monoid)) p n)))))) (RingHom.comp.{u1, 0, 0} R (PadicInt p hp_prime) (ZMod (HPow.hPow.{0, 0, 0} Nat Nat Nat (instHPow.{0, 0} Nat Nat (Monoid.Pow.{0} Nat Nat.monoid)) p n)) _inst_1 (NonAssocRing.toNonAssocSemiring.{0} (PadicInt p hp_prime) (Ring.toNonAssocRing.{0} (PadicInt p hp_prime) (NormedRing.toRing.{0} (PadicInt p hp_prime) (NormedCommRing.toNormedRing.{0} (PadicInt p hp_prime) (PadicInt.normedCommRing p hp_prime))))) (NonAssocRing.toNonAssocSemiring.{0} (ZMod (HPow.hPow.{0, 0, 0} Nat Nat Nat (instHPow.{0, 0} Nat Nat (Monoid.Pow.{0} Nat Nat.monoid)) p n)) (Ring.toNonAssocRing.{0} (ZMod (HPow.hPow.{0, 0, 0} Nat Nat Nat (instHPow.{0, 0} Nat Nat (Monoid.Pow.{0} Nat Nat.monoid)) p n)) (CommRing.toRing.{0} (ZMod (HPow.hPow.{0, 0, 0} Nat Nat Nat (instHPow.{0, 0} Nat Nat (Monoid.Pow.{0} Nat Nat.monoid)) p n)) (ZMod.commRing (HPow.hPow.{0, 0, 0} Nat Nat Nat (instHPow.{0, 0} Nat Nat (Monoid.Pow.{0} Nat Nat.monoid)) p n))))) (PadicInt.toZModPow p hp_prime n) g) (RingHom.comp.{u1, 0, 0} R (PadicInt p hp_prime) (ZMod (HPow.hPow.{0, 0, 0} Nat Nat Nat (instHPow.{0, 0} Nat Nat (Monoid.Pow.{0} Nat Nat.monoid)) p n)) _inst_1 (NonAssocRing.toNonAssocSemiring.{0} (PadicInt p hp_prime) (Ring.toNonAssocRing.{0} (PadicInt p hp_prime) (NormedRing.toRing.{0} (PadicInt p hp_prime) (NormedCommRing.toNormedRing.{0} (PadicInt p hp_prime) (PadicInt.normedCommRing p hp_prime))))) (NonAssocRing.toNonAssocSemiring.{0} (ZMod (HPow.hPow.{0, 0, 0} Nat Nat Nat (instHPow.{0, 0} Nat Nat (Monoid.Pow.{0} Nat Nat.monoid)) p n)) (Ring.toNonAssocRing.{0} (ZMod (HPow.hPow.{0, 0, 0} Nat Nat Nat (instHPow.{0, 0} Nat Nat (Monoid.Pow.{0} Nat Nat.monoid)) p n)) (CommRing.toRing.{0} (ZMod (HPow.hPow.{0, 0, 0} Nat Nat Nat (instHPow.{0, 0} Nat Nat (Monoid.Pow.{0} Nat Nat.monoid)) p n)) (ZMod.commRing (HPow.hPow.{0, 0, 0} Nat Nat Nat (instHPow.{0, 0} Nat Nat (Monoid.Pow.{0} Nat Nat.monoid)) p n))))) (PadicInt.toZModPow p hp_prime n) g')) (Eq.{succ u1} (RingHom.{u1, 0} R (PadicInt p hp_prime) _inst_1 (NonAssocRing.toNonAssocSemiring.{0} (PadicInt p hp_prime) (Ring.toNonAssocRing.{0} (PadicInt p hp_prime) (NormedRing.toRing.{0} (PadicInt p hp_prime) (NormedCommRing.toNormedRing.{0} (PadicInt p hp_prime) (PadicInt.normedCommRing p hp_prime)))))) g g')
-but is expected to have type
- forall {p : Nat} [hp_prime : Fact (Nat.Prime p)] {R : Type.{u1}} [_inst_1 : NonAssocSemiring.{u1} R] {g : RingHom.{u1, 0} R (PadicInt p hp_prime) _inst_1 (Semiring.toNonAssocSemiring.{0} (PadicInt p hp_prime) (CommSemiring.toSemiring.{0} (PadicInt p hp_prime) (CommRing.toCommSemiring.{0} (PadicInt p hp_prime) (PadicInt.instCommRingPadicInt p hp_prime))))} {g' : RingHom.{u1, 0} R (PadicInt p hp_prime) _inst_1 (Semiring.toNonAssocSemiring.{0} (PadicInt p hp_prime) (CommSemiring.toSemiring.{0} (PadicInt p hp_prime) (CommRing.toCommSemiring.{0} (PadicInt p hp_prime) (PadicInt.instCommRingPadicInt p hp_prime))))}, Iff (forall (n : Nat), Eq.{succ u1} (RingHom.{u1, 0} R (ZMod (HPow.hPow.{0, 0, 0} Nat Nat Nat (instHPow.{0, 0} Nat Nat instPowNat) p n)) _inst_1 (Semiring.toNonAssocSemiring.{0} (ZMod (HPow.hPow.{0, 0, 0} Nat Nat Nat (instHPow.{0, 0} Nat Nat instPowNat) p n)) (CommSemiring.toSemiring.{0} (ZMod (HPow.hPow.{0, 0, 0} Nat Nat Nat (instHPow.{0, 0} Nat Nat instPowNat) p n)) (CommRing.toCommSemiring.{0} (ZMod (HPow.hPow.{0, 0, 0} Nat Nat Nat (instHPow.{0, 0} Nat Nat instPowNat) p n)) (ZMod.commRing (HPow.hPow.{0, 0, 0} Nat Nat Nat (instHPow.{0, 0} Nat Nat instPowNat) p n)))))) (RingHom.comp.{u1, 0, 0} R (PadicInt p hp_prime) (ZMod (HPow.hPow.{0, 0, 0} Nat Nat Nat (instHPow.{0, 0} Nat Nat instPowNat) p n)) _inst_1 (Semiring.toNonAssocSemiring.{0} (PadicInt p hp_prime) (CommSemiring.toSemiring.{0} (PadicInt p hp_prime) (CommRing.toCommSemiring.{0} (PadicInt p hp_prime) (PadicInt.instCommRingPadicInt p hp_prime)))) (Semiring.toNonAssocSemiring.{0} (ZMod (HPow.hPow.{0, 0, 0} Nat Nat Nat (instHPow.{0, 0} Nat Nat instPowNat) p n)) (CommSemiring.toSemiring.{0} (ZMod (HPow.hPow.{0, 0, 0} Nat Nat Nat (instHPow.{0, 0} Nat Nat instPowNat) p n)) (CommRing.toCommSemiring.{0} (ZMod (HPow.hPow.{0, 0, 0} Nat Nat Nat (instHPow.{0, 0} Nat Nat instPowNat) p n)) (ZMod.commRing (HPow.hPow.{0, 0, 0} Nat Nat Nat (instHPow.{0, 0} Nat Nat instPowNat) p n))))) (PadicInt.toZModPow p hp_prime n) g) (RingHom.comp.{u1, 0, 0} R (PadicInt p hp_prime) (ZMod (HPow.hPow.{0, 0, 0} Nat Nat Nat (instHPow.{0, 0} Nat Nat instPowNat) p n)) _inst_1 (Semiring.toNonAssocSemiring.{0} (PadicInt p hp_prime) (CommSemiring.toSemiring.{0} (PadicInt p hp_prime) (CommRing.toCommSemiring.{0} (PadicInt p hp_prime) (PadicInt.instCommRingPadicInt p hp_prime)))) (Semiring.toNonAssocSemiring.{0} (ZMod (HPow.hPow.{0, 0, 0} Nat Nat Nat (instHPow.{0, 0} Nat Nat instPowNat) p n)) (CommSemiring.toSemiring.{0} (ZMod (HPow.hPow.{0, 0, 0} Nat Nat Nat (instHPow.{0, 0} Nat Nat instPowNat) p n)) (CommRing.toCommSemiring.{0} (ZMod (HPow.hPow.{0, 0, 0} Nat Nat Nat (instHPow.{0, 0} Nat Nat instPowNat) p n)) (ZMod.commRing (HPow.hPow.{0, 0, 0} Nat Nat Nat (instHPow.{0, 0} Nat Nat instPowNat) p n))))) (PadicInt.toZModPow p hp_prime n) g')) (Eq.{succ u1} (RingHom.{u1, 0} R (PadicInt p hp_prime) _inst_1 (Semiring.toNonAssocSemiring.{0} (PadicInt p hp_prime) (CommSemiring.toSemiring.{0} (PadicInt p hp_prime) (CommRing.toCommSemiring.{0} (PadicInt p hp_prime) (PadicInt.instCommRingPadicInt p hp_prime))))) g g')
-Case conversion may be inaccurate. Consider using '#align padic_int.to_zmod_pow_eq_iff_ext PadicInt.toZModPow_eq_iff_extₓ'. -/
theorem toZModPow_eq_iff_ext {R : Type _} [NonAssocSemiring R] {g g' : R →+* ℤ_[p]} :
(∀ n, (toZModPow n).comp g = (toZModPow n).comp g') ↔ g = g' :=
by
mathlib commit https://github.com/leanprover-community/mathlib/commit/917c3c072e487b3cccdbfeff17e75b40e45f66cb
@@ -108,9 +108,7 @@ theorem isUnit_den (r : ℚ) (h : ‖(r : ℚ_[p])‖ ≤ 1) : IsUnit (r.den :
apply le_antisymm (r.denom : ℤ_[p]).2
rw [← not_lt, val_eq_coe, coe_nat_cast]
intro norm_denom_lt
- have hr : ‖(r * r.denom : ℚ_[p])‖ = ‖(r.num : ℚ_[p])‖ :=
- by
- rw_mod_cast [@Rat.mul_den_eq_num r]
+ have hr : ‖(r * r.denom : ℚ_[p])‖ = ‖(r.num : ℚ_[p])‖ := by rw_mod_cast [@Rat.mul_den_eq_num r];
rfl
rw [padicNormE.mul] at hr
have key : ‖(r.num : ℚ_[p])‖ < 1 := by
@@ -122,8 +120,7 @@ theorem isUnit_den (r : ℚ) (h : ‖(r : ℚ_[p])‖ ≤ 1) : IsUnit (r.den :
have : ↑p ∣ r.num ∧ (p : ℤ) ∣ r.denom :=
by
simp only [← norm_int_lt_one_iff_dvd, ← padic_norm_e_of_padic_int]
- norm_cast
- exact ⟨key, norm_denom_lt⟩
+ norm_cast; exact ⟨key, norm_denom_lt⟩
apply hp_prime.1.not_dvd_one
rwa [← r.cop.gcd_eq_one, Nat.dvd_gcd_iff, ← Int.coe_nat_dvd_left, ← Int.coe_nat_dvd]
#align padic_int.is_unit_denom PadicInt.isUnit_den
@@ -145,8 +142,7 @@ theorem norm_sub_mod_part_aux (r : ℚ) (h : ‖(r : ℚ_[p])‖ ≤ 1) :
push_cast
rw [mul_right_comm, mul_assoc, ← this]
suffices rdcp : r.denom.coprime p
- · rw [rdcp.gcd_eq_one]
- simp only [mul_one, cast_one, sub_self]
+ · rw [rdcp.gcd_eq_one]; simp only [mul_one, cast_one, sub_self]
apply coprime.symm
apply (coprime_or_dvd_of_prime hp_prime.1 _).resolve_right
rw [← Int.coe_nat_dvd, ← norm_int_lt_one_iff_dvd, not_lt]
@@ -171,8 +167,7 @@ theorem norm_sub_modPart (h : ‖(r : ℚ_[p])‖ ≤ 1) : ‖(⟨r, h⟩ - modP
simp only [sub_mul, Int.cast_ofNat, eq_intCast, Int.cast_mul, sub_left_inj, Int.cast_sub]
apply Subtype.coe_injective
simp only [coe_mul, Subtype.coe_mk, coe_nat_cast]
- rw_mod_cast [@Rat.mul_den_eq_num r]
- rfl
+ rw_mod_cast [@Rat.mul_den_eq_num r]; rfl
exact norm_sub_mod_part_aux r h
#align padic_int.norm_sub_mod_part PadicInt.norm_sub_modPart
@@ -251,8 +246,7 @@ theorem exists_mem_range : ∃ n : ℕ, n < p ∧ x - n ∈ maximalIdeal ℤ_[p]
obtain ⟨n, hzn, hnp, hn⟩ := exists_mem_range_of_norm_rat_le_one r H
lift n to ℕ using hzn
use n
- constructor
- · exact_mod_cast hnp
+ constructor; · exact_mod_cast hnp
simp only [norm_def, coe_sub, Subtype.coe_mk, coe_nat_cast] at hn⊢
rw [show (x - n : ℚ_[p]) = x - r + (r - n) by ring]
apply lt_of_le_of_lt (padicNormE.nonarchimedean _ _)
@@ -342,13 +336,8 @@ Case conversion may be inaccurate. Consider using '#align padic_int.to_zmod Padi
with the equality `to_zmod x = (zmod_repr x : zmod p)`.
-/
def toZMod : ℤ_[p] →+* ZMod p :=
- toZModHom p zmodRepr
- (by
- rw [← maximal_ideal_eq_span_p]
- exact sub_zmod_repr_mem)
- (by
- rw [← maximal_ideal_eq_span_p]
- exact zmod_congr_of_sub_mem_max_ideal)
+ toZModHom p zmodRepr (by rw [← maximal_ideal_eq_span_p]; exact sub_zmod_repr_mem)
+ (by rw [← maximal_ideal_eq_span_p]; exact zmod_congr_of_sub_mem_max_ideal)
#align padic_int.to_zmod PadicInt.toZMod
/- warning: padic_int.to_zmod_spec -> PadicInt.toZMod_spec is a dubious translation:
@@ -394,8 +383,7 @@ theorem ker_toZMod : (toZMod : ℤ_[p] →+* ZMod p).ker = maximalIdeal ℤ_[p]
rw [← sub_zero x] at h
dsimp [to_zmod, to_zmod_hom]
convert zmod_congr_of_sub_mem_max_ideal x _ 0 _ h
- norm_cast
- apply sub_zmod_repr_mem
+ norm_cast; apply sub_zmod_repr_mem
#align padic_int.ker_to_zmod PadicInt.ker_toZMod
#print PadicInt.appr /-
@@ -476,16 +464,11 @@ theorem appr_spec (n : ℕ) : ∀ x : ℤ_[p], x - appr x n ∈ (Ideal.span {p ^
intro x
dsimp only [appr]
split_ifs with h
- · rw [h]
- apply dvd_zero
- push_cast
- rw [sub_add_eq_sub_sub]
+ · rw [h]; apply dvd_zero
+ push_cast ; rw [sub_add_eq_sub_sub]
obtain ⟨c, hc⟩ := ih x
simp only [map_natCast, ZMod.nat_cast_self, RingHom.map_pow, RingHom.map_mul, ZMod.nat_cast_val]
- have hc' : c ≠ 0 := by
- rintro rfl
- simp only [MulZeroClass.mul_zero] at hc
- contradiction
+ have hc' : c ≠ 0 := by rintro rfl; simp only [MulZeroClass.mul_zero] at hc; contradiction
conv_rhs =>
congr
simp only [hc]
@@ -520,11 +503,7 @@ but is expected to have type
Case conversion may be inaccurate. Consider using '#align padic_int.to_zmod_pow PadicInt.toZModPowₓ'. -/
/-- A ring hom from `ℤ_[p]` to `zmod (p^n)`, with underlying function `padic_int.appr n`. -/
def toZModPow (n : ℕ) : ℤ_[p] →+* ZMod (p ^ n) :=
- toZModHom (p ^ n) (fun x => appr x n)
- (by
- intros
- convert appr_spec n _ using 1
- simp)
+ toZModHom (p ^ n) (fun x => appr x n) (by intros ; convert appr_spec n _ using 1; simp)
(by
intro x a b ha hb
apply zmod_congr_of_sub_mem_span n x a b
@@ -544,9 +523,7 @@ theorem ker_toZModPow (n : ℕ) : (toZModPow n : ℤ_[p] →+* ZMod (p ^ n)).ker
rw [RingHom.mem_ker]
constructor
· intro h
- suffices x.appr n = 0 by
- convert appr_spec n x
- simp only [this, sub_zero, cast_zero]
+ suffices x.appr n = 0 by convert appr_spec n x; simp only [this, sub_zero, cast_zero]
dsimp [to_zmod_pow, to_zmod_hom] at h
rw [ZMod.nat_cast_zmod_eq_zero_iff_dvd] at h
apply eq_zero_of_dvd_of_lt h (appr_lt _ _)
@@ -574,8 +551,7 @@ theorem zmod_cast_comp_toZModPow (m n : ℕ) (h : m ≤ n) :
simp only [to_zmod_pow, to_zmod_hom, RingHom.coe_mk]
rw [ZMod.cast_nat_cast (pow_dvd_pow p h),
zmod_congr_of_sub_mem_span m (x.appr n) (x.appr n) (x.appr m)]
- · rw [sub_self]
- apply Ideal.zero_mem _
+ · rw [sub_self]; apply Ideal.zero_mem _
· rw [Ideal.mem_span_singleton]
rcases dvd_appr_sub_appr x m n h with ⟨c, hc⟩
use c
@@ -587,10 +563,8 @@ theorem zmod_cast_comp_toZModPow (m n : ℕ) (h : m ≤ n) :
<too large>
Case conversion may be inaccurate. Consider using '#align padic_int.cast_to_zmod_pow PadicInt.cast_toZModPowₓ'. -/
@[simp]
-theorem cast_toZModPow (m n : ℕ) (h : m ≤ n) (x : ℤ_[p]) : ↑(toZModPow n x) = toZModPow m x :=
- by
- rw [← zmod_cast_comp_to_zmod_pow _ _ h]
- rfl
+theorem cast_toZModPow (m n : ℕ) (h : m ≤ n) (x : ℤ_[p]) : ↑(toZModPow n x) = toZModPow m x := by
+ rw [← zmod_cast_comp_to_zmod_pow _ _ h]; rfl
#align padic_int.cast_to_zmod_pow PadicInt.cast_toZModPow
/- warning: padic_int.dense_range_nat_cast -> PadicInt.denseRange_nat_cast is a dubious translation:
@@ -942,8 +916,7 @@ theorem ext_of_toZModPow {x y : ℤ_[p]} : (∀ n, toZModPow n x = toZModPow n y
· intro h
rw [← lift_self x, ← lift_self y]
simp [lift, lim_nth_hom, nth_hom, h]
- · rintro rfl _
- rfl
+ · rintro rfl _; rfl
#align padic_int.ext_of_to_zmod_pow PadicInt.ext_of_toZModPow
/- warning: padic_int.to_zmod_pow_eq_iff_ext -> PadicInt.toZModPow_eq_iff_ext is a dubious translation:
@@ -962,8 +935,7 @@ theorem toZModPow_eq_iff_ext {R : Type _} [NonAssocSemiring R] {g g' : R →+*
intro n
show (to_zmod_pow n).comp g x = (to_zmod_pow n).comp g' x
rw [hg n]
- · rintro rfl _
- rfl
+ · rintro rfl _; rfl
#align padic_int.to_zmod_pow_eq_iff_ext PadicInt.toZModPow_eq_iff_ext
end PadicInt
mathlib commit https://github.com/leanprover-community/mathlib/commit/917c3c072e487b3cccdbfeff17e75b40e45f66cb
@@ -63,6 +63,7 @@ variable (p) (r : ℚ)
omit hp_prime
+#print PadicInt.modPart /-
/-- `mod_part p r` is an integer that satisfies
`‖(r - mod_part p r : ℚ_[p])‖ < 1` when `‖(r : ℚ_[p])‖ ≤ 1`,
see `padic_int.norm_sub_mod_part`.
@@ -74,22 +75,33 @@ and works for arbitrary `x : ℤ_[p]`.) -/
def modPart : ℤ :=
r.num * gcdA r.den p % p
#align padic_int.mod_part PadicInt.modPart
+-/
include hp_prime
variable {p}
+#print PadicInt.modPart_lt_p /-
theorem modPart_lt_p : modPart p r < p :=
by
convert Int.emod_lt _ _
· simp
· exact_mod_cast hp_prime.1.NeZero
#align padic_int.mod_part_lt_p PadicInt.modPart_lt_p
+-/
+#print PadicInt.modPart_nonneg /-
theorem modPart_nonneg : 0 ≤ modPart p r :=
Int.emod_nonneg _ <| by exact_mod_cast hp_prime.1.NeZero
#align padic_int.mod_part_nonneg PadicInt.modPart_nonneg
+-/
+/- warning: padic_int.is_unit_denom -> PadicInt.isUnit_den is a dubious translation:
+lean 3 declaration is
+ forall {p : Nat} [hp_prime : Fact (Nat.Prime p)] (r : Rat), (LE.le.{0} Real Real.hasLe (Norm.norm.{0} (Padic p hp_prime) (Padic.hasNorm p hp_prime) ((fun (a : Type) (b : Type) [self : HasLiftT.{1, 1} a b] => self.0) Rat (Padic p hp_prime) (HasLiftT.mk.{1, 1} Rat (Padic p hp_prime) (CoeTCₓ.coe.{1, 1} Rat (Padic p hp_prime) (Rat.castCoe.{0} (Padic p hp_prime) (DivisionRing.toHasRatCast.{0} (Padic p hp_prime) (NormedDivisionRing.toDivisionRing.{0} (Padic p hp_prime) (NormedField.toNormedDivisionRing.{0} (Padic p hp_prime) (Padic.normedField p hp_prime))))))) r)) (OfNat.ofNat.{0} Real 1 (OfNat.mk.{0} Real 1 (One.one.{0} Real Real.hasOne)))) -> (IsUnit.{0} (PadicInt p hp_prime) (Ring.toMonoid.{0} (PadicInt p hp_prime) (NormedRing.toRing.{0} (PadicInt p hp_prime) (NormedCommRing.toNormedRing.{0} (PadicInt p hp_prime) (PadicInt.normedCommRing p hp_prime)))) ((fun (a : Type) (b : Type) [self : HasLiftT.{1, 1} a b] => self.0) Nat (PadicInt p hp_prime) (HasLiftT.mk.{1, 1} Nat (PadicInt p hp_prime) (CoeTCₓ.coe.{1, 1} Nat (PadicInt p hp_prime) (Nat.castCoe.{0} (PadicInt p hp_prime) (AddMonoidWithOne.toNatCast.{0} (PadicInt p hp_prime) (AddGroupWithOne.toAddMonoidWithOne.{0} (PadicInt p hp_prime) (AddCommGroupWithOne.toAddGroupWithOne.{0} (PadicInt p hp_prime) (Ring.toAddCommGroupWithOne.{0} (PadicInt p hp_prime) (NormedRing.toRing.{0} (PadicInt p hp_prime) (NormedCommRing.toNormedRing.{0} (PadicInt p hp_prime) (PadicInt.normedCommRing p hp_prime)))))))))) (Rat.den r)))
+but is expected to have type
+ forall {p : Nat} [hp_prime : Fact (Nat.Prime p)] (r : Rat), (LE.le.{0} Real Real.instLEReal (Norm.norm.{0} (Padic p hp_prime) (Padic.instNormPadic p hp_prime) (Rat.cast.{0} (Padic p hp_prime) (Field.toRatCast.{0} (Padic p hp_prime) (Padic.field p hp_prime)) r)) (OfNat.ofNat.{0} Real 1 (One.toOfNat1.{0} Real Real.instOneReal))) -> (IsUnit.{0} (PadicInt p hp_prime) (MonoidWithZero.toMonoid.{0} (PadicInt p hp_prime) (Semiring.toMonoidWithZero.{0} (PadicInt p hp_prime) (CommSemiring.toSemiring.{0} (PadicInt p hp_prime) (CommRing.toCommSemiring.{0} (PadicInt p hp_prime) (PadicInt.instCommRingPadicInt p hp_prime))))) (Nat.cast.{0} (PadicInt p hp_prime) (Semiring.toNatCast.{0} (PadicInt p hp_prime) (CommSemiring.toSemiring.{0} (PadicInt p hp_prime) (CommRing.toCommSemiring.{0} (PadicInt p hp_prime) (PadicInt.instCommRingPadicInt p hp_prime)))) (Rat.den r)))
+Case conversion may be inaccurate. Consider using '#align padic_int.is_unit_denom PadicInt.isUnit_denₓ'. -/
theorem isUnit_den (r : ℚ) (h : ‖(r : ℚ_[p])‖ ≤ 1) : IsUnit (r.den : ℤ_[p]) :=
by
rw [is_unit_iff]
@@ -116,6 +128,12 @@ theorem isUnit_den (r : ℚ) (h : ‖(r : ℚ_[p])‖ ≤ 1) : IsUnit (r.den :
rwa [← r.cop.gcd_eq_one, Nat.dvd_gcd_iff, ← Int.coe_nat_dvd_left, ← Int.coe_nat_dvd]
#align padic_int.is_unit_denom PadicInt.isUnit_den
+/- warning: padic_int.norm_sub_mod_part_aux -> PadicInt.norm_sub_mod_part_aux is a dubious translation:
+lean 3 declaration is
+ forall {p : Nat} [hp_prime : Fact (Nat.Prime p)] (r : Rat), (LE.le.{0} Real Real.hasLe (Norm.norm.{0} (Padic p hp_prime) (Padic.hasNorm p hp_prime) ((fun (a : Type) (b : Type) [self : HasLiftT.{1, 1} a b] => self.0) Rat (Padic p hp_prime) (HasLiftT.mk.{1, 1} Rat (Padic p hp_prime) (CoeTCₓ.coe.{1, 1} Rat (Padic p hp_prime) (Rat.castCoe.{0} (Padic p hp_prime) (DivisionRing.toHasRatCast.{0} (Padic p hp_prime) (NormedDivisionRing.toDivisionRing.{0} (Padic p hp_prime) (NormedField.toNormedDivisionRing.{0} (Padic p hp_prime) (Padic.normedField p hp_prime))))))) r)) (OfNat.ofNat.{0} Real 1 (OfNat.mk.{0} Real 1 (One.one.{0} Real Real.hasOne)))) -> (Dvd.Dvd.{0} Int (semigroupDvd.{0} Int Int.semigroup) ((fun (a : Type) (b : Type) [self : HasLiftT.{1, 1} a b] => self.0) Nat Int (HasLiftT.mk.{1, 1} Nat Int (CoeTCₓ.coe.{1, 1} Nat Int (coeBase.{1, 1} Nat Int Int.hasCoe))) p) (HSub.hSub.{0, 0, 0} Int Int Int (instHSub.{0} Int Int.hasSub) (Rat.num r) (HMul.hMul.{0, 0, 0} Int Int Int (instHMul.{0} Int Int.hasMul) (HMod.hMod.{0, 0, 0} Int Int Int (instHMod.{0} Int Int.hasMod) (HMul.hMul.{0, 0, 0} Int Int Int (instHMul.{0} Int Int.hasMul) (Rat.num r) (Nat.gcdA (Rat.den r) p)) ((fun (a : Type) (b : Type) [self : HasLiftT.{1, 1} a b] => self.0) Nat Int (HasLiftT.mk.{1, 1} Nat Int (CoeTCₓ.coe.{1, 1} Nat Int (coeBase.{1, 1} Nat Int Int.hasCoe))) p)) ((fun (a : Type) (b : Type) [self : HasLiftT.{1, 1} a b] => self.0) Nat Int (HasLiftT.mk.{1, 1} Nat Int (CoeTCₓ.coe.{1, 1} Nat Int (coeBase.{1, 1} Nat Int Int.hasCoe))) (Rat.den r)))))
+but is expected to have type
+ forall {p : Nat} [hp_prime : Fact (Nat.Prime p)] (r : Rat), (LE.le.{0} Real Real.instLEReal (Norm.norm.{0} (Padic p hp_prime) (Padic.instNormPadic p hp_prime) (Rat.cast.{0} (Padic p hp_prime) (Field.toRatCast.{0} (Padic p hp_prime) (Padic.field p hp_prime)) r)) (OfNat.ofNat.{0} Real 1 (One.toOfNat1.{0} Real Real.instOneReal))) -> (Dvd.dvd.{0} Int Int.instDvdInt (Nat.cast.{0} Int instNatCastInt p) (HSub.hSub.{0, 0, 0} Int Int Int (instHSub.{0} Int Int.instSubInt) (Rat.num r) (HMul.hMul.{0, 0, 0} Int Int Int (instHMul.{0} Int Int.instMulInt) (HMod.hMod.{0, 0, 0} Int Int Int (instHMod.{0} Int Int.instModInt_1) (HMul.hMul.{0, 0, 0} Int Int Int (instHMul.{0} Int Int.instMulInt) (Rat.num r) (Nat.gcdA (Rat.den r) p)) (Nat.cast.{0} Int instNatCastInt p)) (Nat.cast.{0} Int instNatCastInt (Rat.den r)))))
+Case conversion may be inaccurate. Consider using '#align padic_int.norm_sub_mod_part_aux PadicInt.norm_sub_mod_part_auxₓ'. -/
theorem norm_sub_mod_part_aux (r : ℚ) (h : ‖(r : ℚ_[p])‖ ≤ 1) :
↑p ∣ r.num - r.num * r.den.gcdA p % p * ↑r.den :=
by
@@ -137,6 +155,12 @@ theorem norm_sub_mod_part_aux (r : ℚ) (h : ‖(r : ℚ_[p])‖ ≤ 1) :
exact is_unit_denom r h
#align padic_int.norm_sub_mod_part_aux PadicInt.norm_sub_mod_part_aux
+/- warning: padic_int.norm_sub_mod_part -> PadicInt.norm_sub_modPart is a dubious translation:
+lean 3 declaration is
+ forall {p : Nat} [hp_prime : Fact (Nat.Prime p)] (r : Rat) (h : LE.le.{0} Real Real.hasLe (Norm.norm.{0} (Padic p hp_prime) (Padic.hasNorm p hp_prime) ((fun (a : Type) (b : Type) [self : HasLiftT.{1, 1} a b] => self.0) Rat (Padic p hp_prime) (HasLiftT.mk.{1, 1} Rat (Padic p hp_prime) (CoeTCₓ.coe.{1, 1} Rat (Padic p hp_prime) (Rat.castCoe.{0} (Padic p hp_prime) (DivisionRing.toHasRatCast.{0} (Padic p hp_prime) (NormedDivisionRing.toDivisionRing.{0} (Padic p hp_prime) (NormedField.toNormedDivisionRing.{0} (Padic p hp_prime) (Padic.normedField p hp_prime))))))) r)) (OfNat.ofNat.{0} Real 1 (OfNat.mk.{0} Real 1 (One.one.{0} Real Real.hasOne)))), LT.lt.{0} Real Real.hasLt (Norm.norm.{0} (PadicInt p hp_prime) (PadicInt.hasNorm p hp_prime) (HSub.hSub.{0, 0, 0} (PadicInt p hp_prime) (PadicInt p hp_prime) (PadicInt p hp_prime) (instHSub.{0} (PadicInt p hp_prime) (PadicInt.hasSub p hp_prime)) (Subtype.mk.{1} (Padic p hp_prime) (fun (x : Padic p hp_prime) => LE.le.{0} Real Real.hasLe (Norm.norm.{0} (Padic p hp_prime) (Padic.hasNorm p hp_prime) x) (OfNat.ofNat.{0} Real 1 (OfNat.mk.{0} Real 1 (One.one.{0} Real Real.hasOne)))) ((fun (a : Type) (b : Type) [self : HasLiftT.{1, 1} a b] => self.0) Rat (Padic p hp_prime) (HasLiftT.mk.{1, 1} Rat (Padic p hp_prime) (CoeTCₓ.coe.{1, 1} Rat (Padic p hp_prime) (Rat.castCoe.{0} (Padic p hp_prime) (DivisionRing.toHasRatCast.{0} (Padic p hp_prime) (NormedDivisionRing.toDivisionRing.{0} (Padic p hp_prime) (NormedField.toNormedDivisionRing.{0} (Padic p hp_prime) (Padic.normedField p hp_prime))))))) r) h) ((fun (a : Type) (b : Type) [self : HasLiftT.{1, 1} a b] => self.0) Int (PadicInt p hp_prime) (HasLiftT.mk.{1, 1} Int (PadicInt p hp_prime) (CoeTCₓ.coe.{1, 1} Int (PadicInt p hp_prime) (Int.castCoe.{0} (PadicInt p hp_prime) (AddGroupWithOne.toHasIntCast.{0} (PadicInt p hp_prime) (AddCommGroupWithOne.toAddGroupWithOne.{0} (PadicInt p hp_prime) (Ring.toAddCommGroupWithOne.{0} (PadicInt p hp_prime) (NormedRing.toRing.{0} (PadicInt p hp_prime) (NormedCommRing.toNormedRing.{0} (PadicInt p hp_prime) (PadicInt.normedCommRing p hp_prime))))))))) (PadicInt.modPart p r)))) (OfNat.ofNat.{0} Real 1 (OfNat.mk.{0} Real 1 (One.one.{0} Real Real.hasOne)))
+but is expected to have type
+ forall {p : Nat} [hp_prime : Fact (Nat.Prime p)] (r : Rat) (h : LE.le.{0} Real Real.instLEReal (Norm.norm.{0} (Padic p hp_prime) (Padic.instNormPadic p hp_prime) (Rat.cast.{0} (Padic p hp_prime) (Field.toRatCast.{0} (Padic p hp_prime) (Padic.field p hp_prime)) r)) (OfNat.ofNat.{0} Real 1 (One.toOfNat1.{0} Real Real.instOneReal))), LT.lt.{0} Real Real.instLTReal (Norm.norm.{0} (PadicInt p hp_prime) (PadicInt.instNormPadicInt p hp_prime) (HSub.hSub.{0, 0, 0} (PadicInt p hp_prime) (PadicInt p hp_prime) (PadicInt p hp_prime) (instHSub.{0} (PadicInt p hp_prime) (PadicInt.instSubPadicInt p hp_prime)) (Subtype.mk.{1} (Padic p hp_prime) (fun (x : Padic p hp_prime) => LE.le.{0} Real Real.instLEReal (Norm.norm.{0} (Padic p hp_prime) (Padic.instNormPadic p hp_prime) x) (OfNat.ofNat.{0} Real 1 (One.toOfNat1.{0} Real Real.instOneReal))) (Rat.cast.{0} (Padic p hp_prime) (Field.toRatCast.{0} (Padic p hp_prime) (Padic.field p hp_prime)) r) h) (Int.cast.{0} (PadicInt p hp_prime) (Ring.toIntCast.{0} (PadicInt p hp_prime) (NormedRing.toRing.{0} (PadicInt p hp_prime) (NormedCommRing.toNormedRing.{0} (PadicInt p hp_prime) (PadicInt.instNormedCommRingPadicInt p hp_prime)))) (PadicInt.modPart p r)))) (OfNat.ofNat.{0} Real 1 (One.toOfNat1.{0} Real Real.instOneReal))
+Case conversion may be inaccurate. Consider using '#align padic_int.norm_sub_mod_part PadicInt.norm_sub_modPartₓ'. -/
theorem norm_sub_modPart (h : ‖(r : ℚ_[p])‖ ≤ 1) : ‖(⟨r, h⟩ - modPart p r : ℤ_[p])‖ < 1 :=
by
let n := mod_part p r
@@ -152,12 +176,21 @@ theorem norm_sub_modPart (h : ‖(r : ℚ_[p])‖ ≤ 1) : ‖(⟨r, h⟩ - modP
exact norm_sub_mod_part_aux r h
#align padic_int.norm_sub_mod_part PadicInt.norm_sub_modPart
+/- warning: padic_int.exists_mem_range_of_norm_rat_le_one -> PadicInt.exists_mem_range_of_norm_rat_le_one is a dubious translation:
+lean 3 declaration is
+ forall {p : Nat} [hp_prime : Fact (Nat.Prime p)] (r : Rat) (h : LE.le.{0} Real Real.hasLe (Norm.norm.{0} (Padic p hp_prime) (Padic.hasNorm p hp_prime) ((fun (a : Type) (b : Type) [self : HasLiftT.{1, 1} a b] => self.0) Rat (Padic p hp_prime) (HasLiftT.mk.{1, 1} Rat (Padic p hp_prime) (CoeTCₓ.coe.{1, 1} Rat (Padic p hp_prime) (Rat.castCoe.{0} (Padic p hp_prime) (DivisionRing.toHasRatCast.{0} (Padic p hp_prime) (NormedDivisionRing.toDivisionRing.{0} (Padic p hp_prime) (NormedField.toNormedDivisionRing.{0} (Padic p hp_prime) (Padic.normedField p hp_prime))))))) r)) (OfNat.ofNat.{0} Real 1 (OfNat.mk.{0} Real 1 (One.one.{0} Real Real.hasOne)))), Exists.{1} Int (fun (n : Int) => And (LE.le.{0} Int Int.hasLe (OfNat.ofNat.{0} Int 0 (OfNat.mk.{0} Int 0 (Zero.zero.{0} Int Int.hasZero))) n) (And (LT.lt.{0} Int Int.hasLt n ((fun (a : Type) (b : Type) [self : HasLiftT.{1, 1} a b] => self.0) Nat Int (HasLiftT.mk.{1, 1} Nat Int (CoeTCₓ.coe.{1, 1} Nat Int (coeBase.{1, 1} Nat Int Int.hasCoe))) p)) (LT.lt.{0} Real Real.hasLt (Norm.norm.{0} (PadicInt p hp_prime) (PadicInt.hasNorm p hp_prime) (HSub.hSub.{0, 0, 0} (PadicInt p hp_prime) (PadicInt p hp_prime) (PadicInt p hp_prime) (instHSub.{0} (PadicInt p hp_prime) (PadicInt.hasSub p hp_prime)) (Subtype.mk.{1} (Padic p hp_prime) (fun (x : Padic p hp_prime) => LE.le.{0} Real Real.hasLe (Norm.norm.{0} (Padic p hp_prime) (Padic.hasNorm p hp_prime) x) (OfNat.ofNat.{0} Real 1 (OfNat.mk.{0} Real 1 (One.one.{0} Real Real.hasOne)))) ((fun (a : Type) (b : Type) [self : HasLiftT.{1, 1} a b] => self.0) Rat (Padic p hp_prime) (HasLiftT.mk.{1, 1} Rat (Padic p hp_prime) (CoeTCₓ.coe.{1, 1} Rat (Padic p hp_prime) (Rat.castCoe.{0} (Padic p hp_prime) (DivisionRing.toHasRatCast.{0} (Padic p hp_prime) (NormedDivisionRing.toDivisionRing.{0} (Padic p hp_prime) (NormedField.toNormedDivisionRing.{0} (Padic p hp_prime) (Padic.normedField p hp_prime))))))) r) h) ((fun (a : Type) (b : Type) [self : HasLiftT.{1, 1} a b] => self.0) Int (PadicInt p hp_prime) (HasLiftT.mk.{1, 1} Int (PadicInt p hp_prime) (CoeTCₓ.coe.{1, 1} Int (PadicInt p hp_prime) (Int.castCoe.{0} (PadicInt p hp_prime) (AddGroupWithOne.toHasIntCast.{0} (PadicInt p hp_prime) (AddCommGroupWithOne.toAddGroupWithOne.{0} (PadicInt p hp_prime) (Ring.toAddCommGroupWithOne.{0} (PadicInt p hp_prime) (NormedRing.toRing.{0} (PadicInt p hp_prime) (NormedCommRing.toNormedRing.{0} (PadicInt p hp_prime) (PadicInt.normedCommRing p hp_prime))))))))) n))) (OfNat.ofNat.{0} Real 1 (OfNat.mk.{0} Real 1 (One.one.{0} Real Real.hasOne))))))
+but is expected to have type
+ forall {p : Nat} [hp_prime : Fact (Nat.Prime p)] (r : Rat) (h : LE.le.{0} Real Real.instLEReal (Norm.norm.{0} (Padic p hp_prime) (Padic.instNormPadic p hp_prime) (Rat.cast.{0} (Padic p hp_prime) (Field.toRatCast.{0} (Padic p hp_prime) (Padic.field p hp_prime)) r)) (OfNat.ofNat.{0} Real 1 (One.toOfNat1.{0} Real Real.instOneReal))), Exists.{1} Int (fun (n : Int) => And (LE.le.{0} Int Int.instLEInt (OfNat.ofNat.{0} Int 0 (instOfNatInt 0)) n) (And (LT.lt.{0} Int Int.instLTInt n (Nat.cast.{0} Int instNatCastInt p)) (LT.lt.{0} Real Real.instLTReal (Norm.norm.{0} (PadicInt p hp_prime) (PadicInt.instNormPadicInt p hp_prime) (HSub.hSub.{0, 0, 0} (PadicInt p hp_prime) (PadicInt p hp_prime) (PadicInt p hp_prime) (instHSub.{0} (PadicInt p hp_prime) (PadicInt.instSubPadicInt p hp_prime)) (Subtype.mk.{1} (Padic p hp_prime) (fun (x : Padic p hp_prime) => LE.le.{0} Real Real.instLEReal (Norm.norm.{0} (Padic p hp_prime) (Padic.instNormPadic p hp_prime) x) (OfNat.ofNat.{0} Real 1 (One.toOfNat1.{0} Real Real.instOneReal))) (Rat.cast.{0} (Padic p hp_prime) (Field.toRatCast.{0} (Padic p hp_prime) (Padic.field p hp_prime)) r) h) (Int.cast.{0} (PadicInt p hp_prime) (Ring.toIntCast.{0} (PadicInt p hp_prime) (NormedRing.toRing.{0} (PadicInt p hp_prime) (NormedCommRing.toNormedRing.{0} (PadicInt p hp_prime) (PadicInt.instNormedCommRingPadicInt p hp_prime)))) n))) (OfNat.ofNat.{0} Real 1 (One.toOfNat1.{0} Real Real.instOneReal)))))
+Case conversion may be inaccurate. Consider using '#align padic_int.exists_mem_range_of_norm_rat_le_one PadicInt.exists_mem_range_of_norm_rat_le_oneₓ'. -/
theorem exists_mem_range_of_norm_rat_le_one (h : ‖(r : ℚ_[p])‖ ≤ 1) :
∃ n : ℤ, 0 ≤ n ∧ n < p ∧ ‖(⟨r, h⟩ - n : ℤ_[p])‖ < 1 :=
⟨modPart p r, modPart_nonneg _, modPart_lt_p _, norm_sub_modPart _ h⟩
#align padic_int.exists_mem_range_of_norm_rat_le_one PadicInt.exists_mem_range_of_norm_rat_le_one
-theorem zMod_congr_of_sub_mem_span_aux (n : ℕ) (x : ℤ_[p]) (a b : ℤ)
+/- warning: padic_int.zmod_congr_of_sub_mem_span_aux -> PadicInt.zmod_congr_of_sub_mem_span_aux is a dubious translation:
+<too large>
+Case conversion may be inaccurate. Consider using '#align padic_int.zmod_congr_of_sub_mem_span_aux PadicInt.zmod_congr_of_sub_mem_span_auxₓ'. -/
+theorem zmod_congr_of_sub_mem_span_aux (n : ℕ) (x : ℤ_[p]) (a b : ℤ)
(ha : x - a ∈ (Ideal.span {p ^ n} : Ideal ℤ_[p]))
(hb : x - b ∈ (Ideal.span {p ^ n} : Ideal ℤ_[p])) : (a : ZMod (p ^ n)) = b :=
by
@@ -167,15 +200,24 @@ theorem zMod_congr_of_sub_mem_span_aux (n : ℕ) (x : ℤ_[p]) (a b : ℤ)
have := dvd_add ha hb
rwa [sub_eq_add_neg, sub_eq_add_neg, add_assoc, neg_add_cancel_left, ← sub_eq_add_neg, ←
Int.cast_sub, pow_p_dvd_int_iff] at this
-#align padic_int.zmod_congr_of_sub_mem_span_aux PadicInt.zMod_congr_of_sub_mem_span_aux
+#align padic_int.zmod_congr_of_sub_mem_span_aux PadicInt.zmod_congr_of_sub_mem_span_aux
-theorem zMod_congr_of_sub_mem_span (n : ℕ) (x : ℤ_[p]) (a b : ℕ)
+/- warning: padic_int.zmod_congr_of_sub_mem_span -> PadicInt.zmod_congr_of_sub_mem_span is a dubious translation:
+<too large>
+Case conversion may be inaccurate. Consider using '#align padic_int.zmod_congr_of_sub_mem_span PadicInt.zmod_congr_of_sub_mem_spanₓ'. -/
+theorem zmod_congr_of_sub_mem_span (n : ℕ) (x : ℤ_[p]) (a b : ℕ)
(ha : x - a ∈ (Ideal.span {p ^ n} : Ideal ℤ_[p]))
(hb : x - b ∈ (Ideal.span {p ^ n} : Ideal ℤ_[p])) : (a : ZMod (p ^ n)) = b := by
simpa using zmod_congr_of_sub_mem_span_aux n x a b ha hb
-#align padic_int.zmod_congr_of_sub_mem_span PadicInt.zMod_congr_of_sub_mem_span
-
-theorem zMod_congr_of_sub_mem_max_ideal (x : ℤ_[p]) (m n : ℕ) (hm : x - m ∈ maximalIdeal ℤ_[p])
+#align padic_int.zmod_congr_of_sub_mem_span PadicInt.zmod_congr_of_sub_mem_span
+
+/- warning: padic_int.zmod_congr_of_sub_mem_max_ideal -> PadicInt.zmod_congr_of_sub_mem_max_ideal is a dubious translation:
+lean 3 declaration is
+ forall {p : Nat} [hp_prime : Fact (Nat.Prime p)] (x : PadicInt p hp_prime) (m : Nat) (n : Nat), (Membership.Mem.{0, 0} (PadicInt p hp_prime) (Ideal.{0} (PadicInt p hp_prime) (CommSemiring.toSemiring.{0} (PadicInt p hp_prime) (CommRing.toCommSemiring.{0} (PadicInt p hp_prime) (PadicInt.commRing p hp_prime)))) (SetLike.hasMem.{0, 0} (Ideal.{0} (PadicInt p hp_prime) (CommSemiring.toSemiring.{0} (PadicInt p hp_prime) (CommRing.toCommSemiring.{0} (PadicInt p hp_prime) (PadicInt.commRing p hp_prime)))) (PadicInt p hp_prime) (Submodule.setLike.{0, 0} (PadicInt p hp_prime) (PadicInt p hp_prime) (CommSemiring.toSemiring.{0} (PadicInt p hp_prime) (CommRing.toCommSemiring.{0} (PadicInt p hp_prime) (PadicInt.commRing p hp_prime))) (NonUnitalNonAssocSemiring.toAddCommMonoid.{0} (PadicInt p hp_prime) (NonAssocSemiring.toNonUnitalNonAssocSemiring.{0} (PadicInt p hp_prime) (Semiring.toNonAssocSemiring.{0} (PadicInt p hp_prime) (CommSemiring.toSemiring.{0} (PadicInt p hp_prime) (CommRing.toCommSemiring.{0} (PadicInt p hp_prime) (PadicInt.commRing p hp_prime)))))) (Semiring.toModule.{0} (PadicInt p hp_prime) (CommSemiring.toSemiring.{0} (PadicInt p hp_prime) (CommRing.toCommSemiring.{0} (PadicInt p hp_prime) (PadicInt.commRing p hp_prime)))))) (HSub.hSub.{0, 0, 0} (PadicInt p hp_prime) (PadicInt p hp_prime) (PadicInt p hp_prime) (instHSub.{0} (PadicInt p hp_prime) (PadicInt.hasSub p hp_prime)) x ((fun (a : Type) (b : Type) [self : HasLiftT.{1, 1} a b] => self.0) Nat (PadicInt p hp_prime) (HasLiftT.mk.{1, 1} Nat (PadicInt p hp_prime) (CoeTCₓ.coe.{1, 1} Nat (PadicInt p hp_prime) (Nat.castCoe.{0} (PadicInt p hp_prime) (AddMonoidWithOne.toNatCast.{0} (PadicInt p hp_prime) (AddGroupWithOne.toAddMonoidWithOne.{0} (PadicInt p hp_prime) (AddCommGroupWithOne.toAddGroupWithOne.{0} (PadicInt p hp_prime) (Ring.toAddCommGroupWithOne.{0} (PadicInt p hp_prime) (NormedRing.toRing.{0} (PadicInt p hp_prime) (NormedCommRing.toNormedRing.{0} (PadicInt p hp_prime) (PadicInt.normedCommRing p hp_prime)))))))))) m)) (LocalRing.maximalIdeal.{0} (PadicInt p hp_prime) (CommRing.toCommSemiring.{0} (PadicInt p hp_prime) (PadicInt.commRing p hp_prime)) (PadicInt.localRing p hp_prime))) -> (Membership.Mem.{0, 0} (PadicInt p hp_prime) (Ideal.{0} (PadicInt p hp_prime) (CommSemiring.toSemiring.{0} (PadicInt p hp_prime) (CommRing.toCommSemiring.{0} (PadicInt p hp_prime) (PadicInt.commRing p hp_prime)))) (SetLike.hasMem.{0, 0} (Ideal.{0} (PadicInt p hp_prime) (CommSemiring.toSemiring.{0} (PadicInt p hp_prime) (CommRing.toCommSemiring.{0} (PadicInt p hp_prime) (PadicInt.commRing p hp_prime)))) (PadicInt p hp_prime) (Submodule.setLike.{0, 0} (PadicInt p hp_prime) (PadicInt p hp_prime) (CommSemiring.toSemiring.{0} (PadicInt p hp_prime) (CommRing.toCommSemiring.{0} (PadicInt p hp_prime) (PadicInt.commRing p hp_prime))) (NonUnitalNonAssocSemiring.toAddCommMonoid.{0} (PadicInt p hp_prime) (NonAssocSemiring.toNonUnitalNonAssocSemiring.{0} (PadicInt p hp_prime) (Semiring.toNonAssocSemiring.{0} (PadicInt p hp_prime) (CommSemiring.toSemiring.{0} (PadicInt p hp_prime) (CommRing.toCommSemiring.{0} (PadicInt p hp_prime) (PadicInt.commRing p hp_prime)))))) (Semiring.toModule.{0} (PadicInt p hp_prime) (CommSemiring.toSemiring.{0} (PadicInt p hp_prime) (CommRing.toCommSemiring.{0} (PadicInt p hp_prime) (PadicInt.commRing p hp_prime)))))) (HSub.hSub.{0, 0, 0} (PadicInt p hp_prime) (PadicInt p hp_prime) (PadicInt p hp_prime) (instHSub.{0} (PadicInt p hp_prime) (PadicInt.hasSub p hp_prime)) x ((fun (a : Type) (b : Type) [self : HasLiftT.{1, 1} a b] => self.0) Nat (PadicInt p hp_prime) (HasLiftT.mk.{1, 1} Nat (PadicInt p hp_prime) (CoeTCₓ.coe.{1, 1} Nat (PadicInt p hp_prime) (Nat.castCoe.{0} (PadicInt p hp_prime) (AddMonoidWithOne.toNatCast.{0} (PadicInt p hp_prime) (AddGroupWithOne.toAddMonoidWithOne.{0} (PadicInt p hp_prime) (AddCommGroupWithOne.toAddGroupWithOne.{0} (PadicInt p hp_prime) (Ring.toAddCommGroupWithOne.{0} (PadicInt p hp_prime) (NormedRing.toRing.{0} (PadicInt p hp_prime) (NormedCommRing.toNormedRing.{0} (PadicInt p hp_prime) (PadicInt.normedCommRing p hp_prime)))))))))) n)) (LocalRing.maximalIdeal.{0} (PadicInt p hp_prime) (CommRing.toCommSemiring.{0} (PadicInt p hp_prime) (PadicInt.commRing p hp_prime)) (PadicInt.localRing p hp_prime))) -> (Eq.{1} (ZMod p) ((fun (a : Type) (b : Type) [self : HasLiftT.{1, 1} a b] => self.0) Nat (ZMod p) (HasLiftT.mk.{1, 1} Nat (ZMod p) (CoeTCₓ.coe.{1, 1} Nat (ZMod p) (Nat.castCoe.{0} (ZMod p) (AddMonoidWithOne.toNatCast.{0} (ZMod p) (AddGroupWithOne.toAddMonoidWithOne.{0} (ZMod p) (AddCommGroupWithOne.toAddGroupWithOne.{0} (ZMod p) (Ring.toAddCommGroupWithOne.{0} (ZMod p) (DivisionRing.toRing.{0} (ZMod p) (Field.toDivisionRing.{0} (ZMod p) (ZMod.field p hp_prime)))))))))) m) ((fun (a : Type) (b : Type) [self : HasLiftT.{1, 1} a b] => self.0) Nat (ZMod p) (HasLiftT.mk.{1, 1} Nat (ZMod p) (CoeTCₓ.coe.{1, 1} Nat (ZMod p) (Nat.castCoe.{0} (ZMod p) (AddMonoidWithOne.toNatCast.{0} (ZMod p) (AddGroupWithOne.toAddMonoidWithOne.{0} (ZMod p) (AddCommGroupWithOne.toAddGroupWithOne.{0} (ZMod p) (Ring.toAddCommGroupWithOne.{0} (ZMod p) (DivisionRing.toRing.{0} (ZMod p) (Field.toDivisionRing.{0} (ZMod p) (ZMod.field p hp_prime)))))))))) n))
+but is expected to have type
+ forall {p : Nat} [hp_prime : Fact (Nat.Prime p)] (x : PadicInt p hp_prime) (m : Nat) (n : Nat), (Membership.mem.{0, 0} (PadicInt p hp_prime) (Ideal.{0} (PadicInt p hp_prime) (CommSemiring.toSemiring.{0} (PadicInt p hp_prime) (CommRing.toCommSemiring.{0} (PadicInt p hp_prime) (PadicInt.instCommRingPadicInt p hp_prime)))) (SetLike.instMembership.{0, 0} (Ideal.{0} (PadicInt p hp_prime) (CommSemiring.toSemiring.{0} (PadicInt p hp_prime) (CommRing.toCommSemiring.{0} (PadicInt p hp_prime) (PadicInt.instCommRingPadicInt p hp_prime)))) (PadicInt p hp_prime) (Submodule.setLike.{0, 0} (PadicInt p hp_prime) (PadicInt p hp_prime) (CommSemiring.toSemiring.{0} (PadicInt p hp_prime) (CommRing.toCommSemiring.{0} (PadicInt p hp_prime) (PadicInt.instCommRingPadicInt p hp_prime))) (NonUnitalNonAssocSemiring.toAddCommMonoid.{0} (PadicInt p hp_prime) (NonAssocSemiring.toNonUnitalNonAssocSemiring.{0} (PadicInt p hp_prime) (Semiring.toNonAssocSemiring.{0} (PadicInt p hp_prime) (CommSemiring.toSemiring.{0} (PadicInt p hp_prime) (CommRing.toCommSemiring.{0} (PadicInt p hp_prime) (PadicInt.instCommRingPadicInt p hp_prime)))))) (Semiring.toModule.{0} (PadicInt p hp_prime) (CommSemiring.toSemiring.{0} (PadicInt p hp_prime) (CommRing.toCommSemiring.{0} (PadicInt p hp_prime) (PadicInt.instCommRingPadicInt p hp_prime)))))) (HSub.hSub.{0, 0, 0} (PadicInt p hp_prime) (PadicInt p hp_prime) (PadicInt p hp_prime) (instHSub.{0} (PadicInt p hp_prime) (PadicInt.instSubPadicInt p hp_prime)) x (Nat.cast.{0} (PadicInt p hp_prime) (Semiring.toNatCast.{0} (PadicInt p hp_prime) (CommSemiring.toSemiring.{0} (PadicInt p hp_prime) (CommRing.toCommSemiring.{0} (PadicInt p hp_prime) (PadicInt.instCommRingPadicInt p hp_prime)))) m)) (LocalRing.maximalIdeal.{0} (PadicInt p hp_prime) (CommRing.toCommSemiring.{0} (PadicInt p hp_prime) (PadicInt.instCommRingPadicInt p hp_prime)) (PadicInt.instLocalRingPadicIntToSemiringToCommSemiringInstCommRingPadicInt p hp_prime))) -> (Membership.mem.{0, 0} (PadicInt p hp_prime) (Ideal.{0} (PadicInt p hp_prime) (CommSemiring.toSemiring.{0} (PadicInt p hp_prime) (CommRing.toCommSemiring.{0} (PadicInt p hp_prime) (PadicInt.instCommRingPadicInt p hp_prime)))) (SetLike.instMembership.{0, 0} (Ideal.{0} (PadicInt p hp_prime) (CommSemiring.toSemiring.{0} (PadicInt p hp_prime) (CommRing.toCommSemiring.{0} (PadicInt p hp_prime) (PadicInt.instCommRingPadicInt p hp_prime)))) (PadicInt p hp_prime) (Submodule.setLike.{0, 0} (PadicInt p hp_prime) (PadicInt p hp_prime) (CommSemiring.toSemiring.{0} (PadicInt p hp_prime) (CommRing.toCommSemiring.{0} (PadicInt p hp_prime) (PadicInt.instCommRingPadicInt p hp_prime))) (NonUnitalNonAssocSemiring.toAddCommMonoid.{0} (PadicInt p hp_prime) (NonAssocSemiring.toNonUnitalNonAssocSemiring.{0} (PadicInt p hp_prime) (Semiring.toNonAssocSemiring.{0} (PadicInt p hp_prime) (CommSemiring.toSemiring.{0} (PadicInt p hp_prime) (CommRing.toCommSemiring.{0} (PadicInt p hp_prime) (PadicInt.instCommRingPadicInt p hp_prime)))))) (Semiring.toModule.{0} (PadicInt p hp_prime) (CommSemiring.toSemiring.{0} (PadicInt p hp_prime) (CommRing.toCommSemiring.{0} (PadicInt p hp_prime) (PadicInt.instCommRingPadicInt p hp_prime)))))) (HSub.hSub.{0, 0, 0} (PadicInt p hp_prime) (PadicInt p hp_prime) (PadicInt p hp_prime) (instHSub.{0} (PadicInt p hp_prime) (PadicInt.instSubPadicInt p hp_prime)) x (Nat.cast.{0} (PadicInt p hp_prime) (Semiring.toNatCast.{0} (PadicInt p hp_prime) (CommSemiring.toSemiring.{0} (PadicInt p hp_prime) (CommRing.toCommSemiring.{0} (PadicInt p hp_prime) (PadicInt.instCommRingPadicInt p hp_prime)))) n)) (LocalRing.maximalIdeal.{0} (PadicInt p hp_prime) (CommRing.toCommSemiring.{0} (PadicInt p hp_prime) (PadicInt.instCommRingPadicInt p hp_prime)) (PadicInt.instLocalRingPadicIntToSemiringToCommSemiringInstCommRingPadicInt p hp_prime))) -> (Eq.{1} (ZMod p) (Nat.cast.{0} (ZMod p) (Semiring.toNatCast.{0} (ZMod p) (DivisionSemiring.toSemiring.{0} (ZMod p) (Semifield.toDivisionSemiring.{0} (ZMod p) (Field.toSemifield.{0} (ZMod p) (ZMod.instFieldZMod p hp_prime))))) m) (Nat.cast.{0} (ZMod p) (Semiring.toNatCast.{0} (ZMod p) (DivisionSemiring.toSemiring.{0} (ZMod p) (Semifield.toDivisionSemiring.{0} (ZMod p) (Field.toSemifield.{0} (ZMod p) (ZMod.instFieldZMod p hp_prime))))) n))
+Case conversion may be inaccurate. Consider using '#align padic_int.zmod_congr_of_sub_mem_max_ideal PadicInt.zmod_congr_of_sub_mem_max_idealₓ'. -/
+theorem zmod_congr_of_sub_mem_max_ideal (x : ℤ_[p]) (m n : ℕ) (hm : x - m ∈ maximalIdeal ℤ_[p])
(hn : x - n ∈ maximalIdeal ℤ_[p]) : (m : ZMod p) = n :=
by
rw [maximal_ideal_eq_span_p] at hm hn
@@ -185,10 +227,16 @@ theorem zMod_congr_of_sub_mem_max_ideal (x : ℤ_[p]) (m n : ℕ) (hm : x - m
apply_fun ZMod.castHom (show p ∣ p ^ 1 by rw [pow_one]) (ZMod p) at this
simp only [map_intCast] at this
simpa only [Int.cast_ofNat] using this
-#align padic_int.zmod_congr_of_sub_mem_max_ideal PadicInt.zMod_congr_of_sub_mem_max_ideal
+#align padic_int.zmod_congr_of_sub_mem_max_ideal PadicInt.zmod_congr_of_sub_mem_max_ideal
variable (x : ℤ_[p])
+/- warning: padic_int.exists_mem_range -> PadicInt.exists_mem_range is a dubious translation:
+lean 3 declaration is
+ forall {p : Nat} [hp_prime : Fact (Nat.Prime p)] (x : PadicInt p hp_prime), Exists.{1} Nat (fun (n : Nat) => And (LT.lt.{0} Nat Nat.hasLt n p) (Membership.Mem.{0, 0} (PadicInt p hp_prime) (Ideal.{0} (PadicInt p hp_prime) (CommSemiring.toSemiring.{0} (PadicInt p hp_prime) (CommRing.toCommSemiring.{0} (PadicInt p hp_prime) (PadicInt.commRing p hp_prime)))) (SetLike.hasMem.{0, 0} (Ideal.{0} (PadicInt p hp_prime) (CommSemiring.toSemiring.{0} (PadicInt p hp_prime) (CommRing.toCommSemiring.{0} (PadicInt p hp_prime) (PadicInt.commRing p hp_prime)))) (PadicInt p hp_prime) (Submodule.setLike.{0, 0} (PadicInt p hp_prime) (PadicInt p hp_prime) (CommSemiring.toSemiring.{0} (PadicInt p hp_prime) (CommRing.toCommSemiring.{0} (PadicInt p hp_prime) (PadicInt.commRing p hp_prime))) (NonUnitalNonAssocSemiring.toAddCommMonoid.{0} (PadicInt p hp_prime) (NonAssocSemiring.toNonUnitalNonAssocSemiring.{0} (PadicInt p hp_prime) (Semiring.toNonAssocSemiring.{0} (PadicInt p hp_prime) (CommSemiring.toSemiring.{0} (PadicInt p hp_prime) (CommRing.toCommSemiring.{0} (PadicInt p hp_prime) (PadicInt.commRing p hp_prime)))))) (Semiring.toModule.{0} (PadicInt p hp_prime) (CommSemiring.toSemiring.{0} (PadicInt p hp_prime) (CommRing.toCommSemiring.{0} (PadicInt p hp_prime) (PadicInt.commRing p hp_prime)))))) (HSub.hSub.{0, 0, 0} (PadicInt p hp_prime) (PadicInt p hp_prime) (PadicInt p hp_prime) (instHSub.{0} (PadicInt p hp_prime) (PadicInt.hasSub p hp_prime)) x ((fun (a : Type) (b : Type) [self : HasLiftT.{1, 1} a b] => self.0) Nat (PadicInt p hp_prime) (HasLiftT.mk.{1, 1} Nat (PadicInt p hp_prime) (CoeTCₓ.coe.{1, 1} Nat (PadicInt p hp_prime) (Nat.castCoe.{0} (PadicInt p hp_prime) (AddMonoidWithOne.toNatCast.{0} (PadicInt p hp_prime) (AddGroupWithOne.toAddMonoidWithOne.{0} (PadicInt p hp_prime) (AddCommGroupWithOne.toAddGroupWithOne.{0} (PadicInt p hp_prime) (Ring.toAddCommGroupWithOne.{0} (PadicInt p hp_prime) (NormedRing.toRing.{0} (PadicInt p hp_prime) (NormedCommRing.toNormedRing.{0} (PadicInt p hp_prime) (PadicInt.normedCommRing p hp_prime)))))))))) n)) (LocalRing.maximalIdeal.{0} (PadicInt p hp_prime) (CommRing.toCommSemiring.{0} (PadicInt p hp_prime) (PadicInt.commRing p hp_prime)) (PadicInt.localRing p hp_prime))))
+but is expected to have type
+ forall {p : Nat} [hp_prime : Fact (Nat.Prime p)] (x : PadicInt p hp_prime), Exists.{1} Nat (fun (n : Nat) => And (LT.lt.{0} Nat instLTNat n p) (Membership.mem.{0, 0} (PadicInt p hp_prime) (Ideal.{0} (PadicInt p hp_prime) (CommSemiring.toSemiring.{0} (PadicInt p hp_prime) (CommRing.toCommSemiring.{0} (PadicInt p hp_prime) (PadicInt.instCommRingPadicInt p hp_prime)))) (SetLike.instMembership.{0, 0} (Ideal.{0} (PadicInt p hp_prime) (CommSemiring.toSemiring.{0} (PadicInt p hp_prime) (CommRing.toCommSemiring.{0} (PadicInt p hp_prime) (PadicInt.instCommRingPadicInt p hp_prime)))) (PadicInt p hp_prime) (Submodule.setLike.{0, 0} (PadicInt p hp_prime) (PadicInt p hp_prime) (CommSemiring.toSemiring.{0} (PadicInt p hp_prime) (CommRing.toCommSemiring.{0} (PadicInt p hp_prime) (PadicInt.instCommRingPadicInt p hp_prime))) (NonUnitalNonAssocSemiring.toAddCommMonoid.{0} (PadicInt p hp_prime) (NonAssocSemiring.toNonUnitalNonAssocSemiring.{0} (PadicInt p hp_prime) (Semiring.toNonAssocSemiring.{0} (PadicInt p hp_prime) (CommSemiring.toSemiring.{0} (PadicInt p hp_prime) (CommRing.toCommSemiring.{0} (PadicInt p hp_prime) (PadicInt.instCommRingPadicInt p hp_prime)))))) (Semiring.toModule.{0} (PadicInt p hp_prime) (CommSemiring.toSemiring.{0} (PadicInt p hp_prime) (CommRing.toCommSemiring.{0} (PadicInt p hp_prime) (PadicInt.instCommRingPadicInt p hp_prime)))))) (HSub.hSub.{0, 0, 0} (PadicInt p hp_prime) (PadicInt p hp_prime) (PadicInt p hp_prime) (instHSub.{0} (PadicInt p hp_prime) (PadicInt.instSubPadicInt p hp_prime)) x (Nat.cast.{0} (PadicInt p hp_prime) (Semiring.toNatCast.{0} (PadicInt p hp_prime) (CommSemiring.toSemiring.{0} (PadicInt p hp_prime) (CommRing.toCommSemiring.{0} (PadicInt p hp_prime) (PadicInt.instCommRingPadicInt p hp_prime)))) n)) (LocalRing.maximalIdeal.{0} (PadicInt p hp_prime) (CommRing.toCommSemiring.{0} (PadicInt p hp_prime) (PadicInt.instCommRingPadicInt p hp_prime)) (PadicInt.instLocalRingPadicIntToSemiringToCommSemiringInstCommRingPadicInt p hp_prime))))
+Case conversion may be inaccurate. Consider using '#align padic_int.exists_mem_range PadicInt.exists_mem_rangeₓ'. -/
theorem exists_mem_range : ∃ n : ℕ, n < p ∧ x - n ∈ maximalIdeal ℤ_[p] :=
by
simp only [maximal_ideal_eq_span_p, Ideal.mem_span_singleton, ← norm_lt_one_iff_dvd]
@@ -212,28 +260,47 @@ theorem exists_mem_range : ∃ n : ℕ, n < p ∧ x - n ∈ maximalIdeal ℤ_[p]
simpa using hn
#align padic_int.exists_mem_range PadicInt.exists_mem_range
+#print PadicInt.zmodRepr /-
/-- `zmod_repr x` is the unique natural number smaller than `p`
satisfying `‖(x - zmod_repr x : ℤ_[p])‖ < 1`.
-/
def zmodRepr : ℕ :=
Classical.choose (exists_mem_range x)
#align padic_int.zmod_repr PadicInt.zmodRepr
+-/
+/- warning: padic_int.zmod_repr_spec -> PadicInt.zmodRepr_spec is a dubious translation:
+lean 3 declaration is
+ forall {p : Nat} [hp_prime : Fact (Nat.Prime p)] (x : PadicInt p hp_prime), And (LT.lt.{0} Nat Nat.hasLt (PadicInt.zmodRepr p hp_prime x) p) (Membership.Mem.{0, 0} (PadicInt p hp_prime) (Ideal.{0} (PadicInt p hp_prime) (CommSemiring.toSemiring.{0} (PadicInt p hp_prime) (CommRing.toCommSemiring.{0} (PadicInt p hp_prime) (PadicInt.commRing p hp_prime)))) (SetLike.hasMem.{0, 0} (Ideal.{0} (PadicInt p hp_prime) (CommSemiring.toSemiring.{0} (PadicInt p hp_prime) (CommRing.toCommSemiring.{0} (PadicInt p hp_prime) (PadicInt.commRing p hp_prime)))) (PadicInt p hp_prime) (Submodule.setLike.{0, 0} (PadicInt p hp_prime) (PadicInt p hp_prime) (CommSemiring.toSemiring.{0} (PadicInt p hp_prime) (CommRing.toCommSemiring.{0} (PadicInt p hp_prime) (PadicInt.commRing p hp_prime))) (NonUnitalNonAssocSemiring.toAddCommMonoid.{0} (PadicInt p hp_prime) (NonAssocSemiring.toNonUnitalNonAssocSemiring.{0} (PadicInt p hp_prime) (Semiring.toNonAssocSemiring.{0} (PadicInt p hp_prime) (CommSemiring.toSemiring.{0} (PadicInt p hp_prime) (CommRing.toCommSemiring.{0} (PadicInt p hp_prime) (PadicInt.commRing p hp_prime)))))) (Semiring.toModule.{0} (PadicInt p hp_prime) (CommSemiring.toSemiring.{0} (PadicInt p hp_prime) (CommRing.toCommSemiring.{0} (PadicInt p hp_prime) (PadicInt.commRing p hp_prime)))))) (HSub.hSub.{0, 0, 0} (PadicInt p hp_prime) (PadicInt p hp_prime) (PadicInt p hp_prime) (instHSub.{0} (PadicInt p hp_prime) (PadicInt.hasSub p hp_prime)) x ((fun (a : Type) (b : Type) [self : HasLiftT.{1, 1} a b] => self.0) Nat (PadicInt p hp_prime) (HasLiftT.mk.{1, 1} Nat (PadicInt p hp_prime) (CoeTCₓ.coe.{1, 1} Nat (PadicInt p hp_prime) (Nat.castCoe.{0} (PadicInt p hp_prime) (AddMonoidWithOne.toNatCast.{0} (PadicInt p hp_prime) (AddGroupWithOne.toAddMonoidWithOne.{0} (PadicInt p hp_prime) (AddCommGroupWithOne.toAddGroupWithOne.{0} (PadicInt p hp_prime) (Ring.toAddCommGroupWithOne.{0} (PadicInt p hp_prime) (NormedRing.toRing.{0} (PadicInt p hp_prime) (NormedCommRing.toNormedRing.{0} (PadicInt p hp_prime) (PadicInt.normedCommRing p hp_prime)))))))))) (PadicInt.zmodRepr p hp_prime x))) (LocalRing.maximalIdeal.{0} (PadicInt p hp_prime) (CommRing.toCommSemiring.{0} (PadicInt p hp_prime) (PadicInt.commRing p hp_prime)) (PadicInt.localRing p hp_prime)))
+but is expected to have type
+ forall {p : Nat} [hp_prime : Fact (Nat.Prime p)] (x : PadicInt p hp_prime), And (LT.lt.{0} Nat instLTNat (PadicInt.zmodRepr p hp_prime x) p) (Membership.mem.{0, 0} (PadicInt p hp_prime) (Ideal.{0} (PadicInt p hp_prime) (CommSemiring.toSemiring.{0} (PadicInt p hp_prime) (CommRing.toCommSemiring.{0} (PadicInt p hp_prime) (PadicInt.instCommRingPadicInt p hp_prime)))) (SetLike.instMembership.{0, 0} (Ideal.{0} (PadicInt p hp_prime) (CommSemiring.toSemiring.{0} (PadicInt p hp_prime) (CommRing.toCommSemiring.{0} (PadicInt p hp_prime) (PadicInt.instCommRingPadicInt p hp_prime)))) (PadicInt p hp_prime) (Submodule.setLike.{0, 0} (PadicInt p hp_prime) (PadicInt p hp_prime) (CommSemiring.toSemiring.{0} (PadicInt p hp_prime) (CommRing.toCommSemiring.{0} (PadicInt p hp_prime) (PadicInt.instCommRingPadicInt p hp_prime))) (NonUnitalNonAssocSemiring.toAddCommMonoid.{0} (PadicInt p hp_prime) (NonAssocSemiring.toNonUnitalNonAssocSemiring.{0} (PadicInt p hp_prime) (Semiring.toNonAssocSemiring.{0} (PadicInt p hp_prime) (CommSemiring.toSemiring.{0} (PadicInt p hp_prime) (CommRing.toCommSemiring.{0} (PadicInt p hp_prime) (PadicInt.instCommRingPadicInt p hp_prime)))))) (Semiring.toModule.{0} (PadicInt p hp_prime) (CommSemiring.toSemiring.{0} (PadicInt p hp_prime) (CommRing.toCommSemiring.{0} (PadicInt p hp_prime) (PadicInt.instCommRingPadicInt p hp_prime)))))) (HSub.hSub.{0, 0, 0} (PadicInt p hp_prime) (PadicInt p hp_prime) (PadicInt p hp_prime) (instHSub.{0} (PadicInt p hp_prime) (PadicInt.instSubPadicInt p hp_prime)) x (Nat.cast.{0} (PadicInt p hp_prime) (Semiring.toNatCast.{0} (PadicInt p hp_prime) (CommSemiring.toSemiring.{0} (PadicInt p hp_prime) (CommRing.toCommSemiring.{0} (PadicInt p hp_prime) (PadicInt.instCommRingPadicInt p hp_prime)))) (PadicInt.zmodRepr p hp_prime x))) (LocalRing.maximalIdeal.{0} (PadicInt p hp_prime) (CommRing.toCommSemiring.{0} (PadicInt p hp_prime) (PadicInt.instCommRingPadicInt p hp_prime)) (PadicInt.instLocalRingPadicIntToSemiringToCommSemiringInstCommRingPadicInt p hp_prime)))
+Case conversion may be inaccurate. Consider using '#align padic_int.zmod_repr_spec PadicInt.zmodRepr_specₓ'. -/
theorem zmodRepr_spec : zmodRepr x < p ∧ x - zmodRepr x ∈ maximalIdeal ℤ_[p] :=
Classical.choose_spec (exists_mem_range x)
#align padic_int.zmod_repr_spec PadicInt.zmodRepr_spec
+#print PadicInt.zmodRepr_lt_p /-
theorem zmodRepr_lt_p : zmodRepr x < p :=
(zmodRepr_spec _).1
#align padic_int.zmod_repr_lt_p PadicInt.zmodRepr_lt_p
+-/
+/- warning: padic_int.sub_zmod_repr_mem -> PadicInt.sub_zmodRepr_mem is a dubious translation:
+lean 3 declaration is
+ forall {p : Nat} [hp_prime : Fact (Nat.Prime p)] (x : PadicInt p hp_prime), Membership.Mem.{0, 0} (PadicInt p hp_prime) (Ideal.{0} (PadicInt p hp_prime) (CommSemiring.toSemiring.{0} (PadicInt p hp_prime) (CommRing.toCommSemiring.{0} (PadicInt p hp_prime) (PadicInt.commRing p hp_prime)))) (SetLike.hasMem.{0, 0} (Ideal.{0} (PadicInt p hp_prime) (CommSemiring.toSemiring.{0} (PadicInt p hp_prime) (CommRing.toCommSemiring.{0} (PadicInt p hp_prime) (PadicInt.commRing p hp_prime)))) (PadicInt p hp_prime) (Submodule.setLike.{0, 0} (PadicInt p hp_prime) (PadicInt p hp_prime) (CommSemiring.toSemiring.{0} (PadicInt p hp_prime) (CommRing.toCommSemiring.{0} (PadicInt p hp_prime) (PadicInt.commRing p hp_prime))) (NonUnitalNonAssocSemiring.toAddCommMonoid.{0} (PadicInt p hp_prime) (NonAssocSemiring.toNonUnitalNonAssocSemiring.{0} (PadicInt p hp_prime) (Semiring.toNonAssocSemiring.{0} (PadicInt p hp_prime) (CommSemiring.toSemiring.{0} (PadicInt p hp_prime) (CommRing.toCommSemiring.{0} (PadicInt p hp_prime) (PadicInt.commRing p hp_prime)))))) (Semiring.toModule.{0} (PadicInt p hp_prime) (CommSemiring.toSemiring.{0} (PadicInt p hp_prime) (CommRing.toCommSemiring.{0} (PadicInt p hp_prime) (PadicInt.commRing p hp_prime)))))) (HSub.hSub.{0, 0, 0} (PadicInt p hp_prime) (PadicInt p hp_prime) (PadicInt p hp_prime) (instHSub.{0} (PadicInt p hp_prime) (PadicInt.hasSub p hp_prime)) x ((fun (a : Type) (b : Type) [self : HasLiftT.{1, 1} a b] => self.0) Nat (PadicInt p hp_prime) (HasLiftT.mk.{1, 1} Nat (PadicInt p hp_prime) (CoeTCₓ.coe.{1, 1} Nat (PadicInt p hp_prime) (Nat.castCoe.{0} (PadicInt p hp_prime) (AddMonoidWithOne.toNatCast.{0} (PadicInt p hp_prime) (AddGroupWithOne.toAddMonoidWithOne.{0} (PadicInt p hp_prime) (AddCommGroupWithOne.toAddGroupWithOne.{0} (PadicInt p hp_prime) (Ring.toAddCommGroupWithOne.{0} (PadicInt p hp_prime) (NormedRing.toRing.{0} (PadicInt p hp_prime) (NormedCommRing.toNormedRing.{0} (PadicInt p hp_prime) (PadicInt.normedCommRing p hp_prime)))))))))) (PadicInt.zmodRepr p hp_prime x))) (LocalRing.maximalIdeal.{0} (PadicInt p hp_prime) (CommRing.toCommSemiring.{0} (PadicInt p hp_prime) (PadicInt.commRing p hp_prime)) (PadicInt.localRing p hp_prime))
+but is expected to have type
+ forall {p : Nat} [hp_prime : Fact (Nat.Prime p)] (x : PadicInt p hp_prime), Membership.mem.{0, 0} (PadicInt p hp_prime) (Ideal.{0} (PadicInt p hp_prime) (CommSemiring.toSemiring.{0} (PadicInt p hp_prime) (CommRing.toCommSemiring.{0} (PadicInt p hp_prime) (PadicInt.instCommRingPadicInt p hp_prime)))) (SetLike.instMembership.{0, 0} (Ideal.{0} (PadicInt p hp_prime) (CommSemiring.toSemiring.{0} (PadicInt p hp_prime) (CommRing.toCommSemiring.{0} (PadicInt p hp_prime) (PadicInt.instCommRingPadicInt p hp_prime)))) (PadicInt p hp_prime) (Submodule.setLike.{0, 0} (PadicInt p hp_prime) (PadicInt p hp_prime) (CommSemiring.toSemiring.{0} (PadicInt p hp_prime) (CommRing.toCommSemiring.{0} (PadicInt p hp_prime) (PadicInt.instCommRingPadicInt p hp_prime))) (NonUnitalNonAssocSemiring.toAddCommMonoid.{0} (PadicInt p hp_prime) (NonAssocSemiring.toNonUnitalNonAssocSemiring.{0} (PadicInt p hp_prime) (Semiring.toNonAssocSemiring.{0} (PadicInt p hp_prime) (CommSemiring.toSemiring.{0} (PadicInt p hp_prime) (CommRing.toCommSemiring.{0} (PadicInt p hp_prime) (PadicInt.instCommRingPadicInt p hp_prime)))))) (Semiring.toModule.{0} (PadicInt p hp_prime) (CommSemiring.toSemiring.{0} (PadicInt p hp_prime) (CommRing.toCommSemiring.{0} (PadicInt p hp_prime) (PadicInt.instCommRingPadicInt p hp_prime)))))) (HSub.hSub.{0, 0, 0} (PadicInt p hp_prime) (PadicInt p hp_prime) (PadicInt p hp_prime) (instHSub.{0} (PadicInt p hp_prime) (PadicInt.instSubPadicInt p hp_prime)) x (Nat.cast.{0} (PadicInt p hp_prime) (Semiring.toNatCast.{0} (PadicInt p hp_prime) (CommSemiring.toSemiring.{0} (PadicInt p hp_prime) (CommRing.toCommSemiring.{0} (PadicInt p hp_prime) (PadicInt.instCommRingPadicInt p hp_prime)))) (PadicInt.zmodRepr p hp_prime x))) (LocalRing.maximalIdeal.{0} (PadicInt p hp_prime) (CommRing.toCommSemiring.{0} (PadicInt p hp_prime) (PadicInt.instCommRingPadicInt p hp_prime)) (PadicInt.instLocalRingPadicIntToSemiringToCommSemiringInstCommRingPadicInt p hp_prime))
+Case conversion may be inaccurate. Consider using '#align padic_int.sub_zmod_repr_mem PadicInt.sub_zmodRepr_memₓ'. -/
theorem sub_zmodRepr_mem : x - zmodRepr x ∈ maximalIdeal ℤ_[p] :=
(zmodRepr_spec _).2
#align padic_int.sub_zmod_repr_mem PadicInt.sub_zmodRepr_mem
+/- warning: padic_int.to_zmod_hom -> PadicInt.toZModHom is a dubious translation:
+<too large>
+Case conversion may be inaccurate. Consider using '#align padic_int.to_zmod_hom PadicInt.toZModHomₓ'. -/
/-- `to_zmod_hom` is an auxiliary constructor for creating ring homs from `ℤ_[p]` to `zmod v`.
-/
-def toZmodHom (v : ℕ) (f : ℤ_[p] → ℕ) (f_spec : ∀ x, x - f x ∈ (Ideal.span {v} : Ideal ℤ_[p]))
+def toZModHom (v : ℕ) (f : ℤ_[p] → ℕ) (f_spec : ∀ x, x - f x ∈ (Ideal.span {v} : Ideal ℤ_[p]))
(f_congr :
∀ (x : ℤ_[p]) (a b : ℕ),
x - a ∈ (Ideal.span {v} : Ideal ℤ_[p]) →
@@ -263,21 +330,33 @@ def toZmodHom (v : ℕ) (f : ℤ_[p] → ℕ) (f_spec : ∀ x, x - f x ∈ (Idea
convert I.add_mem (I.mul_mem_left x (f_spec y)) (I.mul_mem_right (f y) (f_spec x))
rw [cast_mul]
ring
-#align padic_int.to_zmod_hom PadicInt.toZmodHom
-
+#align padic_int.to_zmod_hom PadicInt.toZModHom
+
+/- warning: padic_int.to_zmod -> PadicInt.toZMod is a dubious translation:
+lean 3 declaration is
+ forall {p : Nat} [hp_prime : Fact (Nat.Prime p)], RingHom.{0, 0} (PadicInt p hp_prime) (ZMod p) (NonAssocRing.toNonAssocSemiring.{0} (PadicInt p hp_prime) (Ring.toNonAssocRing.{0} (PadicInt p hp_prime) (NormedRing.toRing.{0} (PadicInt p hp_prime) (NormedCommRing.toNormedRing.{0} (PadicInt p hp_prime) (PadicInt.normedCommRing p hp_prime))))) (NonAssocRing.toNonAssocSemiring.{0} (ZMod p) (Ring.toNonAssocRing.{0} (ZMod p) (DivisionRing.toRing.{0} (ZMod p) (Field.toDivisionRing.{0} (ZMod p) (ZMod.field p hp_prime)))))
+but is expected to have type
+ forall {p : Nat} [hp_prime : Fact (Nat.Prime p)], RingHom.{0, 0} (PadicInt p hp_prime) (ZMod p) (Semiring.toNonAssocSemiring.{0} (PadicInt p hp_prime) (CommSemiring.toSemiring.{0} (PadicInt p hp_prime) (CommRing.toCommSemiring.{0} (PadicInt p hp_prime) (PadicInt.instCommRingPadicInt p hp_prime)))) (Semiring.toNonAssocSemiring.{0} (ZMod p) (DivisionSemiring.toSemiring.{0} (ZMod p) (Semifield.toDivisionSemiring.{0} (ZMod p) (Field.toSemifield.{0} (ZMod p) (ZMod.instFieldZMod p hp_prime)))))
+Case conversion may be inaccurate. Consider using '#align padic_int.to_zmod PadicInt.toZModₓ'. -/
/-- `to_zmod` is a ring hom from `ℤ_[p]` to `zmod p`,
with the equality `to_zmod x = (zmod_repr x : zmod p)`.
-/
-def toZmod : ℤ_[p] →+* ZMod p :=
- toZmodHom p zmodRepr
+def toZMod : ℤ_[p] →+* ZMod p :=
+ toZModHom p zmodRepr
(by
rw [← maximal_ideal_eq_span_p]
exact sub_zmod_repr_mem)
(by
rw [← maximal_ideal_eq_span_p]
exact zmod_congr_of_sub_mem_max_ideal)
-#align padic_int.to_zmod PadicInt.toZmod
-
+#align padic_int.to_zmod PadicInt.toZMod
+
+/- warning: padic_int.to_zmod_spec -> PadicInt.toZMod_spec is a dubious translation:
+lean 3 declaration is
+ forall {p : Nat} [hp_prime : Fact (Nat.Prime p)] (z : PadicInt p hp_prime), Membership.Mem.{0, 0} (PadicInt p hp_prime) (Ideal.{0} (PadicInt p hp_prime) (CommSemiring.toSemiring.{0} (PadicInt p hp_prime) (CommRing.toCommSemiring.{0} (PadicInt p hp_prime) (PadicInt.commRing p hp_prime)))) (SetLike.hasMem.{0, 0} (Ideal.{0} (PadicInt p hp_prime) (CommSemiring.toSemiring.{0} (PadicInt p hp_prime) (CommRing.toCommSemiring.{0} (PadicInt p hp_prime) (PadicInt.commRing p hp_prime)))) (PadicInt p hp_prime) (Submodule.setLike.{0, 0} (PadicInt p hp_prime) (PadicInt p hp_prime) (CommSemiring.toSemiring.{0} (PadicInt p hp_prime) (CommRing.toCommSemiring.{0} (PadicInt p hp_prime) (PadicInt.commRing p hp_prime))) (NonUnitalNonAssocSemiring.toAddCommMonoid.{0} (PadicInt p hp_prime) (NonAssocSemiring.toNonUnitalNonAssocSemiring.{0} (PadicInt p hp_prime) (Semiring.toNonAssocSemiring.{0} (PadicInt p hp_prime) (CommSemiring.toSemiring.{0} (PadicInt p hp_prime) (CommRing.toCommSemiring.{0} (PadicInt p hp_prime) (PadicInt.commRing p hp_prime)))))) (Semiring.toModule.{0} (PadicInt p hp_prime) (CommSemiring.toSemiring.{0} (PadicInt p hp_prime) (CommRing.toCommSemiring.{0} (PadicInt p hp_prime) (PadicInt.commRing p hp_prime)))))) (HSub.hSub.{0, 0, 0} (PadicInt p hp_prime) (PadicInt p hp_prime) (PadicInt p hp_prime) (instHSub.{0} (PadicInt p hp_prime) (PadicInt.hasSub p hp_prime)) z ((fun (a : Type) (b : Type) [self : HasLiftT.{1, 1} a b] => self.0) (ZMod p) (PadicInt p hp_prime) (HasLiftT.mk.{1, 1} (ZMod p) (PadicInt p hp_prime) (CoeTCₓ.coe.{1, 1} (ZMod p) (PadicInt p hp_prime) (ZMod.hasCoeT.{0} (PadicInt p hp_prime) (AddCommGroupWithOne.toAddGroupWithOne.{0} (PadicInt p hp_prime) (Ring.toAddCommGroupWithOne.{0} (PadicInt p hp_prime) (NormedRing.toRing.{0} (PadicInt p hp_prime) (NormedCommRing.toNormedRing.{0} (PadicInt p hp_prime) (PadicInt.normedCommRing p hp_prime))))) p))) (coeFn.{1, 1} (RingHom.{0, 0} (PadicInt p hp_prime) (ZMod p) (NonAssocRing.toNonAssocSemiring.{0} (PadicInt p hp_prime) (Ring.toNonAssocRing.{0} (PadicInt p hp_prime) (NormedRing.toRing.{0} (PadicInt p hp_prime) (NormedCommRing.toNormedRing.{0} (PadicInt p hp_prime) (PadicInt.normedCommRing p hp_prime))))) (NonAssocRing.toNonAssocSemiring.{0} (ZMod p) (Ring.toNonAssocRing.{0} (ZMod p) (DivisionRing.toRing.{0} (ZMod p) (Field.toDivisionRing.{0} (ZMod p) (ZMod.field p hp_prime)))))) (fun (_x : RingHom.{0, 0} (PadicInt p hp_prime) (ZMod p) (NonAssocRing.toNonAssocSemiring.{0} (PadicInt p hp_prime) (Ring.toNonAssocRing.{0} (PadicInt p hp_prime) (NormedRing.toRing.{0} (PadicInt p hp_prime) (NormedCommRing.toNormedRing.{0} (PadicInt p hp_prime) (PadicInt.normedCommRing p hp_prime))))) (NonAssocRing.toNonAssocSemiring.{0} (ZMod p) (Ring.toNonAssocRing.{0} (ZMod p) (DivisionRing.toRing.{0} (ZMod p) (Field.toDivisionRing.{0} (ZMod p) (ZMod.field p hp_prime)))))) => (PadicInt p hp_prime) -> (ZMod p)) (RingHom.hasCoeToFun.{0, 0} (PadicInt p hp_prime) (ZMod p) (NonAssocRing.toNonAssocSemiring.{0} (PadicInt p hp_prime) (Ring.toNonAssocRing.{0} (PadicInt p hp_prime) (NormedRing.toRing.{0} (PadicInt p hp_prime) (NormedCommRing.toNormedRing.{0} (PadicInt p hp_prime) (PadicInt.normedCommRing p hp_prime))))) (NonAssocRing.toNonAssocSemiring.{0} (ZMod p) (Ring.toNonAssocRing.{0} (ZMod p) (DivisionRing.toRing.{0} (ZMod p) (Field.toDivisionRing.{0} (ZMod p) (ZMod.field p hp_prime)))))) (PadicInt.toZMod p hp_prime) z))) (LocalRing.maximalIdeal.{0} (PadicInt p hp_prime) (CommRing.toCommSemiring.{0} (PadicInt p hp_prime) (PadicInt.commRing p hp_prime)) (PadicInt.localRing p hp_prime))
+but is expected to have type
+ forall {p : Nat} [hp_prime : Fact (Nat.Prime p)] (z : PadicInt p hp_prime), Membership.mem.{0, 0} (PadicInt p hp_prime) (Ideal.{0} (PadicInt p hp_prime) (CommSemiring.toSemiring.{0} (PadicInt p hp_prime) (CommRing.toCommSemiring.{0} (PadicInt p hp_prime) (PadicInt.instCommRingPadicInt p hp_prime)))) (SetLike.instMembership.{0, 0} (Ideal.{0} (PadicInt p hp_prime) (CommSemiring.toSemiring.{0} (PadicInt p hp_prime) (CommRing.toCommSemiring.{0} (PadicInt p hp_prime) (PadicInt.instCommRingPadicInt p hp_prime)))) (PadicInt p hp_prime) (Submodule.setLike.{0, 0} (PadicInt p hp_prime) (PadicInt p hp_prime) (CommSemiring.toSemiring.{0} (PadicInt p hp_prime) (CommRing.toCommSemiring.{0} (PadicInt p hp_prime) (PadicInt.instCommRingPadicInt p hp_prime))) (NonUnitalNonAssocSemiring.toAddCommMonoid.{0} (PadicInt p hp_prime) (NonAssocSemiring.toNonUnitalNonAssocSemiring.{0} (PadicInt p hp_prime) (Semiring.toNonAssocSemiring.{0} (PadicInt p hp_prime) (CommSemiring.toSemiring.{0} (PadicInt p hp_prime) (CommRing.toCommSemiring.{0} (PadicInt p hp_prime) (PadicInt.instCommRingPadicInt p hp_prime)))))) (Semiring.toModule.{0} (PadicInt p hp_prime) (CommSemiring.toSemiring.{0} (PadicInt p hp_prime) (CommRing.toCommSemiring.{0} (PadicInt p hp_prime) (PadicInt.instCommRingPadicInt p hp_prime)))))) (HSub.hSub.{0, 0, 0} (PadicInt p hp_prime) (PadicInt p hp_prime) (PadicInt p hp_prime) (instHSub.{0} (PadicInt p hp_prime) (PadicInt.instSubPadicInt p hp_prime)) z (ZMod.cast.{0} (PadicInt p hp_prime) (Ring.toAddGroupWithOne.{0} (PadicInt p hp_prime) (NormedRing.toRing.{0} (PadicInt p hp_prime) (NormedCommRing.toNormedRing.{0} (PadicInt p hp_prime) (PadicInt.instNormedCommRingPadicInt p hp_prime)))) p (FunLike.coe.{1, 1, 1} (RingHom.{0, 0} (PadicInt p hp_prime) (ZMod p) (Semiring.toNonAssocSemiring.{0} (PadicInt p hp_prime) (CommSemiring.toSemiring.{0} (PadicInt p hp_prime) (CommRing.toCommSemiring.{0} (PadicInt p hp_prime) (PadicInt.instCommRingPadicInt p hp_prime)))) (Semiring.toNonAssocSemiring.{0} (ZMod p) (DivisionSemiring.toSemiring.{0} (ZMod p) (Semifield.toDivisionSemiring.{0} (ZMod p) (Field.toSemifield.{0} (ZMod p) (ZMod.instFieldZMod p hp_prime)))))) (PadicInt p hp_prime) (fun (_x : PadicInt p hp_prime) => (fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2397 : PadicInt p hp_prime) => ZMod p) _x) (MulHomClass.toFunLike.{0, 0, 0} (RingHom.{0, 0} (PadicInt p hp_prime) (ZMod p) (Semiring.toNonAssocSemiring.{0} (PadicInt p hp_prime) (CommSemiring.toSemiring.{0} (PadicInt p hp_prime) (CommRing.toCommSemiring.{0} (PadicInt p hp_prime) (PadicInt.instCommRingPadicInt p hp_prime)))) (Semiring.toNonAssocSemiring.{0} (ZMod p) (DivisionSemiring.toSemiring.{0} (ZMod p) (Semifield.toDivisionSemiring.{0} (ZMod p) (Field.toSemifield.{0} (ZMod p) (ZMod.instFieldZMod p hp_prime)))))) (PadicInt p hp_prime) (ZMod p) (NonUnitalNonAssocSemiring.toMul.{0} (PadicInt p hp_prime) (NonAssocSemiring.toNonUnitalNonAssocSemiring.{0} (PadicInt p hp_prime) (Semiring.toNonAssocSemiring.{0} (PadicInt p hp_prime) (CommSemiring.toSemiring.{0} (PadicInt p hp_prime) (CommRing.toCommSemiring.{0} (PadicInt p hp_prime) (PadicInt.instCommRingPadicInt p hp_prime)))))) (NonUnitalNonAssocSemiring.toMul.{0} (ZMod p) (NonAssocSemiring.toNonUnitalNonAssocSemiring.{0} (ZMod p) (Semiring.toNonAssocSemiring.{0} (ZMod p) (DivisionSemiring.toSemiring.{0} (ZMod p) (Semifield.toDivisionSemiring.{0} (ZMod p) (Field.toSemifield.{0} (ZMod p) (ZMod.instFieldZMod p hp_prime))))))) (NonUnitalRingHomClass.toMulHomClass.{0, 0, 0} (RingHom.{0, 0} (PadicInt p hp_prime) (ZMod p) (Semiring.toNonAssocSemiring.{0} (PadicInt p hp_prime) (CommSemiring.toSemiring.{0} (PadicInt p hp_prime) (CommRing.toCommSemiring.{0} (PadicInt p hp_prime) (PadicInt.instCommRingPadicInt p hp_prime)))) (Semiring.toNonAssocSemiring.{0} (ZMod p) (DivisionSemiring.toSemiring.{0} (ZMod p) (Semifield.toDivisionSemiring.{0} (ZMod p) (Field.toSemifield.{0} (ZMod p) (ZMod.instFieldZMod p hp_prime)))))) (PadicInt p hp_prime) (ZMod p) (NonAssocSemiring.toNonUnitalNonAssocSemiring.{0} (PadicInt p hp_prime) (Semiring.toNonAssocSemiring.{0} (PadicInt p hp_prime) (CommSemiring.toSemiring.{0} (PadicInt p hp_prime) (CommRing.toCommSemiring.{0} (PadicInt p hp_prime) (PadicInt.instCommRingPadicInt p hp_prime))))) (NonAssocSemiring.toNonUnitalNonAssocSemiring.{0} (ZMod p) (Semiring.toNonAssocSemiring.{0} (ZMod p) (DivisionSemiring.toSemiring.{0} (ZMod p) (Semifield.toDivisionSemiring.{0} (ZMod p) (Field.toSemifield.{0} (ZMod p) (ZMod.instFieldZMod p hp_prime)))))) (RingHomClass.toNonUnitalRingHomClass.{0, 0, 0} (RingHom.{0, 0} (PadicInt p hp_prime) (ZMod p) (Semiring.toNonAssocSemiring.{0} (PadicInt p hp_prime) (CommSemiring.toSemiring.{0} (PadicInt p hp_prime) (CommRing.toCommSemiring.{0} (PadicInt p hp_prime) (PadicInt.instCommRingPadicInt p hp_prime)))) (Semiring.toNonAssocSemiring.{0} (ZMod p) (DivisionSemiring.toSemiring.{0} (ZMod p) (Semifield.toDivisionSemiring.{0} (ZMod p) (Field.toSemifield.{0} (ZMod p) (ZMod.instFieldZMod p hp_prime)))))) (PadicInt p hp_prime) (ZMod p) (Semiring.toNonAssocSemiring.{0} (PadicInt p hp_prime) (CommSemiring.toSemiring.{0} (PadicInt p hp_prime) (CommRing.toCommSemiring.{0} (PadicInt p hp_prime) (PadicInt.instCommRingPadicInt p hp_prime)))) (Semiring.toNonAssocSemiring.{0} (ZMod p) (DivisionSemiring.toSemiring.{0} (ZMod p) (Semifield.toDivisionSemiring.{0} (ZMod p) (Field.toSemifield.{0} (ZMod p) (ZMod.instFieldZMod p hp_prime))))) (RingHom.instRingHomClassRingHom.{0, 0} (PadicInt p hp_prime) (ZMod p) (Semiring.toNonAssocSemiring.{0} (PadicInt p hp_prime) (CommSemiring.toSemiring.{0} (PadicInt p hp_prime) (CommRing.toCommSemiring.{0} (PadicInt p hp_prime) (PadicInt.instCommRingPadicInt p hp_prime)))) (Semiring.toNonAssocSemiring.{0} (ZMod p) (DivisionSemiring.toSemiring.{0} (ZMod p) (Semifield.toDivisionSemiring.{0} (ZMod p) (Field.toSemifield.{0} (ZMod p) (ZMod.instFieldZMod p hp_prime))))))))) (PadicInt.toZMod p hp_prime) z))) (LocalRing.maximalIdeal.{0} (PadicInt p hp_prime) (CommRing.toCommSemiring.{0} (PadicInt p hp_prime) (PadicInt.instCommRingPadicInt p hp_prime)) (PadicInt.instLocalRingPadicIntToSemiringToCommSemiringInstCommRingPadicInt p hp_prime))
+Case conversion may be inaccurate. Consider using '#align padic_int.to_zmod_spec PadicInt.toZMod_specₓ'. -/
/-- `z - (to_zmod z : ℤ_[p])` is contained in the maximal ideal of `ℤ_[p]`, for every `z : ℤ_[p]`.
The coercion from `zmod p` to `ℤ_[p]` is `zmod.has_coe_t`,
@@ -287,7 +366,7 @@ to coerce to rings of arbitrary characteristic, instead of only rings of charact
This coercion is only a ring homomorphism if it coerces into a ring whose characteristic divides
`p`. While this is not the case here we can still make use of the coercion.
-/
-theorem toZmod_spec (z : ℤ_[p]) : z - (toZmod z : ℤ_[p]) ∈ maximalIdeal ℤ_[p] :=
+theorem toZMod_spec (z : ℤ_[p]) : z - (toZMod z : ℤ_[p]) ∈ maximalIdeal ℤ_[p] :=
by
convert sub_zmod_repr_mem z using 2
dsimp [to_zmod, to_zmod_hom]
@@ -296,9 +375,15 @@ theorem toZmod_spec (z : ℤ_[p]) : z - (toZmod z : ℤ_[p]) ∈ maximalIdeal
simp only [ZMod.val_nat_cast, add_zero, add_def, Nat.cast_inj, zero_add]
apply mod_eq_of_lt
simpa only [zero_add] using zmod_repr_lt_p z
-#align padic_int.to_zmod_spec PadicInt.toZmod_spec
-
-theorem ker_toZmod : (toZmod : ℤ_[p] →+* ZMod p).ker = maximalIdeal ℤ_[p] :=
+#align padic_int.to_zmod_spec PadicInt.toZMod_spec
+
+/- warning: padic_int.ker_to_zmod -> PadicInt.ker_toZMod is a dubious translation:
+lean 3 declaration is
+ forall {p : Nat} [hp_prime : Fact (Nat.Prime p)], Eq.{1} (Ideal.{0} (PadicInt p hp_prime) (Ring.toSemiring.{0} (PadicInt p hp_prime) (NormedRing.toRing.{0} (PadicInt p hp_prime) (NormedCommRing.toNormedRing.{0} (PadicInt p hp_prime) (PadicInt.normedCommRing p hp_prime))))) (RingHom.ker.{0, 0, 0} (PadicInt p hp_prime) (ZMod p) (RingHom.{0, 0} (PadicInt p hp_prime) (ZMod p) (NonAssocRing.toNonAssocSemiring.{0} (PadicInt p hp_prime) (Ring.toNonAssocRing.{0} (PadicInt p hp_prime) (NormedRing.toRing.{0} (PadicInt p hp_prime) (NormedCommRing.toNormedRing.{0} (PadicInt p hp_prime) (PadicInt.normedCommRing p hp_prime))))) (NonAssocRing.toNonAssocSemiring.{0} (ZMod p) (Ring.toNonAssocRing.{0} (ZMod p) (DivisionRing.toRing.{0} (ZMod p) (Field.toDivisionRing.{0} (ZMod p) (ZMod.field p hp_prime)))))) (Ring.toSemiring.{0} (PadicInt p hp_prime) (NormedRing.toRing.{0} (PadicInt p hp_prime) (NormedCommRing.toNormedRing.{0} (PadicInt p hp_prime) (PadicInt.normedCommRing p hp_prime)))) (Ring.toSemiring.{0} (ZMod p) (DivisionRing.toRing.{0} (ZMod p) (Field.toDivisionRing.{0} (ZMod p) (ZMod.field p hp_prime)))) (RingHom.ringHomClass.{0, 0} (PadicInt p hp_prime) (ZMod p) (NonAssocRing.toNonAssocSemiring.{0} (PadicInt p hp_prime) (Ring.toNonAssocRing.{0} (PadicInt p hp_prime) (NormedRing.toRing.{0} (PadicInt p hp_prime) (NormedCommRing.toNormedRing.{0} (PadicInt p hp_prime) (PadicInt.normedCommRing p hp_prime))))) (NonAssocRing.toNonAssocSemiring.{0} (ZMod p) (Ring.toNonAssocRing.{0} (ZMod p) (DivisionRing.toRing.{0} (ZMod p) (Field.toDivisionRing.{0} (ZMod p) (ZMod.field p hp_prime)))))) (PadicInt.toZMod p hp_prime)) (LocalRing.maximalIdeal.{0} (PadicInt p hp_prime) (CommRing.toCommSemiring.{0} (PadicInt p hp_prime) (PadicInt.commRing p hp_prime)) (PadicInt.localRing p hp_prime))
+but is expected to have type
+ forall {p : Nat} [hp_prime : Fact (Nat.Prime p)], Eq.{1} (Ideal.{0} (PadicInt p hp_prime) (CommSemiring.toSemiring.{0} (PadicInt p hp_prime) (CommRing.toCommSemiring.{0} (PadicInt p hp_prime) (PadicInt.instCommRingPadicInt p hp_prime)))) (RingHom.ker.{0, 0, 0} (PadicInt p hp_prime) (ZMod p) (RingHom.{0, 0} (PadicInt p hp_prime) (ZMod p) (Semiring.toNonAssocSemiring.{0} (PadicInt p hp_prime) (CommSemiring.toSemiring.{0} (PadicInt p hp_prime) (CommRing.toCommSemiring.{0} (PadicInt p hp_prime) (PadicInt.instCommRingPadicInt p hp_prime)))) (Semiring.toNonAssocSemiring.{0} (ZMod p) (DivisionSemiring.toSemiring.{0} (ZMod p) (Semifield.toDivisionSemiring.{0} (ZMod p) (Field.toSemifield.{0} (ZMod p) (ZMod.instFieldZMod p hp_prime)))))) (CommSemiring.toSemiring.{0} (PadicInt p hp_prime) (CommRing.toCommSemiring.{0} (PadicInt p hp_prime) (PadicInt.instCommRingPadicInt p hp_prime))) (DivisionSemiring.toSemiring.{0} (ZMod p) (Semifield.toDivisionSemiring.{0} (ZMod p) (Field.toSemifield.{0} (ZMod p) (ZMod.instFieldZMod p hp_prime)))) (RingHom.instRingHomClassRingHom.{0, 0} (PadicInt p hp_prime) (ZMod p) (Semiring.toNonAssocSemiring.{0} (PadicInt p hp_prime) (CommSemiring.toSemiring.{0} (PadicInt p hp_prime) (CommRing.toCommSemiring.{0} (PadicInt p hp_prime) (PadicInt.instCommRingPadicInt p hp_prime)))) (Semiring.toNonAssocSemiring.{0} (ZMod p) (DivisionSemiring.toSemiring.{0} (ZMod p) (Semifield.toDivisionSemiring.{0} (ZMod p) (Field.toSemifield.{0} (ZMod p) (ZMod.instFieldZMod p hp_prime)))))) (PadicInt.toZMod p hp_prime)) (LocalRing.maximalIdeal.{0} (PadicInt p hp_prime) (CommRing.toCommSemiring.{0} (PadicInt p hp_prime) (PadicInt.instCommRingPadicInt p hp_prime)) (PadicInt.instLocalRingPadicIntToSemiringToCommSemiringInstCommRingPadicInt p hp_prime))
+Case conversion may be inaccurate. Consider using '#align padic_int.ker_to_zmod PadicInt.ker_toZModₓ'. -/
+theorem ker_toZMod : (toZMod : ℤ_[p] →+* ZMod p).ker = maximalIdeal ℤ_[p] :=
by
ext x
rw [RingHom.mem_ker]
@@ -311,8 +396,9 @@ theorem ker_toZmod : (toZmod : ℤ_[p] →+* ZMod p).ker = maximalIdeal ℤ_[p]
convert zmod_congr_of_sub_mem_max_ideal x _ 0 _ h
norm_cast
apply sub_zmod_repr_mem
-#align padic_int.ker_to_zmod PadicInt.ker_toZmod
+#align padic_int.ker_to_zmod PadicInt.ker_toZMod
+#print PadicInt.appr /-
/-- `appr n x` gives a value `v : ℕ` such that `x` and `↑v : ℤ_p` are congruent mod `p^n`.
See `appr_spec`. -/
noncomputable irreducible_def appr : ℤ_[p] → ℕ → ℕ
@@ -322,9 +408,11 @@ noncomputable irreducible_def appr : ℤ_[p] → ℕ → ℕ
if hy : y = 0 then appr x n
else
let u := unitCoeff hy
- appr x n + p ^ n * (toZmod ((u : ℤ_[p]) * p ^ (y.Valuation - n).natAbs)).val
+ appr x n + p ^ n * (toZMod ((u : ℤ_[p]) * p ^ (y.Valuation - n).natAbs)).val
#align padic_int.appr PadicInt.appr
+-/
+#print PadicInt.appr_lt /-
theorem appr_lt (x : ℤ_[p]) (n : ℕ) : x.appr n < p ^ n :=
by
induction' n with n ih generalizing x
@@ -344,7 +432,9 @@ theorem appr_lt (x : ℤ_[p]) (n : ℕ) : x.appr n < p ^ n :=
· rw [mul_tsub, mul_one, ← pow_succ']
apply add_tsub_cancel_of_le (le_of_lt hp)
#align padic_int.appr_lt PadicInt.appr_lt
+-/
+#print PadicInt.appr_mono /-
theorem appr_mono (x : ℤ_[p]) : Monotone x.appr :=
by
apply monotone_nat_of_le_succ
@@ -353,7 +443,9 @@ theorem appr_mono (x : ℤ_[p]) : Monotone x.appr :=
split_ifs; · rfl
apply Nat.le_add_right
#align padic_int.appr_mono PadicInt.appr_mono
+-/
+#print PadicInt.dvd_appr_sub_appr /-
theorem dvd_appr_sub_appr (x : ℤ_[p]) (m n : ℕ) (h : m ≤ n) : p ^ m ∣ x.appr n - x.appr m :=
by
obtain ⟨k, rfl⟩ := Nat.exists_eq_add_of_le h; clear h
@@ -368,7 +460,14 @@ theorem dvd_appr_sub_appr (x : ℤ_[p]) (m n : ℕ) (h : m ≤ n) : p ^ m ∣ x.
apply dvd_mul_of_dvd_left
apply pow_dvd_pow _ (Nat.le_add_right m k)
#align padic_int.dvd_appr_sub_appr PadicInt.dvd_appr_sub_appr
+-/
+/- warning: padic_int.appr_spec -> PadicInt.appr_spec is a dubious translation:
+lean 3 declaration is
+ forall {p : Nat} [hp_prime : Fact (Nat.Prime p)] (n : Nat) (x : PadicInt p hp_prime), Membership.Mem.{0, 0} (PadicInt p hp_prime) (Ideal.{0} (PadicInt p hp_prime) (Ring.toSemiring.{0} (PadicInt p hp_prime) (NormedRing.toRing.{0} (PadicInt p hp_prime) (NormedCommRing.toNormedRing.{0} (PadicInt p hp_prime) (PadicInt.normedCommRing p hp_prime))))) (SetLike.hasMem.{0, 0} (Ideal.{0} (PadicInt p hp_prime) (Ring.toSemiring.{0} (PadicInt p hp_prime) (NormedRing.toRing.{0} (PadicInt p hp_prime) (NormedCommRing.toNormedRing.{0} (PadicInt p hp_prime) (PadicInt.normedCommRing p hp_prime))))) (PadicInt p hp_prime) (Submodule.setLike.{0, 0} (PadicInt p hp_prime) (PadicInt p hp_prime) (Ring.toSemiring.{0} (PadicInt p hp_prime) (NormedRing.toRing.{0} (PadicInt p hp_prime) (NormedCommRing.toNormedRing.{0} (PadicInt p hp_prime) (PadicInt.normedCommRing p hp_prime)))) (NonUnitalNonAssocSemiring.toAddCommMonoid.{0} (PadicInt p hp_prime) (NonAssocSemiring.toNonUnitalNonAssocSemiring.{0} (PadicInt p hp_prime) (Semiring.toNonAssocSemiring.{0} (PadicInt p hp_prime) (Ring.toSemiring.{0} (PadicInt p hp_prime) (NormedRing.toRing.{0} (PadicInt p hp_prime) (NormedCommRing.toNormedRing.{0} (PadicInt p hp_prime) (PadicInt.normedCommRing p hp_prime))))))) (Semiring.toModule.{0} (PadicInt p hp_prime) (Ring.toSemiring.{0} (PadicInt p hp_prime) (NormedRing.toRing.{0} (PadicInt p hp_prime) (NormedCommRing.toNormedRing.{0} (PadicInt p hp_prime) (PadicInt.normedCommRing p hp_prime))))))) (HSub.hSub.{0, 0, 0} (PadicInt p hp_prime) (PadicInt p hp_prime) (PadicInt p hp_prime) (instHSub.{0} (PadicInt p hp_prime) (PadicInt.hasSub p hp_prime)) x ((fun (a : Type) (b : Type) [self : HasLiftT.{1, 1} a b] => self.0) Nat (PadicInt p hp_prime) (HasLiftT.mk.{1, 1} Nat (PadicInt p hp_prime) (CoeTCₓ.coe.{1, 1} Nat (PadicInt p hp_prime) (Nat.castCoe.{0} (PadicInt p hp_prime) (AddMonoidWithOne.toNatCast.{0} (PadicInt p hp_prime) (AddGroupWithOne.toAddMonoidWithOne.{0} (PadicInt p hp_prime) (AddCommGroupWithOne.toAddGroupWithOne.{0} (PadicInt p hp_prime) (Ring.toAddCommGroupWithOne.{0} (PadicInt p hp_prime) (NormedRing.toRing.{0} (PadicInt p hp_prime) (NormedCommRing.toNormedRing.{0} (PadicInt p hp_prime) (PadicInt.normedCommRing p hp_prime)))))))))) (PadicInt.appr p hp_prime x n))) (Ideal.span.{0} (PadicInt p hp_prime) (Ring.toSemiring.{0} (PadicInt p hp_prime) (NormedRing.toRing.{0} (PadicInt p hp_prime) (NormedCommRing.toNormedRing.{0} (PadicInt p hp_prime) (PadicInt.normedCommRing p hp_prime)))) (Singleton.singleton.{0, 0} (PadicInt p hp_prime) (Set.{0} (PadicInt p hp_prime)) (Set.hasSingleton.{0} (PadicInt p hp_prime)) (HPow.hPow.{0, 0, 0} (PadicInt p hp_prime) Nat (PadicInt p hp_prime) (instHPow.{0, 0} (PadicInt p hp_prime) Nat (Monoid.Pow.{0} (PadicInt p hp_prime) (Ring.toMonoid.{0} (PadicInt p hp_prime) (NormedRing.toRing.{0} (PadicInt p hp_prime) (NormedCommRing.toNormedRing.{0} (PadicInt p hp_prime) (PadicInt.normedCommRing p hp_prime)))))) ((fun (a : Type) (b : Type) [self : HasLiftT.{1, 1} a b] => self.0) Nat (PadicInt p hp_prime) (HasLiftT.mk.{1, 1} Nat (PadicInt p hp_prime) (CoeTCₓ.coe.{1, 1} Nat (PadicInt p hp_prime) (Nat.castCoe.{0} (PadicInt p hp_prime) (AddMonoidWithOne.toNatCast.{0} (PadicInt p hp_prime) (AddGroupWithOne.toAddMonoidWithOne.{0} (PadicInt p hp_prime) (AddCommGroupWithOne.toAddGroupWithOne.{0} (PadicInt p hp_prime) (Ring.toAddCommGroupWithOne.{0} (PadicInt p hp_prime) (NormedRing.toRing.{0} (PadicInt p hp_prime) (NormedCommRing.toNormedRing.{0} (PadicInt p hp_prime) (PadicInt.normedCommRing p hp_prime)))))))))) p) n)))
+but is expected to have type
+ forall {p : Nat} [hp_prime : Fact (Nat.Prime p)] (n : Nat) (x : PadicInt p hp_prime), Membership.mem.{0, 0} (PadicInt p hp_prime) (Ideal.{0} (PadicInt p hp_prime) (CommSemiring.toSemiring.{0} (PadicInt p hp_prime) (CommRing.toCommSemiring.{0} (PadicInt p hp_prime) (PadicInt.instCommRingPadicInt p hp_prime)))) (SetLike.instMembership.{0, 0} (Ideal.{0} (PadicInt p hp_prime) (CommSemiring.toSemiring.{0} (PadicInt p hp_prime) (CommRing.toCommSemiring.{0} (PadicInt p hp_prime) (PadicInt.instCommRingPadicInt p hp_prime)))) (PadicInt p hp_prime) (Submodule.setLike.{0, 0} (PadicInt p hp_prime) (PadicInt p hp_prime) (CommSemiring.toSemiring.{0} (PadicInt p hp_prime) (CommRing.toCommSemiring.{0} (PadicInt p hp_prime) (PadicInt.instCommRingPadicInt p hp_prime))) (NonUnitalNonAssocSemiring.toAddCommMonoid.{0} (PadicInt p hp_prime) (NonAssocSemiring.toNonUnitalNonAssocSemiring.{0} (PadicInt p hp_prime) (Semiring.toNonAssocSemiring.{0} (PadicInt p hp_prime) (CommSemiring.toSemiring.{0} (PadicInt p hp_prime) (CommRing.toCommSemiring.{0} (PadicInt p hp_prime) (PadicInt.instCommRingPadicInt p hp_prime)))))) (Semiring.toModule.{0} (PadicInt p hp_prime) (CommSemiring.toSemiring.{0} (PadicInt p hp_prime) (CommRing.toCommSemiring.{0} (PadicInt p hp_prime) (PadicInt.instCommRingPadicInt p hp_prime)))))) (HSub.hSub.{0, 0, 0} (PadicInt p hp_prime) (PadicInt p hp_prime) (PadicInt p hp_prime) (instHSub.{0} (PadicInt p hp_prime) (PadicInt.instSubPadicInt p hp_prime)) x (Nat.cast.{0} (PadicInt p hp_prime) (Semiring.toNatCast.{0} (PadicInt p hp_prime) (CommSemiring.toSemiring.{0} (PadicInt p hp_prime) (CommRing.toCommSemiring.{0} (PadicInt p hp_prime) (PadicInt.instCommRingPadicInt p hp_prime)))) (PadicInt.appr p hp_prime x n))) (Ideal.span.{0} (PadicInt p hp_prime) (CommSemiring.toSemiring.{0} (PadicInt p hp_prime) (CommRing.toCommSemiring.{0} (PadicInt p hp_prime) (PadicInt.instCommRingPadicInt p hp_prime))) (Singleton.singleton.{0, 0} (PadicInt p hp_prime) (Set.{0} (PadicInt p hp_prime)) (Set.instSingletonSet.{0} (PadicInt p hp_prime)) (HPow.hPow.{0, 0, 0} (PadicInt p hp_prime) Nat (PadicInt p hp_prime) (instHPow.{0, 0} (PadicInt p hp_prime) Nat (Monoid.Pow.{0} (PadicInt p hp_prime) (MonoidWithZero.toMonoid.{0} (PadicInt p hp_prime) (Semiring.toMonoidWithZero.{0} (PadicInt p hp_prime) (CommSemiring.toSemiring.{0} (PadicInt p hp_prime) (CommRing.toCommSemiring.{0} (PadicInt p hp_prime) (PadicInt.instCommRingPadicInt p hp_prime))))))) (Nat.cast.{0} (PadicInt p hp_prime) (Semiring.toNatCast.{0} (PadicInt p hp_prime) (CommSemiring.toSemiring.{0} (PadicInt p hp_prime) (CommRing.toCommSemiring.{0} (PadicInt p hp_prime) (PadicInt.instCommRingPadicInt p hp_prime)))) p) n)))
+Case conversion may be inaccurate. Consider using '#align padic_int.appr_spec PadicInt.appr_specₓ'. -/
theorem appr_spec (n : ℕ) : ∀ x : ℤ_[p], x - appr x n ∈ (Ideal.span {p ^ n} : Ideal ℤ_[p]) :=
by
simp only [Ideal.mem_span_singleton]
@@ -413,9 +512,15 @@ theorem appr_spec (n : ℕ) : ∀ x : ℤ_[p], x - appr x n ∈ (Ideal.span {p ^
exact (dvd_pow_self (p : ℤ_[p]) hc0.ne').mul_left _
#align padic_int.appr_spec PadicInt.appr_spec
+/- warning: padic_int.to_zmod_pow -> PadicInt.toZModPow is a dubious translation:
+lean 3 declaration is
+ forall {p : Nat} [hp_prime : Fact (Nat.Prime p)] (n : Nat), RingHom.{0, 0} (PadicInt p hp_prime) (ZMod (HPow.hPow.{0, 0, 0} Nat Nat Nat (instHPow.{0, 0} Nat Nat (Monoid.Pow.{0} Nat Nat.monoid)) p n)) (NonAssocRing.toNonAssocSemiring.{0} (PadicInt p hp_prime) (Ring.toNonAssocRing.{0} (PadicInt p hp_prime) (NormedRing.toRing.{0} (PadicInt p hp_prime) (NormedCommRing.toNormedRing.{0} (PadicInt p hp_prime) (PadicInt.normedCommRing p hp_prime))))) (NonAssocRing.toNonAssocSemiring.{0} (ZMod (HPow.hPow.{0, 0, 0} Nat Nat Nat (instHPow.{0, 0} Nat Nat (Monoid.Pow.{0} Nat Nat.monoid)) p n)) (Ring.toNonAssocRing.{0} (ZMod (HPow.hPow.{0, 0, 0} Nat Nat Nat (instHPow.{0, 0} Nat Nat (Monoid.Pow.{0} Nat Nat.monoid)) p n)) (CommRing.toRing.{0} (ZMod (HPow.hPow.{0, 0, 0} Nat Nat Nat (instHPow.{0, 0} Nat Nat (Monoid.Pow.{0} Nat Nat.monoid)) p n)) (ZMod.commRing (HPow.hPow.{0, 0, 0} Nat Nat Nat (instHPow.{0, 0} Nat Nat (Monoid.Pow.{0} Nat Nat.monoid)) p n)))))
+but is expected to have type
+ forall {p : Nat} [hp_prime : Fact (Nat.Prime p)] (n : Nat), RingHom.{0, 0} (PadicInt p hp_prime) (ZMod (HPow.hPow.{0, 0, 0} Nat Nat Nat (instHPow.{0, 0} Nat Nat instPowNat) p n)) (Semiring.toNonAssocSemiring.{0} (PadicInt p hp_prime) (CommSemiring.toSemiring.{0} (PadicInt p hp_prime) (CommRing.toCommSemiring.{0} (PadicInt p hp_prime) (PadicInt.instCommRingPadicInt p hp_prime)))) (Semiring.toNonAssocSemiring.{0} (ZMod (HPow.hPow.{0, 0, 0} Nat Nat Nat (instHPow.{0, 0} Nat Nat instPowNat) p n)) (CommSemiring.toSemiring.{0} (ZMod (HPow.hPow.{0, 0, 0} Nat Nat Nat (instHPow.{0, 0} Nat Nat instPowNat) p n)) (CommRing.toCommSemiring.{0} (ZMod (HPow.hPow.{0, 0, 0} Nat Nat Nat (instHPow.{0, 0} Nat Nat instPowNat) p n)) (ZMod.commRing (HPow.hPow.{0, 0, 0} Nat Nat Nat (instHPow.{0, 0} Nat Nat instPowNat) p n)))))
+Case conversion may be inaccurate. Consider using '#align padic_int.to_zmod_pow PadicInt.toZModPowₓ'. -/
/-- A ring hom from `ℤ_[p]` to `zmod (p^n)`, with underlying function `padic_int.appr n`. -/
-def toZmodPow (n : ℕ) : ℤ_[p] →+* ZMod (p ^ n) :=
- toZmodHom (p ^ n) (fun x => appr x n)
+def toZModPow (n : ℕ) : ℤ_[p] →+* ZMod (p ^ n) :=
+ toZModHom (p ^ n) (fun x => appr x n)
(by
intros
convert appr_spec n _ using 1
@@ -425,9 +530,15 @@ def toZmodPow (n : ℕ) : ℤ_[p] →+* ZMod (p ^ n) :=
apply zmod_congr_of_sub_mem_span n x a b
· simpa using ha
· simpa using hb)
-#align padic_int.to_zmod_pow PadicInt.toZmodPow
-
-theorem ker_toZmodPow (n : ℕ) : (toZmodPow n : ℤ_[p] →+* ZMod (p ^ n)).ker = Ideal.span {p ^ n} :=
+#align padic_int.to_zmod_pow PadicInt.toZModPow
+
+/- warning: padic_int.ker_to_zmod_pow -> PadicInt.ker_toZModPow is a dubious translation:
+lean 3 declaration is
+ forall {p : Nat} [hp_prime : Fact (Nat.Prime p)] (n : Nat), Eq.{1} (Ideal.{0} (PadicInt p hp_prime) (Ring.toSemiring.{0} (PadicInt p hp_prime) (NormedRing.toRing.{0} (PadicInt p hp_prime) (NormedCommRing.toNormedRing.{0} (PadicInt p hp_prime) (PadicInt.normedCommRing p hp_prime))))) (RingHom.ker.{0, 0, 0} (PadicInt p hp_prime) (ZMod (HPow.hPow.{0, 0, 0} Nat Nat Nat (instHPow.{0, 0} Nat Nat (Monoid.Pow.{0} Nat Nat.monoid)) p n)) (RingHom.{0, 0} (PadicInt p hp_prime) (ZMod (HPow.hPow.{0, 0, 0} Nat Nat Nat (instHPow.{0, 0} Nat Nat (Monoid.Pow.{0} Nat Nat.monoid)) p n)) (NonAssocRing.toNonAssocSemiring.{0} (PadicInt p hp_prime) (Ring.toNonAssocRing.{0} (PadicInt p hp_prime) (NormedRing.toRing.{0} (PadicInt p hp_prime) (NormedCommRing.toNormedRing.{0} (PadicInt p hp_prime) (PadicInt.normedCommRing p hp_prime))))) (NonAssocRing.toNonAssocSemiring.{0} (ZMod (HPow.hPow.{0, 0, 0} Nat Nat Nat (instHPow.{0, 0} Nat Nat (Monoid.Pow.{0} Nat Nat.monoid)) p n)) (Ring.toNonAssocRing.{0} (ZMod (HPow.hPow.{0, 0, 0} Nat Nat Nat (instHPow.{0, 0} Nat Nat (Monoid.Pow.{0} Nat Nat.monoid)) p n)) (CommRing.toRing.{0} (ZMod (HPow.hPow.{0, 0, 0} Nat Nat Nat (instHPow.{0, 0} Nat Nat (Monoid.Pow.{0} Nat Nat.monoid)) p n)) (ZMod.commRing (HPow.hPow.{0, 0, 0} Nat Nat Nat (instHPow.{0, 0} Nat Nat (Monoid.Pow.{0} Nat Nat.monoid)) p n)))))) (Ring.toSemiring.{0} (PadicInt p hp_prime) (NormedRing.toRing.{0} (PadicInt p hp_prime) (NormedCommRing.toNormedRing.{0} (PadicInt p hp_prime) (PadicInt.normedCommRing p hp_prime)))) (Ring.toSemiring.{0} (ZMod (HPow.hPow.{0, 0, 0} Nat Nat Nat (instHPow.{0, 0} Nat Nat (Monoid.Pow.{0} Nat Nat.monoid)) p n)) (CommRing.toRing.{0} (ZMod (HPow.hPow.{0, 0, 0} Nat Nat Nat (instHPow.{0, 0} Nat Nat (Monoid.Pow.{0} Nat Nat.monoid)) p n)) (ZMod.commRing (HPow.hPow.{0, 0, 0} Nat Nat Nat (instHPow.{0, 0} Nat Nat (Monoid.Pow.{0} Nat Nat.monoid)) p n)))) (RingHom.ringHomClass.{0, 0} (PadicInt p hp_prime) (ZMod (HPow.hPow.{0, 0, 0} Nat Nat Nat (instHPow.{0, 0} Nat Nat (Monoid.Pow.{0} Nat Nat.monoid)) p n)) (NonAssocRing.toNonAssocSemiring.{0} (PadicInt p hp_prime) (Ring.toNonAssocRing.{0} (PadicInt p hp_prime) (NormedRing.toRing.{0} (PadicInt p hp_prime) (NormedCommRing.toNormedRing.{0} (PadicInt p hp_prime) (PadicInt.normedCommRing p hp_prime))))) (NonAssocRing.toNonAssocSemiring.{0} (ZMod (HPow.hPow.{0, 0, 0} Nat Nat Nat (instHPow.{0, 0} Nat Nat (Monoid.Pow.{0} Nat Nat.monoid)) p n)) (Ring.toNonAssocRing.{0} (ZMod (HPow.hPow.{0, 0, 0} Nat Nat Nat (instHPow.{0, 0} Nat Nat (Monoid.Pow.{0} Nat Nat.monoid)) p n)) (CommRing.toRing.{0} (ZMod (HPow.hPow.{0, 0, 0} Nat Nat Nat (instHPow.{0, 0} Nat Nat (Monoid.Pow.{0} Nat Nat.monoid)) p n)) (ZMod.commRing (HPow.hPow.{0, 0, 0} Nat Nat Nat (instHPow.{0, 0} Nat Nat (Monoid.Pow.{0} Nat Nat.monoid)) p n)))))) (PadicInt.toZModPow p hp_prime n)) (Ideal.span.{0} (PadicInt p hp_prime) (Ring.toSemiring.{0} (PadicInt p hp_prime) (NormedRing.toRing.{0} (PadicInt p hp_prime) (NormedCommRing.toNormedRing.{0} (PadicInt p hp_prime) (PadicInt.normedCommRing p hp_prime)))) (Singleton.singleton.{0, 0} (PadicInt p hp_prime) (Set.{0} (PadicInt p hp_prime)) (Set.hasSingleton.{0} (PadicInt p hp_prime)) (HPow.hPow.{0, 0, 0} (PadicInt p hp_prime) Nat (PadicInt p hp_prime) (instHPow.{0, 0} (PadicInt p hp_prime) Nat (Monoid.Pow.{0} (PadicInt p hp_prime) (Ring.toMonoid.{0} (PadicInt p hp_prime) (NormedRing.toRing.{0} (PadicInt p hp_prime) (NormedCommRing.toNormedRing.{0} (PadicInt p hp_prime) (PadicInt.normedCommRing p hp_prime)))))) ((fun (a : Type) (b : Type) [self : HasLiftT.{1, 1} a b] => self.0) Nat (PadicInt p hp_prime) (HasLiftT.mk.{1, 1} Nat (PadicInt p hp_prime) (CoeTCₓ.coe.{1, 1} Nat (PadicInt p hp_prime) (Nat.castCoe.{0} (PadicInt p hp_prime) (AddMonoidWithOne.toNatCast.{0} (PadicInt p hp_prime) (AddGroupWithOne.toAddMonoidWithOne.{0} (PadicInt p hp_prime) (AddCommGroupWithOne.toAddGroupWithOne.{0} (PadicInt p hp_prime) (Ring.toAddCommGroupWithOne.{0} (PadicInt p hp_prime) (NormedRing.toRing.{0} (PadicInt p hp_prime) (NormedCommRing.toNormedRing.{0} (PadicInt p hp_prime) (PadicInt.normedCommRing p hp_prime)))))))))) p) n)))
+but is expected to have type
+ forall {p : Nat} [hp_prime : Fact (Nat.Prime p)] (n : Nat), Eq.{1} (Ideal.{0} (PadicInt p hp_prime) (CommSemiring.toSemiring.{0} (PadicInt p hp_prime) (CommRing.toCommSemiring.{0} (PadicInt p hp_prime) (PadicInt.instCommRingPadicInt p hp_prime)))) (RingHom.ker.{0, 0, 0} (PadicInt p hp_prime) (ZMod (HPow.hPow.{0, 0, 0} Nat Nat Nat (instHPow.{0, 0} Nat Nat instPowNat) p n)) (RingHom.{0, 0} (PadicInt p hp_prime) (ZMod (HPow.hPow.{0, 0, 0} Nat Nat Nat (instHPow.{0, 0} Nat Nat instPowNat) p n)) (Semiring.toNonAssocSemiring.{0} (PadicInt p hp_prime) (CommSemiring.toSemiring.{0} (PadicInt p hp_prime) (CommRing.toCommSemiring.{0} (PadicInt p hp_prime) (PadicInt.instCommRingPadicInt p hp_prime)))) (Semiring.toNonAssocSemiring.{0} (ZMod (HPow.hPow.{0, 0, 0} Nat Nat Nat (instHPow.{0, 0} Nat Nat instPowNat) p n)) (CommSemiring.toSemiring.{0} (ZMod (HPow.hPow.{0, 0, 0} Nat Nat Nat (instHPow.{0, 0} Nat Nat instPowNat) p n)) (CommRing.toCommSemiring.{0} (ZMod (HPow.hPow.{0, 0, 0} Nat Nat Nat (instHPow.{0, 0} Nat Nat instPowNat) p n)) (ZMod.commRing (HPow.hPow.{0, 0, 0} Nat Nat Nat (instHPow.{0, 0} Nat Nat instPowNat) p n)))))) (CommSemiring.toSemiring.{0} (PadicInt p hp_prime) (CommRing.toCommSemiring.{0} (PadicInt p hp_prime) (PadicInt.instCommRingPadicInt p hp_prime))) (CommSemiring.toSemiring.{0} (ZMod (HPow.hPow.{0, 0, 0} Nat Nat Nat (instHPow.{0, 0} Nat Nat instPowNat) p n)) (CommRing.toCommSemiring.{0} (ZMod (HPow.hPow.{0, 0, 0} Nat Nat Nat (instHPow.{0, 0} Nat Nat instPowNat) p n)) (ZMod.commRing (HPow.hPow.{0, 0, 0} Nat Nat Nat (instHPow.{0, 0} Nat Nat instPowNat) p n)))) (RingHom.instRingHomClassRingHom.{0, 0} (PadicInt p hp_prime) (ZMod (HPow.hPow.{0, 0, 0} Nat Nat Nat (instHPow.{0, 0} Nat Nat instPowNat) p n)) (Semiring.toNonAssocSemiring.{0} (PadicInt p hp_prime) (CommSemiring.toSemiring.{0} (PadicInt p hp_prime) (CommRing.toCommSemiring.{0} (PadicInt p hp_prime) (PadicInt.instCommRingPadicInt p hp_prime)))) (Semiring.toNonAssocSemiring.{0} (ZMod (HPow.hPow.{0, 0, 0} Nat Nat Nat (instHPow.{0, 0} Nat Nat instPowNat) p n)) (CommSemiring.toSemiring.{0} (ZMod (HPow.hPow.{0, 0, 0} Nat Nat Nat (instHPow.{0, 0} Nat Nat instPowNat) p n)) (CommRing.toCommSemiring.{0} (ZMod (HPow.hPow.{0, 0, 0} Nat Nat Nat (instHPow.{0, 0} Nat Nat instPowNat) p n)) (ZMod.commRing (HPow.hPow.{0, 0, 0} Nat Nat Nat (instHPow.{0, 0} Nat Nat instPowNat) p n)))))) (PadicInt.toZModPow p hp_prime n)) (Ideal.span.{0} (PadicInt p hp_prime) (CommSemiring.toSemiring.{0} (PadicInt p hp_prime) (CommRing.toCommSemiring.{0} (PadicInt p hp_prime) (PadicInt.instCommRingPadicInt p hp_prime))) (Singleton.singleton.{0, 0} (PadicInt p hp_prime) (Set.{0} (PadicInt p hp_prime)) (Set.instSingletonSet.{0} (PadicInt p hp_prime)) (HPow.hPow.{0, 0, 0} (PadicInt p hp_prime) Nat (PadicInt p hp_prime) (instHPow.{0, 0} (PadicInt p hp_prime) Nat (Monoid.Pow.{0} (PadicInt p hp_prime) (MonoidWithZero.toMonoid.{0} (PadicInt p hp_prime) (Semiring.toMonoidWithZero.{0} (PadicInt p hp_prime) (CommSemiring.toSemiring.{0} (PadicInt p hp_prime) (CommRing.toCommSemiring.{0} (PadicInt p hp_prime) (PadicInt.instCommRingPadicInt p hp_prime))))))) (Nat.cast.{0} (PadicInt p hp_prime) (Semiring.toNatCast.{0} (PadicInt p hp_prime) (CommSemiring.toSemiring.{0} (PadicInt p hp_prime) (CommRing.toCommSemiring.{0} (PadicInt p hp_prime) (PadicInt.instCommRingPadicInt p hp_prime)))) p) n)))
+Case conversion may be inaccurate. Consider using '#align padic_int.ker_to_zmod_pow PadicInt.ker_toZModPowₓ'. -/
+theorem ker_toZModPow (n : ℕ) : (toZModPow n : ℤ_[p] →+* ZMod (p ^ n)).ker = Ideal.span {p ^ n} :=
by
ext x
rw [RingHom.mem_ker]
@@ -444,11 +555,17 @@ theorem ker_toZmodPow (n : ℕ) : (toZmodPow n : ℤ_[p] →+* ZMod (p ^ n)).ker
dsimp [to_zmod_pow, to_zmod_hom]
rw [zmod_congr_of_sub_mem_span n x _ 0 _ h, cast_zero]
apply appr_spec
-#align padic_int.ker_to_zmod_pow PadicInt.ker_toZmodPow
-
+#align padic_int.ker_to_zmod_pow PadicInt.ker_toZModPow
+
+/- warning: padic_int.zmod_cast_comp_to_zmod_pow -> PadicInt.zmod_cast_comp_toZModPow is a dubious translation:
+lean 3 declaration is
+ forall {p : Nat} [hp_prime : Fact (Nat.Prime p)] (m : Nat) (n : Nat) (h : LE.le.{0} Nat Nat.hasLe m n), Eq.{1} (RingHom.{0, 0} (PadicInt p hp_prime) (ZMod (HPow.hPow.{0, 0, 0} Nat Nat Nat (instHPow.{0, 0} Nat Nat (Monoid.Pow.{0} Nat Nat.monoid)) p m)) (NonAssocRing.toNonAssocSemiring.{0} (PadicInt p hp_prime) (Ring.toNonAssocRing.{0} (PadicInt p hp_prime) (NormedRing.toRing.{0} (PadicInt p hp_prime) (NormedCommRing.toNormedRing.{0} (PadicInt p hp_prime) (PadicInt.normedCommRing p hp_prime))))) (NonAssocRing.toNonAssocSemiring.{0} (ZMod (HPow.hPow.{0, 0, 0} Nat Nat Nat (instHPow.{0, 0} Nat Nat (Monoid.Pow.{0} Nat Nat.monoid)) p m)) (Ring.toNonAssocRing.{0} (ZMod (HPow.hPow.{0, 0, 0} Nat Nat Nat (instHPow.{0, 0} Nat Nat (Monoid.Pow.{0} Nat Nat.monoid)) p m)) (CommRing.toRing.{0} (ZMod (HPow.hPow.{0, 0, 0} Nat Nat Nat (instHPow.{0, 0} Nat Nat (Monoid.Pow.{0} Nat Nat.monoid)) p m)) (ZMod.commRing (HPow.hPow.{0, 0, 0} Nat Nat Nat (instHPow.{0, 0} Nat Nat (Monoid.Pow.{0} Nat Nat.monoid)) p m)))))) (RingHom.comp.{0, 0, 0} (PadicInt p hp_prime) (ZMod (HPow.hPow.{0, 0, 0} Nat Nat Nat (instHPow.{0, 0} Nat Nat (Monoid.Pow.{0} Nat Nat.monoid)) p n)) (ZMod (HPow.hPow.{0, 0, 0} Nat Nat Nat (instHPow.{0, 0} Nat Nat (Monoid.Pow.{0} Nat Nat.monoid)) p m)) (NonAssocRing.toNonAssocSemiring.{0} (PadicInt p hp_prime) (Ring.toNonAssocRing.{0} (PadicInt p hp_prime) (NormedRing.toRing.{0} (PadicInt p hp_prime) (NormedCommRing.toNormedRing.{0} (PadicInt p hp_prime) (PadicInt.normedCommRing p hp_prime))))) (NonAssocRing.toNonAssocSemiring.{0} (ZMod (HPow.hPow.{0, 0, 0} Nat Nat Nat (instHPow.{0, 0} Nat Nat (Monoid.Pow.{0} Nat Nat.monoid)) p n)) (Ring.toNonAssocRing.{0} (ZMod (HPow.hPow.{0, 0, 0} Nat Nat Nat (instHPow.{0, 0} Nat Nat (Monoid.Pow.{0} Nat Nat.monoid)) p n)) (CommRing.toRing.{0} (ZMod (HPow.hPow.{0, 0, 0} Nat Nat Nat (instHPow.{0, 0} Nat Nat (Monoid.Pow.{0} Nat Nat.monoid)) p n)) (ZMod.commRing (HPow.hPow.{0, 0, 0} Nat Nat Nat (instHPow.{0, 0} Nat Nat (Monoid.Pow.{0} Nat Nat.monoid)) p n))))) (NonAssocRing.toNonAssocSemiring.{0} (ZMod (HPow.hPow.{0, 0, 0} Nat Nat Nat (instHPow.{0, 0} Nat Nat (Monoid.Pow.{0} Nat Nat.monoid)) p m)) (Ring.toNonAssocRing.{0} (ZMod (HPow.hPow.{0, 0, 0} Nat Nat Nat (instHPow.{0, 0} Nat Nat (Monoid.Pow.{0} Nat Nat.monoid)) p m)) (CommRing.toRing.{0} (ZMod (HPow.hPow.{0, 0, 0} Nat Nat Nat (instHPow.{0, 0} Nat Nat (Monoid.Pow.{0} Nat Nat.monoid)) p m)) (ZMod.commRing (HPow.hPow.{0, 0, 0} Nat Nat Nat (instHPow.{0, 0} Nat Nat (Monoid.Pow.{0} Nat Nat.monoid)) p m))))) (ZMod.castHom.{0} (HPow.hPow.{0, 0, 0} Nat Nat Nat (instHPow.{0, 0} Nat Nat (Monoid.Pow.{0} Nat Nat.monoid)) p n) (HPow.hPow.{0, 0, 0} Nat Nat Nat (instHPow.{0, 0} Nat Nat (Monoid.Pow.{0} Nat Nat.monoid)) p m) (pow_dvd_pow.{0} Nat Nat.monoid p m n h) (ZMod (HPow.hPow.{0, 0, 0} Nat Nat Nat (instHPow.{0, 0} Nat Nat (Monoid.Pow.{0} Nat Nat.monoid)) p m)) (CommRing.toRing.{0} (ZMod (HPow.hPow.{0, 0, 0} Nat Nat Nat (instHPow.{0, 0} Nat Nat (Monoid.Pow.{0} Nat Nat.monoid)) p m)) (ZMod.commRing (HPow.hPow.{0, 0, 0} Nat Nat Nat (instHPow.{0, 0} Nat Nat (Monoid.Pow.{0} Nat Nat.monoid)) p m))) (ZMod.charP (HPow.hPow.{0, 0, 0} Nat Nat Nat (instHPow.{0, 0} Nat Nat (Monoid.Pow.{0} Nat Nat.monoid)) p m))) (PadicInt.toZModPow p hp_prime n)) (PadicInt.toZModPow p hp_prime m)
+but is expected to have type
+ forall {p : Nat} [hp_prime : Fact (Nat.Prime p)] (m : Nat) (n : Nat) (h : LE.le.{0} Nat instLENat m n), Eq.{1} (RingHom.{0, 0} (PadicInt p hp_prime) (ZMod (HPow.hPow.{0, 0, 0} Nat Nat Nat (instHPow.{0, 0} Nat Nat instPowNat) p m)) (Semiring.toNonAssocSemiring.{0} (PadicInt p hp_prime) (CommSemiring.toSemiring.{0} (PadicInt p hp_prime) (CommRing.toCommSemiring.{0} (PadicInt p hp_prime) (PadicInt.instCommRingPadicInt p hp_prime)))) (Semiring.toNonAssocSemiring.{0} (ZMod (HPow.hPow.{0, 0, 0} Nat Nat Nat (instHPow.{0, 0} Nat Nat instPowNat) p m)) (Ring.toSemiring.{0} (ZMod (HPow.hPow.{0, 0, 0} Nat Nat Nat (instHPow.{0, 0} Nat Nat instPowNat) p m)) (CommRing.toRing.{0} (ZMod (HPow.hPow.{0, 0, 0} Nat Nat Nat (instHPow.{0, 0} Nat Nat instPowNat) p m)) (ZMod.commRing (HPow.hPow.{0, 0, 0} Nat Nat Nat (instHPow.{0, 0} Nat Nat instPowNat) p m)))))) (RingHom.comp.{0, 0, 0} (PadicInt p hp_prime) (ZMod (HPow.hPow.{0, 0, 0} Nat Nat Nat (instHPow.{0, 0} Nat Nat (Monoid.Pow.{0} Nat Nat.monoid)) p n)) (ZMod (HPow.hPow.{0, 0, 0} Nat Nat Nat (instHPow.{0, 0} Nat Nat instPowNat) p m)) (Semiring.toNonAssocSemiring.{0} (PadicInt p hp_prime) (CommSemiring.toSemiring.{0} (PadicInt p hp_prime) (CommRing.toCommSemiring.{0} (PadicInt p hp_prime) (PadicInt.instCommRingPadicInt p hp_prime)))) (Semiring.toNonAssocSemiring.{0} (ZMod (HPow.hPow.{0, 0, 0} Nat Nat Nat (instHPow.{0, 0} Nat Nat (Monoid.Pow.{0} Nat Nat.monoid)) p n)) (CommSemiring.toSemiring.{0} (ZMod (HPow.hPow.{0, 0, 0} Nat Nat Nat (instHPow.{0, 0} Nat Nat (Monoid.Pow.{0} Nat Nat.monoid)) p n)) (CommRing.toCommSemiring.{0} (ZMod (HPow.hPow.{0, 0, 0} Nat Nat Nat (instHPow.{0, 0} Nat Nat (Monoid.Pow.{0} Nat Nat.monoid)) p n)) (ZMod.commRing (HPow.hPow.{0, 0, 0} Nat Nat Nat (instHPow.{0, 0} Nat Nat (Monoid.Pow.{0} Nat Nat.monoid)) p n))))) (Semiring.toNonAssocSemiring.{0} (ZMod (HPow.hPow.{0, 0, 0} Nat Nat Nat (instHPow.{0, 0} Nat Nat instPowNat) p m)) (Ring.toSemiring.{0} (ZMod (HPow.hPow.{0, 0, 0} Nat Nat Nat (instHPow.{0, 0} Nat Nat instPowNat) p m)) (CommRing.toRing.{0} (ZMod (HPow.hPow.{0, 0, 0} Nat Nat Nat (instHPow.{0, 0} Nat Nat instPowNat) p m)) (ZMod.commRing (HPow.hPow.{0, 0, 0} Nat Nat Nat (instHPow.{0, 0} Nat Nat instPowNat) p m))))) (ZMod.castHom.{0} (HPow.hPow.{0, 0, 0} Nat Nat Nat (instHPow.{0, 0} Nat Nat (Monoid.Pow.{0} Nat Nat.monoid)) p n) (HPow.hPow.{0, 0, 0} Nat Nat Nat (instHPow.{0, 0} Nat Nat (Monoid.Pow.{0} Nat Nat.monoid)) p m) (pow_dvd_pow.{0} Nat Nat.monoid p m n h) (ZMod (HPow.hPow.{0, 0, 0} Nat Nat Nat (instHPow.{0, 0} Nat Nat instPowNat) p m)) (CommRing.toRing.{0} (ZMod (HPow.hPow.{0, 0, 0} Nat Nat Nat (instHPow.{0, 0} Nat Nat instPowNat) p m)) (ZMod.commRing (HPow.hPow.{0, 0, 0} Nat Nat Nat (instHPow.{0, 0} Nat Nat instPowNat) p m))) (ZMod.charP (HPow.hPow.{0, 0, 0} Nat Nat Nat (instHPow.{0, 0} Nat Nat instPowNat) p m))) (PadicInt.toZModPow p hp_prime n)) (PadicInt.toZModPow p hp_prime m)
+Case conversion may be inaccurate. Consider using '#align padic_int.zmod_cast_comp_to_zmod_pow PadicInt.zmod_cast_comp_toZModPowₓ'. -/
@[simp]
-theorem zMod_cast_comp_toZmodPow (m n : ℕ) (h : m ≤ n) :
- (ZMod.castHom (pow_dvd_pow p h) (ZMod (p ^ m))).comp (toZmodPow n) = toZmodPow m :=
+theorem zmod_cast_comp_toZModPow (m n : ℕ) (h : m ≤ n) :
+ (ZMod.castHom (pow_dvd_pow p h) (ZMod (p ^ m))).comp (toZModPow n) = toZModPow m :=
by
apply ZMod.ringHom_eq_of_ker_eq
ext x
@@ -464,15 +581,24 @@ theorem zMod_cast_comp_toZmodPow (m n : ℕ) (h : m ≤ n) :
use c
rw [← Nat.cast_sub (appr_mono _ h), hc, Nat.cast_mul, Nat.cast_pow]
· infer_instance
-#align padic_int.zmod_cast_comp_to_zmod_pow PadicInt.zMod_cast_comp_toZmodPow
+#align padic_int.zmod_cast_comp_to_zmod_pow PadicInt.zmod_cast_comp_toZModPow
+/- warning: padic_int.cast_to_zmod_pow -> PadicInt.cast_toZModPow is a dubious translation:
+<too large>
+Case conversion may be inaccurate. Consider using '#align padic_int.cast_to_zmod_pow PadicInt.cast_toZModPowₓ'. -/
@[simp]
-theorem cast_toZmodPow (m n : ℕ) (h : m ≤ n) (x : ℤ_[p]) : ↑(toZmodPow n x) = toZmodPow m x :=
+theorem cast_toZModPow (m n : ℕ) (h : m ≤ n) (x : ℤ_[p]) : ↑(toZModPow n x) = toZModPow m x :=
by
rw [← zmod_cast_comp_to_zmod_pow _ _ h]
rfl
-#align padic_int.cast_to_zmod_pow PadicInt.cast_toZmodPow
-
+#align padic_int.cast_to_zmod_pow PadicInt.cast_toZModPow
+
+/- warning: padic_int.dense_range_nat_cast -> PadicInt.denseRange_nat_cast is a dubious translation:
+lean 3 declaration is
+ forall {p : Nat} [hp_prime : Fact (Nat.Prime p)], DenseRange.{0, 0} (PadicInt p hp_prime) (UniformSpace.toTopologicalSpace.{0} (PadicInt p hp_prime) (PseudoMetricSpace.toUniformSpace.{0} (PadicInt p hp_prime) (SeminormedRing.toPseudoMetricSpace.{0} (PadicInt p hp_prime) (SeminormedCommRing.toSemiNormedRing.{0} (PadicInt p hp_prime) (NormedCommRing.toSeminormedCommRing.{0} (PadicInt p hp_prime) (PadicInt.normedCommRing p hp_prime)))))) Nat (Nat.cast.{0} (PadicInt p hp_prime) (AddMonoidWithOne.toNatCast.{0} (PadicInt p hp_prime) (AddGroupWithOne.toAddMonoidWithOne.{0} (PadicInt p hp_prime) (AddCommGroupWithOne.toAddGroupWithOne.{0} (PadicInt p hp_prime) (Ring.toAddCommGroupWithOne.{0} (PadicInt p hp_prime) (NormedRing.toRing.{0} (PadicInt p hp_prime) (NormedCommRing.toNormedRing.{0} (PadicInt p hp_prime) (PadicInt.normedCommRing p hp_prime))))))))
+but is expected to have type
+ forall {p : Nat} [hp_prime : Fact (Nat.Prime p)], DenseRange.{0, 0} (PadicInt p hp_prime) (UniformSpace.toTopologicalSpace.{0} (PadicInt p hp_prime) (PseudoMetricSpace.toUniformSpace.{0} (PadicInt p hp_prime) (SeminormedRing.toPseudoMetricSpace.{0} (PadicInt p hp_prime) (SeminormedCommRing.toSeminormedRing.{0} (PadicInt p hp_prime) (NormedCommRing.toSeminormedCommRing.{0} (PadicInt p hp_prime) (PadicInt.instNormedCommRingPadicInt p hp_prime)))))) Nat (Nat.cast.{0} (PadicInt p hp_prime) (Semiring.toNatCast.{0} (PadicInt p hp_prime) (CommSemiring.toSemiring.{0} (PadicInt p hp_prime) (CommRing.toCommSemiring.{0} (PadicInt p hp_prime) (PadicInt.instCommRingPadicInt p hp_prime)))))
+Case conversion may be inaccurate. Consider using '#align padic_int.dense_range_nat_cast PadicInt.denseRange_nat_castₓ'. -/
theorem denseRange_nat_cast : DenseRange (Nat.cast : ℕ → ℤ_[p]) :=
by
intro x
@@ -486,6 +612,12 @@ theorem denseRange_nat_cast : DenseRange (Nat.cast : ℕ → ℤ_[p]) :=
apply appr_spec
#align padic_int.dense_range_nat_cast PadicInt.denseRange_nat_cast
+/- warning: padic_int.dense_range_int_cast -> PadicInt.denseRange_int_cast is a dubious translation:
+lean 3 declaration is
+ forall {p : Nat} [hp_prime : Fact (Nat.Prime p)], DenseRange.{0, 0} (PadicInt p hp_prime) (UniformSpace.toTopologicalSpace.{0} (PadicInt p hp_prime) (PseudoMetricSpace.toUniformSpace.{0} (PadicInt p hp_prime) (SeminormedRing.toPseudoMetricSpace.{0} (PadicInt p hp_prime) (SeminormedCommRing.toSemiNormedRing.{0} (PadicInt p hp_prime) (NormedCommRing.toSeminormedCommRing.{0} (PadicInt p hp_prime) (PadicInt.normedCommRing p hp_prime)))))) Int (Int.cast.{0} (PadicInt p hp_prime) (AddGroupWithOne.toHasIntCast.{0} (PadicInt p hp_prime) (AddCommGroupWithOne.toAddGroupWithOne.{0} (PadicInt p hp_prime) (Ring.toAddCommGroupWithOne.{0} (PadicInt p hp_prime) (NormedRing.toRing.{0} (PadicInt p hp_prime) (NormedCommRing.toNormedRing.{0} (PadicInt p hp_prime) (PadicInt.normedCommRing p hp_prime)))))))
+but is expected to have type
+ forall {p : Nat} [hp_prime : Fact (Nat.Prime p)], DenseRange.{0, 0} (PadicInt p hp_prime) (UniformSpace.toTopologicalSpace.{0} (PadicInt p hp_prime) (PseudoMetricSpace.toUniformSpace.{0} (PadicInt p hp_prime) (SeminormedRing.toPseudoMetricSpace.{0} (PadicInt p hp_prime) (SeminormedCommRing.toSeminormedRing.{0} (PadicInt p hp_prime) (NormedCommRing.toSeminormedCommRing.{0} (PadicInt p hp_prime) (PadicInt.instNormedCommRingPadicInt p hp_prime)))))) Int (Int.cast.{0} (PadicInt p hp_prime) (Ring.toIntCast.{0} (PadicInt p hp_prime) (NormedRing.toRing.{0} (PadicInt p hp_prime) (NormedCommRing.toNormedRing.{0} (PadicInt p hp_prime) (PadicInt.instNormedCommRingPadicInt p hp_prime)))))
+Case conversion may be inaccurate. Consider using '#align padic_int.dense_range_int_cast PadicInt.denseRange_int_castₓ'. -/
theorem denseRange_int_cast : DenseRange (Int.cast : ℤ → ℤ_[p]) :=
by
intro x
@@ -511,6 +643,7 @@ variable {R : Type _} [NonAssocSemiring R] (f : ∀ k : ℕ, R →+* ZMod (p ^ k
omit hp_prime
+#print PadicInt.nthHom /-
/-- Given a family of ring homs `f : Π n : ℕ, R →+* zmod (p ^ n)`,
`nth_hom f r` is an integer-valued sequence
whose `n`th value is the unique integer `k` such that `0 ≤ k < p ^ n`
@@ -518,7 +651,14 @@ and `f n r = (k : zmod (p ^ n))`.
-/
def nthHom (r : R) : ℕ → ℤ := fun n => (f n r : ZMod (p ^ n)).val
#align padic_int.nth_hom PadicInt.nthHom
+-/
+/- warning: padic_int.nth_hom_zero -> PadicInt.nthHom_zero is a dubious translation:
+lean 3 declaration is
+ forall {p : Nat} {R : Type.{u1}} [_inst_1 : NonAssocSemiring.{u1} R] (f : forall (k : Nat), RingHom.{u1, 0} R (ZMod (HPow.hPow.{0, 0, 0} Nat Nat Nat (instHPow.{0, 0} Nat Nat (Monoid.Pow.{0} Nat Nat.monoid)) p k)) _inst_1 (NonAssocRing.toNonAssocSemiring.{0} (ZMod (HPow.hPow.{0, 0, 0} Nat Nat Nat (instHPow.{0, 0} Nat Nat (Monoid.Pow.{0} Nat Nat.monoid)) p k)) (Ring.toNonAssocRing.{0} (ZMod (HPow.hPow.{0, 0, 0} Nat Nat Nat (instHPow.{0, 0} Nat Nat (Monoid.Pow.{0} Nat Nat.monoid)) p k)) (CommRing.toRing.{0} (ZMod (HPow.hPow.{0, 0, 0} Nat Nat Nat (instHPow.{0, 0} Nat Nat (Monoid.Pow.{0} Nat Nat.monoid)) p k)) (ZMod.commRing (HPow.hPow.{0, 0, 0} Nat Nat Nat (instHPow.{0, 0} Nat Nat (Monoid.Pow.{0} Nat Nat.monoid)) p k)))))), Eq.{1} (Nat -> Int) (PadicInt.nthHom.{u1} p R _inst_1 f (OfNat.ofNat.{u1} R 0 (OfNat.mk.{u1} R 0 (Zero.zero.{u1} R (MulZeroClass.toHasZero.{u1} R (NonUnitalNonAssocSemiring.toMulZeroClass.{u1} R (NonAssocSemiring.toNonUnitalNonAssocSemiring.{u1} R _inst_1))))))) (OfNat.ofNat.{0} (Nat -> Int) 0 (OfNat.mk.{0} (Nat -> Int) 0 (Zero.zero.{0} (Nat -> Int) (Pi.instZero.{0, 0} Nat (fun (ᾰ : Nat) => Int) (fun (i : Nat) => Int.hasZero)))))
+but is expected to have type
+ forall {p : Nat} {R : Type.{u1}} [_inst_1 : NonAssocSemiring.{u1} R] (f : forall (k : Nat), RingHom.{u1, 0} R (ZMod (HPow.hPow.{0, 0, 0} Nat Nat Nat (instHPow.{0, 0} Nat Nat instPowNat) p k)) _inst_1 (Semiring.toNonAssocSemiring.{0} (ZMod (HPow.hPow.{0, 0, 0} Nat Nat Nat (instHPow.{0, 0} Nat Nat instPowNat) p k)) (CommSemiring.toSemiring.{0} (ZMod (HPow.hPow.{0, 0, 0} Nat Nat Nat (instHPow.{0, 0} Nat Nat instPowNat) p k)) (CommRing.toCommSemiring.{0} (ZMod (HPow.hPow.{0, 0, 0} Nat Nat Nat (instHPow.{0, 0} Nat Nat instPowNat) p k)) (ZMod.commRing (HPow.hPow.{0, 0, 0} Nat Nat Nat (instHPow.{0, 0} Nat Nat instPowNat) p k)))))), Eq.{1} (Nat -> Int) (PadicInt.nthHom.{u1} p R _inst_1 f (OfNat.ofNat.{u1} R 0 (Zero.toOfNat0.{u1} R (MulZeroOneClass.toZero.{u1} R (NonAssocSemiring.toMulZeroOneClass.{u1} R _inst_1))))) (OfNat.ofNat.{0} (Nat -> Int) 0 (Zero.toOfNat0.{0} (Nat -> Int) (Pi.instZero.{0, 0} Nat (fun (a._@.Mathlib.NumberTheory.Padics.RingHoms._hyg.5670 : Nat) => Int) (fun (i : Nat) => CommMonoidWithZero.toZero.{0} Int (CancelCommMonoidWithZero.toCommMonoidWithZero.{0} Int (IsDomain.toCancelCommMonoidWithZero.{0} Int Int.instCommSemiringInt (LinearOrderedRing.isDomain.{0} Int (LinearOrderedCommRing.toLinearOrderedRing.{0} Int Int.linearOrderedCommRing))))))))
+Case conversion may be inaccurate. Consider using '#align padic_int.nth_hom_zero PadicInt.nthHom_zeroₓ'. -/
@[simp]
theorem nthHom_zero : nthHom f 0 = 0 := by simp [nth_hom] <;> rfl
#align padic_int.nth_hom_zero PadicInt.nthHom_zero
@@ -529,6 +669,12 @@ include hp_prime
include f_compat
+/- warning: padic_int.pow_dvd_nth_hom_sub -> PadicInt.pow_dvd_nthHom_sub is a dubious translation:
+lean 3 declaration is
+ forall {p : Nat} [hp_prime : Fact (Nat.Prime p)] {R : Type.{u1}} [_inst_1 : NonAssocSemiring.{u1} R] {f : forall (k : Nat), RingHom.{u1, 0} R (ZMod (HPow.hPow.{0, 0, 0} Nat Nat Nat (instHPow.{0, 0} Nat Nat (Monoid.Pow.{0} Nat Nat.monoid)) p k)) _inst_1 (NonAssocRing.toNonAssocSemiring.{0} (ZMod (HPow.hPow.{0, 0, 0} Nat Nat Nat (instHPow.{0, 0} Nat Nat (Monoid.Pow.{0} Nat Nat.monoid)) p k)) (Ring.toNonAssocRing.{0} (ZMod (HPow.hPow.{0, 0, 0} Nat Nat Nat (instHPow.{0, 0} Nat Nat (Monoid.Pow.{0} Nat Nat.monoid)) p k)) (CommRing.toRing.{0} (ZMod (HPow.hPow.{0, 0, 0} Nat Nat Nat (instHPow.{0, 0} Nat Nat (Monoid.Pow.{0} Nat Nat.monoid)) p k)) (ZMod.commRing (HPow.hPow.{0, 0, 0} Nat Nat Nat (instHPow.{0, 0} Nat Nat (Monoid.Pow.{0} Nat Nat.monoid)) p k)))))}, (forall (k1 : Nat) (k2 : Nat) (hk : LE.le.{0} Nat Nat.hasLe k1 k2), Eq.{succ u1} (RingHom.{u1, 0} R (ZMod (HPow.hPow.{0, 0, 0} Nat Nat Nat (instHPow.{0, 0} Nat Nat (Monoid.Pow.{0} Nat Nat.monoid)) p k1)) _inst_1 (NonAssocRing.toNonAssocSemiring.{0} (ZMod (HPow.hPow.{0, 0, 0} Nat Nat Nat (instHPow.{0, 0} Nat Nat (Monoid.Pow.{0} Nat Nat.monoid)) p k1)) (Ring.toNonAssocRing.{0} (ZMod (HPow.hPow.{0, 0, 0} Nat Nat Nat (instHPow.{0, 0} Nat Nat (Monoid.Pow.{0} Nat Nat.monoid)) p k1)) (CommRing.toRing.{0} (ZMod (HPow.hPow.{0, 0, 0} Nat Nat Nat (instHPow.{0, 0} Nat Nat (Monoid.Pow.{0} Nat Nat.monoid)) p k1)) (ZMod.commRing (HPow.hPow.{0, 0, 0} Nat Nat Nat (instHPow.{0, 0} Nat Nat (Monoid.Pow.{0} Nat Nat.monoid)) p k1)))))) (RingHom.comp.{u1, 0, 0} R (ZMod (HPow.hPow.{0, 0, 0} Nat Nat Nat (instHPow.{0, 0} Nat Nat (Monoid.Pow.{0} Nat Nat.monoid)) p k2)) (ZMod (HPow.hPow.{0, 0, 0} Nat Nat Nat (instHPow.{0, 0} Nat Nat (Monoid.Pow.{0} Nat Nat.monoid)) p k1)) _inst_1 (NonAssocRing.toNonAssocSemiring.{0} (ZMod (HPow.hPow.{0, 0, 0} Nat Nat Nat (instHPow.{0, 0} Nat Nat (Monoid.Pow.{0} Nat Nat.monoid)) p k2)) (Ring.toNonAssocRing.{0} (ZMod (HPow.hPow.{0, 0, 0} Nat Nat Nat (instHPow.{0, 0} Nat Nat (Monoid.Pow.{0} Nat Nat.monoid)) p k2)) (CommRing.toRing.{0} (ZMod (HPow.hPow.{0, 0, 0} Nat Nat Nat (instHPow.{0, 0} Nat Nat (Monoid.Pow.{0} Nat Nat.monoid)) p k2)) (ZMod.commRing (HPow.hPow.{0, 0, 0} Nat Nat Nat (instHPow.{0, 0} Nat Nat (Monoid.Pow.{0} Nat Nat.monoid)) p k2))))) (NonAssocRing.toNonAssocSemiring.{0} (ZMod (HPow.hPow.{0, 0, 0} Nat Nat Nat (instHPow.{0, 0} Nat Nat (Monoid.Pow.{0} Nat Nat.monoid)) p k1)) (Ring.toNonAssocRing.{0} (ZMod (HPow.hPow.{0, 0, 0} Nat Nat Nat (instHPow.{0, 0} Nat Nat (Monoid.Pow.{0} Nat Nat.monoid)) p k1)) (CommRing.toRing.{0} (ZMod (HPow.hPow.{0, 0, 0} Nat Nat Nat (instHPow.{0, 0} Nat Nat (Monoid.Pow.{0} Nat Nat.monoid)) p k1)) (ZMod.commRing (HPow.hPow.{0, 0, 0} Nat Nat Nat (instHPow.{0, 0} Nat Nat (Monoid.Pow.{0} Nat Nat.monoid)) p k1))))) (ZMod.castHom.{0} (HPow.hPow.{0, 0, 0} Nat Nat Nat (instHPow.{0, 0} Nat Nat (Monoid.Pow.{0} Nat Nat.monoid)) p k2) (HPow.hPow.{0, 0, 0} Nat Nat Nat (instHPow.{0, 0} Nat Nat (Monoid.Pow.{0} Nat Nat.monoid)) p k1) (pow_dvd_pow.{0} Nat Nat.monoid p k1 k2 hk) (ZMod (HPow.hPow.{0, 0, 0} Nat Nat Nat (instHPow.{0, 0} Nat Nat (Monoid.Pow.{0} Nat Nat.monoid)) p k1)) (CommRing.toRing.{0} (ZMod (HPow.hPow.{0, 0, 0} Nat Nat Nat (instHPow.{0, 0} Nat Nat (Monoid.Pow.{0} Nat Nat.monoid)) p k1)) (ZMod.commRing (HPow.hPow.{0, 0, 0} Nat Nat Nat (instHPow.{0, 0} Nat Nat (Monoid.Pow.{0} Nat Nat.monoid)) p k1))) (ZMod.charP (HPow.hPow.{0, 0, 0} Nat Nat Nat (instHPow.{0, 0} Nat Nat (Monoid.Pow.{0} Nat Nat.monoid)) p k1))) (f k2)) (f k1)) -> (forall (r : R) (i : Nat) (j : Nat), (LE.le.{0} Nat Nat.hasLe i j) -> (Dvd.Dvd.{0} Int (semigroupDvd.{0} Int Int.semigroup) (HPow.hPow.{0, 0, 0} Int Nat Int (instHPow.{0, 0} Int Nat (Monoid.Pow.{0} Int Int.monoid)) ((fun (a : Type) (b : Type) [self : HasLiftT.{1, 1} a b] => self.0) Nat Int (HasLiftT.mk.{1, 1} Nat Int (CoeTCₓ.coe.{1, 1} Nat Int (coeBase.{1, 1} Nat Int Int.hasCoe))) p) i) (HSub.hSub.{0, 0, 0} Int Int Int (instHSub.{0} Int Int.hasSub) (PadicInt.nthHom.{u1} p R _inst_1 f r j) (PadicInt.nthHom.{u1} p R _inst_1 f r i))))
+but is expected to have type
+ forall {p : Nat} [hp_prime : Fact (Nat.Prime p)] {R : Type.{u1}} [_inst_1 : NonAssocSemiring.{u1} R] {f : forall (k : Nat), RingHom.{u1, 0} R (ZMod (HPow.hPow.{0, 0, 0} Nat Nat Nat (instHPow.{0, 0} Nat Nat instPowNat) p k)) _inst_1 (Semiring.toNonAssocSemiring.{0} (ZMod (HPow.hPow.{0, 0, 0} Nat Nat Nat (instHPow.{0, 0} Nat Nat instPowNat) p k)) (CommSemiring.toSemiring.{0} (ZMod (HPow.hPow.{0, 0, 0} Nat Nat Nat (instHPow.{0, 0} Nat Nat instPowNat) p k)) (CommRing.toCommSemiring.{0} (ZMod (HPow.hPow.{0, 0, 0} Nat Nat Nat (instHPow.{0, 0} Nat Nat instPowNat) p k)) (ZMod.commRing (HPow.hPow.{0, 0, 0} Nat Nat Nat (instHPow.{0, 0} Nat Nat instPowNat) p k)))))}, (forall (k1 : Nat) (k2 : Nat) (hk : LE.le.{0} Nat instLENat k1 k2), Eq.{succ u1} (RingHom.{u1, 0} R (ZMod (HPow.hPow.{0, 0, 0} Nat Nat Nat (instHPow.{0, 0} Nat Nat instPowNat) p k1)) _inst_1 (Semiring.toNonAssocSemiring.{0} (ZMod (HPow.hPow.{0, 0, 0} Nat Nat Nat (instHPow.{0, 0} Nat Nat instPowNat) p k1)) (Ring.toSemiring.{0} (ZMod (HPow.hPow.{0, 0, 0} Nat Nat Nat (instHPow.{0, 0} Nat Nat instPowNat) p k1)) (CommRing.toRing.{0} (ZMod (HPow.hPow.{0, 0, 0} Nat Nat Nat (instHPow.{0, 0} Nat Nat instPowNat) p k1)) (ZMod.commRing (HPow.hPow.{0, 0, 0} Nat Nat Nat (instHPow.{0, 0} Nat Nat instPowNat) p k1)))))) (RingHom.comp.{u1, 0, 0} R (ZMod (HPow.hPow.{0, 0, 0} Nat Nat Nat (instHPow.{0, 0} Nat Nat (Monoid.Pow.{0} Nat Nat.monoid)) p k2)) (ZMod (HPow.hPow.{0, 0, 0} Nat Nat Nat (instHPow.{0, 0} Nat Nat instPowNat) p k1)) _inst_1 (Semiring.toNonAssocSemiring.{0} (ZMod (HPow.hPow.{0, 0, 0} Nat Nat Nat (instHPow.{0, 0} Nat Nat (Monoid.Pow.{0} Nat Nat.monoid)) p k2)) (CommSemiring.toSemiring.{0} (ZMod (HPow.hPow.{0, 0, 0} Nat Nat Nat (instHPow.{0, 0} Nat Nat (Monoid.Pow.{0} Nat Nat.monoid)) p k2)) (CommRing.toCommSemiring.{0} (ZMod (HPow.hPow.{0, 0, 0} Nat Nat Nat (instHPow.{0, 0} Nat Nat (Monoid.Pow.{0} Nat Nat.monoid)) p k2)) (ZMod.commRing (HPow.hPow.{0, 0, 0} Nat Nat Nat (instHPow.{0, 0} Nat Nat (Monoid.Pow.{0} Nat Nat.monoid)) p k2))))) (Semiring.toNonAssocSemiring.{0} (ZMod (HPow.hPow.{0, 0, 0} Nat Nat Nat (instHPow.{0, 0} Nat Nat instPowNat) p k1)) (Ring.toSemiring.{0} (ZMod (HPow.hPow.{0, 0, 0} Nat Nat Nat (instHPow.{0, 0} Nat Nat instPowNat) p k1)) (CommRing.toRing.{0} (ZMod (HPow.hPow.{0, 0, 0} Nat Nat Nat (instHPow.{0, 0} Nat Nat instPowNat) p k1)) (ZMod.commRing (HPow.hPow.{0, 0, 0} Nat Nat Nat (instHPow.{0, 0} Nat Nat instPowNat) p k1))))) (ZMod.castHom.{0} (HPow.hPow.{0, 0, 0} Nat Nat Nat (instHPow.{0, 0} Nat Nat (Monoid.Pow.{0} Nat Nat.monoid)) p k2) (HPow.hPow.{0, 0, 0} Nat Nat Nat (instHPow.{0, 0} Nat Nat (Monoid.Pow.{0} Nat Nat.monoid)) p k1) (pow_dvd_pow.{0} Nat Nat.monoid p k1 k2 hk) (ZMod (HPow.hPow.{0, 0, 0} Nat Nat Nat (instHPow.{0, 0} Nat Nat instPowNat) p k1)) (CommRing.toRing.{0} (ZMod (HPow.hPow.{0, 0, 0} Nat Nat Nat (instHPow.{0, 0} Nat Nat instPowNat) p k1)) (ZMod.commRing (HPow.hPow.{0, 0, 0} Nat Nat Nat (instHPow.{0, 0} Nat Nat instPowNat) p k1))) (ZMod.charP (HPow.hPow.{0, 0, 0} Nat Nat Nat (instHPow.{0, 0} Nat Nat instPowNat) p k1))) (f k2)) (f k1)) -> (forall (r : R) (i : Nat) (j : Nat), (LE.le.{0} Nat instLENat i j) -> (Dvd.dvd.{0} Int Int.instDvdInt (HPow.hPow.{0, 0, 0} Int Nat Int Int.instHPowIntNat (Nat.cast.{0} Int instNatCastInt p) i) (HSub.hSub.{0, 0, 0} Int Int Int (instHSub.{0} Int Int.instSubInt) (PadicInt.nthHom.{u1} p R _inst_1 f r j) (PadicInt.nthHom.{u1} p R _inst_1 f r i))))
+Case conversion may be inaccurate. Consider using '#align padic_int.pow_dvd_nth_hom_sub PadicInt.pow_dvd_nthHom_subₓ'. -/
theorem pow_dvd_nthHom_sub (r : R) (i j : ℕ) (h : i ≤ j) : ↑p ^ i ∣ nthHom f r j - nthHom f r i :=
by
specialize f_compat i j h
@@ -538,6 +684,12 @@ theorem pow_dvd_nthHom_sub (r : R) (i j : ℕ) (h : i ≤ j) : ↑p ^ i ∣ nthH
simp only [ZMod.cast_id, ZMod.castHom_apply, sub_self, ZMod.nat_cast_val, ZMod.int_cast_cast]
#align padic_int.pow_dvd_nth_hom_sub PadicInt.pow_dvd_nthHom_sub
+/- warning: padic_int.is_cau_seq_nth_hom -> PadicInt.isCauSeq_nthHom is a dubious translation:
+lean 3 declaration is
+ forall {p : Nat} [hp_prime : Fact (Nat.Prime p)] {R : Type.{u1}} [_inst_1 : NonAssocSemiring.{u1} R] {f : forall (k : Nat), RingHom.{u1, 0} R (ZMod (HPow.hPow.{0, 0, 0} Nat Nat Nat (instHPow.{0, 0} Nat Nat (Monoid.Pow.{0} Nat Nat.monoid)) p k)) _inst_1 (NonAssocRing.toNonAssocSemiring.{0} (ZMod (HPow.hPow.{0, 0, 0} Nat Nat Nat (instHPow.{0, 0} Nat Nat (Monoid.Pow.{0} Nat Nat.monoid)) p k)) (Ring.toNonAssocRing.{0} (ZMod (HPow.hPow.{0, 0, 0} Nat Nat Nat (instHPow.{0, 0} Nat Nat (Monoid.Pow.{0} Nat Nat.monoid)) p k)) (CommRing.toRing.{0} (ZMod (HPow.hPow.{0, 0, 0} Nat Nat Nat (instHPow.{0, 0} Nat Nat (Monoid.Pow.{0} Nat Nat.monoid)) p k)) (ZMod.commRing (HPow.hPow.{0, 0, 0} Nat Nat Nat (instHPow.{0, 0} Nat Nat (Monoid.Pow.{0} Nat Nat.monoid)) p k)))))}, (forall (k1 : Nat) (k2 : Nat) (hk : LE.le.{0} Nat Nat.hasLe k1 k2), Eq.{succ u1} (RingHom.{u1, 0} R (ZMod (HPow.hPow.{0, 0, 0} Nat Nat Nat (instHPow.{0, 0} Nat Nat (Monoid.Pow.{0} Nat Nat.monoid)) p k1)) _inst_1 (NonAssocRing.toNonAssocSemiring.{0} (ZMod (HPow.hPow.{0, 0, 0} Nat Nat Nat (instHPow.{0, 0} Nat Nat (Monoid.Pow.{0} Nat Nat.monoid)) p k1)) (Ring.toNonAssocRing.{0} (ZMod (HPow.hPow.{0, 0, 0} Nat Nat Nat (instHPow.{0, 0} Nat Nat (Monoid.Pow.{0} Nat Nat.monoid)) p k1)) (CommRing.toRing.{0} (ZMod (HPow.hPow.{0, 0, 0} Nat Nat Nat (instHPow.{0, 0} Nat Nat (Monoid.Pow.{0} Nat Nat.monoid)) p k1)) (ZMod.commRing (HPow.hPow.{0, 0, 0} Nat Nat Nat (instHPow.{0, 0} Nat Nat (Monoid.Pow.{0} Nat Nat.monoid)) p k1)))))) (RingHom.comp.{u1, 0, 0} R (ZMod (HPow.hPow.{0, 0, 0} Nat Nat Nat (instHPow.{0, 0} Nat Nat (Monoid.Pow.{0} Nat Nat.monoid)) p k2)) (ZMod (HPow.hPow.{0, 0, 0} Nat Nat Nat (instHPow.{0, 0} Nat Nat (Monoid.Pow.{0} Nat Nat.monoid)) p k1)) _inst_1 (NonAssocRing.toNonAssocSemiring.{0} (ZMod (HPow.hPow.{0, 0, 0} Nat Nat Nat (instHPow.{0, 0} Nat Nat (Monoid.Pow.{0} Nat Nat.monoid)) p k2)) (Ring.toNonAssocRing.{0} (ZMod (HPow.hPow.{0, 0, 0} Nat Nat Nat (instHPow.{0, 0} Nat Nat (Monoid.Pow.{0} Nat Nat.monoid)) p k2)) (CommRing.toRing.{0} (ZMod (HPow.hPow.{0, 0, 0} Nat Nat Nat (instHPow.{0, 0} Nat Nat (Monoid.Pow.{0} Nat Nat.monoid)) p k2)) (ZMod.commRing (HPow.hPow.{0, 0, 0} Nat Nat Nat (instHPow.{0, 0} Nat Nat (Monoid.Pow.{0} Nat Nat.monoid)) p k2))))) (NonAssocRing.toNonAssocSemiring.{0} (ZMod (HPow.hPow.{0, 0, 0} Nat Nat Nat (instHPow.{0, 0} Nat Nat (Monoid.Pow.{0} Nat Nat.monoid)) p k1)) (Ring.toNonAssocRing.{0} (ZMod (HPow.hPow.{0, 0, 0} Nat Nat Nat (instHPow.{0, 0} Nat Nat (Monoid.Pow.{0} Nat Nat.monoid)) p k1)) (CommRing.toRing.{0} (ZMod (HPow.hPow.{0, 0, 0} Nat Nat Nat (instHPow.{0, 0} Nat Nat (Monoid.Pow.{0} Nat Nat.monoid)) p k1)) (ZMod.commRing (HPow.hPow.{0, 0, 0} Nat Nat Nat (instHPow.{0, 0} Nat Nat (Monoid.Pow.{0} Nat Nat.monoid)) p k1))))) (ZMod.castHom.{0} (HPow.hPow.{0, 0, 0} Nat Nat Nat (instHPow.{0, 0} Nat Nat (Monoid.Pow.{0} Nat Nat.monoid)) p k2) (HPow.hPow.{0, 0, 0} Nat Nat Nat (instHPow.{0, 0} Nat Nat (Monoid.Pow.{0} Nat Nat.monoid)) p k1) (pow_dvd_pow.{0} Nat Nat.monoid p k1 k2 hk) (ZMod (HPow.hPow.{0, 0, 0} Nat Nat Nat (instHPow.{0, 0} Nat Nat (Monoid.Pow.{0} Nat Nat.monoid)) p k1)) (CommRing.toRing.{0} (ZMod (HPow.hPow.{0, 0, 0} Nat Nat Nat (instHPow.{0, 0} Nat Nat (Monoid.Pow.{0} Nat Nat.monoid)) p k1)) (ZMod.commRing (HPow.hPow.{0, 0, 0} Nat Nat Nat (instHPow.{0, 0} Nat Nat (Monoid.Pow.{0} Nat Nat.monoid)) p k1))) (ZMod.charP (HPow.hPow.{0, 0, 0} Nat Nat Nat (instHPow.{0, 0} Nat Nat (Monoid.Pow.{0} Nat Nat.monoid)) p k1))) (f k2)) (f k1)) -> (forall (r : R), IsCauSeq.{0, 0} Rat Rat.linearOrderedField Rat (NormedRing.toRing.{0} Rat (NormedCommRing.toNormedRing.{0} Rat (NormedField.toNormedCommRing.{0} Rat Rat.normedField))) (padicNorm p) (fun (n : Nat) => (fun (a : Type) (b : Type) [self : HasLiftT.{1, 1} a b] => self.0) Int Rat (HasLiftT.mk.{1, 1} Int Rat (CoeTCₓ.coe.{1, 1} Int Rat (Int.castCoe.{0} Rat Rat.hasIntCast))) (PadicInt.nthHom.{u1} p R _inst_1 f r n)))
+but is expected to have type
+ forall {p : Nat} [hp_prime : Fact (Nat.Prime p)] {R : Type.{u1}} [_inst_1 : NonAssocSemiring.{u1} R] {f : forall (k : Nat), RingHom.{u1, 0} R (ZMod (HPow.hPow.{0, 0, 0} Nat Nat Nat (instHPow.{0, 0} Nat Nat instPowNat) p k)) _inst_1 (Semiring.toNonAssocSemiring.{0} (ZMod (HPow.hPow.{0, 0, 0} Nat Nat Nat (instHPow.{0, 0} Nat Nat instPowNat) p k)) (CommSemiring.toSemiring.{0} (ZMod (HPow.hPow.{0, 0, 0} Nat Nat Nat (instHPow.{0, 0} Nat Nat instPowNat) p k)) (CommRing.toCommSemiring.{0} (ZMod (HPow.hPow.{0, 0, 0} Nat Nat Nat (instHPow.{0, 0} Nat Nat instPowNat) p k)) (ZMod.commRing (HPow.hPow.{0, 0, 0} Nat Nat Nat (instHPow.{0, 0} Nat Nat instPowNat) p k)))))}, (forall (k1 : Nat) (k2 : Nat) (hk : LE.le.{0} Nat instLENat k1 k2), Eq.{succ u1} (RingHom.{u1, 0} R (ZMod (HPow.hPow.{0, 0, 0} Nat Nat Nat (instHPow.{0, 0} Nat Nat instPowNat) p k1)) _inst_1 (Semiring.toNonAssocSemiring.{0} (ZMod (HPow.hPow.{0, 0, 0} Nat Nat Nat (instHPow.{0, 0} Nat Nat instPowNat) p k1)) (Ring.toSemiring.{0} (ZMod (HPow.hPow.{0, 0, 0} Nat Nat Nat (instHPow.{0, 0} Nat Nat instPowNat) p k1)) (CommRing.toRing.{0} (ZMod (HPow.hPow.{0, 0, 0} Nat Nat Nat (instHPow.{0, 0} Nat Nat instPowNat) p k1)) (ZMod.commRing (HPow.hPow.{0, 0, 0} Nat Nat Nat (instHPow.{0, 0} Nat Nat instPowNat) p k1)))))) (RingHom.comp.{u1, 0, 0} R (ZMod (HPow.hPow.{0, 0, 0} Nat Nat Nat (instHPow.{0, 0} Nat Nat (Monoid.Pow.{0} Nat Nat.monoid)) p k2)) (ZMod (HPow.hPow.{0, 0, 0} Nat Nat Nat (instHPow.{0, 0} Nat Nat instPowNat) p k1)) _inst_1 (Semiring.toNonAssocSemiring.{0} (ZMod (HPow.hPow.{0, 0, 0} Nat Nat Nat (instHPow.{0, 0} Nat Nat (Monoid.Pow.{0} Nat Nat.monoid)) p k2)) (CommSemiring.toSemiring.{0} (ZMod (HPow.hPow.{0, 0, 0} Nat Nat Nat (instHPow.{0, 0} Nat Nat (Monoid.Pow.{0} Nat Nat.monoid)) p k2)) (CommRing.toCommSemiring.{0} (ZMod (HPow.hPow.{0, 0, 0} Nat Nat Nat (instHPow.{0, 0} Nat Nat (Monoid.Pow.{0} Nat Nat.monoid)) p k2)) (ZMod.commRing (HPow.hPow.{0, 0, 0} Nat Nat Nat (instHPow.{0, 0} Nat Nat (Monoid.Pow.{0} Nat Nat.monoid)) p k2))))) (Semiring.toNonAssocSemiring.{0} (ZMod (HPow.hPow.{0, 0, 0} Nat Nat Nat (instHPow.{0, 0} Nat Nat instPowNat) p k1)) (Ring.toSemiring.{0} (ZMod (HPow.hPow.{0, 0, 0} Nat Nat Nat (instHPow.{0, 0} Nat Nat instPowNat) p k1)) (CommRing.toRing.{0} (ZMod (HPow.hPow.{0, 0, 0} Nat Nat Nat (instHPow.{0, 0} Nat Nat instPowNat) p k1)) (ZMod.commRing (HPow.hPow.{0, 0, 0} Nat Nat Nat (instHPow.{0, 0} Nat Nat instPowNat) p k1))))) (ZMod.castHom.{0} (HPow.hPow.{0, 0, 0} Nat Nat Nat (instHPow.{0, 0} Nat Nat (Monoid.Pow.{0} Nat Nat.monoid)) p k2) (HPow.hPow.{0, 0, 0} Nat Nat Nat (instHPow.{0, 0} Nat Nat (Monoid.Pow.{0} Nat Nat.monoid)) p k1) (pow_dvd_pow.{0} Nat Nat.monoid p k1 k2 hk) (ZMod (HPow.hPow.{0, 0, 0} Nat Nat Nat (instHPow.{0, 0} Nat Nat instPowNat) p k1)) (CommRing.toRing.{0} (ZMod (HPow.hPow.{0, 0, 0} Nat Nat Nat (instHPow.{0, 0} Nat Nat instPowNat) p k1)) (ZMod.commRing (HPow.hPow.{0, 0, 0} Nat Nat Nat (instHPow.{0, 0} Nat Nat instPowNat) p k1))) (ZMod.charP (HPow.hPow.{0, 0, 0} Nat Nat Nat (instHPow.{0, 0} Nat Nat instPowNat) p k1))) (f k2)) (f k1)) -> (forall (r : R), IsCauSeq.{0, 0} Rat Rat.instLinearOrderedFieldRat Rat (NormedRing.toRing.{0} Rat (NormedCommRing.toNormedRing.{0} Rat (NormedField.toNormedCommRing.{0} Rat Rat.normedField))) (padicNorm p) (fun (n : Nat) => Int.cast.{0} Rat Rat.instIntCastRat (PadicInt.nthHom.{u1} p R _inst_1 f r n)))
+Case conversion may be inaccurate. Consider using '#align padic_int.is_cau_seq_nth_hom PadicInt.isCauSeq_nthHomₓ'. -/
theorem isCauSeq_nthHom (r : R) : IsCauSeq (padicNorm p) fun n => nthHom f r n :=
by
intro ε hε
@@ -550,6 +702,7 @@ theorem isCauSeq_nthHom (r : R) : IsCauSeq (padicNorm p) fun n => nthHom f r n :
exact_mod_cast pow_dvd_nth_hom_sub f_compat r k j hj
#align padic_int.is_cau_seq_nth_hom PadicInt.isCauSeq_nthHom
+#print PadicInt.nthHomSeq /-
/-- `nth_hom_seq f_compat r` bundles `padic_int.nth_hom f r`
as a Cauchy sequence of rationals with respect to the `p`-adic norm.
The `n`th value of the sequence is `((f n r).val : ℚ)`.
@@ -557,7 +710,14 @@ The `n`th value of the sequence is `((f n r).val : ℚ)`.
def nthHomSeq (r : R) : PadicSeq p :=
⟨fun n => nthHom f r n, isCauSeq_nthHom f_compat r⟩
#align padic_int.nth_hom_seq PadicInt.nthHomSeq
+-/
+/- warning: padic_int.nth_hom_seq_one -> PadicInt.nthHomSeq_one is a dubious translation:
+lean 3 declaration is
+ forall {p : Nat} [hp_prime : Fact (Nat.Prime p)] {R : Type.{u1}} [_inst_1 : NonAssocSemiring.{u1} R] {f : forall (k : Nat), RingHom.{u1, 0} R (ZMod (HPow.hPow.{0, 0, 0} Nat Nat Nat (instHPow.{0, 0} Nat Nat (Monoid.Pow.{0} Nat Nat.monoid)) p k)) _inst_1 (NonAssocRing.toNonAssocSemiring.{0} (ZMod (HPow.hPow.{0, 0, 0} Nat Nat Nat (instHPow.{0, 0} Nat Nat (Monoid.Pow.{0} Nat Nat.monoid)) p k)) (Ring.toNonAssocRing.{0} (ZMod (HPow.hPow.{0, 0, 0} Nat Nat Nat (instHPow.{0, 0} Nat Nat (Monoid.Pow.{0} Nat Nat.monoid)) p k)) (CommRing.toRing.{0} (ZMod (HPow.hPow.{0, 0, 0} Nat Nat Nat (instHPow.{0, 0} Nat Nat (Monoid.Pow.{0} Nat Nat.monoid)) p k)) (ZMod.commRing (HPow.hPow.{0, 0, 0} Nat Nat Nat (instHPow.{0, 0} Nat Nat (Monoid.Pow.{0} Nat Nat.monoid)) p k)))))} (f_compat : forall (k1 : Nat) (k2 : Nat) (hk : LE.le.{0} Nat Nat.hasLe k1 k2), Eq.{succ u1} (RingHom.{u1, 0} R (ZMod (HPow.hPow.{0, 0, 0} Nat Nat Nat (instHPow.{0, 0} Nat Nat (Monoid.Pow.{0} Nat Nat.monoid)) p k1)) _inst_1 (NonAssocRing.toNonAssocSemiring.{0} (ZMod (HPow.hPow.{0, 0, 0} Nat Nat Nat (instHPow.{0, 0} Nat Nat (Monoid.Pow.{0} Nat Nat.monoid)) p k1)) (Ring.toNonAssocRing.{0} (ZMod (HPow.hPow.{0, 0, 0} Nat Nat Nat (instHPow.{0, 0} Nat Nat (Monoid.Pow.{0} Nat Nat.monoid)) p k1)) (CommRing.toRing.{0} (ZMod (HPow.hPow.{0, 0, 0} Nat Nat Nat (instHPow.{0, 0} Nat Nat (Monoid.Pow.{0} Nat Nat.monoid)) p k1)) (ZMod.commRing (HPow.hPow.{0, 0, 0} Nat Nat Nat (instHPow.{0, 0} Nat Nat (Monoid.Pow.{0} Nat Nat.monoid)) p k1)))))) (RingHom.comp.{u1, 0, 0} R (ZMod (HPow.hPow.{0, 0, 0} Nat Nat Nat (instHPow.{0, 0} Nat Nat (Monoid.Pow.{0} Nat Nat.monoid)) p k2)) (ZMod (HPow.hPow.{0, 0, 0} Nat Nat Nat (instHPow.{0, 0} Nat Nat (Monoid.Pow.{0} Nat Nat.monoid)) p k1)) _inst_1 (NonAssocRing.toNonAssocSemiring.{0} (ZMod (HPow.hPow.{0, 0, 0} Nat Nat Nat (instHPow.{0, 0} Nat Nat (Monoid.Pow.{0} Nat Nat.monoid)) p k2)) (Ring.toNonAssocRing.{0} (ZMod (HPow.hPow.{0, 0, 0} Nat Nat Nat (instHPow.{0, 0} Nat Nat (Monoid.Pow.{0} Nat Nat.monoid)) p k2)) (CommRing.toRing.{0} (ZMod (HPow.hPow.{0, 0, 0} Nat Nat Nat (instHPow.{0, 0} Nat Nat (Monoid.Pow.{0} Nat Nat.monoid)) p k2)) (ZMod.commRing (HPow.hPow.{0, 0, 0} Nat Nat Nat (instHPow.{0, 0} Nat Nat (Monoid.Pow.{0} Nat Nat.monoid)) p k2))))) (NonAssocRing.toNonAssocSemiring.{0} (ZMod (HPow.hPow.{0, 0, 0} Nat Nat Nat (instHPow.{0, 0} Nat Nat (Monoid.Pow.{0} Nat Nat.monoid)) p k1)) (Ring.toNonAssocRing.{0} (ZMod (HPow.hPow.{0, 0, 0} Nat Nat Nat (instHPow.{0, 0} Nat Nat (Monoid.Pow.{0} Nat Nat.monoid)) p k1)) (CommRing.toRing.{0} (ZMod (HPow.hPow.{0, 0, 0} Nat Nat Nat (instHPow.{0, 0} Nat Nat (Monoid.Pow.{0} Nat Nat.monoid)) p k1)) (ZMod.commRing (HPow.hPow.{0, 0, 0} Nat Nat Nat (instHPow.{0, 0} Nat Nat (Monoid.Pow.{0} Nat Nat.monoid)) p k1))))) (ZMod.castHom.{0} (HPow.hPow.{0, 0, 0} Nat Nat Nat (instHPow.{0, 0} Nat Nat (Monoid.Pow.{0} Nat Nat.monoid)) p k2) (HPow.hPow.{0, 0, 0} Nat Nat Nat (instHPow.{0, 0} Nat Nat (Monoid.Pow.{0} Nat Nat.monoid)) p k1) (pow_dvd_pow.{0} Nat Nat.monoid p k1 k2 hk) (ZMod (HPow.hPow.{0, 0, 0} Nat Nat Nat (instHPow.{0, 0} Nat Nat (Monoid.Pow.{0} Nat Nat.monoid)) p k1)) (CommRing.toRing.{0} (ZMod (HPow.hPow.{0, 0, 0} Nat Nat Nat (instHPow.{0, 0} Nat Nat (Monoid.Pow.{0} Nat Nat.monoid)) p k1)) (ZMod.commRing (HPow.hPow.{0, 0, 0} Nat Nat Nat (instHPow.{0, 0} Nat Nat (Monoid.Pow.{0} Nat Nat.monoid)) p k1))) (ZMod.charP (HPow.hPow.{0, 0, 0} Nat Nat Nat (instHPow.{0, 0} Nat Nat (Monoid.Pow.{0} Nat Nat.monoid)) p k1))) (f k2)) (f k1)), HasEquivₓ.Equiv.{1} (PadicSeq p) (setoidHasEquiv.{1} (PadicSeq p) (CauSeq.equiv.{0, 0} Rat Rat Rat.linearOrderedField (NormedRing.toRing.{0} Rat (NormedCommRing.toNormedRing.{0} Rat (NormedField.toNormedCommRing.{0} Rat Rat.normedField))) (padicNorm p) (padicNorm.isAbsoluteValue p hp_prime))) (PadicInt.nthHomSeq.{u1} p hp_prime R _inst_1 (fun (k2 : Nat) => f k2) f_compat (OfNat.ofNat.{u1} R 1 (OfNat.mk.{u1} R 1 (One.one.{u1} R (AddMonoidWithOne.toOne.{u1} R (AddCommMonoidWithOne.toAddMonoidWithOne.{u1} R (NonAssocSemiring.toAddCommMonoidWithOne.{u1} R _inst_1))))))) (OfNat.ofNat.{0} (PadicSeq p) 1 (OfNat.mk.{0} (PadicSeq p) 1 (One.one.{0} (PadicSeq p) (CauSeq.hasOne.{0, 0} Rat Rat Rat.linearOrderedField (NormedRing.toRing.{0} Rat (NormedCommRing.toNormedRing.{0} Rat (NormedField.toNormedCommRing.{0} Rat Rat.normedField))) (padicNorm p) (padicNorm.isAbsoluteValue p hp_prime)))))
+but is expected to have type
+ forall {p : Nat} [hp_prime : Fact (Nat.Prime p)] {R : Type.{u1}} [_inst_1 : NonAssocSemiring.{u1} R] {f : forall (k : Nat), RingHom.{u1, 0} R (ZMod (HPow.hPow.{0, 0, 0} Nat Nat Nat (instHPow.{0, 0} Nat Nat instPowNat) p k)) _inst_1 (Semiring.toNonAssocSemiring.{0} (ZMod (HPow.hPow.{0, 0, 0} Nat Nat Nat (instHPow.{0, 0} Nat Nat instPowNat) p k)) (CommSemiring.toSemiring.{0} (ZMod (HPow.hPow.{0, 0, 0} Nat Nat Nat (instHPow.{0, 0} Nat Nat instPowNat) p k)) (CommRing.toCommSemiring.{0} (ZMod (HPow.hPow.{0, 0, 0} Nat Nat Nat (instHPow.{0, 0} Nat Nat instPowNat) p k)) (ZMod.commRing (HPow.hPow.{0, 0, 0} Nat Nat Nat (instHPow.{0, 0} Nat Nat instPowNat) p k)))))} (f_compat : forall (k1 : Nat) (k2 : Nat) (hk : LE.le.{0} Nat instLENat k1 k2), Eq.{succ u1} (RingHom.{u1, 0} R (ZMod (HPow.hPow.{0, 0, 0} Nat Nat Nat (instHPow.{0, 0} Nat Nat instPowNat) p k1)) _inst_1 (Semiring.toNonAssocSemiring.{0} (ZMod (HPow.hPow.{0, 0, 0} Nat Nat Nat (instHPow.{0, 0} Nat Nat instPowNat) p k1)) (Ring.toSemiring.{0} (ZMod (HPow.hPow.{0, 0, 0} Nat Nat Nat (instHPow.{0, 0} Nat Nat instPowNat) p k1)) (CommRing.toRing.{0} (ZMod (HPow.hPow.{0, 0, 0} Nat Nat Nat (instHPow.{0, 0} Nat Nat instPowNat) p k1)) (ZMod.commRing (HPow.hPow.{0, 0, 0} Nat Nat Nat (instHPow.{0, 0} Nat Nat instPowNat) p k1)))))) (RingHom.comp.{u1, 0, 0} R (ZMod (HPow.hPow.{0, 0, 0} Nat Nat Nat (instHPow.{0, 0} Nat Nat (Monoid.Pow.{0} Nat Nat.monoid)) p k2)) (ZMod (HPow.hPow.{0, 0, 0} Nat Nat Nat (instHPow.{0, 0} Nat Nat instPowNat) p k1)) _inst_1 (Semiring.toNonAssocSemiring.{0} (ZMod (HPow.hPow.{0, 0, 0} Nat Nat Nat (instHPow.{0, 0} Nat Nat (Monoid.Pow.{0} Nat Nat.monoid)) p k2)) (CommSemiring.toSemiring.{0} (ZMod (HPow.hPow.{0, 0, 0} Nat Nat Nat (instHPow.{0, 0} Nat Nat (Monoid.Pow.{0} Nat Nat.monoid)) p k2)) (CommRing.toCommSemiring.{0} (ZMod (HPow.hPow.{0, 0, 0} Nat Nat Nat (instHPow.{0, 0} Nat Nat (Monoid.Pow.{0} Nat Nat.monoid)) p k2)) (ZMod.commRing (HPow.hPow.{0, 0, 0} Nat Nat Nat (instHPow.{0, 0} Nat Nat (Monoid.Pow.{0} Nat Nat.monoid)) p k2))))) (Semiring.toNonAssocSemiring.{0} (ZMod (HPow.hPow.{0, 0, 0} Nat Nat Nat (instHPow.{0, 0} Nat Nat instPowNat) p k1)) (Ring.toSemiring.{0} (ZMod (HPow.hPow.{0, 0, 0} Nat Nat Nat (instHPow.{0, 0} Nat Nat instPowNat) p k1)) (CommRing.toRing.{0} (ZMod (HPow.hPow.{0, 0, 0} Nat Nat Nat (instHPow.{0, 0} Nat Nat instPowNat) p k1)) (ZMod.commRing (HPow.hPow.{0, 0, 0} Nat Nat Nat (instHPow.{0, 0} Nat Nat instPowNat) p k1))))) (ZMod.castHom.{0} (HPow.hPow.{0, 0, 0} Nat Nat Nat (instHPow.{0, 0} Nat Nat (Monoid.Pow.{0} Nat Nat.monoid)) p k2) (HPow.hPow.{0, 0, 0} Nat Nat Nat (instHPow.{0, 0} Nat Nat (Monoid.Pow.{0} Nat Nat.monoid)) p k1) (pow_dvd_pow.{0} Nat Nat.monoid p k1 k2 hk) (ZMod (HPow.hPow.{0, 0, 0} Nat Nat Nat (instHPow.{0, 0} Nat Nat instPowNat) p k1)) (CommRing.toRing.{0} (ZMod (HPow.hPow.{0, 0, 0} Nat Nat Nat (instHPow.{0, 0} Nat Nat instPowNat) p k1)) (ZMod.commRing (HPow.hPow.{0, 0, 0} Nat Nat Nat (instHPow.{0, 0} Nat Nat instPowNat) p k1))) (ZMod.charP (HPow.hPow.{0, 0, 0} Nat Nat Nat (instHPow.{0, 0} Nat Nat instPowNat) p k1))) (f k2)) (f k1)), HasEquiv.Equiv.{1, 0} (PadicSeq p) (instHasEquiv.{1} (PadicSeq p) (CauSeq.equiv.{0, 0} Rat Rat Rat.instLinearOrderedFieldRat (NormedRing.toRing.{0} Rat (NormedCommRing.toNormedRing.{0} Rat (NormedField.toNormedCommRing.{0} Rat Rat.normedField))) (padicNorm p) (padicNorm.instIsAbsoluteValueRatInstOrderedSemiringRatSemiringPadicNorm p hp_prime))) (PadicInt.nthHomSeq.{u1} p hp_prime R _inst_1 (fun (k2 : Nat) => f k2) f_compat (OfNat.ofNat.{u1} R 1 (One.toOfNat1.{u1} R (NonAssocSemiring.toOne.{u1} R _inst_1)))) (OfNat.ofNat.{0} (PadicSeq p) 1 (One.toOfNat1.{0} (PadicSeq p) (CauSeq.instOneCauSeq.{0, 0} Rat Rat Rat.instLinearOrderedFieldRat (NormedRing.toRing.{0} Rat (NormedCommRing.toNormedRing.{0} Rat (NormedField.toNormedCommRing.{0} Rat Rat.normedField))) (padicNorm p) (padicNorm.instIsAbsoluteValueRatInstOrderedSemiringRatSemiringPadicNorm p hp_prime))))
+Case conversion may be inaccurate. Consider using '#align padic_int.nth_hom_seq_one PadicInt.nthHomSeq_oneₓ'. -/
-- this lemma ran into issues after changing to `ne_zero` and I'm not sure why.
theorem nthHomSeq_one : nthHomSeq f_compat 1 ≈ 1 :=
by
@@ -570,6 +730,12 @@ theorem nthHomSeq_one : nthHomSeq f_compat 1 ≈ 1 :=
rw [ZMod.cast_eq_val, ZMod.val_one, Nat.cast_one]
#align padic_int.nth_hom_seq_one PadicInt.nthHomSeq_one
+/- warning: padic_int.nth_hom_seq_add -> PadicInt.nthHomSeq_add is a dubious translation:
+lean 3 declaration is
+ forall {p : Nat} [hp_prime : Fact (Nat.Prime p)] {R : Type.{u1}} [_inst_1 : NonAssocSemiring.{u1} R] {f : forall (k : Nat), RingHom.{u1, 0} R (ZMod (HPow.hPow.{0, 0, 0} Nat Nat Nat (instHPow.{0, 0} Nat Nat (Monoid.Pow.{0} Nat Nat.monoid)) p k)) _inst_1 (NonAssocRing.toNonAssocSemiring.{0} (ZMod (HPow.hPow.{0, 0, 0} Nat Nat Nat (instHPow.{0, 0} Nat Nat (Monoid.Pow.{0} Nat Nat.monoid)) p k)) (Ring.toNonAssocRing.{0} (ZMod (HPow.hPow.{0, 0, 0} Nat Nat Nat (instHPow.{0, 0} Nat Nat (Monoid.Pow.{0} Nat Nat.monoid)) p k)) (CommRing.toRing.{0} (ZMod (HPow.hPow.{0, 0, 0} Nat Nat Nat (instHPow.{0, 0} Nat Nat (Monoid.Pow.{0} Nat Nat.monoid)) p k)) (ZMod.commRing (HPow.hPow.{0, 0, 0} Nat Nat Nat (instHPow.{0, 0} Nat Nat (Monoid.Pow.{0} Nat Nat.monoid)) p k)))))} (f_compat : forall (k1 : Nat) (k2 : Nat) (hk : LE.le.{0} Nat Nat.hasLe k1 k2), Eq.{succ u1} (RingHom.{u1, 0} R (ZMod (HPow.hPow.{0, 0, 0} Nat Nat Nat (instHPow.{0, 0} Nat Nat (Monoid.Pow.{0} Nat Nat.monoid)) p k1)) _inst_1 (NonAssocRing.toNonAssocSemiring.{0} (ZMod (HPow.hPow.{0, 0, 0} Nat Nat Nat (instHPow.{0, 0} Nat Nat (Monoid.Pow.{0} Nat Nat.monoid)) p k1)) (Ring.toNonAssocRing.{0} (ZMod (HPow.hPow.{0, 0, 0} Nat Nat Nat (instHPow.{0, 0} Nat Nat (Monoid.Pow.{0} Nat Nat.monoid)) p k1)) (CommRing.toRing.{0} (ZMod (HPow.hPow.{0, 0, 0} Nat Nat Nat (instHPow.{0, 0} Nat Nat (Monoid.Pow.{0} Nat Nat.monoid)) p k1)) (ZMod.commRing (HPow.hPow.{0, 0, 0} Nat Nat Nat (instHPow.{0, 0} Nat Nat (Monoid.Pow.{0} Nat Nat.monoid)) p k1)))))) (RingHom.comp.{u1, 0, 0} R (ZMod (HPow.hPow.{0, 0, 0} Nat Nat Nat (instHPow.{0, 0} Nat Nat (Monoid.Pow.{0} Nat Nat.monoid)) p k2)) (ZMod (HPow.hPow.{0, 0, 0} Nat Nat Nat (instHPow.{0, 0} Nat Nat (Monoid.Pow.{0} Nat Nat.monoid)) p k1)) _inst_1 (NonAssocRing.toNonAssocSemiring.{0} (ZMod (HPow.hPow.{0, 0, 0} Nat Nat Nat (instHPow.{0, 0} Nat Nat (Monoid.Pow.{0} Nat Nat.monoid)) p k2)) (Ring.toNonAssocRing.{0} (ZMod (HPow.hPow.{0, 0, 0} Nat Nat Nat (instHPow.{0, 0} Nat Nat (Monoid.Pow.{0} Nat Nat.monoid)) p k2)) (CommRing.toRing.{0} (ZMod (HPow.hPow.{0, 0, 0} Nat Nat Nat (instHPow.{0, 0} Nat Nat (Monoid.Pow.{0} Nat Nat.monoid)) p k2)) (ZMod.commRing (HPow.hPow.{0, 0, 0} Nat Nat Nat (instHPow.{0, 0} Nat Nat (Monoid.Pow.{0} Nat Nat.monoid)) p k2))))) (NonAssocRing.toNonAssocSemiring.{0} (ZMod (HPow.hPow.{0, 0, 0} Nat Nat Nat (instHPow.{0, 0} Nat Nat (Monoid.Pow.{0} Nat Nat.monoid)) p k1)) (Ring.toNonAssocRing.{0} (ZMod (HPow.hPow.{0, 0, 0} Nat Nat Nat (instHPow.{0, 0} Nat Nat (Monoid.Pow.{0} Nat Nat.monoid)) p k1)) (CommRing.toRing.{0} (ZMod (HPow.hPow.{0, 0, 0} Nat Nat Nat (instHPow.{0, 0} Nat Nat (Monoid.Pow.{0} Nat Nat.monoid)) p k1)) (ZMod.commRing (HPow.hPow.{0, 0, 0} Nat Nat Nat (instHPow.{0, 0} Nat Nat (Monoid.Pow.{0} Nat Nat.monoid)) p k1))))) (ZMod.castHom.{0} (HPow.hPow.{0, 0, 0} Nat Nat Nat (instHPow.{0, 0} Nat Nat (Monoid.Pow.{0} Nat Nat.monoid)) p k2) (HPow.hPow.{0, 0, 0} Nat Nat Nat (instHPow.{0, 0} Nat Nat (Monoid.Pow.{0} Nat Nat.monoid)) p k1) (pow_dvd_pow.{0} Nat Nat.monoid p k1 k2 hk) (ZMod (HPow.hPow.{0, 0, 0} Nat Nat Nat (instHPow.{0, 0} Nat Nat (Monoid.Pow.{0} Nat Nat.monoid)) p k1)) (CommRing.toRing.{0} (ZMod (HPow.hPow.{0, 0, 0} Nat Nat Nat (instHPow.{0, 0} Nat Nat (Monoid.Pow.{0} Nat Nat.monoid)) p k1)) (ZMod.commRing (HPow.hPow.{0, 0, 0} Nat Nat Nat (instHPow.{0, 0} Nat Nat (Monoid.Pow.{0} Nat Nat.monoid)) p k1))) (ZMod.charP (HPow.hPow.{0, 0, 0} Nat Nat Nat (instHPow.{0, 0} Nat Nat (Monoid.Pow.{0} Nat Nat.monoid)) p k1))) (f k2)) (f k1)) (r : R) (s : R), HasEquivₓ.Equiv.{1} (PadicSeq p) (setoidHasEquiv.{1} (PadicSeq p) (CauSeq.equiv.{0, 0} Rat Rat Rat.linearOrderedField (NormedRing.toRing.{0} Rat (NormedCommRing.toNormedRing.{0} Rat (NormedField.toNormedCommRing.{0} Rat Rat.normedField))) (padicNorm p) (padicNorm.isAbsoluteValue p hp_prime))) (PadicInt.nthHomSeq.{u1} p hp_prime R _inst_1 (fun (k2 : Nat) => f k2) f_compat (HAdd.hAdd.{u1, u1, u1} R R R (instHAdd.{u1} R (Distrib.toHasAdd.{u1} R (NonUnitalNonAssocSemiring.toDistrib.{u1} R (NonAssocSemiring.toNonUnitalNonAssocSemiring.{u1} R _inst_1)))) r s)) (HAdd.hAdd.{0, 0, 0} (PadicSeq p) (PadicSeq p) (PadicSeq p) (instHAdd.{0} (PadicSeq p) (CauSeq.hasAdd.{0, 0} Rat Rat Rat.linearOrderedField (NormedRing.toRing.{0} Rat (NormedCommRing.toNormedRing.{0} Rat (NormedField.toNormedCommRing.{0} Rat Rat.normedField))) (padicNorm p) (padicNorm.isAbsoluteValue p hp_prime))) (PadicInt.nthHomSeq.{u1} p hp_prime R _inst_1 (fun (k2 : Nat) => f k2) f_compat r) (PadicInt.nthHomSeq.{u1} p hp_prime R _inst_1 (fun (k2 : Nat) => f k2) f_compat s))
+but is expected to have type
+ forall {p : Nat} [hp_prime : Fact (Nat.Prime p)] {R : Type.{u1}} [_inst_1 : NonAssocSemiring.{u1} R] {f : forall (k : Nat), RingHom.{u1, 0} R (ZMod (HPow.hPow.{0, 0, 0} Nat Nat Nat (instHPow.{0, 0} Nat Nat instPowNat) p k)) _inst_1 (Semiring.toNonAssocSemiring.{0} (ZMod (HPow.hPow.{0, 0, 0} Nat Nat Nat (instHPow.{0, 0} Nat Nat instPowNat) p k)) (CommSemiring.toSemiring.{0} (ZMod (HPow.hPow.{0, 0, 0} Nat Nat Nat (instHPow.{0, 0} Nat Nat instPowNat) p k)) (CommRing.toCommSemiring.{0} (ZMod (HPow.hPow.{0, 0, 0} Nat Nat Nat (instHPow.{0, 0} Nat Nat instPowNat) p k)) (ZMod.commRing (HPow.hPow.{0, 0, 0} Nat Nat Nat (instHPow.{0, 0} Nat Nat instPowNat) p k)))))} (f_compat : forall (k1 : Nat) (k2 : Nat) (hk : LE.le.{0} Nat instLENat k1 k2), Eq.{succ u1} (RingHom.{u1, 0} R (ZMod (HPow.hPow.{0, 0, 0} Nat Nat Nat (instHPow.{0, 0} Nat Nat instPowNat) p k1)) _inst_1 (Semiring.toNonAssocSemiring.{0} (ZMod (HPow.hPow.{0, 0, 0} Nat Nat Nat (instHPow.{0, 0} Nat Nat instPowNat) p k1)) (Ring.toSemiring.{0} (ZMod (HPow.hPow.{0, 0, 0} Nat Nat Nat (instHPow.{0, 0} Nat Nat instPowNat) p k1)) (CommRing.toRing.{0} (ZMod (HPow.hPow.{0, 0, 0} Nat Nat Nat (instHPow.{0, 0} Nat Nat instPowNat) p k1)) (ZMod.commRing (HPow.hPow.{0, 0, 0} Nat Nat Nat (instHPow.{0, 0} Nat Nat instPowNat) p k1)))))) (RingHom.comp.{u1, 0, 0} R (ZMod (HPow.hPow.{0, 0, 0} Nat Nat Nat (instHPow.{0, 0} Nat Nat (Monoid.Pow.{0} Nat Nat.monoid)) p k2)) (ZMod (HPow.hPow.{0, 0, 0} Nat Nat Nat (instHPow.{0, 0} Nat Nat instPowNat) p k1)) _inst_1 (Semiring.toNonAssocSemiring.{0} (ZMod (HPow.hPow.{0, 0, 0} Nat Nat Nat (instHPow.{0, 0} Nat Nat (Monoid.Pow.{0} Nat Nat.monoid)) p k2)) (CommSemiring.toSemiring.{0} (ZMod (HPow.hPow.{0, 0, 0} Nat Nat Nat (instHPow.{0, 0} Nat Nat (Monoid.Pow.{0} Nat Nat.monoid)) p k2)) (CommRing.toCommSemiring.{0} (ZMod (HPow.hPow.{0, 0, 0} Nat Nat Nat (instHPow.{0, 0} Nat Nat (Monoid.Pow.{0} Nat Nat.monoid)) p k2)) (ZMod.commRing (HPow.hPow.{0, 0, 0} Nat Nat Nat (instHPow.{0, 0} Nat Nat (Monoid.Pow.{0} Nat Nat.monoid)) p k2))))) (Semiring.toNonAssocSemiring.{0} (ZMod (HPow.hPow.{0, 0, 0} Nat Nat Nat (instHPow.{0, 0} Nat Nat instPowNat) p k1)) (Ring.toSemiring.{0} (ZMod (HPow.hPow.{0, 0, 0} Nat Nat Nat (instHPow.{0, 0} Nat Nat instPowNat) p k1)) (CommRing.toRing.{0} (ZMod (HPow.hPow.{0, 0, 0} Nat Nat Nat (instHPow.{0, 0} Nat Nat instPowNat) p k1)) (ZMod.commRing (HPow.hPow.{0, 0, 0} Nat Nat Nat (instHPow.{0, 0} Nat Nat instPowNat) p k1))))) (ZMod.castHom.{0} (HPow.hPow.{0, 0, 0} Nat Nat Nat (instHPow.{0, 0} Nat Nat (Monoid.Pow.{0} Nat Nat.monoid)) p k2) (HPow.hPow.{0, 0, 0} Nat Nat Nat (instHPow.{0, 0} Nat Nat (Monoid.Pow.{0} Nat Nat.monoid)) p k1) (pow_dvd_pow.{0} Nat Nat.monoid p k1 k2 hk) (ZMod (HPow.hPow.{0, 0, 0} Nat Nat Nat (instHPow.{0, 0} Nat Nat instPowNat) p k1)) (CommRing.toRing.{0} (ZMod (HPow.hPow.{0, 0, 0} Nat Nat Nat (instHPow.{0, 0} Nat Nat instPowNat) p k1)) (ZMod.commRing (HPow.hPow.{0, 0, 0} Nat Nat Nat (instHPow.{0, 0} Nat Nat instPowNat) p k1))) (ZMod.charP (HPow.hPow.{0, 0, 0} Nat Nat Nat (instHPow.{0, 0} Nat Nat instPowNat) p k1))) (f k2)) (f k1)) (r : R) (s : R), HasEquiv.Equiv.{1, 0} (PadicSeq p) (instHasEquiv.{1} (PadicSeq p) (CauSeq.equiv.{0, 0} Rat Rat Rat.instLinearOrderedFieldRat (NormedRing.toRing.{0} Rat (NormedCommRing.toNormedRing.{0} Rat (NormedField.toNormedCommRing.{0} Rat Rat.normedField))) (padicNorm p) (padicNorm.instIsAbsoluteValueRatInstOrderedSemiringRatSemiringPadicNorm p hp_prime))) (PadicInt.nthHomSeq.{u1} p hp_prime R _inst_1 (fun (k2 : Nat) => f k2) f_compat (HAdd.hAdd.{u1, u1, u1} R R R (instHAdd.{u1} R (Distrib.toAdd.{u1} R (NonUnitalNonAssocSemiring.toDistrib.{u1} R (NonAssocSemiring.toNonUnitalNonAssocSemiring.{u1} R _inst_1)))) r s)) (HAdd.hAdd.{0, 0, 0} (PadicSeq p) (PadicSeq p) (PadicSeq p) (instHAdd.{0} (PadicSeq p) (CauSeq.instAddCauSeq.{0, 0} Rat Rat Rat.instLinearOrderedFieldRat (NormedRing.toRing.{0} Rat (NormedCommRing.toNormedRing.{0} Rat (NormedField.toNormedCommRing.{0} Rat Rat.normedField))) (padicNorm p) (padicNorm.instIsAbsoluteValueRatInstOrderedSemiringRatSemiringPadicNorm p hp_prime))) (PadicInt.nthHomSeq.{u1} p hp_prime R _inst_1 (fun (k2 : Nat) => f k2) f_compat r) (PadicInt.nthHomSeq.{u1} p hp_prime R _inst_1 (fun (k2 : Nat) => f k2) f_compat s))
+Case conversion may be inaccurate. Consider using '#align padic_int.nth_hom_seq_add PadicInt.nthHomSeq_addₓ'. -/
theorem nthHomSeq_add (r s : R) :
nthHomSeq f_compat (r + s) ≈ nthHomSeq f_compat r + nthHomSeq f_compat s :=
by
@@ -587,6 +753,12 @@ theorem nthHomSeq_add (r s : R) :
· infer_instance
#align padic_int.nth_hom_seq_add PadicInt.nthHomSeq_add
+/- warning: padic_int.nth_hom_seq_mul -> PadicInt.nthHomSeq_mul is a dubious translation:
+lean 3 declaration is
+ forall {p : Nat} [hp_prime : Fact (Nat.Prime p)] {R : Type.{u1}} [_inst_1 : NonAssocSemiring.{u1} R] {f : forall (k : Nat), RingHom.{u1, 0} R (ZMod (HPow.hPow.{0, 0, 0} Nat Nat Nat (instHPow.{0, 0} Nat Nat (Monoid.Pow.{0} Nat Nat.monoid)) p k)) _inst_1 (NonAssocRing.toNonAssocSemiring.{0} (ZMod (HPow.hPow.{0, 0, 0} Nat Nat Nat (instHPow.{0, 0} Nat Nat (Monoid.Pow.{0} Nat Nat.monoid)) p k)) (Ring.toNonAssocRing.{0} (ZMod (HPow.hPow.{0, 0, 0} Nat Nat Nat (instHPow.{0, 0} Nat Nat (Monoid.Pow.{0} Nat Nat.monoid)) p k)) (CommRing.toRing.{0} (ZMod (HPow.hPow.{0, 0, 0} Nat Nat Nat (instHPow.{0, 0} Nat Nat (Monoid.Pow.{0} Nat Nat.monoid)) p k)) (ZMod.commRing (HPow.hPow.{0, 0, 0} Nat Nat Nat (instHPow.{0, 0} Nat Nat (Monoid.Pow.{0} Nat Nat.monoid)) p k)))))} (f_compat : forall (k1 : Nat) (k2 : Nat) (hk : LE.le.{0} Nat Nat.hasLe k1 k2), Eq.{succ u1} (RingHom.{u1, 0} R (ZMod (HPow.hPow.{0, 0, 0} Nat Nat Nat (instHPow.{0, 0} Nat Nat (Monoid.Pow.{0} Nat Nat.monoid)) p k1)) _inst_1 (NonAssocRing.toNonAssocSemiring.{0} (ZMod (HPow.hPow.{0, 0, 0} Nat Nat Nat (instHPow.{0, 0} Nat Nat (Monoid.Pow.{0} Nat Nat.monoid)) p k1)) (Ring.toNonAssocRing.{0} (ZMod (HPow.hPow.{0, 0, 0} Nat Nat Nat (instHPow.{0, 0} Nat Nat (Monoid.Pow.{0} Nat Nat.monoid)) p k1)) (CommRing.toRing.{0} (ZMod (HPow.hPow.{0, 0, 0} Nat Nat Nat (instHPow.{0, 0} Nat Nat (Monoid.Pow.{0} Nat Nat.monoid)) p k1)) (ZMod.commRing (HPow.hPow.{0, 0, 0} Nat Nat Nat (instHPow.{0, 0} Nat Nat (Monoid.Pow.{0} Nat Nat.monoid)) p k1)))))) (RingHom.comp.{u1, 0, 0} R (ZMod (HPow.hPow.{0, 0, 0} Nat Nat Nat (instHPow.{0, 0} Nat Nat (Monoid.Pow.{0} Nat Nat.monoid)) p k2)) (ZMod (HPow.hPow.{0, 0, 0} Nat Nat Nat (instHPow.{0, 0} Nat Nat (Monoid.Pow.{0} Nat Nat.monoid)) p k1)) _inst_1 (NonAssocRing.toNonAssocSemiring.{0} (ZMod (HPow.hPow.{0, 0, 0} Nat Nat Nat (instHPow.{0, 0} Nat Nat (Monoid.Pow.{0} Nat Nat.monoid)) p k2)) (Ring.toNonAssocRing.{0} (ZMod (HPow.hPow.{0, 0, 0} Nat Nat Nat (instHPow.{0, 0} Nat Nat (Monoid.Pow.{0} Nat Nat.monoid)) p k2)) (CommRing.toRing.{0} (ZMod (HPow.hPow.{0, 0, 0} Nat Nat Nat (instHPow.{0, 0} Nat Nat (Monoid.Pow.{0} Nat Nat.monoid)) p k2)) (ZMod.commRing (HPow.hPow.{0, 0, 0} Nat Nat Nat (instHPow.{0, 0} Nat Nat (Monoid.Pow.{0} Nat Nat.monoid)) p k2))))) (NonAssocRing.toNonAssocSemiring.{0} (ZMod (HPow.hPow.{0, 0, 0} Nat Nat Nat (instHPow.{0, 0} Nat Nat (Monoid.Pow.{0} Nat Nat.monoid)) p k1)) (Ring.toNonAssocRing.{0} (ZMod (HPow.hPow.{0, 0, 0} Nat Nat Nat (instHPow.{0, 0} Nat Nat (Monoid.Pow.{0} Nat Nat.monoid)) p k1)) (CommRing.toRing.{0} (ZMod (HPow.hPow.{0, 0, 0} Nat Nat Nat (instHPow.{0, 0} Nat Nat (Monoid.Pow.{0} Nat Nat.monoid)) p k1)) (ZMod.commRing (HPow.hPow.{0, 0, 0} Nat Nat Nat (instHPow.{0, 0} Nat Nat (Monoid.Pow.{0} Nat Nat.monoid)) p k1))))) (ZMod.castHom.{0} (HPow.hPow.{0, 0, 0} Nat Nat Nat (instHPow.{0, 0} Nat Nat (Monoid.Pow.{0} Nat Nat.monoid)) p k2) (HPow.hPow.{0, 0, 0} Nat Nat Nat (instHPow.{0, 0} Nat Nat (Monoid.Pow.{0} Nat Nat.monoid)) p k1) (pow_dvd_pow.{0} Nat Nat.monoid p k1 k2 hk) (ZMod (HPow.hPow.{0, 0, 0} Nat Nat Nat (instHPow.{0, 0} Nat Nat (Monoid.Pow.{0} Nat Nat.monoid)) p k1)) (CommRing.toRing.{0} (ZMod (HPow.hPow.{0, 0, 0} Nat Nat Nat (instHPow.{0, 0} Nat Nat (Monoid.Pow.{0} Nat Nat.monoid)) p k1)) (ZMod.commRing (HPow.hPow.{0, 0, 0} Nat Nat Nat (instHPow.{0, 0} Nat Nat (Monoid.Pow.{0} Nat Nat.monoid)) p k1))) (ZMod.charP (HPow.hPow.{0, 0, 0} Nat Nat Nat (instHPow.{0, 0} Nat Nat (Monoid.Pow.{0} Nat Nat.monoid)) p k1))) (f k2)) (f k1)) (r : R) (s : R), HasEquivₓ.Equiv.{1} (PadicSeq p) (setoidHasEquiv.{1} (PadicSeq p) (CauSeq.equiv.{0, 0} Rat Rat Rat.linearOrderedField (NormedRing.toRing.{0} Rat (NormedCommRing.toNormedRing.{0} Rat (NormedField.toNormedCommRing.{0} Rat Rat.normedField))) (padicNorm p) (padicNorm.isAbsoluteValue p hp_prime))) (PadicInt.nthHomSeq.{u1} p hp_prime R _inst_1 (fun (k2 : Nat) => f k2) f_compat (HMul.hMul.{u1, u1, u1} R R R (instHMul.{u1} R (Distrib.toHasMul.{u1} R (NonUnitalNonAssocSemiring.toDistrib.{u1} R (NonAssocSemiring.toNonUnitalNonAssocSemiring.{u1} R _inst_1)))) r s)) (HMul.hMul.{0, 0, 0} (PadicSeq p) (PadicSeq p) (PadicSeq p) (instHMul.{0} (PadicSeq p) (CauSeq.hasMul.{0, 0} Rat Rat Rat.linearOrderedField (NormedRing.toRing.{0} Rat (NormedCommRing.toNormedRing.{0} Rat (NormedField.toNormedCommRing.{0} Rat Rat.normedField))) (padicNorm p) (padicNorm.isAbsoluteValue p hp_prime))) (PadicInt.nthHomSeq.{u1} p hp_prime R _inst_1 (fun (k2 : Nat) => f k2) f_compat r) (PadicInt.nthHomSeq.{u1} p hp_prime R _inst_1 (fun (k2 : Nat) => f k2) f_compat s))
+but is expected to have type
+ forall {p : Nat} [hp_prime : Fact (Nat.Prime p)] {R : Type.{u1}} [_inst_1 : NonAssocSemiring.{u1} R] {f : forall (k : Nat), RingHom.{u1, 0} R (ZMod (HPow.hPow.{0, 0, 0} Nat Nat Nat (instHPow.{0, 0} Nat Nat instPowNat) p k)) _inst_1 (Semiring.toNonAssocSemiring.{0} (ZMod (HPow.hPow.{0, 0, 0} Nat Nat Nat (instHPow.{0, 0} Nat Nat instPowNat) p k)) (CommSemiring.toSemiring.{0} (ZMod (HPow.hPow.{0, 0, 0} Nat Nat Nat (instHPow.{0, 0} Nat Nat instPowNat) p k)) (CommRing.toCommSemiring.{0} (ZMod (HPow.hPow.{0, 0, 0} Nat Nat Nat (instHPow.{0, 0} Nat Nat instPowNat) p k)) (ZMod.commRing (HPow.hPow.{0, 0, 0} Nat Nat Nat (instHPow.{0, 0} Nat Nat instPowNat) p k)))))} (f_compat : forall (k1 : Nat) (k2 : Nat) (hk : LE.le.{0} Nat instLENat k1 k2), Eq.{succ u1} (RingHom.{u1, 0} R (ZMod (HPow.hPow.{0, 0, 0} Nat Nat Nat (instHPow.{0, 0} Nat Nat instPowNat) p k1)) _inst_1 (Semiring.toNonAssocSemiring.{0} (ZMod (HPow.hPow.{0, 0, 0} Nat Nat Nat (instHPow.{0, 0} Nat Nat instPowNat) p k1)) (Ring.toSemiring.{0} (ZMod (HPow.hPow.{0, 0, 0} Nat Nat Nat (instHPow.{0, 0} Nat Nat instPowNat) p k1)) (CommRing.toRing.{0} (ZMod (HPow.hPow.{0, 0, 0} Nat Nat Nat (instHPow.{0, 0} Nat Nat instPowNat) p k1)) (ZMod.commRing (HPow.hPow.{0, 0, 0} Nat Nat Nat (instHPow.{0, 0} Nat Nat instPowNat) p k1)))))) (RingHom.comp.{u1, 0, 0} R (ZMod (HPow.hPow.{0, 0, 0} Nat Nat Nat (instHPow.{0, 0} Nat Nat (Monoid.Pow.{0} Nat Nat.monoid)) p k2)) (ZMod (HPow.hPow.{0, 0, 0} Nat Nat Nat (instHPow.{0, 0} Nat Nat instPowNat) p k1)) _inst_1 (Semiring.toNonAssocSemiring.{0} (ZMod (HPow.hPow.{0, 0, 0} Nat Nat Nat (instHPow.{0, 0} Nat Nat (Monoid.Pow.{0} Nat Nat.monoid)) p k2)) (CommSemiring.toSemiring.{0} (ZMod (HPow.hPow.{0, 0, 0} Nat Nat Nat (instHPow.{0, 0} Nat Nat (Monoid.Pow.{0} Nat Nat.monoid)) p k2)) (CommRing.toCommSemiring.{0} (ZMod (HPow.hPow.{0, 0, 0} Nat Nat Nat (instHPow.{0, 0} Nat Nat (Monoid.Pow.{0} Nat Nat.monoid)) p k2)) (ZMod.commRing (HPow.hPow.{0, 0, 0} Nat Nat Nat (instHPow.{0, 0} Nat Nat (Monoid.Pow.{0} Nat Nat.monoid)) p k2))))) (Semiring.toNonAssocSemiring.{0} (ZMod (HPow.hPow.{0, 0, 0} Nat Nat Nat (instHPow.{0, 0} Nat Nat instPowNat) p k1)) (Ring.toSemiring.{0} (ZMod (HPow.hPow.{0, 0, 0} Nat Nat Nat (instHPow.{0, 0} Nat Nat instPowNat) p k1)) (CommRing.toRing.{0} (ZMod (HPow.hPow.{0, 0, 0} Nat Nat Nat (instHPow.{0, 0} Nat Nat instPowNat) p k1)) (ZMod.commRing (HPow.hPow.{0, 0, 0} Nat Nat Nat (instHPow.{0, 0} Nat Nat instPowNat) p k1))))) (ZMod.castHom.{0} (HPow.hPow.{0, 0, 0} Nat Nat Nat (instHPow.{0, 0} Nat Nat (Monoid.Pow.{0} Nat Nat.monoid)) p k2) (HPow.hPow.{0, 0, 0} Nat Nat Nat (instHPow.{0, 0} Nat Nat (Monoid.Pow.{0} Nat Nat.monoid)) p k1) (pow_dvd_pow.{0} Nat Nat.monoid p k1 k2 hk) (ZMod (HPow.hPow.{0, 0, 0} Nat Nat Nat (instHPow.{0, 0} Nat Nat instPowNat) p k1)) (CommRing.toRing.{0} (ZMod (HPow.hPow.{0, 0, 0} Nat Nat Nat (instHPow.{0, 0} Nat Nat instPowNat) p k1)) (ZMod.commRing (HPow.hPow.{0, 0, 0} Nat Nat Nat (instHPow.{0, 0} Nat Nat instPowNat) p k1))) (ZMod.charP (HPow.hPow.{0, 0, 0} Nat Nat Nat (instHPow.{0, 0} Nat Nat instPowNat) p k1))) (f k2)) (f k1)) (r : R) (s : R), HasEquiv.Equiv.{1, 0} (PadicSeq p) (instHasEquiv.{1} (PadicSeq p) (CauSeq.equiv.{0, 0} Rat Rat Rat.instLinearOrderedFieldRat (NormedRing.toRing.{0} Rat (NormedCommRing.toNormedRing.{0} Rat (NormedField.toNormedCommRing.{0} Rat Rat.normedField))) (padicNorm p) (padicNorm.instIsAbsoluteValueRatInstOrderedSemiringRatSemiringPadicNorm p hp_prime))) (PadicInt.nthHomSeq.{u1} p hp_prime R _inst_1 (fun (k2 : Nat) => f k2) f_compat (HMul.hMul.{u1, u1, u1} R R R (instHMul.{u1} R (NonUnitalNonAssocSemiring.toMul.{u1} R (NonAssocSemiring.toNonUnitalNonAssocSemiring.{u1} R _inst_1))) r s)) (HMul.hMul.{0, 0, 0} (PadicSeq p) (PadicSeq p) (PadicSeq p) (instHMul.{0} (PadicSeq p) (CauSeq.instMulCauSeq.{0, 0} Rat Rat Rat.instLinearOrderedFieldRat (NormedRing.toRing.{0} Rat (NormedCommRing.toNormedRing.{0} Rat (NormedField.toNormedCommRing.{0} Rat Rat.normedField))) (padicNorm p) (padicNorm.instIsAbsoluteValueRatInstOrderedSemiringRatSemiringPadicNorm p hp_prime))) (PadicInt.nthHomSeq.{u1} p hp_prime R _inst_1 (fun (k2 : Nat) => f k2) f_compat r) (PadicInt.nthHomSeq.{u1} p hp_prime R _inst_1 (fun (k2 : Nat) => f k2) f_compat s))
+Case conversion may be inaccurate. Consider using '#align padic_int.nth_hom_seq_mul PadicInt.nthHomSeq_mulₓ'. -/
theorem nthHomSeq_mul (r s : R) :
nthHomSeq f_compat (r * s) ≈ nthHomSeq f_compat r * nthHomSeq f_compat s :=
by
@@ -604,6 +776,7 @@ theorem nthHomSeq_mul (r s : R) :
· infer_instance
#align padic_int.nth_hom_seq_mul PadicInt.nthHomSeq_mul
+#print PadicInt.limNthHom /-
/--
`lim_nth_hom f_compat r` is the limit of a sequence `f` of compatible ring homs `R →+* zmod (p^k)`.
This is itself a ring hom: see `padic_int.lift`.
@@ -611,7 +784,14 @@ This is itself a ring hom: see `padic_int.lift`.
def limNthHom (r : R) : ℤ_[p] :=
ofIntSeq (nthHom f r) (isCauSeq_nthHom f_compat r)
#align padic_int.lim_nth_hom PadicInt.limNthHom
+-/
+/- warning: padic_int.lim_nth_hom_spec -> PadicInt.limNthHom_spec is a dubious translation:
+lean 3 declaration is
+ forall {p : Nat} [hp_prime : Fact (Nat.Prime p)] {R : Type.{u1}} [_inst_1 : NonAssocSemiring.{u1} R] {f : forall (k : Nat), RingHom.{u1, 0} R (ZMod (HPow.hPow.{0, 0, 0} Nat Nat Nat (instHPow.{0, 0} Nat Nat (Monoid.Pow.{0} Nat Nat.monoid)) p k)) _inst_1 (NonAssocRing.toNonAssocSemiring.{0} (ZMod (HPow.hPow.{0, 0, 0} Nat Nat Nat (instHPow.{0, 0} Nat Nat (Monoid.Pow.{0} Nat Nat.monoid)) p k)) (Ring.toNonAssocRing.{0} (ZMod (HPow.hPow.{0, 0, 0} Nat Nat Nat (instHPow.{0, 0} Nat Nat (Monoid.Pow.{0} Nat Nat.monoid)) p k)) (CommRing.toRing.{0} (ZMod (HPow.hPow.{0, 0, 0} Nat Nat Nat (instHPow.{0, 0} Nat Nat (Monoid.Pow.{0} Nat Nat.monoid)) p k)) (ZMod.commRing (HPow.hPow.{0, 0, 0} Nat Nat Nat (instHPow.{0, 0} Nat Nat (Monoid.Pow.{0} Nat Nat.monoid)) p k)))))} (f_compat : forall (k1 : Nat) (k2 : Nat) (hk : LE.le.{0} Nat Nat.hasLe k1 k2), Eq.{succ u1} (RingHom.{u1, 0} R (ZMod (HPow.hPow.{0, 0, 0} Nat Nat Nat (instHPow.{0, 0} Nat Nat (Monoid.Pow.{0} Nat Nat.monoid)) p k1)) _inst_1 (NonAssocRing.toNonAssocSemiring.{0} (ZMod (HPow.hPow.{0, 0, 0} Nat Nat Nat (instHPow.{0, 0} Nat Nat (Monoid.Pow.{0} Nat Nat.monoid)) p k1)) (Ring.toNonAssocRing.{0} (ZMod (HPow.hPow.{0, 0, 0} Nat Nat Nat (instHPow.{0, 0} Nat Nat (Monoid.Pow.{0} Nat Nat.monoid)) p k1)) (CommRing.toRing.{0} (ZMod (HPow.hPow.{0, 0, 0} Nat Nat Nat (instHPow.{0, 0} Nat Nat (Monoid.Pow.{0} Nat Nat.monoid)) p k1)) (ZMod.commRing (HPow.hPow.{0, 0, 0} Nat Nat Nat (instHPow.{0, 0} Nat Nat (Monoid.Pow.{0} Nat Nat.monoid)) p k1)))))) (RingHom.comp.{u1, 0, 0} R (ZMod (HPow.hPow.{0, 0, 0} Nat Nat Nat (instHPow.{0, 0} Nat Nat (Monoid.Pow.{0} Nat Nat.monoid)) p k2)) (ZMod (HPow.hPow.{0, 0, 0} Nat Nat Nat (instHPow.{0, 0} Nat Nat (Monoid.Pow.{0} Nat Nat.monoid)) p k1)) _inst_1 (NonAssocRing.toNonAssocSemiring.{0} (ZMod (HPow.hPow.{0, 0, 0} Nat Nat Nat (instHPow.{0, 0} Nat Nat (Monoid.Pow.{0} Nat Nat.monoid)) p k2)) (Ring.toNonAssocRing.{0} (ZMod (HPow.hPow.{0, 0, 0} Nat Nat Nat (instHPow.{0, 0} Nat Nat (Monoid.Pow.{0} Nat Nat.monoid)) p k2)) (CommRing.toRing.{0} (ZMod (HPow.hPow.{0, 0, 0} Nat Nat Nat (instHPow.{0, 0} Nat Nat (Monoid.Pow.{0} Nat Nat.monoid)) p k2)) (ZMod.commRing (HPow.hPow.{0, 0, 0} Nat Nat Nat (instHPow.{0, 0} Nat Nat (Monoid.Pow.{0} Nat Nat.monoid)) p k2))))) (NonAssocRing.toNonAssocSemiring.{0} (ZMod (HPow.hPow.{0, 0, 0} Nat Nat Nat (instHPow.{0, 0} Nat Nat (Monoid.Pow.{0} Nat Nat.monoid)) p k1)) (Ring.toNonAssocRing.{0} (ZMod (HPow.hPow.{0, 0, 0} Nat Nat Nat (instHPow.{0, 0} Nat Nat (Monoid.Pow.{0} Nat Nat.monoid)) p k1)) (CommRing.toRing.{0} (ZMod (HPow.hPow.{0, 0, 0} Nat Nat Nat (instHPow.{0, 0} Nat Nat (Monoid.Pow.{0} Nat Nat.monoid)) p k1)) (ZMod.commRing (HPow.hPow.{0, 0, 0} Nat Nat Nat (instHPow.{0, 0} Nat Nat (Monoid.Pow.{0} Nat Nat.monoid)) p k1))))) (ZMod.castHom.{0} (HPow.hPow.{0, 0, 0} Nat Nat Nat (instHPow.{0, 0} Nat Nat (Monoid.Pow.{0} Nat Nat.monoid)) p k2) (HPow.hPow.{0, 0, 0} Nat Nat Nat (instHPow.{0, 0} Nat Nat (Monoid.Pow.{0} Nat Nat.monoid)) p k1) (pow_dvd_pow.{0} Nat Nat.monoid p k1 k2 hk) (ZMod (HPow.hPow.{0, 0, 0} Nat Nat Nat (instHPow.{0, 0} Nat Nat (Monoid.Pow.{0} Nat Nat.monoid)) p k1)) (CommRing.toRing.{0} (ZMod (HPow.hPow.{0, 0, 0} Nat Nat Nat (instHPow.{0, 0} Nat Nat (Monoid.Pow.{0} Nat Nat.monoid)) p k1)) (ZMod.commRing (HPow.hPow.{0, 0, 0} Nat Nat Nat (instHPow.{0, 0} Nat Nat (Monoid.Pow.{0} Nat Nat.monoid)) p k1))) (ZMod.charP (HPow.hPow.{0, 0, 0} Nat Nat Nat (instHPow.{0, 0} Nat Nat (Monoid.Pow.{0} Nat Nat.monoid)) p k1))) (f k2)) (f k1)) (r : R) (ε : Real), (LT.lt.{0} Real Real.hasLt (OfNat.ofNat.{0} Real 0 (OfNat.mk.{0} Real 0 (Zero.zero.{0} Real Real.hasZero))) ε) -> (Exists.{1} Nat (fun (N : Nat) => forall (n : Nat), (GE.ge.{0} Nat Nat.hasLe n N) -> (LT.lt.{0} Real Real.hasLt (Norm.norm.{0} (PadicInt p hp_prime) (PadicInt.hasNorm p hp_prime) (HSub.hSub.{0, 0, 0} (PadicInt p hp_prime) (PadicInt p hp_prime) (PadicInt p hp_prime) (instHSub.{0} (PadicInt p hp_prime) (PadicInt.hasSub p hp_prime)) (PadicInt.limNthHom.{u1} p hp_prime R _inst_1 (fun (k2 : Nat) => f k2) f_compat r) ((fun (a : Type) (b : Type) [self : HasLiftT.{1, 1} a b] => self.0) Int (PadicInt p hp_prime) (HasLiftT.mk.{1, 1} Int (PadicInt p hp_prime) (CoeTCₓ.coe.{1, 1} Int (PadicInt p hp_prime) (Int.castCoe.{0} (PadicInt p hp_prime) (AddGroupWithOne.toHasIntCast.{0} (PadicInt p hp_prime) (AddCommGroupWithOne.toAddGroupWithOne.{0} (PadicInt p hp_prime) (Ring.toAddCommGroupWithOne.{0} (PadicInt p hp_prime) (NormedRing.toRing.{0} (PadicInt p hp_prime) (NormedCommRing.toNormedRing.{0} (PadicInt p hp_prime) (PadicInt.normedCommRing p hp_prime))))))))) (PadicInt.nthHom.{u1} p R _inst_1 f r n)))) ε)))
+but is expected to have type
+ forall {p : Nat} [hp_prime : Fact (Nat.Prime p)] {R : Type.{u1}} [_inst_1 : NonAssocSemiring.{u1} R] {f : forall (k : Nat), RingHom.{u1, 0} R (ZMod (HPow.hPow.{0, 0, 0} Nat Nat Nat (instHPow.{0, 0} Nat Nat instPowNat) p k)) _inst_1 (Semiring.toNonAssocSemiring.{0} (ZMod (HPow.hPow.{0, 0, 0} Nat Nat Nat (instHPow.{0, 0} Nat Nat instPowNat) p k)) (CommSemiring.toSemiring.{0} (ZMod (HPow.hPow.{0, 0, 0} Nat Nat Nat (instHPow.{0, 0} Nat Nat instPowNat) p k)) (CommRing.toCommSemiring.{0} (ZMod (HPow.hPow.{0, 0, 0} Nat Nat Nat (instHPow.{0, 0} Nat Nat instPowNat) p k)) (ZMod.commRing (HPow.hPow.{0, 0, 0} Nat Nat Nat (instHPow.{0, 0} Nat Nat instPowNat) p k)))))} (f_compat : forall (k1 : Nat) (k2 : Nat) (hk : LE.le.{0} Nat instLENat k1 k2), Eq.{succ u1} (RingHom.{u1, 0} R (ZMod (HPow.hPow.{0, 0, 0} Nat Nat Nat (instHPow.{0, 0} Nat Nat instPowNat) p k1)) _inst_1 (Semiring.toNonAssocSemiring.{0} (ZMod (HPow.hPow.{0, 0, 0} Nat Nat Nat (instHPow.{0, 0} Nat Nat instPowNat) p k1)) (Ring.toSemiring.{0} (ZMod (HPow.hPow.{0, 0, 0} Nat Nat Nat (instHPow.{0, 0} Nat Nat instPowNat) p k1)) (CommRing.toRing.{0} (ZMod (HPow.hPow.{0, 0, 0} Nat Nat Nat (instHPow.{0, 0} Nat Nat instPowNat) p k1)) (ZMod.commRing (HPow.hPow.{0, 0, 0} Nat Nat Nat (instHPow.{0, 0} Nat Nat instPowNat) p k1)))))) (RingHom.comp.{u1, 0, 0} R (ZMod (HPow.hPow.{0, 0, 0} Nat Nat Nat (instHPow.{0, 0} Nat Nat (Monoid.Pow.{0} Nat Nat.monoid)) p k2)) (ZMod (HPow.hPow.{0, 0, 0} Nat Nat Nat (instHPow.{0, 0} Nat Nat instPowNat) p k1)) _inst_1 (Semiring.toNonAssocSemiring.{0} (ZMod (HPow.hPow.{0, 0, 0} Nat Nat Nat (instHPow.{0, 0} Nat Nat (Monoid.Pow.{0} Nat Nat.monoid)) p k2)) (CommSemiring.toSemiring.{0} (ZMod (HPow.hPow.{0, 0, 0} Nat Nat Nat (instHPow.{0, 0} Nat Nat (Monoid.Pow.{0} Nat Nat.monoid)) p k2)) (CommRing.toCommSemiring.{0} (ZMod (HPow.hPow.{0, 0, 0} Nat Nat Nat (instHPow.{0, 0} Nat Nat (Monoid.Pow.{0} Nat Nat.monoid)) p k2)) (ZMod.commRing (HPow.hPow.{0, 0, 0} Nat Nat Nat (instHPow.{0, 0} Nat Nat (Monoid.Pow.{0} Nat Nat.monoid)) p k2))))) (Semiring.toNonAssocSemiring.{0} (ZMod (HPow.hPow.{0, 0, 0} Nat Nat Nat (instHPow.{0, 0} Nat Nat instPowNat) p k1)) (Ring.toSemiring.{0} (ZMod (HPow.hPow.{0, 0, 0} Nat Nat Nat (instHPow.{0, 0} Nat Nat instPowNat) p k1)) (CommRing.toRing.{0} (ZMod (HPow.hPow.{0, 0, 0} Nat Nat Nat (instHPow.{0, 0} Nat Nat instPowNat) p k1)) (ZMod.commRing (HPow.hPow.{0, 0, 0} Nat Nat Nat (instHPow.{0, 0} Nat Nat instPowNat) p k1))))) (ZMod.castHom.{0} (HPow.hPow.{0, 0, 0} Nat Nat Nat (instHPow.{0, 0} Nat Nat (Monoid.Pow.{0} Nat Nat.monoid)) p k2) (HPow.hPow.{0, 0, 0} Nat Nat Nat (instHPow.{0, 0} Nat Nat (Monoid.Pow.{0} Nat Nat.monoid)) p k1) (pow_dvd_pow.{0} Nat Nat.monoid p k1 k2 hk) (ZMod (HPow.hPow.{0, 0, 0} Nat Nat Nat (instHPow.{0, 0} Nat Nat instPowNat) p k1)) (CommRing.toRing.{0} (ZMod (HPow.hPow.{0, 0, 0} Nat Nat Nat (instHPow.{0, 0} Nat Nat instPowNat) p k1)) (ZMod.commRing (HPow.hPow.{0, 0, 0} Nat Nat Nat (instHPow.{0, 0} Nat Nat instPowNat) p k1))) (ZMod.charP (HPow.hPow.{0, 0, 0} Nat Nat Nat (instHPow.{0, 0} Nat Nat instPowNat) p k1))) (f k2)) (f k1)) (r : R) (ε : Real), (LT.lt.{0} Real Real.instLTReal (OfNat.ofNat.{0} Real 0 (Zero.toOfNat0.{0} Real Real.instZeroReal)) ε) -> (Exists.{1} Nat (fun (N : Nat) => forall (n : Nat), (GE.ge.{0} Nat instLENat n N) -> (LT.lt.{0} Real Real.instLTReal (Norm.norm.{0} (PadicInt p hp_prime) (PadicInt.instNormPadicInt p hp_prime) (HSub.hSub.{0, 0, 0} (PadicInt p hp_prime) (PadicInt p hp_prime) (PadicInt p hp_prime) (instHSub.{0} (PadicInt p hp_prime) (PadicInt.instSubPadicInt p hp_prime)) (PadicInt.limNthHom.{u1} p hp_prime R _inst_1 (fun (k2 : Nat) => f k2) f_compat r) (Int.cast.{0} (PadicInt p hp_prime) (Ring.toIntCast.{0} (PadicInt p hp_prime) (NormedRing.toRing.{0} (PadicInt p hp_prime) (NormedCommRing.toNormedRing.{0} (PadicInt p hp_prime) (PadicInt.instNormedCommRingPadicInt p hp_prime)))) (PadicInt.nthHom.{u1} p R _inst_1 f r n)))) ε)))
+Case conversion may be inaccurate. Consider using '#align padic_int.lim_nth_hom_spec PadicInt.limNthHom_specₓ'. -/
theorem limNthHom_spec (r : R) :
∀ ε : ℝ, 0 < ε → ∃ N : ℕ, ∀ n ≥ N, ‖limNthHom f_compat r - nthHom f r n‖ < ε :=
by
@@ -627,23 +807,53 @@ theorem limNthHom_spec (r : R) :
exact hN _ hn
#align padic_int.lim_nth_hom_spec PadicInt.limNthHom_spec
+/- warning: padic_int.lim_nth_hom_zero -> PadicInt.limNthHom_zero is a dubious translation:
+lean 3 declaration is
+ forall {p : Nat} [hp_prime : Fact (Nat.Prime p)] {R : Type.{u1}} [_inst_1 : NonAssocSemiring.{u1} R] {f : forall (k : Nat), RingHom.{u1, 0} R (ZMod (HPow.hPow.{0, 0, 0} Nat Nat Nat (instHPow.{0, 0} Nat Nat (Monoid.Pow.{0} Nat Nat.monoid)) p k)) _inst_1 (NonAssocRing.toNonAssocSemiring.{0} (ZMod (HPow.hPow.{0, 0, 0} Nat Nat Nat (instHPow.{0, 0} Nat Nat (Monoid.Pow.{0} Nat Nat.monoid)) p k)) (Ring.toNonAssocRing.{0} (ZMod (HPow.hPow.{0, 0, 0} Nat Nat Nat (instHPow.{0, 0} Nat Nat (Monoid.Pow.{0} Nat Nat.monoid)) p k)) (CommRing.toRing.{0} (ZMod (HPow.hPow.{0, 0, 0} Nat Nat Nat (instHPow.{0, 0} Nat Nat (Monoid.Pow.{0} Nat Nat.monoid)) p k)) (ZMod.commRing (HPow.hPow.{0, 0, 0} Nat Nat Nat (instHPow.{0, 0} Nat Nat (Monoid.Pow.{0} Nat Nat.monoid)) p k)))))} (f_compat : forall (k1 : Nat) (k2 : Nat) (hk : LE.le.{0} Nat Nat.hasLe k1 k2), Eq.{succ u1} (RingHom.{u1, 0} R (ZMod (HPow.hPow.{0, 0, 0} Nat Nat Nat (instHPow.{0, 0} Nat Nat (Monoid.Pow.{0} Nat Nat.monoid)) p k1)) _inst_1 (NonAssocRing.toNonAssocSemiring.{0} (ZMod (HPow.hPow.{0, 0, 0} Nat Nat Nat (instHPow.{0, 0} Nat Nat (Monoid.Pow.{0} Nat Nat.monoid)) p k1)) (Ring.toNonAssocRing.{0} (ZMod (HPow.hPow.{0, 0, 0} Nat Nat Nat (instHPow.{0, 0} Nat Nat (Monoid.Pow.{0} Nat Nat.monoid)) p k1)) (CommRing.toRing.{0} (ZMod (HPow.hPow.{0, 0, 0} Nat Nat Nat (instHPow.{0, 0} Nat Nat (Monoid.Pow.{0} Nat Nat.monoid)) p k1)) (ZMod.commRing (HPow.hPow.{0, 0, 0} Nat Nat Nat (instHPow.{0, 0} Nat Nat (Monoid.Pow.{0} Nat Nat.monoid)) p k1)))))) (RingHom.comp.{u1, 0, 0} R (ZMod (HPow.hPow.{0, 0, 0} Nat Nat Nat (instHPow.{0, 0} Nat Nat (Monoid.Pow.{0} Nat Nat.monoid)) p k2)) (ZMod (HPow.hPow.{0, 0, 0} Nat Nat Nat (instHPow.{0, 0} Nat Nat (Monoid.Pow.{0} Nat Nat.monoid)) p k1)) _inst_1 (NonAssocRing.toNonAssocSemiring.{0} (ZMod (HPow.hPow.{0, 0, 0} Nat Nat Nat (instHPow.{0, 0} Nat Nat (Monoid.Pow.{0} Nat Nat.monoid)) p k2)) (Ring.toNonAssocRing.{0} (ZMod (HPow.hPow.{0, 0, 0} Nat Nat Nat (instHPow.{0, 0} Nat Nat (Monoid.Pow.{0} Nat Nat.monoid)) p k2)) (CommRing.toRing.{0} (ZMod (HPow.hPow.{0, 0, 0} Nat Nat Nat (instHPow.{0, 0} Nat Nat (Monoid.Pow.{0} Nat Nat.monoid)) p k2)) (ZMod.commRing (HPow.hPow.{0, 0, 0} Nat Nat Nat (instHPow.{0, 0} Nat Nat (Monoid.Pow.{0} Nat Nat.monoid)) p k2))))) (NonAssocRing.toNonAssocSemiring.{0} (ZMod (HPow.hPow.{0, 0, 0} Nat Nat Nat (instHPow.{0, 0} Nat Nat (Monoid.Pow.{0} Nat Nat.monoid)) p k1)) (Ring.toNonAssocRing.{0} (ZMod (HPow.hPow.{0, 0, 0} Nat Nat Nat (instHPow.{0, 0} Nat Nat (Monoid.Pow.{0} Nat Nat.monoid)) p k1)) (CommRing.toRing.{0} (ZMod (HPow.hPow.{0, 0, 0} Nat Nat Nat (instHPow.{0, 0} Nat Nat (Monoid.Pow.{0} Nat Nat.monoid)) p k1)) (ZMod.commRing (HPow.hPow.{0, 0, 0} Nat Nat Nat (instHPow.{0, 0} Nat Nat (Monoid.Pow.{0} Nat Nat.monoid)) p k1))))) (ZMod.castHom.{0} (HPow.hPow.{0, 0, 0} Nat Nat Nat (instHPow.{0, 0} Nat Nat (Monoid.Pow.{0} Nat Nat.monoid)) p k2) (HPow.hPow.{0, 0, 0} Nat Nat Nat (instHPow.{0, 0} Nat Nat (Monoid.Pow.{0} Nat Nat.monoid)) p k1) (pow_dvd_pow.{0} Nat Nat.monoid p k1 k2 hk) (ZMod (HPow.hPow.{0, 0, 0} Nat Nat Nat (instHPow.{0, 0} Nat Nat (Monoid.Pow.{0} Nat Nat.monoid)) p k1)) (CommRing.toRing.{0} (ZMod (HPow.hPow.{0, 0, 0} Nat Nat Nat (instHPow.{0, 0} Nat Nat (Monoid.Pow.{0} Nat Nat.monoid)) p k1)) (ZMod.commRing (HPow.hPow.{0, 0, 0} Nat Nat Nat (instHPow.{0, 0} Nat Nat (Monoid.Pow.{0} Nat Nat.monoid)) p k1))) (ZMod.charP (HPow.hPow.{0, 0, 0} Nat Nat Nat (instHPow.{0, 0} Nat Nat (Monoid.Pow.{0} Nat Nat.monoid)) p k1))) (f k2)) (f k1)), Eq.{1} (PadicInt p hp_prime) (PadicInt.limNthHom.{u1} p hp_prime R _inst_1 (fun (k2 : Nat) => f k2) f_compat (OfNat.ofNat.{u1} R 0 (OfNat.mk.{u1} R 0 (Zero.zero.{u1} R (MulZeroClass.toHasZero.{u1} R (NonUnitalNonAssocSemiring.toMulZeroClass.{u1} R (NonAssocSemiring.toNonUnitalNonAssocSemiring.{u1} R _inst_1))))))) (OfNat.ofNat.{0} (PadicInt p hp_prime) 0 (OfNat.mk.{0} (PadicInt p hp_prime) 0 (Zero.zero.{0} (PadicInt p hp_prime) (PadicInt.hasZero p hp_prime))))
+but is expected to have type
+ forall {p : Nat} [hp_prime : Fact (Nat.Prime p)] {R : Type.{u1}} [_inst_1 : NonAssocSemiring.{u1} R] {f : forall (k : Nat), RingHom.{u1, 0} R (ZMod (HPow.hPow.{0, 0, 0} Nat Nat Nat (instHPow.{0, 0} Nat Nat instPowNat) p k)) _inst_1 (Semiring.toNonAssocSemiring.{0} (ZMod (HPow.hPow.{0, 0, 0} Nat Nat Nat (instHPow.{0, 0} Nat Nat instPowNat) p k)) (CommSemiring.toSemiring.{0} (ZMod (HPow.hPow.{0, 0, 0} Nat Nat Nat (instHPow.{0, 0} Nat Nat instPowNat) p k)) (CommRing.toCommSemiring.{0} (ZMod (HPow.hPow.{0, 0, 0} Nat Nat Nat (instHPow.{0, 0} Nat Nat instPowNat) p k)) (ZMod.commRing (HPow.hPow.{0, 0, 0} Nat Nat Nat (instHPow.{0, 0} Nat Nat instPowNat) p k)))))} (f_compat : forall (k1 : Nat) (k2 : Nat) (hk : LE.le.{0} Nat instLENat k1 k2), Eq.{succ u1} (RingHom.{u1, 0} R (ZMod (HPow.hPow.{0, 0, 0} Nat Nat Nat (instHPow.{0, 0} Nat Nat instPowNat) p k1)) _inst_1 (Semiring.toNonAssocSemiring.{0} (ZMod (HPow.hPow.{0, 0, 0} Nat Nat Nat (instHPow.{0, 0} Nat Nat instPowNat) p k1)) (Ring.toSemiring.{0} (ZMod (HPow.hPow.{0, 0, 0} Nat Nat Nat (instHPow.{0, 0} Nat Nat instPowNat) p k1)) (CommRing.toRing.{0} (ZMod (HPow.hPow.{0, 0, 0} Nat Nat Nat (instHPow.{0, 0} Nat Nat instPowNat) p k1)) (ZMod.commRing (HPow.hPow.{0, 0, 0} Nat Nat Nat (instHPow.{0, 0} Nat Nat instPowNat) p k1)))))) (RingHom.comp.{u1, 0, 0} R (ZMod (HPow.hPow.{0, 0, 0} Nat Nat Nat (instHPow.{0, 0} Nat Nat (Monoid.Pow.{0} Nat Nat.monoid)) p k2)) (ZMod (HPow.hPow.{0, 0, 0} Nat Nat Nat (instHPow.{0, 0} Nat Nat instPowNat) p k1)) _inst_1 (Semiring.toNonAssocSemiring.{0} (ZMod (HPow.hPow.{0, 0, 0} Nat Nat Nat (instHPow.{0, 0} Nat Nat (Monoid.Pow.{0} Nat Nat.monoid)) p k2)) (CommSemiring.toSemiring.{0} (ZMod (HPow.hPow.{0, 0, 0} Nat Nat Nat (instHPow.{0, 0} Nat Nat (Monoid.Pow.{0} Nat Nat.monoid)) p k2)) (CommRing.toCommSemiring.{0} (ZMod (HPow.hPow.{0, 0, 0} Nat Nat Nat (instHPow.{0, 0} Nat Nat (Monoid.Pow.{0} Nat Nat.monoid)) p k2)) (ZMod.commRing (HPow.hPow.{0, 0, 0} Nat Nat Nat (instHPow.{0, 0} Nat Nat (Monoid.Pow.{0} Nat Nat.monoid)) p k2))))) (Semiring.toNonAssocSemiring.{0} (ZMod (HPow.hPow.{0, 0, 0} Nat Nat Nat (instHPow.{0, 0} Nat Nat instPowNat) p k1)) (Ring.toSemiring.{0} (ZMod (HPow.hPow.{0, 0, 0} Nat Nat Nat (instHPow.{0, 0} Nat Nat instPowNat) p k1)) (CommRing.toRing.{0} (ZMod (HPow.hPow.{0, 0, 0} Nat Nat Nat (instHPow.{0, 0} Nat Nat instPowNat) p k1)) (ZMod.commRing (HPow.hPow.{0, 0, 0} Nat Nat Nat (instHPow.{0, 0} Nat Nat instPowNat) p k1))))) (ZMod.castHom.{0} (HPow.hPow.{0, 0, 0} Nat Nat Nat (instHPow.{0, 0} Nat Nat (Monoid.Pow.{0} Nat Nat.monoid)) p k2) (HPow.hPow.{0, 0, 0} Nat Nat Nat (instHPow.{0, 0} Nat Nat (Monoid.Pow.{0} Nat Nat.monoid)) p k1) (pow_dvd_pow.{0} Nat Nat.monoid p k1 k2 hk) (ZMod (HPow.hPow.{0, 0, 0} Nat Nat Nat (instHPow.{0, 0} Nat Nat instPowNat) p k1)) (CommRing.toRing.{0} (ZMod (HPow.hPow.{0, 0, 0} Nat Nat Nat (instHPow.{0, 0} Nat Nat instPowNat) p k1)) (ZMod.commRing (HPow.hPow.{0, 0, 0} Nat Nat Nat (instHPow.{0, 0} Nat Nat instPowNat) p k1))) (ZMod.charP (HPow.hPow.{0, 0, 0} Nat Nat Nat (instHPow.{0, 0} Nat Nat instPowNat) p k1))) (f k2)) (f k1)), Eq.{1} (PadicInt p hp_prime) (PadicInt.limNthHom.{u1} p hp_prime R _inst_1 (fun (k2 : Nat) => f k2) f_compat (OfNat.ofNat.{u1} R 0 (Zero.toOfNat0.{u1} R (MulZeroOneClass.toZero.{u1} R (NonAssocSemiring.toMulZeroOneClass.{u1} R _inst_1))))) (OfNat.ofNat.{0} (PadicInt p hp_prime) 0 (Zero.toOfNat0.{0} (PadicInt p hp_prime) (PadicInt.instZeroPadicInt p hp_prime)))
+Case conversion may be inaccurate. Consider using '#align padic_int.lim_nth_hom_zero PadicInt.limNthHom_zeroₓ'. -/
theorem limNthHom_zero : limNthHom f_compat 0 = 0 := by simp [lim_nth_hom] <;> rfl
#align padic_int.lim_nth_hom_zero PadicInt.limNthHom_zero
+/- warning: padic_int.lim_nth_hom_one -> PadicInt.limNthHom_one is a dubious translation:
+lean 3 declaration is
+ forall {p : Nat} [hp_prime : Fact (Nat.Prime p)] {R : Type.{u1}} [_inst_1 : NonAssocSemiring.{u1} R] {f : forall (k : Nat), RingHom.{u1, 0} R (ZMod (HPow.hPow.{0, 0, 0} Nat Nat Nat (instHPow.{0, 0} Nat Nat (Monoid.Pow.{0} Nat Nat.monoid)) p k)) _inst_1 (NonAssocRing.toNonAssocSemiring.{0} (ZMod (HPow.hPow.{0, 0, 0} Nat Nat Nat (instHPow.{0, 0} Nat Nat (Monoid.Pow.{0} Nat Nat.monoid)) p k)) (Ring.toNonAssocRing.{0} (ZMod (HPow.hPow.{0, 0, 0} Nat Nat Nat (instHPow.{0, 0} Nat Nat (Monoid.Pow.{0} Nat Nat.monoid)) p k)) (CommRing.toRing.{0} (ZMod (HPow.hPow.{0, 0, 0} Nat Nat Nat (instHPow.{0, 0} Nat Nat (Monoid.Pow.{0} Nat Nat.monoid)) p k)) (ZMod.commRing (HPow.hPow.{0, 0, 0} Nat Nat Nat (instHPow.{0, 0} Nat Nat (Monoid.Pow.{0} Nat Nat.monoid)) p k)))))} (f_compat : forall (k1 : Nat) (k2 : Nat) (hk : LE.le.{0} Nat Nat.hasLe k1 k2), Eq.{succ u1} (RingHom.{u1, 0} R (ZMod (HPow.hPow.{0, 0, 0} Nat Nat Nat (instHPow.{0, 0} Nat Nat (Monoid.Pow.{0} Nat Nat.monoid)) p k1)) _inst_1 (NonAssocRing.toNonAssocSemiring.{0} (ZMod (HPow.hPow.{0, 0, 0} Nat Nat Nat (instHPow.{0, 0} Nat Nat (Monoid.Pow.{0} Nat Nat.monoid)) p k1)) (Ring.toNonAssocRing.{0} (ZMod (HPow.hPow.{0, 0, 0} Nat Nat Nat (instHPow.{0, 0} Nat Nat (Monoid.Pow.{0} Nat Nat.monoid)) p k1)) (CommRing.toRing.{0} (ZMod (HPow.hPow.{0, 0, 0} Nat Nat Nat (instHPow.{0, 0} Nat Nat (Monoid.Pow.{0} Nat Nat.monoid)) p k1)) (ZMod.commRing (HPow.hPow.{0, 0, 0} Nat Nat Nat (instHPow.{0, 0} Nat Nat (Monoid.Pow.{0} Nat Nat.monoid)) p k1)))))) (RingHom.comp.{u1, 0, 0} R (ZMod (HPow.hPow.{0, 0, 0} Nat Nat Nat (instHPow.{0, 0} Nat Nat (Monoid.Pow.{0} Nat Nat.monoid)) p k2)) (ZMod (HPow.hPow.{0, 0, 0} Nat Nat Nat (instHPow.{0, 0} Nat Nat (Monoid.Pow.{0} Nat Nat.monoid)) p k1)) _inst_1 (NonAssocRing.toNonAssocSemiring.{0} (ZMod (HPow.hPow.{0, 0, 0} Nat Nat Nat (instHPow.{0, 0} Nat Nat (Monoid.Pow.{0} Nat Nat.monoid)) p k2)) (Ring.toNonAssocRing.{0} (ZMod (HPow.hPow.{0, 0, 0} Nat Nat Nat (instHPow.{0, 0} Nat Nat (Monoid.Pow.{0} Nat Nat.monoid)) p k2)) (CommRing.toRing.{0} (ZMod (HPow.hPow.{0, 0, 0} Nat Nat Nat (instHPow.{0, 0} Nat Nat (Monoid.Pow.{0} Nat Nat.monoid)) p k2)) (ZMod.commRing (HPow.hPow.{0, 0, 0} Nat Nat Nat (instHPow.{0, 0} Nat Nat (Monoid.Pow.{0} Nat Nat.monoid)) p k2))))) (NonAssocRing.toNonAssocSemiring.{0} (ZMod (HPow.hPow.{0, 0, 0} Nat Nat Nat (instHPow.{0, 0} Nat Nat (Monoid.Pow.{0} Nat Nat.monoid)) p k1)) (Ring.toNonAssocRing.{0} (ZMod (HPow.hPow.{0, 0, 0} Nat Nat Nat (instHPow.{0, 0} Nat Nat (Monoid.Pow.{0} Nat Nat.monoid)) p k1)) (CommRing.toRing.{0} (ZMod (HPow.hPow.{0, 0, 0} Nat Nat Nat (instHPow.{0, 0} Nat Nat (Monoid.Pow.{0} Nat Nat.monoid)) p k1)) (ZMod.commRing (HPow.hPow.{0, 0, 0} Nat Nat Nat (instHPow.{0, 0} Nat Nat (Monoid.Pow.{0} Nat Nat.monoid)) p k1))))) (ZMod.castHom.{0} (HPow.hPow.{0, 0, 0} Nat Nat Nat (instHPow.{0, 0} Nat Nat (Monoid.Pow.{0} Nat Nat.monoid)) p k2) (HPow.hPow.{0, 0, 0} Nat Nat Nat (instHPow.{0, 0} Nat Nat (Monoid.Pow.{0} Nat Nat.monoid)) p k1) (pow_dvd_pow.{0} Nat Nat.monoid p k1 k2 hk) (ZMod (HPow.hPow.{0, 0, 0} Nat Nat Nat (instHPow.{0, 0} Nat Nat (Monoid.Pow.{0} Nat Nat.monoid)) p k1)) (CommRing.toRing.{0} (ZMod (HPow.hPow.{0, 0, 0} Nat Nat Nat (instHPow.{0, 0} Nat Nat (Monoid.Pow.{0} Nat Nat.monoid)) p k1)) (ZMod.commRing (HPow.hPow.{0, 0, 0} Nat Nat Nat (instHPow.{0, 0} Nat Nat (Monoid.Pow.{0} Nat Nat.monoid)) p k1))) (ZMod.charP (HPow.hPow.{0, 0, 0} Nat Nat Nat (instHPow.{0, 0} Nat Nat (Monoid.Pow.{0} Nat Nat.monoid)) p k1))) (f k2)) (f k1)), Eq.{1} (PadicInt p hp_prime) (PadicInt.limNthHom.{u1} p hp_prime R _inst_1 (fun (k2 : Nat) => f k2) f_compat (OfNat.ofNat.{u1} R 1 (OfNat.mk.{u1} R 1 (One.one.{u1} R (AddMonoidWithOne.toOne.{u1} R (AddCommMonoidWithOne.toAddMonoidWithOne.{u1} R (NonAssocSemiring.toAddCommMonoidWithOne.{u1} R _inst_1))))))) (OfNat.ofNat.{0} (PadicInt p hp_prime) 1 (OfNat.mk.{0} (PadicInt p hp_prime) 1 (One.one.{0} (PadicInt p hp_prime) (PadicInt.hasOne p hp_prime))))
+but is expected to have type
+ forall {p : Nat} [hp_prime : Fact (Nat.Prime p)] {R : Type.{u1}} [_inst_1 : NonAssocSemiring.{u1} R] {f : forall (k : Nat), RingHom.{u1, 0} R (ZMod (HPow.hPow.{0, 0, 0} Nat Nat Nat (instHPow.{0, 0} Nat Nat instPowNat) p k)) _inst_1 (Semiring.toNonAssocSemiring.{0} (ZMod (HPow.hPow.{0, 0, 0} Nat Nat Nat (instHPow.{0, 0} Nat Nat instPowNat) p k)) (CommSemiring.toSemiring.{0} (ZMod (HPow.hPow.{0, 0, 0} Nat Nat Nat (instHPow.{0, 0} Nat Nat instPowNat) p k)) (CommRing.toCommSemiring.{0} (ZMod (HPow.hPow.{0, 0, 0} Nat Nat Nat (instHPow.{0, 0} Nat Nat instPowNat) p k)) (ZMod.commRing (HPow.hPow.{0, 0, 0} Nat Nat Nat (instHPow.{0, 0} Nat Nat instPowNat) p k)))))} (f_compat : forall (k1 : Nat) (k2 : Nat) (hk : LE.le.{0} Nat instLENat k1 k2), Eq.{succ u1} (RingHom.{u1, 0} R (ZMod (HPow.hPow.{0, 0, 0} Nat Nat Nat (instHPow.{0, 0} Nat Nat instPowNat) p k1)) _inst_1 (Semiring.toNonAssocSemiring.{0} (ZMod (HPow.hPow.{0, 0, 0} Nat Nat Nat (instHPow.{0, 0} Nat Nat instPowNat) p k1)) (Ring.toSemiring.{0} (ZMod (HPow.hPow.{0, 0, 0} Nat Nat Nat (instHPow.{0, 0} Nat Nat instPowNat) p k1)) (CommRing.toRing.{0} (ZMod (HPow.hPow.{0, 0, 0} Nat Nat Nat (instHPow.{0, 0} Nat Nat instPowNat) p k1)) (ZMod.commRing (HPow.hPow.{0, 0, 0} Nat Nat Nat (instHPow.{0, 0} Nat Nat instPowNat) p k1)))))) (RingHom.comp.{u1, 0, 0} R (ZMod (HPow.hPow.{0, 0, 0} Nat Nat Nat (instHPow.{0, 0} Nat Nat (Monoid.Pow.{0} Nat Nat.monoid)) p k2)) (ZMod (HPow.hPow.{0, 0, 0} Nat Nat Nat (instHPow.{0, 0} Nat Nat instPowNat) p k1)) _inst_1 (Semiring.toNonAssocSemiring.{0} (ZMod (HPow.hPow.{0, 0, 0} Nat Nat Nat (instHPow.{0, 0} Nat Nat (Monoid.Pow.{0} Nat Nat.monoid)) p k2)) (CommSemiring.toSemiring.{0} (ZMod (HPow.hPow.{0, 0, 0} Nat Nat Nat (instHPow.{0, 0} Nat Nat (Monoid.Pow.{0} Nat Nat.monoid)) p k2)) (CommRing.toCommSemiring.{0} (ZMod (HPow.hPow.{0, 0, 0} Nat Nat Nat (instHPow.{0, 0} Nat Nat (Monoid.Pow.{0} Nat Nat.monoid)) p k2)) (ZMod.commRing (HPow.hPow.{0, 0, 0} Nat Nat Nat (instHPow.{0, 0} Nat Nat (Monoid.Pow.{0} Nat Nat.monoid)) p k2))))) (Semiring.toNonAssocSemiring.{0} (ZMod (HPow.hPow.{0, 0, 0} Nat Nat Nat (instHPow.{0, 0} Nat Nat instPowNat) p k1)) (Ring.toSemiring.{0} (ZMod (HPow.hPow.{0, 0, 0} Nat Nat Nat (instHPow.{0, 0} Nat Nat instPowNat) p k1)) (CommRing.toRing.{0} (ZMod (HPow.hPow.{0, 0, 0} Nat Nat Nat (instHPow.{0, 0} Nat Nat instPowNat) p k1)) (ZMod.commRing (HPow.hPow.{0, 0, 0} Nat Nat Nat (instHPow.{0, 0} Nat Nat instPowNat) p k1))))) (ZMod.castHom.{0} (HPow.hPow.{0, 0, 0} Nat Nat Nat (instHPow.{0, 0} Nat Nat (Monoid.Pow.{0} Nat Nat.monoid)) p k2) (HPow.hPow.{0, 0, 0} Nat Nat Nat (instHPow.{0, 0} Nat Nat (Monoid.Pow.{0} Nat Nat.monoid)) p k1) (pow_dvd_pow.{0} Nat Nat.monoid p k1 k2 hk) (ZMod (HPow.hPow.{0, 0, 0} Nat Nat Nat (instHPow.{0, 0} Nat Nat instPowNat) p k1)) (CommRing.toRing.{0} (ZMod (HPow.hPow.{0, 0, 0} Nat Nat Nat (instHPow.{0, 0} Nat Nat instPowNat) p k1)) (ZMod.commRing (HPow.hPow.{0, 0, 0} Nat Nat Nat (instHPow.{0, 0} Nat Nat instPowNat) p k1))) (ZMod.charP (HPow.hPow.{0, 0, 0} Nat Nat Nat (instHPow.{0, 0} Nat Nat instPowNat) p k1))) (f k2)) (f k1)), Eq.{1} (PadicInt p hp_prime) (PadicInt.limNthHom.{u1} p hp_prime R _inst_1 (fun (k2 : Nat) => f k2) f_compat (OfNat.ofNat.{u1} R 1 (One.toOfNat1.{u1} R (NonAssocSemiring.toOne.{u1} R _inst_1)))) (OfNat.ofNat.{0} (PadicInt p hp_prime) 1 (One.toOfNat1.{0} (PadicInt p hp_prime) (PadicInt.instOnePadicInt p hp_prime)))
+Case conversion may be inaccurate. Consider using '#align padic_int.lim_nth_hom_one PadicInt.limNthHom_oneₓ'. -/
theorem limNthHom_one : limNthHom f_compat 1 = 1 :=
Subtype.ext <| Quot.sound <| nthHomSeq_one _
#align padic_int.lim_nth_hom_one PadicInt.limNthHom_one
+/- warning: padic_int.lim_nth_hom_add -> PadicInt.limNthHom_add is a dubious translation:
+lean 3 declaration is
+ forall {p : Nat} [hp_prime : Fact (Nat.Prime p)] {R : Type.{u1}} [_inst_1 : NonAssocSemiring.{u1} R] {f : forall (k : Nat), RingHom.{u1, 0} R (ZMod (HPow.hPow.{0, 0, 0} Nat Nat Nat (instHPow.{0, 0} Nat Nat (Monoid.Pow.{0} Nat Nat.monoid)) p k)) _inst_1 (NonAssocRing.toNonAssocSemiring.{0} (ZMod (HPow.hPow.{0, 0, 0} Nat Nat Nat (instHPow.{0, 0} Nat Nat (Monoid.Pow.{0} Nat Nat.monoid)) p k)) (Ring.toNonAssocRing.{0} (ZMod (HPow.hPow.{0, 0, 0} Nat Nat Nat (instHPow.{0, 0} Nat Nat (Monoid.Pow.{0} Nat Nat.monoid)) p k)) (CommRing.toRing.{0} (ZMod (HPow.hPow.{0, 0, 0} Nat Nat Nat (instHPow.{0, 0} Nat Nat (Monoid.Pow.{0} Nat Nat.monoid)) p k)) (ZMod.commRing (HPow.hPow.{0, 0, 0} Nat Nat Nat (instHPow.{0, 0} Nat Nat (Monoid.Pow.{0} Nat Nat.monoid)) p k)))))} (f_compat : forall (k1 : Nat) (k2 : Nat) (hk : LE.le.{0} Nat Nat.hasLe k1 k2), Eq.{succ u1} (RingHom.{u1, 0} R (ZMod (HPow.hPow.{0, 0, 0} Nat Nat Nat (instHPow.{0, 0} Nat Nat (Monoid.Pow.{0} Nat Nat.monoid)) p k1)) _inst_1 (NonAssocRing.toNonAssocSemiring.{0} (ZMod (HPow.hPow.{0, 0, 0} Nat Nat Nat (instHPow.{0, 0} Nat Nat (Monoid.Pow.{0} Nat Nat.monoid)) p k1)) (Ring.toNonAssocRing.{0} (ZMod (HPow.hPow.{0, 0, 0} Nat Nat Nat (instHPow.{0, 0} Nat Nat (Monoid.Pow.{0} Nat Nat.monoid)) p k1)) (CommRing.toRing.{0} (ZMod (HPow.hPow.{0, 0, 0} Nat Nat Nat (instHPow.{0, 0} Nat Nat (Monoid.Pow.{0} Nat Nat.monoid)) p k1)) (ZMod.commRing (HPow.hPow.{0, 0, 0} Nat Nat Nat (instHPow.{0, 0} Nat Nat (Monoid.Pow.{0} Nat Nat.monoid)) p k1)))))) (RingHom.comp.{u1, 0, 0} R (ZMod (HPow.hPow.{0, 0, 0} Nat Nat Nat (instHPow.{0, 0} Nat Nat (Monoid.Pow.{0} Nat Nat.monoid)) p k2)) (ZMod (HPow.hPow.{0, 0, 0} Nat Nat Nat (instHPow.{0, 0} Nat Nat (Monoid.Pow.{0} Nat Nat.monoid)) p k1)) _inst_1 (NonAssocRing.toNonAssocSemiring.{0} (ZMod (HPow.hPow.{0, 0, 0} Nat Nat Nat (instHPow.{0, 0} Nat Nat (Monoid.Pow.{0} Nat Nat.monoid)) p k2)) (Ring.toNonAssocRing.{0} (ZMod (HPow.hPow.{0, 0, 0} Nat Nat Nat (instHPow.{0, 0} Nat Nat (Monoid.Pow.{0} Nat Nat.monoid)) p k2)) (CommRing.toRing.{0} (ZMod (HPow.hPow.{0, 0, 0} Nat Nat Nat (instHPow.{0, 0} Nat Nat (Monoid.Pow.{0} Nat Nat.monoid)) p k2)) (ZMod.commRing (HPow.hPow.{0, 0, 0} Nat Nat Nat (instHPow.{0, 0} Nat Nat (Monoid.Pow.{0} Nat Nat.monoid)) p k2))))) (NonAssocRing.toNonAssocSemiring.{0} (ZMod (HPow.hPow.{0, 0, 0} Nat Nat Nat (instHPow.{0, 0} Nat Nat (Monoid.Pow.{0} Nat Nat.monoid)) p k1)) (Ring.toNonAssocRing.{0} (ZMod (HPow.hPow.{0, 0, 0} Nat Nat Nat (instHPow.{0, 0} Nat Nat (Monoid.Pow.{0} Nat Nat.monoid)) p k1)) (CommRing.toRing.{0} (ZMod (HPow.hPow.{0, 0, 0} Nat Nat Nat (instHPow.{0, 0} Nat Nat (Monoid.Pow.{0} Nat Nat.monoid)) p k1)) (ZMod.commRing (HPow.hPow.{0, 0, 0} Nat Nat Nat (instHPow.{0, 0} Nat Nat (Monoid.Pow.{0} Nat Nat.monoid)) p k1))))) (ZMod.castHom.{0} (HPow.hPow.{0, 0, 0} Nat Nat Nat (instHPow.{0, 0} Nat Nat (Monoid.Pow.{0} Nat Nat.monoid)) p k2) (HPow.hPow.{0, 0, 0} Nat Nat Nat (instHPow.{0, 0} Nat Nat (Monoid.Pow.{0} Nat Nat.monoid)) p k1) (pow_dvd_pow.{0} Nat Nat.monoid p k1 k2 hk) (ZMod (HPow.hPow.{0, 0, 0} Nat Nat Nat (instHPow.{0, 0} Nat Nat (Monoid.Pow.{0} Nat Nat.monoid)) p k1)) (CommRing.toRing.{0} (ZMod (HPow.hPow.{0, 0, 0} Nat Nat Nat (instHPow.{0, 0} Nat Nat (Monoid.Pow.{0} Nat Nat.monoid)) p k1)) (ZMod.commRing (HPow.hPow.{0, 0, 0} Nat Nat Nat (instHPow.{0, 0} Nat Nat (Monoid.Pow.{0} Nat Nat.monoid)) p k1))) (ZMod.charP (HPow.hPow.{0, 0, 0} Nat Nat Nat (instHPow.{0, 0} Nat Nat (Monoid.Pow.{0} Nat Nat.monoid)) p k1))) (f k2)) (f k1)) (r : R) (s : R), Eq.{1} (PadicInt p hp_prime) (PadicInt.limNthHom.{u1} p hp_prime R _inst_1 (fun (k2 : Nat) => f k2) f_compat (HAdd.hAdd.{u1, u1, u1} R R R (instHAdd.{u1} R (Distrib.toHasAdd.{u1} R (NonUnitalNonAssocSemiring.toDistrib.{u1} R (NonAssocSemiring.toNonUnitalNonAssocSemiring.{u1} R _inst_1)))) r s)) (HAdd.hAdd.{0, 0, 0} (PadicInt p hp_prime) (PadicInt p hp_prime) (PadicInt p hp_prime) (instHAdd.{0} (PadicInt p hp_prime) (PadicInt.hasAdd p hp_prime)) (PadicInt.limNthHom.{u1} p hp_prime R _inst_1 (fun (k2 : Nat) => f k2) f_compat r) (PadicInt.limNthHom.{u1} p hp_prime R _inst_1 (fun (k2 : Nat) => f k2) f_compat s))
+but is expected to have type
+ forall {p : Nat} [hp_prime : Fact (Nat.Prime p)] {R : Type.{u1}} [_inst_1 : NonAssocSemiring.{u1} R] {f : forall (k : Nat), RingHom.{u1, 0} R (ZMod (HPow.hPow.{0, 0, 0} Nat Nat Nat (instHPow.{0, 0} Nat Nat instPowNat) p k)) _inst_1 (Semiring.toNonAssocSemiring.{0} (ZMod (HPow.hPow.{0, 0, 0} Nat Nat Nat (instHPow.{0, 0} Nat Nat instPowNat) p k)) (CommSemiring.toSemiring.{0} (ZMod (HPow.hPow.{0, 0, 0} Nat Nat Nat (instHPow.{0, 0} Nat Nat instPowNat) p k)) (CommRing.toCommSemiring.{0} (ZMod (HPow.hPow.{0, 0, 0} Nat Nat Nat (instHPow.{0, 0} Nat Nat instPowNat) p k)) (ZMod.commRing (HPow.hPow.{0, 0, 0} Nat Nat Nat (instHPow.{0, 0} Nat Nat instPowNat) p k)))))} (f_compat : forall (k1 : Nat) (k2 : Nat) (hk : LE.le.{0} Nat instLENat k1 k2), Eq.{succ u1} (RingHom.{u1, 0} R (ZMod (HPow.hPow.{0, 0, 0} Nat Nat Nat (instHPow.{0, 0} Nat Nat instPowNat) p k1)) _inst_1 (Semiring.toNonAssocSemiring.{0} (ZMod (HPow.hPow.{0, 0, 0} Nat Nat Nat (instHPow.{0, 0} Nat Nat instPowNat) p k1)) (Ring.toSemiring.{0} (ZMod (HPow.hPow.{0, 0, 0} Nat Nat Nat (instHPow.{0, 0} Nat Nat instPowNat) p k1)) (CommRing.toRing.{0} (ZMod (HPow.hPow.{0, 0, 0} Nat Nat Nat (instHPow.{0, 0} Nat Nat instPowNat) p k1)) (ZMod.commRing (HPow.hPow.{0, 0, 0} Nat Nat Nat (instHPow.{0, 0} Nat Nat instPowNat) p k1)))))) (RingHom.comp.{u1, 0, 0} R (ZMod (HPow.hPow.{0, 0, 0} Nat Nat Nat (instHPow.{0, 0} Nat Nat (Monoid.Pow.{0} Nat Nat.monoid)) p k2)) (ZMod (HPow.hPow.{0, 0, 0} Nat Nat Nat (instHPow.{0, 0} Nat Nat instPowNat) p k1)) _inst_1 (Semiring.toNonAssocSemiring.{0} (ZMod (HPow.hPow.{0, 0, 0} Nat Nat Nat (instHPow.{0, 0} Nat Nat (Monoid.Pow.{0} Nat Nat.monoid)) p k2)) (CommSemiring.toSemiring.{0} (ZMod (HPow.hPow.{0, 0, 0} Nat Nat Nat (instHPow.{0, 0} Nat Nat (Monoid.Pow.{0} Nat Nat.monoid)) p k2)) (CommRing.toCommSemiring.{0} (ZMod (HPow.hPow.{0, 0, 0} Nat Nat Nat (instHPow.{0, 0} Nat Nat (Monoid.Pow.{0} Nat Nat.monoid)) p k2)) (ZMod.commRing (HPow.hPow.{0, 0, 0} Nat Nat Nat (instHPow.{0, 0} Nat Nat (Monoid.Pow.{0} Nat Nat.monoid)) p k2))))) (Semiring.toNonAssocSemiring.{0} (ZMod (HPow.hPow.{0, 0, 0} Nat Nat Nat (instHPow.{0, 0} Nat Nat instPowNat) p k1)) (Ring.toSemiring.{0} (ZMod (HPow.hPow.{0, 0, 0} Nat Nat Nat (instHPow.{0, 0} Nat Nat instPowNat) p k1)) (CommRing.toRing.{0} (ZMod (HPow.hPow.{0, 0, 0} Nat Nat Nat (instHPow.{0, 0} Nat Nat instPowNat) p k1)) (ZMod.commRing (HPow.hPow.{0, 0, 0} Nat Nat Nat (instHPow.{0, 0} Nat Nat instPowNat) p k1))))) (ZMod.castHom.{0} (HPow.hPow.{0, 0, 0} Nat Nat Nat (instHPow.{0, 0} Nat Nat (Monoid.Pow.{0} Nat Nat.monoid)) p k2) (HPow.hPow.{0, 0, 0} Nat Nat Nat (instHPow.{0, 0} Nat Nat (Monoid.Pow.{0} Nat Nat.monoid)) p k1) (pow_dvd_pow.{0} Nat Nat.monoid p k1 k2 hk) (ZMod (HPow.hPow.{0, 0, 0} Nat Nat Nat (instHPow.{0, 0} Nat Nat instPowNat) p k1)) (CommRing.toRing.{0} (ZMod (HPow.hPow.{0, 0, 0} Nat Nat Nat (instHPow.{0, 0} Nat Nat instPowNat) p k1)) (ZMod.commRing (HPow.hPow.{0, 0, 0} Nat Nat Nat (instHPow.{0, 0} Nat Nat instPowNat) p k1))) (ZMod.charP (HPow.hPow.{0, 0, 0} Nat Nat Nat (instHPow.{0, 0} Nat Nat instPowNat) p k1))) (f k2)) (f k1)) (r : R) (s : R), Eq.{1} (PadicInt p hp_prime) (PadicInt.limNthHom.{u1} p hp_prime R _inst_1 (fun (k2 : Nat) => f k2) f_compat (HAdd.hAdd.{u1, u1, u1} R R R (instHAdd.{u1} R (Distrib.toAdd.{u1} R (NonUnitalNonAssocSemiring.toDistrib.{u1} R (NonAssocSemiring.toNonUnitalNonAssocSemiring.{u1} R _inst_1)))) r s)) (HAdd.hAdd.{0, 0, 0} (PadicInt p hp_prime) (PadicInt p hp_prime) (PadicInt p hp_prime) (instHAdd.{0} (PadicInt p hp_prime) (PadicInt.instAddPadicInt p hp_prime)) (PadicInt.limNthHom.{u1} p hp_prime R _inst_1 (fun (k2 : Nat) => f k2) f_compat r) (PadicInt.limNthHom.{u1} p hp_prime R _inst_1 (fun (k2 : Nat) => f k2) f_compat s))
+Case conversion may be inaccurate. Consider using '#align padic_int.lim_nth_hom_add PadicInt.limNthHom_addₓ'. -/
theorem limNthHom_add (r s : R) :
limNthHom f_compat (r + s) = limNthHom f_compat r + limNthHom f_compat s :=
Subtype.ext <| Quot.sound <| nthHomSeq_add _ _ _
#align padic_int.lim_nth_hom_add PadicInt.limNthHom_add
+/- warning: padic_int.lim_nth_hom_mul -> PadicInt.limNthHom_mul is a dubious translation:
+lean 3 declaration is
+ forall {p : Nat} [hp_prime : Fact (Nat.Prime p)] {R : Type.{u1}} [_inst_1 : NonAssocSemiring.{u1} R] {f : forall (k : Nat), RingHom.{u1, 0} R (ZMod (HPow.hPow.{0, 0, 0} Nat Nat Nat (instHPow.{0, 0} Nat Nat (Monoid.Pow.{0} Nat Nat.monoid)) p k)) _inst_1 (NonAssocRing.toNonAssocSemiring.{0} (ZMod (HPow.hPow.{0, 0, 0} Nat Nat Nat (instHPow.{0, 0} Nat Nat (Monoid.Pow.{0} Nat Nat.monoid)) p k)) (Ring.toNonAssocRing.{0} (ZMod (HPow.hPow.{0, 0, 0} Nat Nat Nat (instHPow.{0, 0} Nat Nat (Monoid.Pow.{0} Nat Nat.monoid)) p k)) (CommRing.toRing.{0} (ZMod (HPow.hPow.{0, 0, 0} Nat Nat Nat (instHPow.{0, 0} Nat Nat (Monoid.Pow.{0} Nat Nat.monoid)) p k)) (ZMod.commRing (HPow.hPow.{0, 0, 0} Nat Nat Nat (instHPow.{0, 0} Nat Nat (Monoid.Pow.{0} Nat Nat.monoid)) p k)))))} (f_compat : forall (k1 : Nat) (k2 : Nat) (hk : LE.le.{0} Nat Nat.hasLe k1 k2), Eq.{succ u1} (RingHom.{u1, 0} R (ZMod (HPow.hPow.{0, 0, 0} Nat Nat Nat (instHPow.{0, 0} Nat Nat (Monoid.Pow.{0} Nat Nat.monoid)) p k1)) _inst_1 (NonAssocRing.toNonAssocSemiring.{0} (ZMod (HPow.hPow.{0, 0, 0} Nat Nat Nat (instHPow.{0, 0} Nat Nat (Monoid.Pow.{0} Nat Nat.monoid)) p k1)) (Ring.toNonAssocRing.{0} (ZMod (HPow.hPow.{0, 0, 0} Nat Nat Nat (instHPow.{0, 0} Nat Nat (Monoid.Pow.{0} Nat Nat.monoid)) p k1)) (CommRing.toRing.{0} (ZMod (HPow.hPow.{0, 0, 0} Nat Nat Nat (instHPow.{0, 0} Nat Nat (Monoid.Pow.{0} Nat Nat.monoid)) p k1)) (ZMod.commRing (HPow.hPow.{0, 0, 0} Nat Nat Nat (instHPow.{0, 0} Nat Nat (Monoid.Pow.{0} Nat Nat.monoid)) p k1)))))) (RingHom.comp.{u1, 0, 0} R (ZMod (HPow.hPow.{0, 0, 0} Nat Nat Nat (instHPow.{0, 0} Nat Nat (Monoid.Pow.{0} Nat Nat.monoid)) p k2)) (ZMod (HPow.hPow.{0, 0, 0} Nat Nat Nat (instHPow.{0, 0} Nat Nat (Monoid.Pow.{0} Nat Nat.monoid)) p k1)) _inst_1 (NonAssocRing.toNonAssocSemiring.{0} (ZMod (HPow.hPow.{0, 0, 0} Nat Nat Nat (instHPow.{0, 0} Nat Nat (Monoid.Pow.{0} Nat Nat.monoid)) p k2)) (Ring.toNonAssocRing.{0} (ZMod (HPow.hPow.{0, 0, 0} Nat Nat Nat (instHPow.{0, 0} Nat Nat (Monoid.Pow.{0} Nat Nat.monoid)) p k2)) (CommRing.toRing.{0} (ZMod (HPow.hPow.{0, 0, 0} Nat Nat Nat (instHPow.{0, 0} Nat Nat (Monoid.Pow.{0} Nat Nat.monoid)) p k2)) (ZMod.commRing (HPow.hPow.{0, 0, 0} Nat Nat Nat (instHPow.{0, 0} Nat Nat (Monoid.Pow.{0} Nat Nat.monoid)) p k2))))) (NonAssocRing.toNonAssocSemiring.{0} (ZMod (HPow.hPow.{0, 0, 0} Nat Nat Nat (instHPow.{0, 0} Nat Nat (Monoid.Pow.{0} Nat Nat.monoid)) p k1)) (Ring.toNonAssocRing.{0} (ZMod (HPow.hPow.{0, 0, 0} Nat Nat Nat (instHPow.{0, 0} Nat Nat (Monoid.Pow.{0} Nat Nat.monoid)) p k1)) (CommRing.toRing.{0} (ZMod (HPow.hPow.{0, 0, 0} Nat Nat Nat (instHPow.{0, 0} Nat Nat (Monoid.Pow.{0} Nat Nat.monoid)) p k1)) (ZMod.commRing (HPow.hPow.{0, 0, 0} Nat Nat Nat (instHPow.{0, 0} Nat Nat (Monoid.Pow.{0} Nat Nat.monoid)) p k1))))) (ZMod.castHom.{0} (HPow.hPow.{0, 0, 0} Nat Nat Nat (instHPow.{0, 0} Nat Nat (Monoid.Pow.{0} Nat Nat.monoid)) p k2) (HPow.hPow.{0, 0, 0} Nat Nat Nat (instHPow.{0, 0} Nat Nat (Monoid.Pow.{0} Nat Nat.monoid)) p k1) (pow_dvd_pow.{0} Nat Nat.monoid p k1 k2 hk) (ZMod (HPow.hPow.{0, 0, 0} Nat Nat Nat (instHPow.{0, 0} Nat Nat (Monoid.Pow.{0} Nat Nat.monoid)) p k1)) (CommRing.toRing.{0} (ZMod (HPow.hPow.{0, 0, 0} Nat Nat Nat (instHPow.{0, 0} Nat Nat (Monoid.Pow.{0} Nat Nat.monoid)) p k1)) (ZMod.commRing (HPow.hPow.{0, 0, 0} Nat Nat Nat (instHPow.{0, 0} Nat Nat (Monoid.Pow.{0} Nat Nat.monoid)) p k1))) (ZMod.charP (HPow.hPow.{0, 0, 0} Nat Nat Nat (instHPow.{0, 0} Nat Nat (Monoid.Pow.{0} Nat Nat.monoid)) p k1))) (f k2)) (f k1)) (r : R) (s : R), Eq.{1} (PadicInt p hp_prime) (PadicInt.limNthHom.{u1} p hp_prime R _inst_1 (fun (k2 : Nat) => f k2) f_compat (HMul.hMul.{u1, u1, u1} R R R (instHMul.{u1} R (Distrib.toHasMul.{u1} R (NonUnitalNonAssocSemiring.toDistrib.{u1} R (NonAssocSemiring.toNonUnitalNonAssocSemiring.{u1} R _inst_1)))) r s)) (HMul.hMul.{0, 0, 0} (PadicInt p hp_prime) (PadicInt p hp_prime) (PadicInt p hp_prime) (instHMul.{0} (PadicInt p hp_prime) (PadicInt.hasMul p hp_prime)) (PadicInt.limNthHom.{u1} p hp_prime R _inst_1 (fun (k2 : Nat) => f k2) f_compat r) (PadicInt.limNthHom.{u1} p hp_prime R _inst_1 (fun (k2 : Nat) => f k2) f_compat s))
+but is expected to have type
+ forall {p : Nat} [hp_prime : Fact (Nat.Prime p)] {R : Type.{u1}} [_inst_1 : NonAssocSemiring.{u1} R] {f : forall (k : Nat), RingHom.{u1, 0} R (ZMod (HPow.hPow.{0, 0, 0} Nat Nat Nat (instHPow.{0, 0} Nat Nat instPowNat) p k)) _inst_1 (Semiring.toNonAssocSemiring.{0} (ZMod (HPow.hPow.{0, 0, 0} Nat Nat Nat (instHPow.{0, 0} Nat Nat instPowNat) p k)) (CommSemiring.toSemiring.{0} (ZMod (HPow.hPow.{0, 0, 0} Nat Nat Nat (instHPow.{0, 0} Nat Nat instPowNat) p k)) (CommRing.toCommSemiring.{0} (ZMod (HPow.hPow.{0, 0, 0} Nat Nat Nat (instHPow.{0, 0} Nat Nat instPowNat) p k)) (ZMod.commRing (HPow.hPow.{0, 0, 0} Nat Nat Nat (instHPow.{0, 0} Nat Nat instPowNat) p k)))))} (f_compat : forall (k1 : Nat) (k2 : Nat) (hk : LE.le.{0} Nat instLENat k1 k2), Eq.{succ u1} (RingHom.{u1, 0} R (ZMod (HPow.hPow.{0, 0, 0} Nat Nat Nat (instHPow.{0, 0} Nat Nat instPowNat) p k1)) _inst_1 (Semiring.toNonAssocSemiring.{0} (ZMod (HPow.hPow.{0, 0, 0} Nat Nat Nat (instHPow.{0, 0} Nat Nat instPowNat) p k1)) (Ring.toSemiring.{0} (ZMod (HPow.hPow.{0, 0, 0} Nat Nat Nat (instHPow.{0, 0} Nat Nat instPowNat) p k1)) (CommRing.toRing.{0} (ZMod (HPow.hPow.{0, 0, 0} Nat Nat Nat (instHPow.{0, 0} Nat Nat instPowNat) p k1)) (ZMod.commRing (HPow.hPow.{0, 0, 0} Nat Nat Nat (instHPow.{0, 0} Nat Nat instPowNat) p k1)))))) (RingHom.comp.{u1, 0, 0} R (ZMod (HPow.hPow.{0, 0, 0} Nat Nat Nat (instHPow.{0, 0} Nat Nat (Monoid.Pow.{0} Nat Nat.monoid)) p k2)) (ZMod (HPow.hPow.{0, 0, 0} Nat Nat Nat (instHPow.{0, 0} Nat Nat instPowNat) p k1)) _inst_1 (Semiring.toNonAssocSemiring.{0} (ZMod (HPow.hPow.{0, 0, 0} Nat Nat Nat (instHPow.{0, 0} Nat Nat (Monoid.Pow.{0} Nat Nat.monoid)) p k2)) (CommSemiring.toSemiring.{0} (ZMod (HPow.hPow.{0, 0, 0} Nat Nat Nat (instHPow.{0, 0} Nat Nat (Monoid.Pow.{0} Nat Nat.monoid)) p k2)) (CommRing.toCommSemiring.{0} (ZMod (HPow.hPow.{0, 0, 0} Nat Nat Nat (instHPow.{0, 0} Nat Nat (Monoid.Pow.{0} Nat Nat.monoid)) p k2)) (ZMod.commRing (HPow.hPow.{0, 0, 0} Nat Nat Nat (instHPow.{0, 0} Nat Nat (Monoid.Pow.{0} Nat Nat.monoid)) p k2))))) (Semiring.toNonAssocSemiring.{0} (ZMod (HPow.hPow.{0, 0, 0} Nat Nat Nat (instHPow.{0, 0} Nat Nat instPowNat) p k1)) (Ring.toSemiring.{0} (ZMod (HPow.hPow.{0, 0, 0} Nat Nat Nat (instHPow.{0, 0} Nat Nat instPowNat) p k1)) (CommRing.toRing.{0} (ZMod (HPow.hPow.{0, 0, 0} Nat Nat Nat (instHPow.{0, 0} Nat Nat instPowNat) p k1)) (ZMod.commRing (HPow.hPow.{0, 0, 0} Nat Nat Nat (instHPow.{0, 0} Nat Nat instPowNat) p k1))))) (ZMod.castHom.{0} (HPow.hPow.{0, 0, 0} Nat Nat Nat (instHPow.{0, 0} Nat Nat (Monoid.Pow.{0} Nat Nat.monoid)) p k2) (HPow.hPow.{0, 0, 0} Nat Nat Nat (instHPow.{0, 0} Nat Nat (Monoid.Pow.{0} Nat Nat.monoid)) p k1) (pow_dvd_pow.{0} Nat Nat.monoid p k1 k2 hk) (ZMod (HPow.hPow.{0, 0, 0} Nat Nat Nat (instHPow.{0, 0} Nat Nat instPowNat) p k1)) (CommRing.toRing.{0} (ZMod (HPow.hPow.{0, 0, 0} Nat Nat Nat (instHPow.{0, 0} Nat Nat instPowNat) p k1)) (ZMod.commRing (HPow.hPow.{0, 0, 0} Nat Nat Nat (instHPow.{0, 0} Nat Nat instPowNat) p k1))) (ZMod.charP (HPow.hPow.{0, 0, 0} Nat Nat Nat (instHPow.{0, 0} Nat Nat instPowNat) p k1))) (f k2)) (f k1)) (r : R) (s : R), Eq.{1} (PadicInt p hp_prime) (PadicInt.limNthHom.{u1} p hp_prime R _inst_1 (fun (k2 : Nat) => f k2) f_compat (HMul.hMul.{u1, u1, u1} R R R (instHMul.{u1} R (NonUnitalNonAssocSemiring.toMul.{u1} R (NonAssocSemiring.toNonUnitalNonAssocSemiring.{u1} R _inst_1))) r s)) (HMul.hMul.{0, 0, 0} (PadicInt p hp_prime) (PadicInt p hp_prime) (PadicInt p hp_prime) (instHMul.{0} (PadicInt p hp_prime) (PadicInt.instMulPadicInt p hp_prime)) (PadicInt.limNthHom.{u1} p hp_prime R _inst_1 (fun (k2 : Nat) => f k2) f_compat r) (PadicInt.limNthHom.{u1} p hp_prime R _inst_1 (fun (k2 : Nat) => f k2) f_compat s))
+Case conversion may be inaccurate. Consider using '#align padic_int.lim_nth_hom_mul PadicInt.limNthHom_mulₓ'. -/
theorem limNthHom_mul (r s : R) :
limNthHom f_compat (r * s) = limNthHom f_compat r * limNthHom f_compat s :=
Subtype.ext <| Quot.sound <| nthHomSeq_mul _ _ _
#align padic_int.lim_nth_hom_mul PadicInt.limNthHom_mul
+/- warning: padic_int.lift -> PadicInt.lift is a dubious translation:
+lean 3 declaration is
+ forall {p : Nat} [hp_prime : Fact (Nat.Prime p)] {R : Type.{u1}} [_inst_1 : NonAssocSemiring.{u1} R] {f : forall (k : Nat), RingHom.{u1, 0} R (ZMod (HPow.hPow.{0, 0, 0} Nat Nat Nat (instHPow.{0, 0} Nat Nat (Monoid.Pow.{0} Nat Nat.monoid)) p k)) _inst_1 (NonAssocRing.toNonAssocSemiring.{0} (ZMod (HPow.hPow.{0, 0, 0} Nat Nat Nat (instHPow.{0, 0} Nat Nat (Monoid.Pow.{0} Nat Nat.monoid)) p k)) (Ring.toNonAssocRing.{0} (ZMod (HPow.hPow.{0, 0, 0} Nat Nat Nat (instHPow.{0, 0} Nat Nat (Monoid.Pow.{0} Nat Nat.monoid)) p k)) (CommRing.toRing.{0} (ZMod (HPow.hPow.{0, 0, 0} Nat Nat Nat (instHPow.{0, 0} Nat Nat (Monoid.Pow.{0} Nat Nat.monoid)) p k)) (ZMod.commRing (HPow.hPow.{0, 0, 0} Nat Nat Nat (instHPow.{0, 0} Nat Nat (Monoid.Pow.{0} Nat Nat.monoid)) p k)))))}, (forall (k1 : Nat) (k2 : Nat) (hk : LE.le.{0} Nat Nat.hasLe k1 k2), Eq.{succ u1} (RingHom.{u1, 0} R (ZMod (HPow.hPow.{0, 0, 0} Nat Nat Nat (instHPow.{0, 0} Nat Nat (Monoid.Pow.{0} Nat Nat.monoid)) p k1)) _inst_1 (NonAssocRing.toNonAssocSemiring.{0} (ZMod (HPow.hPow.{0, 0, 0} Nat Nat Nat (instHPow.{0, 0} Nat Nat (Monoid.Pow.{0} Nat Nat.monoid)) p k1)) (Ring.toNonAssocRing.{0} (ZMod (HPow.hPow.{0, 0, 0} Nat Nat Nat (instHPow.{0, 0} Nat Nat (Monoid.Pow.{0} Nat Nat.monoid)) p k1)) (CommRing.toRing.{0} (ZMod (HPow.hPow.{0, 0, 0} Nat Nat Nat (instHPow.{0, 0} Nat Nat (Monoid.Pow.{0} Nat Nat.monoid)) p k1)) (ZMod.commRing (HPow.hPow.{0, 0, 0} Nat Nat Nat (instHPow.{0, 0} Nat Nat (Monoid.Pow.{0} Nat Nat.monoid)) p k1)))))) (RingHom.comp.{u1, 0, 0} R (ZMod (HPow.hPow.{0, 0, 0} Nat Nat Nat (instHPow.{0, 0} Nat Nat (Monoid.Pow.{0} Nat Nat.monoid)) p k2)) (ZMod (HPow.hPow.{0, 0, 0} Nat Nat Nat (instHPow.{0, 0} Nat Nat (Monoid.Pow.{0} Nat Nat.monoid)) p k1)) _inst_1 (NonAssocRing.toNonAssocSemiring.{0} (ZMod (HPow.hPow.{0, 0, 0} Nat Nat Nat (instHPow.{0, 0} Nat Nat (Monoid.Pow.{0} Nat Nat.monoid)) p k2)) (Ring.toNonAssocRing.{0} (ZMod (HPow.hPow.{0, 0, 0} Nat Nat Nat (instHPow.{0, 0} Nat Nat (Monoid.Pow.{0} Nat Nat.monoid)) p k2)) (CommRing.toRing.{0} (ZMod (HPow.hPow.{0, 0, 0} Nat Nat Nat (instHPow.{0, 0} Nat Nat (Monoid.Pow.{0} Nat Nat.monoid)) p k2)) (ZMod.commRing (HPow.hPow.{0, 0, 0} Nat Nat Nat (instHPow.{0, 0} Nat Nat (Monoid.Pow.{0} Nat Nat.monoid)) p k2))))) (NonAssocRing.toNonAssocSemiring.{0} (ZMod (HPow.hPow.{0, 0, 0} Nat Nat Nat (instHPow.{0, 0} Nat Nat (Monoid.Pow.{0} Nat Nat.monoid)) p k1)) (Ring.toNonAssocRing.{0} (ZMod (HPow.hPow.{0, 0, 0} Nat Nat Nat (instHPow.{0, 0} Nat Nat (Monoid.Pow.{0} Nat Nat.monoid)) p k1)) (CommRing.toRing.{0} (ZMod (HPow.hPow.{0, 0, 0} Nat Nat Nat (instHPow.{0, 0} Nat Nat (Monoid.Pow.{0} Nat Nat.monoid)) p k1)) (ZMod.commRing (HPow.hPow.{0, 0, 0} Nat Nat Nat (instHPow.{0, 0} Nat Nat (Monoid.Pow.{0} Nat Nat.monoid)) p k1))))) (ZMod.castHom.{0} (HPow.hPow.{0, 0, 0} Nat Nat Nat (instHPow.{0, 0} Nat Nat (Monoid.Pow.{0} Nat Nat.monoid)) p k2) (HPow.hPow.{0, 0, 0} Nat Nat Nat (instHPow.{0, 0} Nat Nat (Monoid.Pow.{0} Nat Nat.monoid)) p k1) (pow_dvd_pow.{0} Nat Nat.monoid p k1 k2 hk) (ZMod (HPow.hPow.{0, 0, 0} Nat Nat Nat (instHPow.{0, 0} Nat Nat (Monoid.Pow.{0} Nat Nat.monoid)) p k1)) (CommRing.toRing.{0} (ZMod (HPow.hPow.{0, 0, 0} Nat Nat Nat (instHPow.{0, 0} Nat Nat (Monoid.Pow.{0} Nat Nat.monoid)) p k1)) (ZMod.commRing (HPow.hPow.{0, 0, 0} Nat Nat Nat (instHPow.{0, 0} Nat Nat (Monoid.Pow.{0} Nat Nat.monoid)) p k1))) (PadicInt.lift._proof_1 p k1)) (f k2)) (f k1)) -> (RingHom.{u1, 0} R (PadicInt p hp_prime) _inst_1 (NonAssocRing.toNonAssocSemiring.{0} (PadicInt p hp_prime) (Ring.toNonAssocRing.{0} (PadicInt p hp_prime) (NormedRing.toRing.{0} (PadicInt p hp_prime) (NormedCommRing.toNormedRing.{0} (PadicInt p hp_prime) (PadicInt.normedCommRing p hp_prime))))))
+but is expected to have type
+ forall {p : Nat} [hp_prime : Fact (Nat.Prime p)] {R : Type.{u1}} [_inst_1 : NonAssocSemiring.{u1} R] {f : forall (k : Nat), RingHom.{u1, 0} R (ZMod (HPow.hPow.{0, 0, 0} Nat Nat Nat (instHPow.{0, 0} Nat Nat instPowNat) p k)) _inst_1 (Semiring.toNonAssocSemiring.{0} (ZMod (HPow.hPow.{0, 0, 0} Nat Nat Nat (instHPow.{0, 0} Nat Nat instPowNat) p k)) (CommSemiring.toSemiring.{0} (ZMod (HPow.hPow.{0, 0, 0} Nat Nat Nat (instHPow.{0, 0} Nat Nat instPowNat) p k)) (CommRing.toCommSemiring.{0} (ZMod (HPow.hPow.{0, 0, 0} Nat Nat Nat (instHPow.{0, 0} Nat Nat instPowNat) p k)) (ZMod.commRing (HPow.hPow.{0, 0, 0} Nat Nat Nat (instHPow.{0, 0} Nat Nat instPowNat) p k)))))}, (forall (k1 : Nat) (k2 : Nat) (hk : LE.le.{0} Nat instLENat k1 k2), Eq.{succ u1} (RingHom.{u1, 0} R (ZMod (HPow.hPow.{0, 0, 0} Nat Nat Nat (instHPow.{0, 0} Nat Nat instPowNat) p k1)) _inst_1 (Semiring.toNonAssocSemiring.{0} (ZMod (HPow.hPow.{0, 0, 0} Nat Nat Nat (instHPow.{0, 0} Nat Nat instPowNat) p k1)) (Ring.toSemiring.{0} (ZMod (HPow.hPow.{0, 0, 0} Nat Nat Nat (instHPow.{0, 0} Nat Nat instPowNat) p k1)) (CommRing.toRing.{0} (ZMod (HPow.hPow.{0, 0, 0} Nat Nat Nat (instHPow.{0, 0} Nat Nat instPowNat) p k1)) (ZMod.commRing (HPow.hPow.{0, 0, 0} Nat Nat Nat (instHPow.{0, 0} Nat Nat instPowNat) p k1)))))) (RingHom.comp.{u1, 0, 0} R (ZMod (HPow.hPow.{0, 0, 0} Nat Nat Nat (instHPow.{0, 0} Nat Nat (Monoid.Pow.{0} Nat Nat.monoid)) p k2)) (ZMod (HPow.hPow.{0, 0, 0} Nat Nat Nat (instHPow.{0, 0} Nat Nat instPowNat) p k1)) _inst_1 (Semiring.toNonAssocSemiring.{0} (ZMod (HPow.hPow.{0, 0, 0} Nat Nat Nat (instHPow.{0, 0} Nat Nat (Monoid.Pow.{0} Nat Nat.monoid)) p k2)) (CommSemiring.toSemiring.{0} (ZMod (HPow.hPow.{0, 0, 0} Nat Nat Nat (instHPow.{0, 0} Nat Nat (Monoid.Pow.{0} Nat Nat.monoid)) p k2)) (CommRing.toCommSemiring.{0} (ZMod (HPow.hPow.{0, 0, 0} Nat Nat Nat (instHPow.{0, 0} Nat Nat (Monoid.Pow.{0} Nat Nat.monoid)) p k2)) (ZMod.commRing (HPow.hPow.{0, 0, 0} Nat Nat Nat (instHPow.{0, 0} Nat Nat (Monoid.Pow.{0} Nat Nat.monoid)) p k2))))) (Semiring.toNonAssocSemiring.{0} (ZMod (HPow.hPow.{0, 0, 0} Nat Nat Nat (instHPow.{0, 0} Nat Nat instPowNat) p k1)) (Ring.toSemiring.{0} (ZMod (HPow.hPow.{0, 0, 0} Nat Nat Nat (instHPow.{0, 0} Nat Nat instPowNat) p k1)) (CommRing.toRing.{0} (ZMod (HPow.hPow.{0, 0, 0} Nat Nat Nat (instHPow.{0, 0} Nat Nat instPowNat) p k1)) (ZMod.commRing (HPow.hPow.{0, 0, 0} Nat Nat Nat (instHPow.{0, 0} Nat Nat instPowNat) p k1))))) (ZMod.castHom.{0} (HPow.hPow.{0, 0, 0} Nat Nat Nat (instHPow.{0, 0} Nat Nat (Monoid.Pow.{0} Nat Nat.monoid)) p k2) (HPow.hPow.{0, 0, 0} Nat Nat Nat (instHPow.{0, 0} Nat Nat (Monoid.Pow.{0} Nat Nat.monoid)) p k1) (pow_dvd_pow.{0} Nat Nat.monoid p k1 k2 hk) (ZMod (HPow.hPow.{0, 0, 0} Nat Nat Nat (instHPow.{0, 0} Nat Nat instPowNat) p k1)) (CommRing.toRing.{0} (ZMod (HPow.hPow.{0, 0, 0} Nat Nat Nat (instHPow.{0, 0} Nat Nat instPowNat) p k1)) (ZMod.commRing (HPow.hPow.{0, 0, 0} Nat Nat Nat (instHPow.{0, 0} Nat Nat instPowNat) p k1))) (ZMod.charP (HPow.hPow.{0, 0, 0} Nat Nat Nat (instHPow.{0, 0} Nat Nat instPowNat) p k1))) (f k2)) (f k1)) -> (RingHom.{u1, 0} R (PadicInt p hp_prime) _inst_1 (Semiring.toNonAssocSemiring.{0} (PadicInt p hp_prime) (CommSemiring.toSemiring.{0} (PadicInt p hp_prime) (CommRing.toCommSemiring.{0} (PadicInt p hp_prime) (PadicInt.instCommRingPadicInt p hp_prime)))))
+Case conversion may be inaccurate. Consider using '#align padic_int.lift PadicInt.liftₓ'. -/
-- TODO: generalize this to arbitrary complete discrete valuation rings
/-- `lift f_compat` is the limit of a sequence `f` of compatible ring homs `R →+* zmod (p^k)`,
with the equality `lift f_compat r = padic_int.lim_nth_hom f_compat r`.
@@ -658,6 +868,9 @@ def lift : R →+* ℤ_[p] where
omit f_compat
+/- warning: padic_int.lift_sub_val_mem_span -> PadicInt.lift_sub_val_mem_span is a dubious translation:
+<too large>
+Case conversion may be inaccurate. Consider using '#align padic_int.lift_sub_val_mem_span PadicInt.lift_sub_val_mem_spanₓ'. -/
theorem lift_sub_val_mem_span (r : R) (n : ℕ) :
lift f_compat r - (f n r).val ∈ (Ideal.span {↑p ^ n} : Ideal ℤ_[p]) :=
by
@@ -674,21 +887,26 @@ theorem lift_sub_val_mem_span (r : R) (n : ℕ) :
(Int.castRingHom ℤ_[p]).map_dvd (pow_dvd_nth_hom_sub f_compat r n (max n k) (le_max_left _ _))
#align padic_int.lift_sub_val_mem_span PadicInt.lift_sub_val_mem_span
+#print PadicInt.lift_spec /-
/-- One part of the universal property of `ℤ_[p]` as a projective limit.
See also `padic_int.lift_unique`.
-/
-theorem lift_spec (n : ℕ) : (toZmodPow n).comp (lift f_compat) = f n :=
+theorem lift_spec (n : ℕ) : (toZModPow n).comp (lift f_compat) = f n :=
by
ext r
rw [RingHom.comp_apply, ← ZMod.nat_cast_zmod_val (f n r), ← map_natCast <| to_zmod_pow n, ←
sub_eq_zero, ← RingHom.map_sub, ← RingHom.mem_ker, ker_to_zmod_pow]
apply lift_sub_val_mem_span
#align padic_int.lift_spec PadicInt.lift_spec
+-/
+/- warning: padic_int.lift_unique -> PadicInt.lift_unique is a dubious translation:
+<too large>
+Case conversion may be inaccurate. Consider using '#align padic_int.lift_unique PadicInt.lift_uniqueₓ'. -/
/-- One part of the universal property of `ℤ_[p]` as a projective limit.
See also `padic_int.lift_spec`.
-/
-theorem lift_unique (g : R →+* ℤ_[p]) (hg : ∀ n, (toZmodPow n).comp g = f n) : lift f_compat = g :=
+theorem lift_unique (g : R →+* ℤ_[p]) (hg : ∀ n, (toZModPow n).comp g = f n) : lift f_compat = g :=
by
ext1 r
apply eq_of_forall_dist_le
@@ -699,8 +917,14 @@ theorem lift_unique (g : R →+* ℤ_[p]) (hg : ∀ n, (toZmodPow n).comp g = f
RingHom.map_sub, ← RingHom.comp_apply, ← RingHom.comp_apply, lift_spec, hg, sub_self]
#align padic_int.lift_unique PadicInt.lift_unique
+/- warning: padic_int.lift_self -> PadicInt.lift_self is a dubious translation:
+lean 3 declaration is
+ forall {p : Nat} [hp_prime : Fact (Nat.Prime p)] (z : PadicInt p hp_prime), Eq.{1} (PadicInt p hp_prime) (coeFn.{1, 1} (RingHom.{0, 0} (PadicInt p hp_prime) (PadicInt p hp_prime) (NonAssocRing.toNonAssocSemiring.{0} (PadicInt p hp_prime) (Ring.toNonAssocRing.{0} (PadicInt p hp_prime) (NormedRing.toRing.{0} (PadicInt p hp_prime) (NormedCommRing.toNormedRing.{0} (PadicInt p hp_prime) (PadicInt.normedCommRing p hp_prime))))) (NonAssocRing.toNonAssocSemiring.{0} (PadicInt p hp_prime) (Ring.toNonAssocRing.{0} (PadicInt p hp_prime) (NormedRing.toRing.{0} (PadicInt p hp_prime) (NormedCommRing.toNormedRing.{0} (PadicInt p hp_prime) (PadicInt.normedCommRing p hp_prime)))))) (fun (_x : RingHom.{0, 0} (PadicInt p hp_prime) (PadicInt p hp_prime) (NonAssocRing.toNonAssocSemiring.{0} (PadicInt p hp_prime) (Ring.toNonAssocRing.{0} (PadicInt p hp_prime) (NormedRing.toRing.{0} (PadicInt p hp_prime) (NormedCommRing.toNormedRing.{0} (PadicInt p hp_prime) (PadicInt.normedCommRing p hp_prime))))) (NonAssocRing.toNonAssocSemiring.{0} (PadicInt p hp_prime) (Ring.toNonAssocRing.{0} (PadicInt p hp_prime) (NormedRing.toRing.{0} (PadicInt p hp_prime) (NormedCommRing.toNormedRing.{0} (PadicInt p hp_prime) (PadicInt.normedCommRing p hp_prime)))))) => (PadicInt p hp_prime) -> (PadicInt p hp_prime)) (RingHom.hasCoeToFun.{0, 0} (PadicInt p hp_prime) (PadicInt p hp_prime) (NonAssocRing.toNonAssocSemiring.{0} (PadicInt p hp_prime) (Ring.toNonAssocRing.{0} (PadicInt p hp_prime) (NormedRing.toRing.{0} (PadicInt p hp_prime) (NormedCommRing.toNormedRing.{0} (PadicInt p hp_prime) (PadicInt.normedCommRing p hp_prime))))) (NonAssocRing.toNonAssocSemiring.{0} (PadicInt p hp_prime) (Ring.toNonAssocRing.{0} (PadicInt p hp_prime) (NormedRing.toRing.{0} (PadicInt p hp_prime) (NormedCommRing.toNormedRing.{0} (PadicInt p hp_prime) (PadicInt.normedCommRing p hp_prime)))))) (PadicInt.lift.{0} p hp_prime (PadicInt p hp_prime) (NonAssocRing.toNonAssocSemiring.{0} (PadicInt p hp_prime) (Ring.toNonAssocRing.{0} (PadicInt p hp_prime) (NormedRing.toRing.{0} (PadicInt p hp_prime) (NormedCommRing.toNormedRing.{0} (PadicInt p hp_prime) (PadicInt.normedCommRing p hp_prime))))) (PadicInt.toZModPow p hp_prime) (PadicInt.zmod_cast_comp_toZModPow p hp_prime)) z) z
+but is expected to have type
+ forall {p : Nat} [hp_prime : Fact (Nat.Prime p)] (z : PadicInt p hp_prime), Eq.{1} ((fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2397 : PadicInt p hp_prime) => PadicInt p hp_prime) z) (FunLike.coe.{1, 1, 1} (RingHom.{0, 0} (PadicInt p hp_prime) (PadicInt p hp_prime) (Semiring.toNonAssocSemiring.{0} (PadicInt p hp_prime) (CommSemiring.toSemiring.{0} (PadicInt p hp_prime) (CommRing.toCommSemiring.{0} (PadicInt p hp_prime) (PadicInt.instCommRingPadicInt p hp_prime)))) (Semiring.toNonAssocSemiring.{0} (PadicInt p hp_prime) (CommSemiring.toSemiring.{0} (PadicInt p hp_prime) (CommRing.toCommSemiring.{0} (PadicInt p hp_prime) (PadicInt.instCommRingPadicInt p hp_prime))))) (PadicInt p hp_prime) (fun (_x : PadicInt p hp_prime) => (fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2397 : PadicInt p hp_prime) => PadicInt p hp_prime) _x) (MulHomClass.toFunLike.{0, 0, 0} (RingHom.{0, 0} (PadicInt p hp_prime) (PadicInt p hp_prime) (Semiring.toNonAssocSemiring.{0} (PadicInt p hp_prime) (CommSemiring.toSemiring.{0} (PadicInt p hp_prime) (CommRing.toCommSemiring.{0} (PadicInt p hp_prime) (PadicInt.instCommRingPadicInt p hp_prime)))) (Semiring.toNonAssocSemiring.{0} (PadicInt p hp_prime) (CommSemiring.toSemiring.{0} (PadicInt p hp_prime) (CommRing.toCommSemiring.{0} (PadicInt p hp_prime) (PadicInt.instCommRingPadicInt p hp_prime))))) (PadicInt p hp_prime) (PadicInt p hp_prime) (NonUnitalNonAssocSemiring.toMul.{0} (PadicInt p hp_prime) (NonAssocSemiring.toNonUnitalNonAssocSemiring.{0} (PadicInt p hp_prime) (Semiring.toNonAssocSemiring.{0} (PadicInt p hp_prime) (CommSemiring.toSemiring.{0} (PadicInt p hp_prime) (CommRing.toCommSemiring.{0} (PadicInt p hp_prime) (PadicInt.instCommRingPadicInt p hp_prime)))))) (NonUnitalNonAssocSemiring.toMul.{0} (PadicInt p hp_prime) (NonAssocSemiring.toNonUnitalNonAssocSemiring.{0} (PadicInt p hp_prime) (Semiring.toNonAssocSemiring.{0} (PadicInt p hp_prime) (CommSemiring.toSemiring.{0} (PadicInt p hp_prime) (CommRing.toCommSemiring.{0} (PadicInt p hp_prime) (PadicInt.instCommRingPadicInt p hp_prime)))))) (NonUnitalRingHomClass.toMulHomClass.{0, 0, 0} (RingHom.{0, 0} (PadicInt p hp_prime) (PadicInt p hp_prime) (Semiring.toNonAssocSemiring.{0} (PadicInt p hp_prime) (CommSemiring.toSemiring.{0} (PadicInt p hp_prime) (CommRing.toCommSemiring.{0} (PadicInt p hp_prime) (PadicInt.instCommRingPadicInt p hp_prime)))) (Semiring.toNonAssocSemiring.{0} (PadicInt p hp_prime) (CommSemiring.toSemiring.{0} (PadicInt p hp_prime) (CommRing.toCommSemiring.{0} (PadicInt p hp_prime) (PadicInt.instCommRingPadicInt p hp_prime))))) (PadicInt p hp_prime) (PadicInt p hp_prime) (NonAssocSemiring.toNonUnitalNonAssocSemiring.{0} (PadicInt p hp_prime) (Semiring.toNonAssocSemiring.{0} (PadicInt p hp_prime) (CommSemiring.toSemiring.{0} (PadicInt p hp_prime) (CommRing.toCommSemiring.{0} (PadicInt p hp_prime) (PadicInt.instCommRingPadicInt p hp_prime))))) (NonAssocSemiring.toNonUnitalNonAssocSemiring.{0} (PadicInt p hp_prime) (Semiring.toNonAssocSemiring.{0} (PadicInt p hp_prime) (CommSemiring.toSemiring.{0} (PadicInt p hp_prime) (CommRing.toCommSemiring.{0} (PadicInt p hp_prime) (PadicInt.instCommRingPadicInt p hp_prime))))) (RingHomClass.toNonUnitalRingHomClass.{0, 0, 0} (RingHom.{0, 0} (PadicInt p hp_prime) (PadicInt p hp_prime) (Semiring.toNonAssocSemiring.{0} (PadicInt p hp_prime) (CommSemiring.toSemiring.{0} (PadicInt p hp_prime) (CommRing.toCommSemiring.{0} (PadicInt p hp_prime) (PadicInt.instCommRingPadicInt p hp_prime)))) (Semiring.toNonAssocSemiring.{0} (PadicInt p hp_prime) (CommSemiring.toSemiring.{0} (PadicInt p hp_prime) (CommRing.toCommSemiring.{0} (PadicInt p hp_prime) (PadicInt.instCommRingPadicInt p hp_prime))))) (PadicInt p hp_prime) (PadicInt p hp_prime) (Semiring.toNonAssocSemiring.{0} (PadicInt p hp_prime) (CommSemiring.toSemiring.{0} (PadicInt p hp_prime) (CommRing.toCommSemiring.{0} (PadicInt p hp_prime) (PadicInt.instCommRingPadicInt p hp_prime)))) (Semiring.toNonAssocSemiring.{0} (PadicInt p hp_prime) (CommSemiring.toSemiring.{0} (PadicInt p hp_prime) (CommRing.toCommSemiring.{0} (PadicInt p hp_prime) (PadicInt.instCommRingPadicInt p hp_prime)))) (RingHom.instRingHomClassRingHom.{0, 0} (PadicInt p hp_prime) (PadicInt p hp_prime) (Semiring.toNonAssocSemiring.{0} (PadicInt p hp_prime) (CommSemiring.toSemiring.{0} (PadicInt p hp_prime) (CommRing.toCommSemiring.{0} (PadicInt p hp_prime) (PadicInt.instCommRingPadicInt p hp_prime)))) (Semiring.toNonAssocSemiring.{0} (PadicInt p hp_prime) (CommSemiring.toSemiring.{0} (PadicInt p hp_prime) (CommRing.toCommSemiring.{0} (PadicInt p hp_prime) (PadicInt.instCommRingPadicInt p hp_prime)))))))) (PadicInt.lift.{0} p hp_prime (PadicInt p hp_prime) (Semiring.toNonAssocSemiring.{0} (PadicInt p hp_prime) (CommSemiring.toSemiring.{0} (PadicInt p hp_prime) (CommRing.toCommSemiring.{0} (PadicInt p hp_prime) (PadicInt.instCommRingPadicInt p hp_prime)))) (PadicInt.toZModPow p hp_prime) (PadicInt.zmod_cast_comp_toZModPow p hp_prime)) z) z
+Case conversion may be inaccurate. Consider using '#align padic_int.lift_self PadicInt.lift_selfₓ'. -/
@[simp]
-theorem lift_self (z : ℤ_[p]) : @lift p _ ℤ_[p] _ toZmodPow zMod_cast_comp_toZmodPow z = z :=
+theorem lift_self (z : ℤ_[p]) : @lift p _ ℤ_[p] _ toZModPow zmod_cast_comp_toZModPow z = z :=
by
show _ = RingHom.id _ z
rw [@lift_unique p _ ℤ_[p] _ _ zmod_cast_comp_to_zmod_pow (RingHom.id ℤ_[p])]
@@ -709,7 +933,10 @@ theorem lift_self (z : ℤ_[p]) : @lift p _ ℤ_[p] _ toZmodPow zMod_cast_comp_t
end lift
-theorem ext_of_toZmodPow {x y : ℤ_[p]} : (∀ n, toZmodPow n x = toZmodPow n y) ↔ x = y :=
+/- warning: padic_int.ext_of_to_zmod_pow -> PadicInt.ext_of_toZModPow is a dubious translation:
+<too large>
+Case conversion may be inaccurate. Consider using '#align padic_int.ext_of_to_zmod_pow PadicInt.ext_of_toZModPowₓ'. -/
+theorem ext_of_toZModPow {x y : ℤ_[p]} : (∀ n, toZModPow n x = toZModPow n y) ↔ x = y :=
by
constructor
· intro h
@@ -717,10 +944,16 @@ theorem ext_of_toZmodPow {x y : ℤ_[p]} : (∀ n, toZmodPow n x = toZmodPow n y
simp [lift, lim_nth_hom, nth_hom, h]
· rintro rfl _
rfl
-#align padic_int.ext_of_to_zmod_pow PadicInt.ext_of_toZmodPow
-
-theorem toZmodPow_eq_iff_ext {R : Type _} [NonAssocSemiring R] {g g' : R →+* ℤ_[p]} :
- (∀ n, (toZmodPow n).comp g = (toZmodPow n).comp g') ↔ g = g' :=
+#align padic_int.ext_of_to_zmod_pow PadicInt.ext_of_toZModPow
+
+/- warning: padic_int.to_zmod_pow_eq_iff_ext -> PadicInt.toZModPow_eq_iff_ext is a dubious translation:
+lean 3 declaration is
+ forall {p : Nat} [hp_prime : Fact (Nat.Prime p)] {R : Type.{u1}} [_inst_1 : NonAssocSemiring.{u1} R] {g : RingHom.{u1, 0} R (PadicInt p hp_prime) _inst_1 (NonAssocRing.toNonAssocSemiring.{0} (PadicInt p hp_prime) (Ring.toNonAssocRing.{0} (PadicInt p hp_prime) (NormedRing.toRing.{0} (PadicInt p hp_prime) (NormedCommRing.toNormedRing.{0} (PadicInt p hp_prime) (PadicInt.normedCommRing p hp_prime)))))} {g' : RingHom.{u1, 0} R (PadicInt p hp_prime) _inst_1 (NonAssocRing.toNonAssocSemiring.{0} (PadicInt p hp_prime) (Ring.toNonAssocRing.{0} (PadicInt p hp_prime) (NormedRing.toRing.{0} (PadicInt p hp_prime) (NormedCommRing.toNormedRing.{0} (PadicInt p hp_prime) (PadicInt.normedCommRing p hp_prime)))))}, Iff (forall (n : Nat), Eq.{succ u1} (RingHom.{u1, 0} R (ZMod (HPow.hPow.{0, 0, 0} Nat Nat Nat (instHPow.{0, 0} Nat Nat (Monoid.Pow.{0} Nat Nat.monoid)) p n)) _inst_1 (NonAssocRing.toNonAssocSemiring.{0} (ZMod (HPow.hPow.{0, 0, 0} Nat Nat Nat (instHPow.{0, 0} Nat Nat (Monoid.Pow.{0} Nat Nat.monoid)) p n)) (Ring.toNonAssocRing.{0} (ZMod (HPow.hPow.{0, 0, 0} Nat Nat Nat (instHPow.{0, 0} Nat Nat (Monoid.Pow.{0} Nat Nat.monoid)) p n)) (CommRing.toRing.{0} (ZMod (HPow.hPow.{0, 0, 0} Nat Nat Nat (instHPow.{0, 0} Nat Nat (Monoid.Pow.{0} Nat Nat.monoid)) p n)) (ZMod.commRing (HPow.hPow.{0, 0, 0} Nat Nat Nat (instHPow.{0, 0} Nat Nat (Monoid.Pow.{0} Nat Nat.monoid)) p n)))))) (RingHom.comp.{u1, 0, 0} R (PadicInt p hp_prime) (ZMod (HPow.hPow.{0, 0, 0} Nat Nat Nat (instHPow.{0, 0} Nat Nat (Monoid.Pow.{0} Nat Nat.monoid)) p n)) _inst_1 (NonAssocRing.toNonAssocSemiring.{0} (PadicInt p hp_prime) (Ring.toNonAssocRing.{0} (PadicInt p hp_prime) (NormedRing.toRing.{0} (PadicInt p hp_prime) (NormedCommRing.toNormedRing.{0} (PadicInt p hp_prime) (PadicInt.normedCommRing p hp_prime))))) (NonAssocRing.toNonAssocSemiring.{0} (ZMod (HPow.hPow.{0, 0, 0} Nat Nat Nat (instHPow.{0, 0} Nat Nat (Monoid.Pow.{0} Nat Nat.monoid)) p n)) (Ring.toNonAssocRing.{0} (ZMod (HPow.hPow.{0, 0, 0} Nat Nat Nat (instHPow.{0, 0} Nat Nat (Monoid.Pow.{0} Nat Nat.monoid)) p n)) (CommRing.toRing.{0} (ZMod (HPow.hPow.{0, 0, 0} Nat Nat Nat (instHPow.{0, 0} Nat Nat (Monoid.Pow.{0} Nat Nat.monoid)) p n)) (ZMod.commRing (HPow.hPow.{0, 0, 0} Nat Nat Nat (instHPow.{0, 0} Nat Nat (Monoid.Pow.{0} Nat Nat.monoid)) p n))))) (PadicInt.toZModPow p hp_prime n) g) (RingHom.comp.{u1, 0, 0} R (PadicInt p hp_prime) (ZMod (HPow.hPow.{0, 0, 0} Nat Nat Nat (instHPow.{0, 0} Nat Nat (Monoid.Pow.{0} Nat Nat.monoid)) p n)) _inst_1 (NonAssocRing.toNonAssocSemiring.{0} (PadicInt p hp_prime) (Ring.toNonAssocRing.{0} (PadicInt p hp_prime) (NormedRing.toRing.{0} (PadicInt p hp_prime) (NormedCommRing.toNormedRing.{0} (PadicInt p hp_prime) (PadicInt.normedCommRing p hp_prime))))) (NonAssocRing.toNonAssocSemiring.{0} (ZMod (HPow.hPow.{0, 0, 0} Nat Nat Nat (instHPow.{0, 0} Nat Nat (Monoid.Pow.{0} Nat Nat.monoid)) p n)) (Ring.toNonAssocRing.{0} (ZMod (HPow.hPow.{0, 0, 0} Nat Nat Nat (instHPow.{0, 0} Nat Nat (Monoid.Pow.{0} Nat Nat.monoid)) p n)) (CommRing.toRing.{0} (ZMod (HPow.hPow.{0, 0, 0} Nat Nat Nat (instHPow.{0, 0} Nat Nat (Monoid.Pow.{0} Nat Nat.monoid)) p n)) (ZMod.commRing (HPow.hPow.{0, 0, 0} Nat Nat Nat (instHPow.{0, 0} Nat Nat (Monoid.Pow.{0} Nat Nat.monoid)) p n))))) (PadicInt.toZModPow p hp_prime n) g')) (Eq.{succ u1} (RingHom.{u1, 0} R (PadicInt p hp_prime) _inst_1 (NonAssocRing.toNonAssocSemiring.{0} (PadicInt p hp_prime) (Ring.toNonAssocRing.{0} (PadicInt p hp_prime) (NormedRing.toRing.{0} (PadicInt p hp_prime) (NormedCommRing.toNormedRing.{0} (PadicInt p hp_prime) (PadicInt.normedCommRing p hp_prime)))))) g g')
+but is expected to have type
+ forall {p : Nat} [hp_prime : Fact (Nat.Prime p)] {R : Type.{u1}} [_inst_1 : NonAssocSemiring.{u1} R] {g : RingHom.{u1, 0} R (PadicInt p hp_prime) _inst_1 (Semiring.toNonAssocSemiring.{0} (PadicInt p hp_prime) (CommSemiring.toSemiring.{0} (PadicInt p hp_prime) (CommRing.toCommSemiring.{0} (PadicInt p hp_prime) (PadicInt.instCommRingPadicInt p hp_prime))))} {g' : RingHom.{u1, 0} R (PadicInt p hp_prime) _inst_1 (Semiring.toNonAssocSemiring.{0} (PadicInt p hp_prime) (CommSemiring.toSemiring.{0} (PadicInt p hp_prime) (CommRing.toCommSemiring.{0} (PadicInt p hp_prime) (PadicInt.instCommRingPadicInt p hp_prime))))}, Iff (forall (n : Nat), Eq.{succ u1} (RingHom.{u1, 0} R (ZMod (HPow.hPow.{0, 0, 0} Nat Nat Nat (instHPow.{0, 0} Nat Nat instPowNat) p n)) _inst_1 (Semiring.toNonAssocSemiring.{0} (ZMod (HPow.hPow.{0, 0, 0} Nat Nat Nat (instHPow.{0, 0} Nat Nat instPowNat) p n)) (CommSemiring.toSemiring.{0} (ZMod (HPow.hPow.{0, 0, 0} Nat Nat Nat (instHPow.{0, 0} Nat Nat instPowNat) p n)) (CommRing.toCommSemiring.{0} (ZMod (HPow.hPow.{0, 0, 0} Nat Nat Nat (instHPow.{0, 0} Nat Nat instPowNat) p n)) (ZMod.commRing (HPow.hPow.{0, 0, 0} Nat Nat Nat (instHPow.{0, 0} Nat Nat instPowNat) p n)))))) (RingHom.comp.{u1, 0, 0} R (PadicInt p hp_prime) (ZMod (HPow.hPow.{0, 0, 0} Nat Nat Nat (instHPow.{0, 0} Nat Nat instPowNat) p n)) _inst_1 (Semiring.toNonAssocSemiring.{0} (PadicInt p hp_prime) (CommSemiring.toSemiring.{0} (PadicInt p hp_prime) (CommRing.toCommSemiring.{0} (PadicInt p hp_prime) (PadicInt.instCommRingPadicInt p hp_prime)))) (Semiring.toNonAssocSemiring.{0} (ZMod (HPow.hPow.{0, 0, 0} Nat Nat Nat (instHPow.{0, 0} Nat Nat instPowNat) p n)) (CommSemiring.toSemiring.{0} (ZMod (HPow.hPow.{0, 0, 0} Nat Nat Nat (instHPow.{0, 0} Nat Nat instPowNat) p n)) (CommRing.toCommSemiring.{0} (ZMod (HPow.hPow.{0, 0, 0} Nat Nat Nat (instHPow.{0, 0} Nat Nat instPowNat) p n)) (ZMod.commRing (HPow.hPow.{0, 0, 0} Nat Nat Nat (instHPow.{0, 0} Nat Nat instPowNat) p n))))) (PadicInt.toZModPow p hp_prime n) g) (RingHom.comp.{u1, 0, 0} R (PadicInt p hp_prime) (ZMod (HPow.hPow.{0, 0, 0} Nat Nat Nat (instHPow.{0, 0} Nat Nat instPowNat) p n)) _inst_1 (Semiring.toNonAssocSemiring.{0} (PadicInt p hp_prime) (CommSemiring.toSemiring.{0} (PadicInt p hp_prime) (CommRing.toCommSemiring.{0} (PadicInt p hp_prime) (PadicInt.instCommRingPadicInt p hp_prime)))) (Semiring.toNonAssocSemiring.{0} (ZMod (HPow.hPow.{0, 0, 0} Nat Nat Nat (instHPow.{0, 0} Nat Nat instPowNat) p n)) (CommSemiring.toSemiring.{0} (ZMod (HPow.hPow.{0, 0, 0} Nat Nat Nat (instHPow.{0, 0} Nat Nat instPowNat) p n)) (CommRing.toCommSemiring.{0} (ZMod (HPow.hPow.{0, 0, 0} Nat Nat Nat (instHPow.{0, 0} Nat Nat instPowNat) p n)) (ZMod.commRing (HPow.hPow.{0, 0, 0} Nat Nat Nat (instHPow.{0, 0} Nat Nat instPowNat) p n))))) (PadicInt.toZModPow p hp_prime n) g')) (Eq.{succ u1} (RingHom.{u1, 0} R (PadicInt p hp_prime) _inst_1 (Semiring.toNonAssocSemiring.{0} (PadicInt p hp_prime) (CommSemiring.toSemiring.{0} (PadicInt p hp_prime) (CommRing.toCommSemiring.{0} (PadicInt p hp_prime) (PadicInt.instCommRingPadicInt p hp_prime))))) g g')
+Case conversion may be inaccurate. Consider using '#align padic_int.to_zmod_pow_eq_iff_ext PadicInt.toZModPow_eq_iff_extₓ'. -/
+theorem toZModPow_eq_iff_ext {R : Type _} [NonAssocSemiring R] {g g' : R →+* ℤ_[p]} :
+ (∀ n, (toZModPow n).comp g = (toZModPow n).comp g') ↔ g = g' :=
by
constructor
· intro hg
@@ -731,7 +964,7 @@ theorem toZmodPow_eq_iff_ext {R : Type _} [NonAssocSemiring R] {g g' : R →+*
rw [hg n]
· rintro rfl _
rfl
-#align padic_int.to_zmod_pow_eq_iff_ext PadicInt.toZmodPow_eq_iff_ext
+#align padic_int.to_zmod_pow_eq_iff_ext PadicInt.toZModPow_eq_iff_ext
end PadicInt
mathlib commit https://github.com/leanprover-community/mathlib/commit/02ba8949f486ebecf93fe7460f1ed0564b5e442c
@@ -119,7 +119,7 @@ theorem isUnit_den (r : ℚ) (h : ‖(r : ℚ_[p])‖ ≤ 1) : IsUnit (r.den :
theorem norm_sub_mod_part_aux (r : ℚ) (h : ‖(r : ℚ_[p])‖ ≤ 1) :
↑p ∣ r.num - r.num * r.den.gcdA p % p * ↑r.den :=
by
- rw [← ZMod.int_coe_zMod_eq_zero_iff_dvd]
+ rw [← ZMod.int_cast_zmod_eq_zero_iff_dvd]
simp only [Int.cast_ofNat, ZMod.nat_cast_mod, Int.cast_mul, Int.cast_sub]
have := congr_arg (coe : ℤ → ZMod p) (gcd_eq_gcd_ab r.denom p)
simp only [Int.cast_ofNat, add_zero, Int.cast_add, ZMod.nat_cast_self, Int.cast_mul,
@@ -162,7 +162,7 @@ theorem zMod_congr_of_sub_mem_span_aux (n : ℕ) (x : ℤ_[p]) (a b : ℤ)
(hb : x - b ∈ (Ideal.span {p ^ n} : Ideal ℤ_[p])) : (a : ZMod (p ^ n)) = b :=
by
rw [Ideal.mem_span_singleton] at ha hb
- rw [← sub_eq_zero, ← Int.cast_sub, ZMod.int_coe_zMod_eq_zero_iff_dvd, Int.coe_nat_pow]
+ rw [← sub_eq_zero, ← Int.cast_sub, ZMod.int_cast_zmod_eq_zero_iff_dvd, Int.coe_nat_pow]
rw [← dvd_neg, neg_sub] at ha
have := dvd_add ha hb
rwa [sub_eq_add_neg, sub_eq_add_neg, add_assoc, neg_add_cancel_left, ← sub_eq_add_neg, ←
@@ -437,7 +437,7 @@ theorem ker_toZmodPow (n : ℕ) : (toZmodPow n : ℤ_[p] →+* ZMod (p ^ n)).ker
convert appr_spec n x
simp only [this, sub_zero, cast_zero]
dsimp [to_zmod_pow, to_zmod_hom] at h
- rw [ZMod.nat_coe_zMod_eq_zero_iff_dvd] at h
+ rw [ZMod.nat_cast_zmod_eq_zero_iff_dvd] at h
apply eq_zero_of_dvd_of_lt h (appr_lt _ _)
· intro h
rw [← sub_zero x] at h
@@ -532,7 +532,7 @@ include f_compat
theorem pow_dvd_nthHom_sub (r : R) (i j : ℕ) (h : i ≤ j) : ↑p ^ i ∣ nthHom f r j - nthHom f r i :=
by
specialize f_compat i j h
- rw [← Int.coe_nat_pow, ← ZMod.int_coe_zMod_eq_zero_iff_dvd, Int.cast_sub]
+ rw [← Int.coe_nat_pow, ← ZMod.int_cast_zmod_eq_zero_iff_dvd, Int.cast_sub]
dsimp [nth_hom]
rw [← f_compat, RingHom.comp_apply]
simp only [ZMod.cast_id, ZMod.castHom_apply, sub_self, ZMod.nat_cast_val, ZMod.int_cast_cast]
@@ -580,7 +580,7 @@ theorem nthHomSeq_add (r s : R) :
dsimp [nth_hom_seq]
apply lt_of_le_of_lt _ hn
rw [← Int.cast_add, ← Int.cast_sub, ← padicNorm.dvd_iff_norm_le, ←
- ZMod.int_coe_zMod_eq_zero_iff_dvd]
+ ZMod.int_cast_zmod_eq_zero_iff_dvd]
dsimp [nth_hom]
simp only [ZMod.nat_cast_val, RingHom.map_add, Int.cast_sub, ZMod.int_cast_cast, Int.cast_add]
rw [ZMod.cast_add (show p ^ n ∣ p ^ j from pow_dvd_pow _ hj), sub_self]
@@ -597,7 +597,7 @@ theorem nthHomSeq_mul (r s : R) :
dsimp [nth_hom_seq]
apply lt_of_le_of_lt _ hn
rw [← Int.cast_mul, ← Int.cast_sub, ← padicNorm.dvd_iff_norm_le, ←
- ZMod.int_coe_zMod_eq_zero_iff_dvd]
+ ZMod.int_cast_zmod_eq_zero_iff_dvd]
dsimp [nth_hom]
simp only [ZMod.nat_cast_val, RingHom.map_mul, Int.cast_sub, ZMod.int_cast_cast, Int.cast_mul]
rw [ZMod.cast_mul (show p ^ n ∣ p ^ j from pow_dvd_pow _ hj), sub_self]
@@ -680,7 +680,7 @@ See also `padic_int.lift_unique`.
theorem lift_spec (n : ℕ) : (toZmodPow n).comp (lift f_compat) = f n :=
by
ext r
- rw [RingHom.comp_apply, ← ZMod.nat_cast_zMod_val (f n r), ← map_natCast <| to_zmod_pow n, ←
+ rw [RingHom.comp_apply, ← ZMod.nat_cast_zmod_val (f n r), ← map_natCast <| to_zmod_pow n, ←
sub_eq_zero, ← RingHom.map_sub, ← RingHom.mem_ker, ker_to_zmod_pow]
apply lift_sub_val_mem_span
#align padic_int.lift_spec PadicInt.lift_spec
mathlib commit https://github.com/leanprover-community/mathlib/commit/ce7e9d53d4bbc38065db3b595cd5bd73c323bc1d
@@ -143,7 +143,7 @@ theorem norm_sub_modPart (h : ‖(r : ℚ_[p])‖ ≤ 1) : ‖(⟨r, h⟩ - modP
rw [norm_lt_one_iff_dvd, ← (is_unit_denom r h).dvd_mul_right]
suffices ↑p ∣ r.num - n * r.denom
by
- convert (Int.castRingHom ℤ_[p]).map_dvd this
+ convert(Int.castRingHom ℤ_[p]).map_dvd this
simp only [sub_mul, Int.cast_ofNat, eq_intCast, Int.cast_mul, sub_left_inj, Int.cast_sub]
apply Subtype.coe_injective
simp only [coe_mul, Subtype.coe_mk, coe_nat_cast]
mathlib commit https://github.com/leanprover-community/mathlib/commit/3180fab693e2cee3bff62675571264cb8778b212
@@ -122,8 +122,8 @@ theorem norm_sub_mod_part_aux (r : ℚ) (h : ‖(r : ℚ_[p])‖ ≤ 1) :
rw [← ZMod.int_coe_zMod_eq_zero_iff_dvd]
simp only [Int.cast_ofNat, ZMod.nat_cast_mod, Int.cast_mul, Int.cast_sub]
have := congr_arg (coe : ℤ → ZMod p) (gcd_eq_gcd_ab r.denom p)
- simp only [Int.cast_ofNat, add_zero, Int.cast_add, ZMod.nat_cast_self, Int.cast_mul, zero_mul] at
- this
+ simp only [Int.cast_ofNat, add_zero, Int.cast_add, ZMod.nat_cast_self, Int.cast_mul,
+ MulZeroClass.zero_mul] at this
push_cast
rw [mul_right_comm, mul_assoc, ← this]
suffices rdcp : r.denom.coprime p
@@ -385,7 +385,7 @@ theorem appr_spec (n : ℕ) : ∀ x : ℤ_[p], x - appr x n ∈ (Ideal.span {p ^
simp only [map_natCast, ZMod.nat_cast_self, RingHom.map_pow, RingHom.map_mul, ZMod.nat_cast_val]
have hc' : c ≠ 0 := by
rintro rfl
- simp only [mul_zero] at hc
+ simp only [MulZeroClass.mul_zero] at hc
contradiction
conv_rhs =>
congr
@@ -408,7 +408,7 @@ theorem appr_spec (n : ℕ) : ∀ x : ℤ_[p], x - appr x n ∈ (Ideal.span {p ^
rw [DiscreteValuationRing.unit_mul_pow_congr_unit _ _ _ _ _ hc]
exact irreducible_p
· rw [zero_pow hc0]
- simp only [sub_zero, ZMod.cast_zero, mul_zero]
+ simp only [sub_zero, ZMod.cast_zero, MulZeroClass.mul_zero]
rw [unit_coeff_spec hc']
exact (dvd_pow_self (p : ℤ_[p]) hc0.ne').mul_left _
#align padic_int.appr_spec PadicInt.appr_spec
mathlib commit https://github.com/leanprover-community/mathlib/commit/4c586d291f189eecb9d00581aeb3dd998ac34442
@@ -104,7 +104,7 @@ theorem isUnit_den (r : ℚ) (h : ‖(r : ℚ_[p])‖ ≤ 1) : IsUnit (r.den :
have key : ‖(r.num : ℚ_[p])‖ < 1 := by
calc
_ = _ := hr.symm
- _ < 1 * 1 := mul_lt_mul' h norm_denom_lt (norm_nonneg _) zero_lt_one
+ _ < 1 * 1 := (mul_lt_mul' h norm_denom_lt (norm_nonneg _) zero_lt_one)
_ = 1 := mul_one 1
have : ↑p ∣ r.num ∧ (p : ℤ) ∣ r.denom :=
@@ -197,7 +197,7 @@ theorem exists_mem_range : ∃ n : ℕ, n < p ∧ x - n ∈ maximalIdeal ℤ_[p]
rw [norm_sub_rev] at hr
calc
_ = ‖(r : ℚ_[p]) - x + x‖ := by ring_nf
- _ ≤ _ := padicNormE.nonarchimedean _ _
+ _ ≤ _ := (padicNormE.nonarchimedean _ _)
_ ≤ _ := max_le (le_of_lt hr) x.2
obtain ⟨n, hzn, hnp, hn⟩ := exists_mem_range_of_norm_rat_le_one r H
mathlib commit https://github.com/leanprover-community/mathlib/commit/bd9851ca476957ea4549eb19b40e7b5ade9428cc
nat_cast
/int_cast
/rat_cast
to natCast
/intCast
/ratCast
(#11486)
Now that I am defining NNRat.cast
, I want a definitive answer to this naming issue. Plenty of lemmas in mathlib already use natCast
/intCast
/ratCast
over nat_cast
/int_cast
/rat_cast
, and this matches with the general expectation that underscore-separated name parts correspond to a single declaration.
@@ -82,7 +82,7 @@ theorem modPart_nonneg : 0 ≤ modPart p r :=
theorem isUnit_den (r : ℚ) (h : ‖(r : ℚ_[p])‖ ≤ 1) : IsUnit (r.den : ℤ_[p]) := by
rw [isUnit_iff]
apply le_antisymm (r.den : ℤ_[p]).2
- rw [← not_lt, coe_nat_cast]
+ rw [← not_lt, coe_natCast]
intro norm_denom_lt
have hr : ‖(r * r.den : ℚ_[p])‖ = ‖(r.num : ℚ_[p])‖ := by
congr
@@ -103,8 +103,8 @@ theorem isUnit_den (r : ℚ) (h : ‖(r : ℚ_[p])‖ ≤ 1) : IsUnit (r.den :
theorem norm_sub_modPart_aux (r : ℚ) (h : ‖(r : ℚ_[p])‖ ≤ 1) :
↑p ∣ r.num - r.num * r.den.gcdA p % p * ↑r.den := by
- rw [← ZMod.int_cast_zmod_eq_zero_iff_dvd]
- simp only [Int.cast_natCast, ZMod.nat_cast_mod, Int.cast_mul, Int.cast_sub]
+ rw [← ZMod.intCast_zmod_eq_zero_iff_dvd]
+ simp only [Int.cast_natCast, ZMod.natCast_mod, Int.cast_mul, Int.cast_sub]
have := congr_arg (fun x => x % p : ℤ → ZMod p) (gcd_eq_gcd_ab r.den p)
simp only [Int.cast_natCast, CharP.cast_eq_zero, EuclideanDomain.mod_zero, Int.cast_add,
Int.cast_mul, zero_mul, add_zero] at this
@@ -128,7 +128,7 @@ theorem norm_sub_modPart (h : ‖(r : ℚ_[p])‖ ≤ 1) : ‖(⟨r, h⟩ - modP
convert (Int.castRingHom ℤ_[p]).map_dvd this
simp only [sub_mul, Int.cast_natCast, eq_intCast, Int.cast_mul, sub_left_inj, Int.cast_sub]
apply Subtype.coe_injective
- simp only [coe_mul, Subtype.coe_mk, coe_nat_cast]
+ simp only [coe_mul, Subtype.coe_mk, coe_natCast]
rw_mod_cast [@Rat.mul_den_eq_num r]
rfl
exact norm_sub_modPart_aux r h
@@ -143,7 +143,7 @@ theorem zmod_congr_of_sub_mem_span_aux (n : ℕ) (x : ℤ_[p]) (a b : ℤ)
(ha : x - a ∈ (Ideal.span {(p : ℤ_[p]) ^ n}))
(hb : x - b ∈ (Ideal.span {(p : ℤ_[p]) ^ n})) : (a : ZMod (p ^ n)) = b := by
rw [Ideal.mem_span_singleton] at ha hb
- rw [← sub_eq_zero, ← Int.cast_sub, ZMod.int_cast_zmod_eq_zero_iff_dvd, Int.coe_nat_pow]
+ rw [← sub_eq_zero, ← Int.cast_sub, ZMod.intCast_zmod_eq_zero_iff_dvd, Int.coe_nat_pow]
rw [← dvd_neg, neg_sub] at ha
have := dvd_add ha hb
rwa [sub_eq_add_neg, sub_eq_add_neg, add_assoc, neg_add_cancel_left, ← sub_eq_add_neg, ←
@@ -184,7 +184,7 @@ theorem exists_mem_range : ∃ n : ℕ, n < p ∧ x - n ∈ maximalIdeal ℤ_[p]
use n
constructor
· exact mod_cast hnp
- simp only [norm_def, coe_sub, Subtype.coe_mk, coe_nat_cast] at hn ⊢
+ simp only [norm_def, coe_sub, Subtype.coe_mk, coe_natCast] at hn ⊢
rw [show (x - n : ℚ_[p]) = x - r + (r - n) by ring]
apply lt_of_le_of_lt (padicNormE.nonarchimedean _ _)
apply max_lt hr
@@ -275,7 +275,7 @@ theorem toZMod_spec : x - (ZMod.cast (toZMod x) : ℤ_[p]) ∈ maximalIdeal ℤ_
dsimp [toZMod, toZModHom]
rcases Nat.exists_eq_add_of_lt hp_prime.1.pos with ⟨p', rfl⟩
change ↑((_ : ZMod (0 + p' + 1)).val) = (_ : ℤ_[0 + p' + 1])
- simp only [ZMod.val_nat_cast, add_zero, add_def, Nat.cast_inj, zero_add]
+ simp only [ZMod.val_natCast, add_zero, add_def, Nat.cast_inj, zero_add]
apply mod_eq_of_lt
simpa only [zero_add] using zmodRepr_lt_p x
#align padic_int.to_zmod_spec PadicInt.toZMod_spec
@@ -310,7 +310,7 @@ noncomputable def appr : ℤ_[p] → ℕ → ℕ
theorem appr_lt (x : ℤ_[p]) (n : ℕ) : x.appr n < p ^ n := by
induction' n with n ih generalizing x
· simp only [appr, zero_eq, _root_.pow_zero, zero_lt_one]
- simp only [appr, map_natCast, ZMod.nat_cast_self, RingHom.map_pow, Int.natAbs, RingHom.map_mul]
+ simp only [appr, map_natCast, ZMod.natCast_self, RingHom.map_pow, Int.natAbs, RingHom.map_mul]
have hp : p ^ n < p ^ (n + 1) := by apply pow_lt_pow_right hp_prime.1.one_lt (lt_add_one n)
split_ifs with h
· apply lt_trans (ih _) hp
@@ -360,7 +360,7 @@ theorem appr_spec (n : ℕ) : ∀ x : ℤ_[p], x - appr x n ∈ Ideal.span {(p :
push_cast
rw [sub_add_eq_sub_sub]
obtain ⟨c, hc⟩ := ih x
- simp only [map_natCast, ZMod.nat_cast_self, RingHom.map_pow, RingHom.map_mul, ZMod.nat_cast_val]
+ simp only [map_natCast, ZMod.natCast_self, RingHom.map_pow, RingHom.map_mul, ZMod.natCast_val]
have hc' : c ≠ 0 := by
rintro rfl
simp only [mul_zero] at hc
@@ -412,7 +412,7 @@ theorem ker_toZModPow (n : ℕ) :
convert appr_spec n x
simp only [this, sub_zero, cast_zero]
dsimp [toZModPow, toZModHom] at h
- rw [ZMod.nat_cast_zmod_eq_zero_iff_dvd] at h
+ rw [ZMod.natCast_zmod_eq_zero_iff_dvd] at h
apply eq_zero_of_dvd_of_lt h (appr_lt _ _)
· intro h
rw [← sub_zero x] at h
@@ -430,7 +430,7 @@ theorem zmod_cast_comp_toZModPow (m n : ℕ) (h : m ≤ n) :
simp only [Function.comp_apply, ZMod.castHom_apply, RingHom.coe_comp]
simp only [toZModPow, toZModHom, RingHom.coe_mk]
dsimp
- rw [ZMod.cast_nat_cast (pow_dvd_pow p h),
+ rw [ZMod.cast_natCast (pow_dvd_pow p h),
zmod_congr_of_sub_mem_span m (x.appr n) (x.appr n) (x.appr m)]
· rw [sub_self]
apply Ideal.zero_mem _
@@ -447,7 +447,7 @@ theorem cast_toZModPow (m n : ℕ) (h : m ≤ n) (x : ℤ_[p]) :
rfl
#align padic_int.cast_to_zmod_pow PadicInt.cast_toZModPow
-theorem denseRange_nat_cast : DenseRange (Nat.cast : ℕ → ℤ_[p]) := by
+theorem denseRange_natCast : DenseRange (Nat.cast : ℕ → ℤ_[p]) := by
intro x
rw [Metric.mem_closure_range_iff]
intro ε hε
@@ -457,16 +457,16 @@ theorem denseRange_nat_cast : DenseRange (Nat.cast : ℕ → ℤ_[p]) := by
apply lt_of_le_of_lt _ hn
rw [norm_le_pow_iff_mem_span_pow]
apply appr_spec
-#align padic_int.dense_range_nat_cast PadicInt.denseRange_nat_cast
+#align padic_int.dense_range_nat_cast PadicInt.denseRange_natCast
-theorem denseRange_int_cast : DenseRange (Int.cast : ℤ → ℤ_[p]) := by
+theorem denseRange_intCast : DenseRange (Int.cast : ℤ → ℤ_[p]) := by
intro x
- refine DenseRange.induction_on denseRange_nat_cast x ?_ ?_
+ refine DenseRange.induction_on denseRange_natCast x ?_ ?_
· exact isClosed_closure
· intro a
apply subset_closure
exact Set.mem_range_self _
-#align padic_int.dense_range_int_cast PadicInt.denseRange_int_cast
+#align padic_int.dense_range_int_cast PadicInt.denseRange_intCast
end RingHoms
@@ -499,10 +499,10 @@ variable {f}
theorem pow_dvd_nthHom_sub (r : R) (i j : ℕ) (h : i ≤ j) :
(p : ℤ) ^ i ∣ nthHom f r j - nthHom f r i := by
specialize f_compat i j h
- rw [← Int.coe_nat_pow, ← ZMod.int_cast_zmod_eq_zero_iff_dvd, Int.cast_sub]
+ rw [← Int.coe_nat_pow, ← ZMod.intCast_zmod_eq_zero_iff_dvd, Int.cast_sub]
dsimp [nthHom]
rw [← f_compat, RingHom.comp_apply]
- simp only [ZMod.cast_id, ZMod.castHom_apply, sub_self, ZMod.nat_cast_val, ZMod.int_cast_cast]
+ simp only [ZMod.cast_id, ZMod.castHom_apply, sub_self, ZMod.natCast_val, ZMod.intCast_cast]
#align padic_int.pow_dvd_nth_hom_sub PadicInt.pow_dvd_nthHom_sub
theorem isCauSeq_nthHom (r : R) : IsCauSeq (padicNorm p) fun n => nthHom f r n := by
@@ -547,11 +547,11 @@ theorem nthHomSeq_add (r s : R) :
dsimp [nthHomSeq]
apply lt_of_le_of_lt _ hn
rw [← Int.cast_add, ← Int.cast_sub, ← padicNorm.dvd_iff_norm_le, ←
- ZMod.int_cast_zmod_eq_zero_iff_dvd]
+ ZMod.intCast_zmod_eq_zero_iff_dvd]
dsimp [nthHom]
- simp only [ZMod.nat_cast_val, RingHom.map_add, Int.cast_sub, ZMod.int_cast_cast, Int.cast_add]
+ simp only [ZMod.natCast_val, RingHom.map_add, Int.cast_sub, ZMod.intCast_cast, Int.cast_add]
rw [ZMod.cast_add (show p ^ n ∣ p ^ j from pow_dvd_pow _ hj)]
- simp only [cast_add, ZMod.nat_cast_val, Int.cast_add, ZMod.int_cast_cast, sub_self]
+ simp only [cast_add, ZMod.natCast_val, Int.cast_add, ZMod.intCast_cast, sub_self]
#align padic_int.nth_hom_seq_add PadicInt.nthHomSeq_add
theorem nthHomSeq_mul (r s : R) :
@@ -563,9 +563,9 @@ theorem nthHomSeq_mul (r s : R) :
dsimp [nthHomSeq]
apply lt_of_le_of_lt _ hn
rw [← Int.cast_mul, ← Int.cast_sub, ← padicNorm.dvd_iff_norm_le, ←
- ZMod.int_cast_zmod_eq_zero_iff_dvd]
+ ZMod.intCast_zmod_eq_zero_iff_dvd]
dsimp [nthHom]
- simp only [ZMod.nat_cast_val, RingHom.map_mul, Int.cast_sub, ZMod.int_cast_cast, Int.cast_mul]
+ simp only [ZMod.natCast_val, RingHom.map_mul, Int.cast_sub, ZMod.intCast_cast, Int.cast_mul]
rw [ZMod.cast_mul (show p ^ n ∣ p ^ j from pow_dvd_pow _ hj), sub_self]
#align padic_int.nth_hom_seq_mul PadicInt.nthHomSeq_mul
@@ -642,7 +642,7 @@ See also `PadicInt.lift_unique`.
-/
theorem lift_spec (n : ℕ) : (toZModPow n).comp (lift f_compat) = f n := by
ext r
- rw [RingHom.comp_apply, ← ZMod.nat_cast_zmod_val (f n r), ← map_natCast <| toZModPow n, ←
+ rw [RingHom.comp_apply, ← ZMod.natCast_zmod_val (f n r), ← map_natCast <| toZModPow n, ←
sub_eq_zero, ← RingHom.map_sub, ← RingHom.mem_ker, ker_toZModPow]
apply lift_sub_val_mem_span
#align padic_int.lift_spec PadicInt.lift_spec
@@ -91,7 +91,7 @@ theorem isUnit_den (r : ℚ) (h : ‖(r : ℚ_[p])‖ ≤ 1) : IsUnit (r.den :
have key : ‖(r.num : ℚ_[p])‖ < 1 := by
calc
_ = _ := hr.symm
- _ < 1 * 1 := (mul_lt_mul' h norm_denom_lt (norm_nonneg _) zero_lt_one)
+ _ < 1 * 1 := mul_lt_mul' h norm_denom_lt (norm_nonneg _) zero_lt_one
_ = 1 := mul_one 1
have : ↑p ∣ r.num ∧ (p : ℤ) ∣ r.den := by
OfNat
and Nat.cast
lemmas (#11861)
This renames
Int.cast_ofNat
to Int.cast_natCast
Int.int_cast_ofNat
to Int.cast_ofNat
I think the history here is that this lemma was previously about Int.ofNat
, before we globally fixed the simp-normal form to be Nat.cast
.
Since the Int.cast_ofNat
name is repurposed, it can't be deprecated. Int.int_cast_ofNat
is such a wonky name that it was probably never used.
@@ -104,9 +104,9 @@ theorem isUnit_den (r : ℚ) (h : ‖(r : ℚ_[p])‖ ≤ 1) : IsUnit (r.den :
theorem norm_sub_modPart_aux (r : ℚ) (h : ‖(r : ℚ_[p])‖ ≤ 1) :
↑p ∣ r.num - r.num * r.den.gcdA p % p * ↑r.den := by
rw [← ZMod.int_cast_zmod_eq_zero_iff_dvd]
- simp only [Int.cast_ofNat, ZMod.nat_cast_mod, Int.cast_mul, Int.cast_sub]
+ simp only [Int.cast_natCast, ZMod.nat_cast_mod, Int.cast_mul, Int.cast_sub]
have := congr_arg (fun x => x % p : ℤ → ZMod p) (gcd_eq_gcd_ab r.den p)
- simp only [Int.cast_ofNat, CharP.cast_eq_zero, EuclideanDomain.mod_zero, Int.cast_add,
+ simp only [Int.cast_natCast, CharP.cast_eq_zero, EuclideanDomain.mod_zero, Int.cast_add,
Int.cast_mul, zero_mul, add_zero] at this
push_cast
rw [mul_right_comm, mul_assoc, ← this]
@@ -126,7 +126,7 @@ theorem norm_sub_modPart (h : ‖(r : ℚ_[p])‖ ≤ 1) : ‖(⟨r, h⟩ - modP
rw [norm_lt_one_iff_dvd, ← (isUnit_den r h).dvd_mul_right]
suffices ↑p ∣ r.num - n * r.den by
convert (Int.castRingHom ℤ_[p]).map_dvd this
- simp only [sub_mul, Int.cast_ofNat, eq_intCast, Int.cast_mul, sub_left_inj, Int.cast_sub]
+ simp only [sub_mul, Int.cast_natCast, eq_intCast, Int.cast_mul, sub_left_inj, Int.cast_sub]
apply Subtype.coe_injective
simp only [coe_mul, Subtype.coe_mk, coe_nat_cast]
rw_mod_cast [@Rat.mul_den_eq_num r]
@@ -164,7 +164,7 @@ theorem zmod_congr_of_sub_mem_max_ideal (x : ℤ_[p]) (m n : ℕ) (hm : x - m
specialize this hm hn
apply_fun ZMod.castHom (show p ∣ p ^ 1 by rw [pow_one]) (ZMod p) at this
simp only [map_intCast] at this
- simpa only [Int.cast_ofNat] using this
+ simpa only [Int.cast_natCast] using this
#align padic_int.zmod_congr_of_sub_mem_max_ideal PadicInt.zmod_congr_of_sub_mem_max_ideal
variable (x : ℤ_[p])
coe_nat
to natCast
(#11637)
Reduce the diff of #11499
All in the Int
namespace:
ofNat_eq_cast
→ ofNat_eq_natCast
cast_eq_cast_iff_Nat
→ natCast_inj
natCast_eq_ofNat
→ ofNat_eq_natCast
coe_nat_sub
→ natCast_sub
coe_nat_nonneg
→ natCast_nonneg
sign_coe_add_one
→ sign_natCast_add_one
nat_succ_eq_int_succ
→ natCast_succ
succ_neg_nat_succ
→ succ_neg_natCast_succ
coe_pred_of_pos
→ natCast_pred_of_pos
coe_nat_div
→ natCast_div
coe_nat_ediv
→ natCast_ediv
sign_coe_nat_of_nonzero
→ sign_natCast_of_ne_zero
toNat_coe_nat
→ toNat_natCast
toNat_coe_nat_add_one
→ toNat_natCast_add_one
coe_nat_dvd
→ natCast_dvd_natCast
coe_nat_dvd_left
→ natCast_dvd
coe_nat_dvd_right
→ dvd_natCast
le_coe_nat_sub
→ le_natCast_sub
succ_coe_nat_pos
→ succ_natCast_pos
coe_nat_modEq_iff
→ natCast_modEq_iff
coe_natAbs
→ natCast_natAbs
coe_nat_eq_zero
→ natCast_eq_zero
coe_nat_ne_zero
→ natCast_ne_zero
coe_nat_ne_zero_iff_pos
→ natCast_ne_zero_iff_pos
abs_coe_nat
→ abs_natCast
coe_nat_nonpos_iff
→ natCast_nonpos_iff
Also rename Nat.coe_nat_dvd
to Nat.cast_dvd_cast
@@ -98,7 +98,7 @@ theorem isUnit_den (r : ℚ) (h : ‖(r : ℚ_[p])‖ ≤ 1) : IsUnit (r.den :
simp only [← norm_int_lt_one_iff_dvd, ← padic_norm_e_of_padicInt]
exact ⟨key, norm_denom_lt⟩
apply hp_prime.1.not_dvd_one
- rwa [← r.reduced.gcd_eq_one, Nat.dvd_gcd_iff, ← Int.coe_nat_dvd_left, ← Int.coe_nat_dvd]
+ rwa [← r.reduced.gcd_eq_one, Nat.dvd_gcd_iff, ← Int.natCast_dvd, ← Int.natCast_dvd_natCast]
#align padic_int.is_unit_denom PadicInt.isUnit_den
theorem norm_sub_modPart_aux (r : ℚ) (h : ‖(r : ℚ_[p])‖ ≤ 1) :
@@ -115,7 +115,7 @@ theorem norm_sub_modPart_aux (r : ℚ) (h : ‖(r : ℚ_[p])‖ ≤ 1) :
simp only [mul_one, cast_one, sub_self]
apply Coprime.symm
apply (coprime_or_dvd_of_prime hp_prime.1 _).resolve_right
- rw [← Int.coe_nat_dvd, ← norm_int_lt_one_iff_dvd, not_lt]
+ rw [← Int.natCast_dvd_natCast, ← norm_int_lt_one_iff_dvd, not_lt]
apply ge_of_eq
rw [← isUnit_iff]
exact isUnit_den r h
We change the following field in the definition of an additive commutative monoid:
nsmul_succ : ∀ (n : ℕ) (x : G),
- AddMonoid.nsmul (n + 1) x = x + AddMonoid.nsmul n x
+ AddMonoid.nsmul (n + 1) x = AddMonoid.nsmul n x + x
where the latter is more natural
We adjust the definitions of ^
in monoids, groups, etc.
Originally there was a warning comment about why this natural order was preferred
use
x * npowRec n x
and notnpowRec n x * x
in the definition to make sure that definitional unfolding ofnpowRec
is blocked, to avoid deep recursion issues.
but it seems to no longer apply.
Remarks on the PR :
pow_succ
and pow_succ'
have switched their meanings.Ideal.IsPrime.mul_mem_pow
which is defined in [Mathlib/RingTheory/DedekindDomain/Ideal.lean]. Changing the order of operation forced me to add the symmetric lemma Ideal.IsPrime.mem_pow_mul
.@@ -322,7 +322,7 @@ theorem appr_lt (x : ℤ_[p]) (n : ℕ) : x.appr n < p ^ n := by
apply Nat.mul_le_mul_left
apply le_pred_of_lt
apply ZMod.val_lt
- · rw [mul_tsub, mul_one, ← _root_.pow_succ']
+ · rw [mul_tsub, mul_one, ← _root_.pow_succ]
apply add_tsub_cancel_of_le (le_of_lt hp)
#align padic_int.appr_lt PadicInt.appr_lt
@@ -369,7 +369,7 @@ theorem appr_spec (n : ℕ) : ∀ x : ℤ_[p], x - appr x n ∈ Ideal.span {(p :
congr
simp only [hc]
rw [show (x - (appr x n : ℤ_[p])).valuation = ((p : ℤ_[p]) ^ n * c).valuation by rw [hc]]
- rw [valuation_p_pow_mul _ _ hc', add_sub_cancel_left, _root_.pow_succ', ← mul_sub]
+ rw [valuation_p_pow_mul _ _ hc', add_sub_cancel_left, _root_.pow_succ, ← mul_sub]
apply mul_dvd_mul_left
obtain hc0 | hc0 := eq_or_ne c.valuation.natAbs 0
· simp only [hc0, mul_one, _root_.pow_zero]
Move basic Nat
lemmas from Data.Nat.Order.Basic
and Data.Nat.Pow
to Data.Nat.Defs
. Most proofs need adapting, but that's easily solved by replacing the general mathlib lemmas by the new Std Nat
-specific lemmas and using omega
.
Data.Nat.Pow
to Algebra.GroupPower.Order
Data.Nat.Pow
to Algebra.GroupPower.Order
bit
/bit0
/bit1
lemmas from Data.Nat.Order.Basic
to Data.Nat.Bits
Data.Nat.Order.Basic
anymoreNat
-specific lemmas to help fix the fallout (look for nolint simpNF
)Nat.mul_self_le_mul_self_iff
and Nat.mul_self_lt_mul_self_iff
around (they were misnamed)Nat.one_lt_pow
implicit@@ -533,7 +533,7 @@ theorem nthHomSeq_one : nthHomSeq f_compat 1 ≈ 1 := by
change _ < _ at hε
use 1
intro j hj
- haveI : Fact (1 < p ^ j) := ⟨Nat.one_lt_pow _ _ (by omega) hp_prime.1.one_lt⟩
+ haveI : Fact (1 < p ^ j) := ⟨Nat.one_lt_pow (by omega) hp_prime.1.one_lt⟩
suffices (ZMod.cast (1 : ZMod (p ^ j)) : ℚ) = 1 by simp [nthHomSeq, nthHom, this, hε]
rw [ZMod.cast_eq_val, ZMod.val_one, Nat.cast_one]
#align padic_int.nth_hom_seq_one PadicInt.nthHomSeq_one
mul
-div
cancellation lemmas (#11530)
Lemma names around cancellation of multiplication and division are a mess.
This PR renames a handful of them according to the following table (each big row contains the multiplicative statement, then the three rows contain the GroupWithZero
lemma name, the Group
lemma, the AddGroup
lemma name).
| Statement | New name | Old name | |
@@ -369,7 +369,7 @@ theorem appr_spec (n : ℕ) : ∀ x : ℤ_[p], x - appr x n ∈ Ideal.span {(p :
congr
simp only [hc]
rw [show (x - (appr x n : ℤ_[p])).valuation = ((p : ℤ_[p]) ^ n * c).valuation by rw [hc]]
- rw [valuation_p_pow_mul _ _ hc', add_sub_cancel', _root_.pow_succ', ← mul_sub]
+ rw [valuation_p_pow_mul _ _ hc', add_sub_cancel_left, _root_.pow_succ', ← mul_sub]
apply mul_dvd_mul_left
obtain hc0 | hc0 := eq_or_ne c.valuation.natAbs 0
· simp only [hc0, mul_one, _root_.pow_zero]
open Classical
(#11199)
We remove all but one open Classical
s, instead preferring to use open scoped Classical
. The only real side-effect this led to is moving a couple declarations to use Exists.choose
instead of Classical.choose
.
The first few commits are explicitly labelled regex replaces for ease of review.
@@ -41,7 +41,8 @@ which removes some boilerplate code.
noncomputable section
-open Classical Nat LocalRing Padic
+open scoped Classical
+open Nat LocalRing Padic
namespace PadicInt
I ran tryAtEachStep on all files under Mathlib
to find all locations where omega
succeeds. For each that was a linarith
without an only
, I tried replacing it with omega
, and I verified that elaboration time got smaller. (In almost all cases, there was a noticeable speedup.) I also replaced some slow aesop
s along the way.
@@ -532,7 +532,7 @@ theorem nthHomSeq_one : nthHomSeq f_compat 1 ≈ 1 := by
change _ < _ at hε
use 1
intro j hj
- haveI : Fact (1 < p ^ j) := ⟨Nat.one_lt_pow _ _ (by linarith) hp_prime.1.one_lt⟩
+ haveI : Fact (1 < p ^ j) := ⟨Nat.one_lt_pow _ _ (by omega) hp_prime.1.one_lt⟩
suffices (ZMod.cast (1 : ZMod (p ^ j)) : ℚ) = 1 by simp [nthHomSeq, nthHom, this, hε]
rw [ZMod.cast_eq_val, ZMod.val_one, Nat.cast_one]
#align padic_int.nth_hom_seq_one PadicInt.nthHomSeq_one
have
, replace
and suffices
(#10640)
No changes to tactic file, it's just boring fixes throughout the library.
This follows on from #6964.
Co-authored-by: sgouezel <sebastien.gouezel@univ-rennes1.fr> Co-authored-by: Eric Wieser <wieser.eric@gmail.com>
@@ -109,8 +109,8 @@ theorem norm_sub_modPart_aux (r : ℚ) (h : ‖(r : ℚ_[p])‖ ≤ 1) :
Int.cast_mul, zero_mul, add_zero] at this
push_cast
rw [mul_right_comm, mul_assoc, ← this]
- suffices rdcp : r.den.Coprime p
- · rw [rdcp.gcd_eq_one]
+ suffices rdcp : r.den.Coprime p by
+ rw [rdcp.gcd_eq_one]
simp only [mul_one, cast_one, sub_self]
apply Coprime.symm
apply (coprime_or_dvd_of_prime hp_prime.1 _).resolve_right
@@ -272,7 +272,7 @@ This coercion is only a ring homomorphism if it coerces into a ring whose charac
theorem toZMod_spec : x - (ZMod.cast (toZMod x) : ℤ_[p]) ∈ maximalIdeal ℤ_[p] := by
convert sub_zmodRepr_mem x using 2
dsimp [toZMod, toZModHom]
- rcases exists_eq_add_of_lt hp_prime.1.pos with ⟨p', rfl⟩
+ rcases Nat.exists_eq_add_of_lt hp_prime.1.pos with ⟨p', rfl⟩
change ↑((_ : ZMod (0 + p' + 1)).val) = (_ : ℤ_[0 + p' + 1])
simp only [ZMod.val_nat_cast, add_zero, add_def, Nat.cast_inj, zero_add]
apply mod_eq_of_lt
f ^ n
(#9617)
This involves moving lemmas from Algebra.GroupPower.Ring
to Algebra.GroupWithZero.Basic
and changing some 0 < n
assumptions to n ≠ 0
.
From LeanAPAP
@@ -370,7 +370,7 @@ theorem appr_spec (n : ℕ) : ∀ x : ℤ_[p], x - appr x n ∈ Ideal.span {(p :
rw [show (x - (appr x n : ℤ_[p])).valuation = ((p : ℤ_[p]) ^ n * c).valuation by rw [hc]]
rw [valuation_p_pow_mul _ _ hc', add_sub_cancel', _root_.pow_succ', ← mul_sub]
apply mul_dvd_mul_left
- obtain hc0 | hc0 := c.valuation.natAbs.eq_zero_or_pos
+ obtain hc0 | hc0 := eq_or_ne c.valuation.natAbs 0
· simp only [hc0, mul_one, _root_.pow_zero]
rw [mul_comm, unitCoeff_spec h] at hc
suffices c = unitCoeff h by
@@ -382,10 +382,9 @@ theorem appr_spec (n : ℕ) : ∀ x : ℤ_[p], x - appr x n ∈ Ideal.span {(p :
rw [isUnit_iff, norm_eq_pow_val hc', hc0, neg_zero, zpow_zero]
rw [DiscreteValuationRing.unit_mul_pow_congr_unit _ _ _ _ _ hc]
exact irreducible_p
- · rw [zero_pow hc0]
- simp only [sub_zero, ZMod.cast_zero, mul_zero]
+ · simp only [zero_pow hc0, sub_zero, ZMod.cast_zero, mul_zero]
rw [unitCoeff_spec hc']
- exact (dvd_pow_self (p : ℤ_[p]) hc0.ne').mul_left _
+ exact (dvd_pow_self (p : ℤ_[p]) hc0).mul_left _
#align padic_int.appr_spec PadicInt.appr_spec
/-- A ring hom from `ℤ_[p]` to `ZMod (p^n)`, with underlying function `PadicInt.appr n`. -/
Co-authored-by: Ruben Van de Velde <65514131+Ruben-VandeVelde@users.noreply.github.com> Co-authored-by: Vierkantor <vierkantor@vierkantor.com>
@@ -269,7 +269,7 @@ to coerce to rings of arbitrary characteristic, instead of only rings of charact
This coercion is only a ring homomorphism if it coerces into a ring whose characteristic divides
`p`. While this is not the case here we can still make use of the coercion.
-/
-theorem toZMod_spec : x - (toZMod x : ℤ_[p]) ∈ maximalIdeal ℤ_[p] := by
+theorem toZMod_spec : x - (ZMod.cast (toZMod x) : ℤ_[p]) ∈ maximalIdeal ℤ_[p] := by
convert sub_zmodRepr_mem x using 2
dsimp [toZMod, toZModHom]
rcases exists_eq_add_of_lt hp_prime.1.pos with ⟨p', rfl⟩
@@ -441,7 +441,8 @@ theorem zmod_cast_comp_toZModPow (m n : ℕ) (h : m ≤ n) :
#align padic_int.zmod_cast_comp_to_zmod_pow PadicInt.zmod_cast_comp_toZModPow
@[simp]
-theorem cast_toZModPow (m n : ℕ) (h : m ≤ n) (x : ℤ_[p]) : ↑(toZModPow n x) = toZModPow m x := by
+theorem cast_toZModPow (m n : ℕ) (h : m ≤ n) (x : ℤ_[p]) :
+ ZMod.cast (toZModPow n x) = toZModPow m x := by
rw [← zmod_cast_comp_toZModPow _ _ h]
rfl
#align padic_int.cast_to_zmod_pow PadicInt.cast_toZModPow
@@ -533,7 +534,7 @@ theorem nthHomSeq_one : nthHomSeq f_compat 1 ≈ 1 := by
use 1
intro j hj
haveI : Fact (1 < p ^ j) := ⟨Nat.one_lt_pow _ _ (by linarith) hp_prime.1.one_lt⟩
- suffices ((1 : ZMod (p ^ j)) : ℚ) = 1 by simp [nthHomSeq, nthHom, this, hε]
+ suffices (ZMod.cast (1 : ZMod (p ^ j)) : ℚ) = 1 by simp [nthHomSeq, nthHom, this, hε]
rw [ZMod.cast_eq_val, ZMod.val_one, Nat.cast_one]
#align padic_int.nth_hom_seq_one PadicInt.nthHomSeq_one
The names for lemmas about monotonicity of (a ^ ·)
and (· ^ n)
were a mess. This PR tidies up everything related by following the naming convention for (a * ·)
and (· * b)
. Namely, (a ^ ·)
is pow_right
and (· ^ n)
is pow_left
in lemma names. All lemma renames follow the corresponding multiplication lemma names closely.
Algebra.GroupPower.Order
pow_mono
→ pow_right_mono
pow_le_pow
→ pow_le_pow_right
pow_le_pow_of_le_left
→ pow_le_pow_left
pow_lt_pow_of_lt_left
→ pow_lt_pow_left
strictMonoOn_pow
→ pow_left_strictMonoOn
pow_strictMono_right
→ pow_right_strictMono
pow_lt_pow
→ pow_lt_pow_right
pow_lt_pow_iff
→ pow_lt_pow_iff_right
pow_le_pow_iff
→ pow_le_pow_iff_right
self_lt_pow
→ lt_self_pow
strictAnti_pow
→ pow_right_strictAnti
pow_lt_pow_iff_of_lt_one
→ pow_lt_pow_iff_right_of_lt_one
pow_lt_pow_of_lt_one
→ pow_lt_pow_right_of_lt_one
lt_of_pow_lt_pow
→ lt_of_pow_lt_pow_left
le_of_pow_le_pow
→ le_of_pow_le_pow_left
pow_lt_pow₀
→ pow_lt_pow_right₀
Algebra.GroupPower.CovariantClass
pow_le_pow_of_le_left'
→ pow_le_pow_left'
nsmul_le_nsmul_of_le_right
→ nsmul_le_nsmul_right
pow_lt_pow'
→ pow_lt_pow_right'
nsmul_lt_nsmul
→ nsmul_lt_nsmul_left
pow_strictMono_left
→ pow_right_strictMono'
nsmul_strictMono_right
→ nsmul_left_strictMono
StrictMono.pow_right'
→ StrictMono.pow_const
StrictMono.nsmul_left
→ StrictMono.const_nsmul
pow_strictMono_right'
→ pow_left_strictMono
nsmul_strictMono_left
→ nsmul_right_strictMono
Monotone.pow_right
→ Monotone.pow_const
Monotone.nsmul_left
→ Monotone.const_nsmul
lt_of_pow_lt_pow'
→ lt_of_pow_lt_pow_left'
lt_of_nsmul_lt_nsmul
→ lt_of_nsmul_lt_nsmul_right
pow_le_pow'
→ pow_le_pow_right'
nsmul_le_nsmul
→ nsmul_le_nsmul_left
pow_le_pow_of_le_one'
→ pow_le_pow_right_of_le_one'
nsmul_le_nsmul_of_nonpos
→ nsmul_le_nsmul_left_of_nonpos
le_of_pow_le_pow'
→ le_of_pow_le_pow_left'
le_of_nsmul_le_nsmul'
→ le_of_nsmul_le_nsmul_right'
pow_le_pow_iff'
→ pow_le_pow_iff_right'
nsmul_le_nsmul_iff
→ nsmul_le_nsmul_iff_left
pow_lt_pow_iff'
→ pow_lt_pow_iff_right'
nsmul_lt_nsmul_iff
→ nsmul_lt_nsmul_iff_left
Data.Nat.Pow
Nat.pow_lt_pow_of_lt_left
→ Nat.pow_lt_pow_left
Nat.pow_le_iff_le_left
→ Nat.pow_le_pow_iff_left
Nat.pow_lt_iff_lt_left
→ Nat.pow_lt_pow_iff_left
pow_le_pow_iff_left
pow_lt_pow_iff_left
pow_right_injective
pow_right_inj
Nat.pow_le_pow_left
to have the correct name since Nat.pow_le_pow_of_le_left
is in Std.Nat.pow_le_pow_right
to have the correct name since Nat.pow_le_pow_of_le_right
is in Std.self_le_pow
was a duplicate of le_self_pow
.Nat.pow_lt_pow_of_lt_right
is defeq to pow_lt_pow_right
.Nat.pow_right_strictMono
is defeq to pow_right_strictMono
.Nat.pow_le_iff_le_right
is defeq to pow_le_pow_iff_right
.Nat.pow_lt_iff_lt_right
is defeq to pow_lt_pow_iff_right
.0 < n
or 1 ≤ n
to n ≠ 0
.Nat
lemmas have been protected
.@@ -310,7 +310,7 @@ theorem appr_lt (x : ℤ_[p]) (n : ℕ) : x.appr n < p ^ n := by
induction' n with n ih generalizing x
· simp only [appr, zero_eq, _root_.pow_zero, zero_lt_one]
simp only [appr, map_natCast, ZMod.nat_cast_self, RingHom.map_pow, Int.natAbs, RingHom.map_mul]
- have hp : p ^ n < p ^ (n + 1) := by apply pow_lt_pow hp_prime.1.one_lt (lt_add_one n)
+ have hp : p ^ n < p ^ (n + 1) := by apply pow_lt_pow_right hp_prime.1.one_lt (lt_add_one n)
split_ifs with h
· apply lt_trans (ih _) hp
· calc
exact_mod_cast
tactic with mod_cast
elaborator where possible (#8404)
We still have the exact_mod_cast
tactic, used in a few places, which somehow (?) works a little bit harder to prevent the expected type influencing the elaboration of the term. I would like to get to the bottom of this, and it will be easier once the only usages of exact_mod_cast
are the ones that don't work using the term elaborator by itself.
Co-authored-by: Scott Morrison <scott.morrison@gmail.com>
@@ -71,11 +71,11 @@ variable {p}
theorem modPart_lt_p : modPart p r < p := by
convert Int.emod_lt _ _
· simp
- · exact_mod_cast hp_prime.1.ne_zero
+ · exact mod_cast hp_prime.1.ne_zero
#align padic_int.mod_part_lt_p PadicInt.modPart_lt_p
theorem modPart_nonneg : 0 ≤ modPart p r :=
- Int.emod_nonneg _ <| by exact_mod_cast hp_prime.1.ne_zero
+ Int.emod_nonneg _ <| mod_cast hp_prime.1.ne_zero
#align padic_int.mod_part_nonneg PadicInt.modPart_nonneg
theorem isUnit_den (r : ℚ) (h : ‖(r : ℚ_[p])‖ ≤ 1) : IsUnit (r.den : ℤ_[p]) := by
@@ -182,7 +182,7 @@ theorem exists_mem_range : ∃ n : ℕ, n < p ∧ x - n ∈ maximalIdeal ℤ_[p]
lift n to ℕ using hzn
use n
constructor
- · exact_mod_cast hnp
+ · exact mod_cast hnp
simp only [norm_def, coe_sub, Subtype.coe_mk, coe_nat_cast] at hn ⊢
rw [show (x - n : ℚ_[p]) = x - r + (r - n) by ring]
apply lt_of_le_of_lt (padicNormE.nonarchimedean _ _)
@@ -515,7 +515,7 @@ theorem isCauSeq_nthHom (r : R) : IsCauSeq (padicNorm p) fun n => nthHom f r n :
beta_reduce
norm_cast
rw [← padicNorm.dvd_iff_norm_le]
- exact_mod_cast pow_dvd_nthHom_sub f_compat r k j hj
+ exact mod_cast pow_dvd_nthHom_sub f_compat r k j hj
#align padic_int.is_cau_seq_nth_hom PadicInt.isCauSeq_nthHom
/-- `nthHomSeq f_compat r` bundles `PadicInt.nthHom f r`
This is the supremum of
along with some minor fixes from failures on nightly-testing as Mathlib master
is merged into it.
Note that some PRs for changes that are already compatible with the current toolchain and will be necessary have already been split out: #8380.
I am hopeful that in future we will be able to progressively merge adaptation PRs into a bump/v4.X.0
branch, so we never end up with a "big merge" like this. However one of these adaptation PRs (#8056) predates my new scheme for combined CI, and it wasn't possible to keep that PR viable in the meantime.
In particular this includes adjustments for the Lean PRs
We can get rid of all the
local macro_rules | `($x ^ $y) => `(HPow.hPow $x $y) -- Porting note: See issue [lean4#2220](https://github.com/leanprover/lean4/pull/2220)
macros across Mathlib (and in any projects that want to write natural number powers of reals).
Changes the default behaviour of simp
to (config := {decide := false})
. This makes simp
(and consequentially norm_num
) less powerful, but also more consistent, and less likely to blow up in long failures. This requires a variety of changes: changing some previously by simp
or norm_num
to decide
or rfl
, or adding (config := {decide := true})
.
This changed the behaviour of simp
so that simp [f]
will only unfold "fully applied" occurrences of f
. The old behaviour can be recovered with simp (config := { unfoldPartialApp := true })
. We may in future add a syntax for this, e.g. simp [!f]
; please provide feedback! In the meantime, we have made the following changes:
(config := { unfoldPartialApp := true })
in some places, to recover the old behaviour@[eqns]
to manually adjust the equation lemmas for a particular definition, recovering the old behaviour just for that definition. See #8371, where we do this for Function.comp
and Function.flip
.This change in Lean may require further changes down the line (e.g. adding the !f
syntax, and/or upstreaming the special treatment for Function.comp
and Function.flip
, and/or removing this special treatment). Please keep an open and skeptical mind about these changes!
Co-authored-by: leanprover-community-mathlib4-bot <leanprover-community-mathlib4-bot@users.noreply.github.com> Co-authored-by: Scott Morrison <scott.morrison@gmail.com> Co-authored-by: Eric Wieser <wieser.eric@gmail.com> Co-authored-by: Mauricio Collares <mauricio@collares.org>
@@ -146,7 +146,7 @@ theorem zmod_congr_of_sub_mem_span_aux (n : ℕ) (x : ℤ_[p]) (a b : ℤ)
rw [← dvd_neg, neg_sub] at ha
have := dvd_add ha hb
rwa [sub_eq_add_neg, sub_eq_add_neg, add_assoc, neg_add_cancel_left, ← sub_eq_add_neg, ←
- Int.cast_sub, pow_p_dvd_int_iff, Nat.cast_pow] at this
+ Int.cast_sub, pow_p_dvd_int_iff] at this
#align padic_int.zmod_congr_of_sub_mem_span_aux PadicInt.zmod_congr_of_sub_mem_span_aux
theorem zmod_congr_of_sub_mem_span (n : ℕ) (x : ℤ_[p]) (a b : ℕ)
@@ -488,7 +488,9 @@ def nthHom (r : R) : ℕ → ℤ := fun n => (f n r : ZMod (p ^ n)).val
#align padic_int.nth_hom PadicInt.nthHom
@[simp]
-theorem nthHom_zero : nthHom f 0 = 0 := by simp [nthHom]; rfl
+theorem nthHom_zero : nthHom f 0 = 0 := by
+ simp (config := { unfoldPartialApp := true }) [nthHom]
+ rfl
#align padic_int.nth_hom_zero PadicInt.nthHom_zero
variable {f}
@@ -671,7 +673,7 @@ theorem ext_of_toZModPow {x y : ℤ_[p]} : (∀ n, toZModPow n x = toZModPow n y
constructor
· intro h
rw [← lift_self x, ← lift_self y]
- simp [lift, limNthHom, nthHom, h]
+ simp (config := { unfoldPartialApp := true }) [lift, limNthHom, nthHom, h]
· rintro rfl _
rfl
#align padic_int.ext_of_to_zmod_pow PadicInt.ext_of_toZModPow
This incorporates changes from
nightly-testing
are unexciting: we need to fully qualify a few names)They can all be closed when this is merged.
Co-authored-by: Scott Morrison <scott.morrison@gmail.com> Co-authored-by: Eric Wieser <wieser.eric@gmail.com>
@@ -508,6 +508,9 @@ theorem isCauSeq_nthHom (r : R) : IsCauSeq (padicNorm p) fun n => nthHom f r n :
use k
intro j hj
refine' lt_of_le_of_lt _ hk
+ -- Need to do beta reduction first, as `norm_cast` doesn't.
+ -- Added to adapt to leanprover/lean4#2734.
+ beta_reduce
norm_cast
rw [← padicNorm.dvd_iff_norm_le]
exact_mod_cast pow_dvd_nthHom_sub f_compat r k j hj
rcases
, convert
and congrm
(#7725)
Replace rcases(
with rcases (
. Same thing for convert(
and congrm(
. No other change.
@@ -124,7 +124,7 @@ theorem norm_sub_modPart (h : ‖(r : ℚ_[p])‖ ≤ 1) : ‖(⟨r, h⟩ - modP
let n := modPart p r
rw [norm_lt_one_iff_dvd, ← (isUnit_den r h).dvd_mul_right]
suffices ↑p ∣ r.num - n * r.den by
- convert(Int.castRingHom ℤ_[p]).map_dvd this
+ convert (Int.castRingHom ℤ_[p]).map_dvd this
simp only [sub_mul, Int.cast_ofNat, eq_intCast, Int.cast_mul, sub_left_inj, Int.cast_sub]
apply Subtype.coe_injective
simp only [coe_mul, Subtype.coe_mk, coe_nat_cast]
@@ -403,7 +403,7 @@ def toZModPow (n : ℕ) : ℤ_[p] →+* ZMod (p ^ n) :=
#align padic_int.to_zmod_pow PadicInt.toZModPow
theorem ker_toZModPow (n : ℕ) :
- RingHom.ker (toZModPow n : ℤ_[p] →+* ZMod (p ^ n)) = Ideal.span {(p : ℤ_[p]) ^ n} := by
+ RingHom.ker (toZModPow n : ℤ_[p] →+* ZMod (p ^ n)) = Ideal.span {(p : ℤ_[p]) ^ n} := by
ext x
rw [RingHom.mem_ker]
constructor
@@ -109,10 +109,10 @@ theorem norm_sub_modPart_aux (r : ℚ) (h : ‖(r : ℚ_[p])‖ ≤ 1) :
Int.cast_mul, zero_mul, add_zero] at this
push_cast
rw [mul_right_comm, mul_assoc, ← this]
- suffices rdcp : r.den.coprime p
+ suffices rdcp : r.den.Coprime p
· rw [rdcp.gcd_eq_one]
simp only [mul_one, cast_one, sub_self]
- apply coprime.symm
+ apply Coprime.symm
apply (coprime_or_dvd_of_prime hp_prime.1 _).resolve_right
rw [← Int.coe_nat_dvd, ← norm_int_lt_one_iff_dvd, not_lt]
apply ge_of_eq
@@ -109,10 +109,10 @@ theorem norm_sub_modPart_aux (r : ℚ) (h : ‖(r : ℚ_[p])‖ ≤ 1) :
Int.cast_mul, zero_mul, add_zero] at this
push_cast
rw [mul_right_comm, mul_assoc, ← this]
- suffices rdcp : r.den.Coprime p
+ suffices rdcp : r.den.coprime p
· rw [rdcp.gcd_eq_one]
simp only [mul_one, cast_one, sub_self]
- apply Coprime.symm
+ apply coprime.symm
apply (coprime_or_dvd_of_prime hp_prime.1 _).resolve_right
rw [← Int.coe_nat_dvd, ← norm_int_lt_one_iff_dvd, not_lt]
apply ge_of_eq
Some changes have already been review and delegated in #6910 and #7148.
The diff that needs looking at is https://github.com/leanprover-community/mathlib4/pull/7174/commits/64d6d07ee18163627c8f517eb31455411921c5ac
The std bump PR was insta-merged already!
Co-authored-by: leanprover-community-mathlib4-bot <leanprover-community-mathlib4-bot@users.noreply.github.com> Co-authored-by: Scott Morrison <scott.morrison@gmail.com>
@@ -109,10 +109,10 @@ theorem norm_sub_modPart_aux (r : ℚ) (h : ‖(r : ℚ_[p])‖ ≤ 1) :
Int.cast_mul, zero_mul, add_zero] at this
push_cast
rw [mul_right_comm, mul_assoc, ← this]
- suffices rdcp : r.den.coprime p
+ suffices rdcp : r.den.Coprime p
· rw [rdcp.gcd_eq_one]
simp only [mul_one, cast_one, sub_self]
- apply coprime.symm
+ apply Coprime.symm
apply (coprime_or_dvd_of_prime hp_prime.1 _).resolve_right
rw [← Int.coe_nat_dvd, ← norm_int_lt_one_iff_dvd, not_lt]
apply ge_of_eq
MulZeroClass.
in mul_zero
/zero_mul
(#6682)
Search&replace MulZeroClass.mul_zero
-> mul_zero
, MulZeroClass.zero_mul
-> zero_mul
.
These were introduced by Mathport, as the full name of mul_zero
is actually MulZeroClass.mul_zero
(it's exported with the short name).
@@ -362,7 +362,7 @@ theorem appr_spec (n : ℕ) : ∀ x : ℤ_[p], x - appr x n ∈ Ideal.span {(p :
simp only [map_natCast, ZMod.nat_cast_self, RingHom.map_pow, RingHom.map_mul, ZMod.nat_cast_val]
have hc' : c ≠ 0 := by
rintro rfl
- simp only [MulZeroClass.mul_zero] at hc
+ simp only [mul_zero] at hc
contradiction
conv_rhs =>
congr
@@ -383,7 +383,7 @@ theorem appr_spec (n : ℕ) : ∀ x : ℤ_[p], x - appr x n ∈ Ideal.span {(p :
rw [DiscreteValuationRing.unit_mul_pow_congr_unit _ _ _ _ _ hc]
exact irreducible_p
· rw [zero_pow hc0]
- simp only [sub_zero, ZMod.cast_zero, MulZeroClass.mul_zero]
+ simp only [sub_zero, ZMod.cast_zero, mul_zero]
rw [unitCoeff_spec hc']
exact (dvd_pow_self (p : ℤ_[p]) hc0.ne').mul_left _
#align padic_int.appr_spec PadicInt.appr_spec
@@ -341,7 +341,6 @@ theorem dvd_appr_sub_appr (x : ℤ_[p]) (m n : ℕ) (h : m ≤ n) : p ^ m ∣ x.
dsimp [appr]
split_ifs with h
· exact ih
- dsimp
rw [add_comm, add_tsub_assoc_of_le (appr_mono _ (Nat.le_add_right m k))]
apply dvd_add _ ih
apply dvd_mul_of_dvd_left
Type _
and Sort _
(#6499)
We remove all possible occurences of Type _
and Sort _
in favor of Type*
and Sort*
.
This has nice performance benefits.
@@ -477,7 +477,7 @@ section lift
open CauSeq PadicSeq
-variable {R : Type _} [NonAssocSemiring R] (f : ∀ k : ℕ, R →+* ZMod (p ^ k))
+variable {R : Type*} [NonAssocSemiring R] (f : ∀ k : ℕ, R →+* ZMod (p ^ k))
(f_compat : ∀ (k1 k2) (hk : k1 ≤ k2), (ZMod.castHom (pow_dvd_pow p hk) _).comp (f k2) = f k1)
/-- Given a family of ring homs `f : Π n : ℕ, R →+* ZMod (p ^ n)`,
@@ -674,7 +674,7 @@ theorem ext_of_toZModPow {x y : ℤ_[p]} : (∀ n, toZModPow n x = toZModPow n y
rfl
#align padic_int.ext_of_to_zmod_pow PadicInt.ext_of_toZModPow
-theorem toZModPow_eq_iff_ext {R : Type _} [NonAssocSemiring R] {g g' : R →+* ℤ_[p]} :
+theorem toZModPow_eq_iff_ext {R : Type*} [NonAssocSemiring R] {g g' : R →+* ℤ_[p]} :
(∀ n, (toZModPow n).comp g = (toZModPow n).comp g') ↔ g = g' := by
constructor
· intro hg
@@ -2,15 +2,12 @@
Copyright (c) 2020 Johan Commelin, Robert Y. Lewis. All rights reserved.
Released under Apache 2.0 license as described in the file LICENSE.
Authors: Johan Commelin, Robert Y. Lewis
-
-! This file was ported from Lean 3 source module number_theory.padics.ring_homs
-! leanprover-community/mathlib commit 565eb991e264d0db702722b4bde52ee5173c9950
-! Please do not edit these lines, except to modify the commit id
-! if you have ported upstream changes.
-/
import Mathlib.Data.ZMod.Basic
import Mathlib.NumberTheory.Padics.PadicIntegers
+#align_import number_theory.padics.ring_homs from "leanprover-community/mathlib"@"565eb991e264d0db702722b4bde52ee5173c9950"
+
/-!
# Relating `ℤ_[p]` to `ZMod (p ^ n)`
This is the second half of the changes originally in #5699, removing all occurrences of ;
after a space and implementing a linter rule to enforce it.
In most cases this 2-character substring has a space after it, so the following command was run first:
find . -type f -name "*.lean" -exec sed -i -E 's/ ; /; /g' {} \;
The remaining cases were few enough in number that they were done manually.
@@ -663,7 +663,7 @@ theorem lift_unique (g : R →+* ℤ_[p]) (hg : ∀ n, (toZModPow n).comp g = f
theorem lift_self (z : ℤ_[p]) : @lift p _ ℤ_[p] _ toZModPow zmod_cast_comp_toZModPow z = z := by
show _ = RingHom.id _ z
rw [@lift_unique p _ ℤ_[p] _ _ zmod_cast_comp_toZModPow (RingHom.id ℤ_[p])]
- intro ; rw [RingHom.comp_id]
+ intro; rw [RingHom.comp_id]
#align padic_int.lift_self PadicInt.lift_self
end lift
at
and goals (#5387)
Changes are of the form
some_tactic at h⊢
-> some_tactic at h ⊢
some_tactic at h
-> some_tactic at h
@@ -164,7 +164,7 @@ theorem zmod_congr_of_sub_mem_max_ideal (x : ℤ_[p]) (m n : ℕ) (hm : x - m
have := zmod_congr_of_sub_mem_span_aux 1 x m n
simp only [pow_one] at this
specialize this hm hn
- apply_fun ZMod.castHom (show p ∣ p ^ 1 by rw [pow_one]) (ZMod p) at this
+ apply_fun ZMod.castHom (show p ∣ p ^ 1 by rw [pow_one]) (ZMod p) at this
simp only [map_intCast] at this
simpa only [Int.cast_ofNat] using this
#align padic_int.zmod_congr_of_sub_mem_max_ideal PadicInt.zmod_congr_of_sub_mem_max_ideal
@@ -186,7 +186,7 @@ theorem exists_mem_range : ∃ n : ℕ, n < p ∧ x - n ∈ maximalIdeal ℤ_[p]
use n
constructor
· exact_mod_cast hnp
- simp only [norm_def, coe_sub, Subtype.coe_mk, coe_nat_cast] at hn⊢
+ simp only [norm_def, coe_sub, Subtype.coe_mk, coe_nat_cast] at hn ⊢
rw [show (x - n : ℚ_[p]) = x - r + (r - n) by ring]
apply lt_of_le_of_lt (padicNormE.nonarchimedean _ _)
apply max_lt hr
@@ -579,7 +579,7 @@ theorem limNthHom_spec (r : R) :
∀ ε : ℝ, 0 < ε → ∃ N : ℕ, ∀ n ≥ N, ‖limNthHom f_compat r - nthHom f r n‖ < ε := by
intro ε hε
obtain ⟨ε', hε'0, hε'⟩ : ∃ v : ℚ, (0 : ℝ) < v ∧ ↑v < ε := exists_rat_btwn hε
- norm_cast at hε'0
+ norm_cast at hε'0
obtain ⟨N, hN⟩ := padicNormE.defn (nthHomSeq f_compat r) hε'0
use N
intro n hn
@@ -266,7 +266,7 @@ def toZMod : ℤ_[p] →+* ZMod p :=
/-- `z - (toZMod z : ℤ_[p])` is contained in the maximal ideal of `ℤ_[p]`, for every `z : ℤ_[p]`.
The coercion from `ZMod p` to `ℤ_[p]` is `ZMod.cast`,
-which coerces `ZMod p` into artibrary rings.
+which coerces `ZMod p` into arbitrary rings.
This is unfortunate, but a consequence of the fact that we allow `ZMod p`
to coerce to rings of arbitrary characteristic, instead of only rings of characteristic `p`.
This coercion is only a ring homomorphism if it coerces into a ring whose characteristic divides
@@ -44,9 +44,7 @@ which removes some boilerplate code.
noncomputable section
-open Classical
-
-open Nat LocalRing Padic
+open Classical Nat LocalRing Padic
namespace PadicInt
@@ -59,8 +57,8 @@ section RingHoms
variable (p) (r : ℚ)
-/-- `mod_part p r` is an integer that satisfies
-`‖(r - mod_part p r : ℚ_[p])‖ < 1` when `‖(r : ℚ_[p])‖ ≤ 1`,
+/-- `modPart p r` is an integer that satisfies
+`‖(r - modPart p r : ℚ_[p])‖ < 1` when `‖(r : ℚ_[p])‖ ≤ 1`,
see `PadicInt.norm_sub_modPart`.
It is the unique non-negative integer that is `< p` with this property.
@@ -105,7 +103,7 @@ theorem isUnit_den (r : ℚ) (h : ‖(r : ℚ_[p])‖ ≤ 1) : IsUnit (r.den :
rwa [← r.reduced.gcd_eq_one, Nat.dvd_gcd_iff, ← Int.coe_nat_dvd_left, ← Int.coe_nat_dvd]
#align padic_int.is_unit_denom PadicInt.isUnit_den
-theorem norm_sub_mod_part_aux (r : ℚ) (h : ‖(r : ℚ_[p])‖ ≤ 1) :
+theorem norm_sub_modPart_aux (r : ℚ) (h : ‖(r : ℚ_[p])‖ ≤ 1) :
↑p ∣ r.num - r.num * r.den.gcdA p % p * ↑r.den := by
rw [← ZMod.int_cast_zmod_eq_zero_iff_dvd]
simp only [Int.cast_ofNat, ZMod.nat_cast_mod, Int.cast_mul, Int.cast_sub]
@@ -123,7 +121,7 @@ theorem norm_sub_mod_part_aux (r : ℚ) (h : ‖(r : ℚ_[p])‖ ≤ 1) :
apply ge_of_eq
rw [← isUnit_iff]
exact isUnit_den r h
-#align padic_int.norm_sub_mod_part_aux PadicInt.norm_sub_mod_part_aux
+#align padic_int.norm_sub_mod_part_aux PadicInt.norm_sub_modPart_aux
theorem norm_sub_modPart (h : ‖(r : ℚ_[p])‖ ≤ 1) : ‖(⟨r, h⟩ - modPart p r : ℤ_[p])‖ < 1 := by
let n := modPart p r
@@ -135,7 +133,7 @@ theorem norm_sub_modPart (h : ‖(r : ℚ_[p])‖ ≤ 1) : ‖(⟨r, h⟩ - modP
simp only [coe_mul, Subtype.coe_mk, coe_nat_cast]
rw_mod_cast [@Rat.mul_den_eq_num r]
rfl
- exact norm_sub_mod_part_aux r h
+ exact norm_sub_modPart_aux r h
#align padic_int.norm_sub_mod_part PadicInt.norm_sub_modPart
theorem exists_mem_range_of_norm_rat_le_one (h : ‖(r : ℚ_[p])‖ ≤ 1) :
@@ -180,7 +178,7 @@ theorem exists_mem_range : ∃ n : ℕ, n < p ∧ x - n ∈ maximalIdeal ℤ_[p]
rw [norm_sub_rev] at hr
calc
_ = ‖(r : ℚ_[p]) - x + x‖ := by ring_nf
- _ ≤ _ := (padicNormE.nonarchimedean _ _)
+ _ ≤ _ := padicNormE.nonarchimedean _ _
_ ≤ _ := max_le (le_of_lt hr) x.2
obtain ⟨n, hzn, hnp, hn⟩ := exists_mem_range_of_norm_rat_le_one r H
@@ -214,7 +212,7 @@ theorem sub_zmodRepr_mem : x - zmodRepr x ∈ maximalIdeal ℤ_[p] :=
(zmodRepr_spec _).2
#align padic_int.sub_zmod_repr_mem PadicInt.sub_zmodRepr_mem
-/-- `to_zmod_hom` is an auxiliary constructor for creating ring homs from `ℤ_[p]` to `ZMod v`.
+/-- `toZModHom` is an auxiliary constructor for creating ring homs from `ℤ_[p]` to `ZMod v`.
-/
def toZModHom (v : ℕ) (f : ℤ_[p] → ℕ) (f_spec : ∀ x, x - f x ∈ (Ideal.span {↑v} : Ideal ℤ_[p]))
(f_congr :
@@ -252,8 +250,8 @@ def toZModHom (v : ℕ) (f : ℤ_[p] → ℕ) (f_spec : ∀ x, x - f x ∈ (Idea
ring
#align padic_int.to_zmod_hom PadicInt.toZModHom
-/-- `to_zmod` is a ring hom from `ℤ_[p]` to `ZMod p`,
-with the equality `to_zmod x = (zmod_repr x : ZMod p)`.
+/-- `toZMod` is a ring hom from `ℤ_[p]` to `ZMod p`,
+with the equality `toZMod x = (zmodRepr x : ZMod p)`.
-/
def toZMod : ℤ_[p] →+* ZMod p :=
toZModHom p zmodRepr
@@ -265,9 +263,9 @@ def toZMod : ℤ_[p] →+* ZMod p :=
exact zmod_congr_of_sub_mem_max_ideal)
#align padic_int.to_zmod PadicInt.toZMod
-/-- `z - (to_zmod z : ℤ_[p])` is contained in the maximal ideal of `ℤ_[p]`, for every `z : ℤ_[p]`.
+/-- `z - (toZMod z : ℤ_[p])` is contained in the maximal ideal of `ℤ_[p]`, for every `z : ℤ_[p]`.
-The coercion from `ZMod p` to `ℤ_[p]` is `zmod.has_coe_t`,
+The coercion from `ZMod p` to `ℤ_[p]` is `ZMod.cast`,
which coerces `ZMod p` into artibrary rings.
This is unfortunate, but a consequence of the fact that we allow `ZMod p`
to coerce to rings of arbitrary characteristic, instead of only rings of characteristic `p`.
@@ -383,7 +381,7 @@ theorem appr_spec (n : ℕ) : ∀ x : ℤ_[p], x - appr x n ∈ Ideal.span {(p :
rw [← this, ← Ideal.mem_span_singleton, ← maximalIdeal_eq_span_p]
apply toZMod_spec
obtain ⟨c, rfl⟩ : IsUnit c := by
- -- TODO: write a can_lift instance for units
+ -- TODO: write a `CanLift` instance for units
rw [Int.natAbs_eq_zero] at hc0
rw [isUnit_iff, norm_eq_pow_val hc', hc0, neg_zero, zpow_zero]
rw [DiscreteValuationRing.unit_mul_pow_congr_unit _ _ _ _ _ hc]
@@ -486,7 +484,7 @@ variable {R : Type _} [NonAssocSemiring R] (f : ∀ k : ℕ, R →+* ZMod (p ^ k
(f_compat : ∀ (k1 k2) (hk : k1 ≤ k2), (ZMod.castHom (pow_dvd_pow p hk) _).comp (f k2) = f k1)
/-- Given a family of ring homs `f : Π n : ℕ, R →+* ZMod (p ^ n)`,
-`nth_hom f r` is an integer-valued sequence
+`nthHom f r` is an integer-valued sequence
whose `n`th value is the unique integer `k` such that `0 ≤ k < p ^ n`
and `f n r = (k : ZMod (p ^ n))`.
-/
@@ -519,7 +517,7 @@ theorem isCauSeq_nthHom (r : R) : IsCauSeq (padicNorm p) fun n => nthHom f r n :
exact_mod_cast pow_dvd_nthHom_sub f_compat r k j hj
#align padic_int.is_cau_seq_nth_hom PadicInt.isCauSeq_nthHom
-/-- `nth_hom_seq f_compat r` bundles `PadicInt.nthHom f r`
+/-- `nthHomSeq f_compat r` bundles `PadicInt.nthHom f r`
as a Cauchy sequence of rationals with respect to the `p`-adic norm.
The `n`th value of the sequence is `((f n r).val : ℚ)`.
-/
@@ -570,7 +568,7 @@ theorem nthHomSeq_mul (r s : R) :
#align padic_int.nth_hom_seq_mul PadicInt.nthHomSeq_mul
/--
-`lim_nth_hom f_compat r` is the limit of a sequence `f` of compatible ring homs `R →+* ZMod (p^k)`.
+`limNthHom f_compat r` is the limit of a sequence `f` of compatible ring homs `R →+* ZMod (p^k)`.
This is itself a ring hom: see `PadicInt.lift`.
-/
def limNthHom (r : R) : ℤ_[p] :=
The unported dependencies are
algebra.order.module
init.core
algebra.order.monoid.cancel.defs
algebra.abs
algebra.group_power.lemmas
init.data.list.basic
algebra.order.monoid.cancel.basic
init.data.list.default
topology.subset_properties
init.logic
The following 1 dependencies have changed in mathlib3 since they were ported, which may complicate porting this file