1 (**************************************************************************)
4 (* ||A|| A project by Andrea Asperti *)
6 (* ||I|| Developers: *)
7 (* ||T|| A.Asperti, C.Sacerdoti Coen, *)
8 (* ||A|| E.Tassi, S.Zacchiroli *)
10 (* \ / Matita is distributed under the terms of the *)
11 (* v GNU Lesser General Public License Version 2.1 *)
13 (**************************************************************************)
15 include "Z/dirichlet_product.ma".
16 include "Z/moebius.ma".
18 definition sigma_div: (nat \to Z) \to nat \to Z \def
19 \lambda f.\lambda n. sigma_p (S n) (\lambda d.divides_b d n) f.
21 theorem sigma_div_moebius:
22 \forall n:nat. O < n \to sigma_div moebius n = is_one n.
27 apply sigma_p_moebius.
31 apply (lt_to_not_eq ? ? H1).
39 (* moebius inversion theorem *)
40 theorem inversion: \forall f:nat \to Z.\forall n:nat.O < n \to
41 dirichlet_product moebius (sigma_div f) n = f n.
43 rewrite > commutative_dirichlet_product
44 [apply (trans_eq ? ? (dirichlet_product (dirichlet_product f (\lambda n.Zone)) moebius n))
45 [unfold dirichlet_product.
46 apply eq_sigma_p1;intros
51 apply dirichlet_product_one_r.
52 apply (divides_b_true_to_lt_O ? ? H H2)
56 |rewrite > associative_dirichlet_product
57 [apply (trans_eq ? ? (dirichlet_product f (sigma_div moebius) n))
58 [unfold dirichlet_product.
59 apply eq_sigma_p1;intros
64 apply dirichlet_product_one_l.
65 apply (lt_times_n_to_lt x)
66 [apply (divides_b_true_to_lt_O ? ? H H2)
67 |rewrite > divides_to_div
69 |apply (divides_b_true_to_divides ? ? H2)
74 |apply (trans_eq ? ? (dirichlet_product f is_one n))
75 [unfold dirichlet_product.
76 apply eq_sigma_p1;intros
80 |apply sigma_div_moebius.
81 apply (lt_times_n_to_lt x)
82 [apply (divides_b_true_to_lt_O ? ? H H2)
83 |rewrite > divides_to_div
85 |apply (divides_b_true_to_divides ? ? H2)
90 |apply dirichlet_product_is_one_r