@@ -87,6 +87,17 @@ theorem ascPochhammer_map (f : S →+* T) (n : ℕ) :
87
87
· simp [ih, ascPochhammer_succ_left, map_comp]
88
88
#align pochhammer_map ascPochhammer_map
89
89
90
+ theorem ascPochhammer_eval₂ (f : S →+* T) (n : ℕ) (t : T) :
91
+ (ascPochhammer T n).eval t = (ascPochhammer S n).eval₂ f t := by
92
+ rw [← ascPochhammer_map f]
93
+ exact eval_map f t
94
+
95
+ theorem ascPochhammer_eval_comp {R : Type *} [CommSemiring R] (n : ℕ) (p : R[X]) [Algebra R S]
96
+ (x : S) : ((ascPochhammer S n).comp (p.map (algebraMap R S))).eval x =
97
+ (ascPochhammer S n).eval (p.eval₂ (algebraMap R S) x) := by
98
+ rw [ascPochhammer_eval₂ (algebraMap R S), ← eval₂_comp', ← ascPochhammer_map (algebraMap R S),
99
+ ← map_comp, eval_map]
100
+
90
101
end
91
102
92
103
@[simp, norm_cast]
@@ -328,6 +339,16 @@ theorem descPochhammer_succ_comp_X_sub_one (n : ℕ) :
328
339
rw [← sub_mul, descPochhammer_succ_right ℤ n, mul_comp, mul_comm, sub_comp, X_comp, nat_cast_comp]
329
340
ring
330
341
342
+ theorem descPochhammer_eval_eq_ascPochhammer (r : R) (n : ℕ) :
343
+ (descPochhammer R n).eval r = (ascPochhammer R n).eval (r - n + 1 ) := by
344
+ induction n with
345
+ | zero => rw [descPochhammer_zero, eval_one, ascPochhammer_zero, eval_one]
346
+ | succ n ih =>
347
+ rw [Nat.cast_succ, sub_add, add_sub_cancel, descPochhammer_succ_eval, ih,
348
+ ascPochhammer_succ_left, X_mul, eval_mul_X, show (X + 1 : R[X]) =
349
+ (X + 1 : ℕ[X]).map (algebraMap ℕ R) by simp only [Polynomial.map_add, map_X,
350
+ Polynomial.map_one], ascPochhammer_eval_comp, eval₂_add, eval₂_X, eval₂_one]
351
+
331
352
theorem descPochhammer_mul (n m : ℕ) :
332
353
descPochhammer R n * (descPochhammer R m).comp (X - (n : R[X])) = descPochhammer R (n + m) := by
333
354
induction' m with m ih
@@ -347,25 +368,20 @@ theorem ascPochhammer_eval_neg_eq_descPochhammer (r : R) : ∀ (k : ℕ),
347
368
pow_add, pow_one, mul_assoc ((-1 )^k) (-1 ), mul_sub, neg_one_mul, neg_mul_eq_mul_neg,
348
369
Nat.cast_comm, sub_eq_add_neg, neg_one_mul, neg_neg, ← mul_add]
349
370
350
- theorem descPochhammer_int_eq_descFactorial (n : ℕ) :
351
- ∀ k, (descPochhammer ℤ k).eval (n : ℤ) = n.descFactorial k
352
- | 0 => by
353
- rw [descPochhammer_zero, eval_one, Nat.descFactorial_zero]
354
- rfl
355
- | t + 1 => by
356
- rw [descPochhammer_succ_right, eval_mul, descPochhammer_int_eq_descFactorial n t]
357
- simp only [eval_sub, eval_X, eval_nat_cast, Nat.descFactorial_succ, Nat.cast_mul,
358
- Nat.descFactorial_eq_zero_iff_lt]
359
- rw [mul_comm]
360
- simp only [mul_eq_mul_right_iff, Nat.cast_eq_zero, Nat.descFactorial_eq_zero_iff_lt]
361
- by_cases h : n < t
362
- · tauto
363
- · left
364
- exact (Int.ofNat_sub <| not_lt.mp h).symm
371
+ theorem descPochhammer_eval_eq_descFactorial (n k : ℕ) :
372
+ (descPochhammer R k).eval (n : R) = n.descFactorial k := by
373
+ induction k with
374
+ | zero => rw [descPochhammer_zero, eval_one, Nat.descFactorial_zero, Nat.cast_one]
375
+ | succ k ih =>
376
+ rw [descPochhammer_succ_right, Nat.descFactorial_succ, mul_sub, eval_sub, eval_mul_X,
377
+ ← Nat.cast_comm k, eval_nat_cast_mul, ← Nat.cast_comm n, ← sub_mul, ih]
378
+ by_cases h : n < k
379
+ rw [Nat.descFactorial_eq_zero_iff_lt.mpr h, Nat.cast_zero, mul_zero, mul_zero, Nat.cast_zero]
380
+ rw [Nat.cast_mul, Nat.cast_sub <| not_lt.mp h]
365
381
366
382
theorem descPochhammer_int_eq_ascFactorial (a b : ℕ) :
367
383
(descPochhammer ℤ b).eval (a + b : ℤ) = (a + 1 ).ascFactorial b := by
368
- rw [← Nat.cast_add, descPochhammer_int_eq_descFactorial (a + b) b,
384
+ rw [← Nat.cast_add, descPochhammer_eval_eq_descFactorial ℤ (a + b) b,
369
385
Nat.add_descFactorial_eq_ascFactorial]
370
386
371
387
end Ring
0 commit comments