Up to index of Isabelle/HOL/HOL-Algebra/example_Z4Z2
theory analytic_part_local(* Title: bpl/analytic_part_local.thy
ID: $Id: analytic_part_local.thy $
Author: Jesus Aransay
Comments:
*)
header{*Definition of local nilpotency and Lemmas 2.2.1 to 2.2.6 in Aransay's memoir*}
theory analytic_part_local
imports
lemma_2_2_14
"~~/src/HOL/Library/Infinite_Set"
begin
subsection{*Definition of local nilpotent element and the bound function*}
locale local_nilpotent_term = ring_endomorphisms D R + var a + var bound_funct +
constrains bound_funct :: "'a => nat"
assumes a_in_R: "a ∈ carrier R"
and a_local_nilpot: "∀x∈carrier D. (a (^)R (bound_funct x)) x = \<one>D"
and bound_is_least: "bound_funct x =(LEAST n. (a (^)R (n::nat)) x = \<one>D)"
text{*The following lemma maybe could be included in the @{text Group.thy} file; there is already a lemma called
@{thm [locale=group] nat_pow_one}, about @{term [locale=group] "\<one>G"}, but nothing about @{term [locale=group] "(x::'a)(^)1"}*}
lemma (in monoid) nat_pow_1: assumes x: "x ∈ carrier G" shows "x (^)G (1::nat) = x"
using nat_pow_Suc [of x 0] and nat_pow_0 [of x] and l_one [OF x] by simp
text{*If the element @{term a} is nilpotent, with @{term [locale=local_nilpotent_term] "(a(^)R(bound x)) x = \<one>D"},
and @{term [locale=local_nilpotent_term] "bound_funct x ≤ m"}, then @{term [locale=local_nilpotent_term] "(a(^)R(m::nat)) x = \<one>D"}*}
lemma (in local_nilpotent_term) a_n_zero_a_m_zero: assumes bound_le_m: "bound_funct x ≤ m"
shows "(a(^)R(m)) x = \<one>D"
proof (cases "x ∈ carrier D")
case True
then have x_in_D: "x ∈ carrier D" by simp
show "(a (^)R m) x = \<one>"
using a_local_nilpot and bound_le_m proof (induct m)
case 0 assume bound_le_zero: "bound_funct x ≤ 0" and alpha_n: "∀x∈carrier D. (a (^)R bound_funct x) x = \<one>" with x_in_D
show "(a (^)R (0::nat)) x = \<one>D" by auto
next
case (Suc m)
assume hypo: "[|∀x∈carrier D. (a (^)R bound_funct x) x = \<one>; bound_funct x ≤ m|] ==> (a (^)R m) x = \<one>"
and a_bound_funct: "∀x∈carrier D. (a (^)R bound_funct x) x = \<one>" and bound_funct_le_Suc_m: "bound_funct x ≤ Suc m"
then show "(a (^)R Suc m) x = \<one>"
proof (cases "bound_funct x = Suc m")
case True with a_bound_funct and x_in_D show ?thesis by auto
next
case False with bound_funct_le_Suc_m have "bound_funct x ≤ m " by arith
with hypo and a_bound_funct have a_m: "(a (^)R m) x = \<one>" by simp
have "(a (^)R Suc m) x = (a ⊗R (a (^)R m)) x"
proof -
have "Suc m = (1::nat) + m" by arith
with sym [OF nat_pow_mult [OF a_in_R, of "1" "m"]] and nat_pow_1 [OF a_in_R] show ?thesis by (simp only: expand_fun_eq)
qed
also from ring_R and x_in_D and a_m have "… = a \<one>" by simp
also from ring_R and hom_completion_one [of D D a] and D_diff_group and a_in_R have "… = \<one>"
unfolding diff_group_def comm_group_def group_def by simp
finally show "(a (^)R Suc m) x = \<one>" by simp
qed
qed
next
case False
with nat_pow_closed [OF a_in_R, of m] and ring_R and completion_closed2 [of " a (^)R m " D D x]
show " (a (^)R m) x = \<one>" unfolding hom_completion_def completion_fun2_def by simp
qed
text{*The following definition is the power series of the local nilpotent endomorphism @{term a} in an element of its domain @{term x};
the power series is defined as the finite product in the differential group @{term D} of the powers
@{term [locale=local_nilpotent_term] "(λi::nat. (a (^)R i) x)"}, up to @{term "bound_funct x"}*}
text{*A different solution would be to consider the finite sum in the ring of endomorphisms @{term R}
of terms @{term [locale=local_nilpotent_term] "λi::nat. (a (^)R i)"} and then apply it to each element of the domain @{term x}*}
text{*The first solution seems to me more coherent with the notion of "local nilpotency" we are dealing with, but both are identical*}
subsection{*Definition of power series and some lemmas*}
context local_nilpotent_term
begin
definition "power_series x == finprod D (λi::nat. (a(^)R i) x) {..bound_funct x}"
end
text{*Some results about the power series*}
lemma (in local_nilpotent_term) power_pi: "(op (^)R a) ∈ {..(k::nat)} -> carrier R"
using nat_pow_closed [OF a_in_R] and Pi_def [of "{..k}" "(λi::nat. carrier R)"] by simp
lemma (in local_nilpotent_term) power_pi_D: "(λi::nat. (a(^)R i) x) ∈ {..(k::nat)} -> carrier D"
proof (unfold Pi_def, auto, cases "x ∈ carrier D")
fix i
assume "i ≤ k"
from nat_pow_closed [OF a_in_R, of i] have a_i_in_R: "(a (^)R i) ∈ carrier R" by simp
case True with a_i_in_R and ring_R and hom_completion_closed [of "(a(^)R i)" D D x] show "(a (^)R i) x ∈ carrier D" by simp
next
fix i
assume "i ≤ k"
from nat_pow_closed [OF a_in_R, of i] have a_i_in_R: "(a (^)R i) ∈ carrier R" by simp
case False with a_i_in_R completion_closed2 [of "(a (^)R i)" D D x] and ring_R show "(a (^)R i) x ∈ carrier D"
unfolding hom_completion_def completion_fun2_def by simp
qed
text{*As we already stated,
@{term [locale=local_nilpotent_term] "λx. finprod D (λi::nat. (a(^)R i) x) {..j}"} is equal to
@{term [locale=local_nilpotent_term] "λx. (finsum R (λi::nat. (a(^)R i)) {..j}) x"}*}
lemma (in local_nilpotent_term) finprod_eq_finsum_bound_funct:
shows "finprod D (λi::nat. (a(^)R i) x) {..bound_funct x} = ((finsum R (λi::nat. (a(^)R i)) {..bound_funct x}) x)"
proof (induct "bound_funct x")
case 0
from nat_pow_0 [of a] and finsum_0 [of "op (^)R a"] and power_pi [of "0::nat"] and finprod_0 [of "(λi::nat. (a(^)R i) x)"]
and power_pi_D [of x "0::nat"]
show "(\<Otimes>i::nat∈{..0::nat}. (a (^)R i) x) = finsum R (op (^)R a) {..0::nat} x" by simp
next
case (Suc n)
assume hypo: "(\<Otimes>i∈{..n}. (a (^)R i) x) = finsum R (op (^)R a) {..n} x"
show "(\<Otimes>i∈{..Suc n}. (a (^)R i) x) = finsum R (op (^)R a) {..Suc n} x"
proof (cases "x ∈ carrier D")
case True
from finsum_Suc [OF power_pi, of n] have "finsum R (op (^)R a) {..Suc n} = a (^)R Suc n ⊕R finsum R (op (^)R a) {..n}" by simp
with ring_R and True have "finsum R (op (^)R a) {..Suc n} x = (a (^)R Suc n) x ⊗D (finsum R (op (^)R a) {..n}) x" by simp
moreover
from True and finprod_Suc [OF power_pi_D, of x n] have "(\<Otimes>i∈{..Suc n}. (a (^)R i) x) = (a (^)R Suc n) x ⊗ (\<Otimes>i∈{..n}. (a (^)R i) x)"
by simp
with hypo have "(\<Otimes>i∈{..Suc n}. (a (^)R i) x) = (a (^)R Suc n) x ⊗ (finsum R (op (^)R a) {..n}) x" by simp
ultimately show ?thesis by simp
next
case False
from finsum_closed [OF _ power_pi] and finite_nat_iff_bounded [of "{..Suc n}"] have "finsum R (op (^)R a) {..Suc n} ∈ carrier R" by simp
with ring_R and completion_closed2 [of "finsum R (op (^)R a) {..Suc n}" D D] and False
have finsum_one: "finsum R (op (^)R a) {..Suc n} x = \<one>" unfolding hom_completion_def completion_fun2_def by simp
moreover
have "∀i∈{..Suc n}. (a (^)R i) x = \<one>"
proof
fix i assume i_in_nat: "i ∈ {..Suc n}"
from nat_pow_closed [OF a_in_R, of i] and ring_R and completion_closed2 [of _ D D] and False show "(a (^)R i) x = \<one>"
unfolding hom_completion_def completion_fun2_def by simp
qed
with finprod_cong [of "{..Suc n}" "{..Suc n}" "(λi. (a (^)R i) x)" "λx. \<one>"] and power_pi_D [of x "Suc n"]
have "(\<Otimes>i∈{..Suc n}. (a (^)R i) x) = (\<Otimes>i∈{..Suc n}. \<one>)" by simp
with finprod_one [of "{..Suc n}"] and finite_nat_iff_bounded [of "{..Suc n}"] have finprod_one: "(\<Otimes>i∈{..Suc n}. (a (^)R i) x) = \<one>"
by simp
ultimately show ?thesis by simp
qed
qed
lemma (in local_nilpotent_term) power_series_closed: shows "(\<Otimes>i∈{..m::nat}. (a (^)R i) x) ∈ carrier D"
proof (rule finprod_closed)
from finite_nat_iff_bounded show "finite {..m}" by auto
from power_pi_D [of x m] show "(λi::nat. (a (^)R i) x) ∈ {..m} -> carrier D" by simp
qed
text{*The following result is equal to the previous one but for the case of definition of the power series*}
lemma (in local_nilpotent_term) power_series_closed2: "(\<Otimes>i∈{..bound_funct x}. (a (^)R i) x) ∈ carrier D"
proof (rule finprod_closed)
from finite_nat_iff_bounded show "finite {..bound_funct x}" by auto
from power_pi_D [of x "bound_funct x"] and Pi_def [of "{..bound_funct x}" "(λi::nat. carrier R)"]
show "(λi::nat. (a (^)R i) x) ∈ {..bound_funct x} -> carrier D" by simp
qed
lemma (in local_nilpotent_term) power_series_extended: assumes bf_le_m: "bound_funct x ≤ m"
shows "power_series x = finprod D (λi::nat. (a (^)R i) x) {..m}"
using bf_le_m proof (induct m)
case 0
from this and power_series_def [of x] show "power_series x = (\<Otimes>i∈{..(0::nat)}. (a (^)R i) x)" by simp
next
case (Suc m)
assume hypo: "bound_funct x ≤ m ==> power_series x = (\<Otimes>i∈{..m}. (a (^)R i) x)" and bf_le_Suc_m: "bound_funct x ≤ Suc m"
show "power_series x = (\<Otimes>i∈{..Suc m}. (a (^)R i) x)"
proof (cases "bound_funct x = Suc m")
case True thus ?thesis unfolding power_series_def by simp
next
case False with bf_le_Suc_m and hypo have hypo_m: "power_series x = (\<Otimes>i∈{..m}. (a (^)R i) x)" by arith
from a_n_zero_a_m_zero [OF bf_le_Suc_m] have a_Suc_m_one: "(a (^)R Suc m) x = \<one>".
from power_pi_D [of x "Suc m"] and finprod_Suc [of "(λi::nat. (a (^)R i) x)" "m"]
have "(\<Otimes>i∈{..Suc m}. (a (^)R i) x) = (a (^)R Suc m) x ⊗ (\<Otimes>i∈{..m}. (a (^)R i) x)" by simp
also from a_Suc_m_one have "… = \<one> ⊗ (\<Otimes>i∈{..m}. (a (^)R i) x)" by simp
also from hypo_m and D.l_one [OF power_series_closed [of x m]] have "… = power_series x" by simp
finally show ?thesis by simp
qed
qed
text{*The power series is itself an endomorphism of the differential group*}
lemma (in local_nilpotent_term) power_series_in_R: shows "power_series ∈ carrier R"
proof -
have "power_series ∈ hom_completion D D"
proof (unfold hom_completion_def hom_def Pi_def, auto)
fix x
assume x_in_D: "x ∈ carrier D"
from power_series_closed [of x "bound_funct x"] and power_series_def [of x] show "power_series x ∈ carrier D" by simp
next
fix x y
assume x_in_D: "x ∈ carrier D" and y_in_D: "y ∈ carrier D"
show "power_series (x ⊗ y) = power_series x ⊗ power_series y"
proof -
let ?max = "max (bound_funct (x ⊗ y)) (max (bound_funct x) (bound_funct y))"
from power_series_extended [of "x ⊗ y" ?max] have p_s_ex_xy: "power_series (x ⊗ y) = (\<Otimes>i∈{..?max}. (a (^)R i) (x ⊗ y))" by arith
from power_series_extended [of x ?max] have p_s_ex_x: "power_series x = (\<Otimes>i∈{..?max}. (a (^)R i) x)" by arith
from power_series_extended [of y ?max] have p_s_ex_y: "power_series y = (\<Otimes>i∈{..?max}. (a (^)R i) y)" by arith
from p_s_ex_x and p_s_ex_y
have "power_series x ⊗ power_series y = (\<Otimes>i∈{..?max}. (a (^)R i) x) ⊗ (\<Otimes>i∈{..?max}. (a (^)R i) y)" by simp
also from sym [OF finprod_mult [of "(λi::nat. (a (^)R i) x)" ?max "(λi::nat. (a (^)R i) y)"]]
and power_pi_D [of x ?max] power_pi_D [of y ?max] and finite_nat_iff_bounded [of "{..?max}"]
have "… = (\<Otimes>i∈{..?max}. (a (^)R i) x ⊗ (a (^)R i) y)" by simp
also from nat_pow_closed [OF a_in_R] and hom_completion_mult [OF _ x_in_D y_in_D, of _ D] and ring_R
have "… = (\<Otimes>i∈{..?max}. (a (^)R i) (x ⊗ y))" by simp
also from sym [OF p_s_ex_xy] have "… = power_series (x ⊗ y)" by simp
finally show ?thesis by simp
qed
next
show "power_series ∈ completion_fun2 D D"
proof (unfold completion_fun2_def completion_def expand_fun_eq, simp, intro exI [of _ "power_series"], auto)
fix x
assume "x ∉ carrier D"
with nat_pow_closed [OF a_in_R] and completion_closed2 [of _ D D x] and ring_R have "(λi::nat. (a (^)R i) x) = (λi::nat. \<one>)"
by (unfold hom_completion_def expand_fun_eq, auto)
with finprod_one [of "{..bound_funct x}"] and power_series_def [of x]
show "power_series x = \<one>" by auto
qed
qed
with ring_R show "power_series ∈ carrier R" by simp
qed
subsection{*Some basic operations over finite series*}
text{*Right distributivity of the product*}
lemma (in ring) finsum_dist_r: assumes a_in_R: "a ∈ carrier R" and b_in_R: "b ∈ carrier R"
shows "b ⊗ finsum R (op (^) a) {..(m::nat)} = (\<Oplus>i∈{..(m::nat)}. b ⊗ a (^) i)"
proof (induct m)
case 0
from finsum_0 [of "λi::nat. a(^)i"] and finsum_0 [of "λi::nat. b ⊗ a(^)i"] and b_in_R
show " b ⊗ finsum R (op (^) a) {..(0::nat)} = (\<Oplus>i∈{..(0::nat)}. b ⊗ a (^) i)" by simp
next
case (Suc m)
assume hypo: "b ⊗ finsum R (op (^) a) {..m} = (\<Oplus>i∈{..m}. b ⊗ a (^) i)"
show "b ⊗ finsum R (op (^) a) {..Suc m} = (\<Oplus>i∈{..Suc m}. b ⊗ a (^) i)"
proof -
from finsum_Suc [of "(op (^) a)" "m"] and Pi_def [of "{..Suc m}" "λi::nat. carrier R"] nat_pow_closed [OF a_in_R]
have "b ⊗ (\<Oplus>i∈{..Suc m}. a (^) i) = b ⊗ (a(^)(Suc m) ⊕ (\<Oplus>i∈{..m}. a (^) i))" by simp
also from r_distr [OF nat_pow_closed [OF a_in_R, of "Suc m"] _ b_in_R, of "finsum R (op (^) a) {..m}"]
b_in_R nat_pow_closed [OF a_in_R, of "Suc m"] finsum_closed [of "{..m}" "op (^) a"]
and Pi_def [of "{..m}" "λi::nat. carrier R"] nat_pow_closed [OF a_in_R] and finite_nat_iff_bounded [of "{..m}"]
have "… = b ⊗ a(^)(Suc m) ⊕ b ⊗ (\<Oplus>i∈{..m}. a (^) i)" by simp
also from hypo have "… = b ⊗ a(^)(Suc m) ⊕ (\<Oplus>i∈{..m}. b ⊗ a (^) i)" by simp
also from finsum_Suc [of "(λi::nat. b ⊗ a (^) i)", of m] and Pi_def [of "{..Suc m}" "λi::nat. carrier R"]
nat_pow_closed [OF a_in_R] and b_in_R
have "… = (\<Oplus>i∈{..Suc m}. b ⊗ a (^) i)" by simp
finally show ?thesis by simp
qed
qed
lemma (in local_nilpotent_term) b_power_pi_D: assumes b_in_R: "b ∈ carrier R" shows "(λi. b ((a (^)R i) x)) ∈ {..(k::nat)} -> carrier D"
using power_pi_D [of x k] and ring_R and b_in_R unfolding hom_completion_def completion_fun2_def completion_def hom_def Pi_def by auto
lemma (in local_nilpotent_term) nat_pow_closed_D: shows "(a (^)R (m::nat)) x ∈ carrier D"
using ring_R and nat_pow_closed [OF a_in_R, of m] unfolding hom_completion_def completion_fun2_def completion_def hom_def Pi_def by auto
text{*Left distributivity of the product of a finite sum*}
lemma (in local_nilpotent_term) power_series_dist_l: assumes b_in_R: "b ∈ carrier R"
shows "b (\<Otimes>i∈{..(m::nat)}. (a (^)R i) x) = (\<Otimes>i∈{..(m::nat)}. (b ((a (^)R i) x)))"
proof (induct m)
case 0
from finprod_0 [of "(λi. (a (^)R i) x)"] and power_pi_D [of x "0::nat"] and finprod_0 [of "(λi. b ((a (^)R i) x))"]
and b_power_pi_D [OF b_in_R, of x "0::nat"] show "b (\<Otimes>i∈{..0::nat}. (a (^)R i) x) = (\<Otimes>i∈{..0::nat}. b ((a (^)R i) x))" by simp
next
case (Suc m)
assume hypo: "b (\<Otimes>i∈{..m}. (a (^)R i) x) = (\<Otimes>i∈{..m}. b ((a (^)R i) x))"
show "b (\<Otimes>i∈{..Suc m}. (a (^)R i) x) = (\<Otimes>i∈{..Suc m}. b ((a (^)R i) x))"
proof -
from finprod_Suc [OF power_pi_D [of x], of m] have "b (\<Otimes>i∈{..Suc m}. (a (^)R i) x) = b ((a (^)R Suc m) x ⊗ (\<Otimes>i∈{..m}. (a (^)R i) x))"
by simp
also from b_in_R and ring_R and hom_completion_mult [of b D D "(a (^)R Suc m) x" " (\<Otimes>i∈{..m}. (a (^)R i) x)"]
and finprod_closed [of "{..m}" "(λi. (a (^)R i) x)"] power_pi_D [of x m] nat_pow_closed_D [of "Suc m" x]
have "… = b ((a (^)R Suc m) x) ⊗ b ((\<Otimes>i∈{..m}. (a (^)R i) x))" by simp
also from hypo have "… = b ((a (^)R Suc m) x) ⊗ (\<Otimes>i∈{..m}. b ((a (^)R i) x))" by simp
also from sym [OF finprod_Suc [OF b_power_pi_D [OF b_in_R, of x], of m]] have "… = (\<Otimes>i∈{..Suc m}. b ((a (^)R i) x))" by simp
finally show ?thesis by simp
qed
qed
lemma (in local_nilpotent_term) power_pi_b_D: assumes b_in_R: "b ∈ carrier R" shows "(λi. (a (^)R i) (b x)) ∈ {..(k::nat)} -> carrier D"
using power_pi_D [of "b x" k] and ring_R and b_in_R by simp
lemma (in local_nilpotent_term) power_series_dist_r: assumes b_in_R: "b ∈ carrier R"
shows "(λx. (\<Otimes>i∈{..m}. (a (^)R i) x)) (b x) = (\<Otimes>i∈{..(m::nat)}. ((a (^)R i) (b x)))" by simp
text{*The following lemma showed to be useful in some situations*}
lemma (in comm_monoid) finprod_singleton [simp]:
"f ∈ {i::nat} -> carrier G ==> finprod G f {i} = f i" by (simp add: Pi_def)
text{*Finite series can be decomposed in the product of its first element and the remaining part*}
lemma (in local_nilpotent_term) power_series_first_element:
shows "finprod D (λi::nat. (a (^)R i) x) {..(i::nat)} = (a(^)R (0::nat)) x ⊗ finprod D (λi::nat. (a (^)R i) x) {1..(i::nat)}"
proof (induct i)
case 0
from ring_R have one_x: "\<one>R x ∈ carrier D" unfolding hom_completion_def completion_fun2_def completion_def by auto
from finprod_0 [of "(λi. (a (^)R i) x)"] and power_pi_D [of x 0] and D.r_one [OF one_x]
show "(\<Otimes>i∈{..(0::nat)}. (a (^)R i) x) = (a (^)R (0::nat)) x ⊗ (\<Otimes>i∈{(1::nat)..0}. (a (^)R i) x)" by simp
next
case (Suc i)
assume hypo: "(\<Otimes>i∈{..i}. (a (^)R i) x) = (a (^)R (0::nat)) x ⊗ (\<Otimes>i∈{1..i}. (a (^)R i) x)"
show "(\<Otimes>i∈{..Suc i}. (a (^)R i) x) = (a (^)R (0::nat)) x ⊗ (\<Otimes>i∈{1..Suc i}. (a (^)R i) x)"
proof -
from finprod_Suc [of "(λi::nat. (a (^)R i) x)" i] and power_pi_D [of x "Suc i"]
have "(\<Otimes>i∈{..Suc i}. (a (^)R i) x) = (a (^)R Suc i) x ⊗ (\<Otimes>i∈{..i}. (a (^)R i) x)" by simp
also from hypo have "… = (a (^)R Suc i) x ⊗ ((a (^)R (0::nat)) x ⊗ (\<Otimes>i∈{1..i}. (a (^)R i) x))" by simp
also have "… = ((a (^)R Suc i) x ⊗ (a (^)R (0::nat)) x) ⊗ (\<Otimes>i∈{1..i}. (a (^)R i) x)"
proof (rule sym [OF D.m_assoc [of "(a (^)R Suc i) x" "(a (^)R (0::nat)) x" "(\<Otimes>i∈{1..i}. (a (^)R i) x)"]])
from nat_pow_closed_D [of "Suc i" x] show "(a (^)R Suc i) x ∈ carrier D" by simp
from nat_pow_closed_D [of "0::nat" x] show "(a (^)R (0::nat)) x ∈ carrier D" by simp
from finprod_closed [of "{1..i}" "(λi::nat. (a(^)Ri) x)"] and finite_nat_iff_bounded [of "{1..i}"]
and nat_pow_closed_D [of _ x] and Pi_def [of "{1..i}" "λi::nat. carrier D"]
show "(\<Otimes>i∈{1..i}. (a (^)R i) x) ∈ carrier D" by simp
qed
also from m_comm [OF nat_pow_closed_D [of "Suc i" x] nat_pow_closed_D [of "0::nat" x]]
have "… = ((a (^)R (0::nat)) x ⊗ (a (^)R Suc i) x) ⊗ (\<Otimes>i∈{1..i}. (a (^)R i) x)" by simp
also have "… = (a (^)R (0::nat)) x ⊗ ((a (^)R Suc i) x ⊗ (\<Otimes>i∈{1..i}. (a (^)R i) x))"
proof (rule D.m_assoc [of "(a (^)R (0::nat)) x" "(a (^)R (Suc i)) x" "(\<Otimes>i∈{1..i}. (a (^)R i) x)"])
from nat_pow_closed_D [of "Suc i" x] show "(a (^)R Suc i) x ∈ carrier D" by simp
from nat_pow_closed_D [of "0::nat" x] show "(a (^)R (0::nat)) x ∈ carrier D" by simp
from finprod_closed [of "{1..i}" "(λi::nat. (a(^)Ri) x)"] and finite_nat_iff_bounded [of "{1..i}"]
and nat_pow_closed_D [of _ x] and Pi_def [of "{1..i}" "λi::nat. carrier D"]
show "(\<Otimes>i∈{1..i}. (a (^)R i) x) ∈ carrier D" by simp
qed
also from nat_pow_closed_D [of "Suc i" x]
have "… = (a (^)R (0::nat)) x ⊗ ((\<Otimes>i∈{Suc i}. (a (^)R i) x) ⊗ (\<Otimes>i∈{1..i}. (a (^)R i) x))" by simp
also from sym [OF finprod_Un_disjoint [of "{Suc i}" "{1..i}" "(λi::nat. (a (^)R i) x)"]]
and finite_nat_iff_bounded [of "{1..i}"] finite_nat_iff_bounded [of "{Suc i}"] and Pi_def [of "{(1::nat)..i}" "(λi::nat. carrier D)"]
Pi_def [of "{Suc i}" "(λi::nat. carrier D)"] and nat_pow_closed_D [of "Suc i" x] nat_pow_closed_D [of _ x]
have "(a (^)R (0::nat)) x ⊗ ((\<Otimes>i∈{Suc i}. (a (^)R i) x) ⊗ (\<Otimes>i∈{1..i}. (a (^)R i) x))
= (a (^)R (0::nat)) x ⊗ (\<Otimes>i∈{1..i} ∪ {Suc i}. (a (^)R i) x)" by simp
also have "… = (a (^)R (0::nat)) x ⊗ (\<Otimes>i∈{1..Suc i}. (a (^)R i) x)"
proof -
have "{1..i} ∪ {Suc i} = {1..Suc i}" by auto
then show ?thesis by simp
qed
finally show ?thesis by simp
qed
qed
text{*Finite series which start in index one can be seen as the product of the generic term and the finite series in index zero*}
lemma (in local_nilpotent_term) power_series_factor: shows "(\<Otimes>j∈{(1::nat)..Suc i}. (a (^)R j) x) = a (\<Otimes>j∈{..i}. (a (^)R j) x)"
proof (induct i)
case 0
have "a x = a (\<one>R x)"
proof (cases "x ∈ carrier D")
case True with ring_R show "a x = a (\<one>R x)" by simp
next
case False with completion_closed2 [of a D D x] hom_completion_one [of D D a] and D_diff_group and a_in_R and ring_R
show "a x = a (\<one>R x)" unfolding diff_group_def comm_group_def group_def hom_completion_def completion_fun2_def by simp
qed
with finprod_0 [of "(λj::nat. (a (^)R j) x)"] finprod_insert [of "{}" "Suc 0" "(λj::nat. (a (^)R j) x)"]
and nat_pow_closed_D [of "Suc 0" x] and nat_pow_closed_D [of 0 x] a_in_R finprod_singleton [of "(λj::nat. (a (^)R j) x)" "Suc 0"]
show "(\<Otimes>j∈{1..Suc 0}. (a (^)R j) x) = a (\<Otimes>j∈{..0::nat}. (a (^)R j) x)" by simp
next
case (Suc i)
assume hypo: "(\<Otimes>j∈{1..Suc i}. (a (^)R j) x) = a (\<Otimes>j∈{..i}. (a (^)R j) x)"
show "(\<Otimes>j∈{1..Suc (Suc i)}. (a (^)R j) x) = a (\<Otimes>j∈{..Suc i}. (a (^)R j) x)"
proof -
have "(\<Otimes>j∈{1..Suc (Suc i)}. (a (^)R j) x) = (\<Otimes>j∈{1..Suc i} ∪ {Suc (Suc i)}. (a (^)R j) x)"
proof -
have "{1..Suc i} ∪ {Suc (Suc i)} = {1..Suc (Suc i)}" by auto
thus ?thesis by simp
qed
also from finprod_Un_disjoint [of "{1..Suc i}" "{Suc (Suc i)}" "(λj::nat. (a (^)R j) x)"]
and finite_nat_iff_bounded [of "{1..Suc i}"] finite_nat_iff_bounded [of "{Suc (Suc i)}"] and
Pi_def [of "{(1::nat)..Suc i}" "(λj::nat. carrier D)"]
Pi_def [of "{Suc (Suc i)}" "(λj::nat. carrier D)"] and nat_pow_closed_D [of "Suc (Suc i)" x] nat_pow_closed_D [of _ x]
have "… = (\<Otimes>j∈{1..Suc i}. (a (^)R j) x) ⊗ (\<Otimes>j∈{Suc (Suc i)}. (a (^)R j) x)" by simp
also from hypo and finprod_singleton [of "(λj::nat. (a (^)R j) x)" "Suc (Suc i)"] and nat_pow_closed_D [of "Suc (Suc i)" x]
have "… = a (\<Otimes>j∈{..i}. (a (^)R j) x) ⊗ ((a (^)R Suc (Suc i)) x)" by simp
also from ring_R have "… = a (\<Otimes>j∈{..i}. (a (^)R j) x) ⊗ a ((a (^)R Suc i) x)"
proof -
have "1 + Suc i = Suc (Suc i)" by arith
with sym [OF nat_pow_mult [OF a_in_R, of "1" "Suc i"]] and nat_pow_1 [OF a_in_R]
have "a (^)R Suc (Suc i) = a ⊗R (a (^)R Suc i)" by simp
with ring_R have "((a (^)R Suc (Suc i)) x) = a ((a (^)R Suc i) x)" by simp
then show ?thesis by simp
qed
also have "… = a ((\<Otimes>j∈{..i}. (a (^)R j) x) ⊗ (a (^)R Suc i) x)"
proof (intro sym [OF hom_completion_mult [of a D D "\<Otimes>j∈{..i}. (a (^)R j) x" "(a (^)R Suc i) x"]])
from ring_R and a_in_R show "a ∈ hom_completion D D" by simp
from finprod_closed [of "{..i}" "(λj::nat. (a (^)R j) x)"] and power_pi_D [of x i]
show "(\<Otimes>j∈{..i}. (a (^)R j) x) ∈ carrier D" by simp
from nat_pow_closed_D [of "Suc i" x] show "(a (^)R Suc i) x ∈ carrier D" by simp
qed
also from nat_pow_closed_D [of "Suc i" x] have "… = a ((\<Otimes>j∈{..i}. (a (^)R j) x) ⊗ (\<Otimes>j∈{Suc i}.(a (^)R Suc i) x))"
by simp
also from sym [OF finprod_Un_disjoint [of "{..i}" "{Suc i}" "(λj::nat. (a (^)R j) x)"]]
and finite_nat_iff_bounded [of "{..i}"] finite_nat_iff_bounded [of "{Suc i}"] and Pi_def [of "{..i}" "(λj::nat. carrier D)"]
Pi_def [of "{Suc i}" "(λj::nat. carrier D)"] and nat_pow_closed_D [of "Suc i" x] nat_pow_closed_D [of _ x]
have "… = a (\<Otimes>j∈{..i} ∪ {Suc i}. (a (^)R j) x)" by simp
also have "… = a (\<Otimes>j∈{..Suc i}. (a (^)R j) x)"
proof -
have "{..i} ∪ {Suc i} = {..Suc i}" by auto
thus ?thesis by simp
qed
finally show ?thesis by simp
qed
qed
text{*If we were able to interpret locales, now the idea would be to interpret the @{text "locale nilpotent_term"} with
local nilpotent term @{term "α"}, as later defined in locale @{text alpha_beta}*}
subsection{*Definition and some lemmas of perturbations*}
text{*Perturbations are a homomorphism of @{term [locale=ring_endomorphisms] "D"} (not a differential homomorphism!)
such that its addition with the differential is again a differential*}
constdefs (structure D)
pert :: "_ => ('a => 'a) set"
"pert D == {δ. δ ∈ hom_completion D D &
diff_group (| carrier = carrier D, mult = mult D, one = one D, diff = (λx. if x ∈ carrier D then ((differ) x) ⊗ (δ x) else \<one>)|)), }"
locale diff_group_pert = diff_group D + var δ +
assumes delta_pert: "δ ∈ pert D"
lemma (in diff_group_pert) diff_group_pert_is_diff_group:
shows "diff_group (|carrier = carrier D, mult = mult D, one = one D, diff = (λx. if x ∈ carrier D then ((differD) x) ⊗D (δ x) else \<one>D)|)),"
using diff_group_pert.delta_pert [of D δ] and prems unfolding diff_group_pert_def pert_def by simp
lemma (in diff_group_pert) pert_is_hom: shows "δ ∈ hom_completion D D"
using diff_group_pert.delta_pert [of D δ] and prems unfolding diff_group_pert_def pert_def by simp
lemma (in ring_endomorphisms) diff_group_pert_is_diff_group: assumes delta: "δ ∈ pert D"
shows "diff_group (| carrier = carrier D, mult = mult D, one = one D, diff = (differD) ⊕R δ |)),"
using diff_group_pert.diff_group_pert_is_diff_group [of D δ] and ring_R and prems
unfolding diff_group_pert_def diff_group_pert_axioms_def ring_endomorphisms_def by simp
lemma (in ring_endomorphisms) pert_in_R [simp]: assumes delta: "δ ∈ pert D" shows "δ ∈ carrier R"
using ring_R and diff_group_pert.pert_is_hom [of D δ] and prems
unfolding diff_group_pert_def diff_group_pert_axioms_def ring_endomorphisms_def by simp
lemma (in ring_endomorphisms) diff_pert_in_R [simp]: assumes delta: "δ ∈ pert D" shows "(differD) ⊕R δ ∈ carrier R"
using delta by simp
text{*The reason to introduce @{term α} by means of a @{text "defines"} command is to get the expected behavior when merging this locale
with locale @{text "local_nilpotent_term D R α bound_phi"} in the definition of locale @{text "local_nilpotent_alpha"}*}
locale alpha_beta = ring_endomorphisms + reduction + var δ + var α +
assumes delta_pert: "δ ∈ pert D"
defines alpha_def: "α == \<ominus>R (δ ⊗R h)"
(*definition (in alpha_beta)
alpha_def: "α = \<ominus>R (δ ⊗R h)"
*)
context alpha_beta
begin
definition beta_def: "β = \<ominus>R (h ⊗R δ)"
end
locale local_nilpotent_alpha = alpha_beta + local_nilpotent_term D R α bound_phi
text{*The definition of @{term Φ} corresponds with the one given in the Basic Perturbation Lemma, Lemma 2.3.1 in Aransay's memoir*}
context local_nilpotent_alpha
begin
definition phi_def: "Φ == local_nilpotent_term.power_series D R α bound_phi"
end
lemma (in alpha_beta) pert_in_R [simp]: shows "δ ∈ carrier R"
using delta_pert and ring_R by (unfold pert_def, simp)
lemma (in alpha_beta) h_in_R [simp]: shows "h ∈ carrier R"
using h_hom_compl and ring_R by simp
lemma (in alpha_beta) alpha_in_R: shows "α ∈ carrier R"
using alpha_def and pert_in_R and h_in_R by simp
lemma (in alpha_beta) beta_in_R: shows "β ∈ carrier R"
using beta_def and pert_in_R and h_in_R by simp
lemma (in alpha_beta) alpha_i_in_R: shows "α(^)R (i::nat) ∈ carrier R"
using alpha_in_R and R.nat_pow_closed by simp
lemma (in alpha_beta) beta_i_in_R: shows "β(^)R (i::nat) ∈ carrier R"
using beta_in_R and nat_pow_closed by simp
lemma (in ring) power_minus_a_b:
assumes a: "a ∈ carrier R" and b: "b ∈ carrier R" shows "(\<ominus> (a ⊗ b)) (^) Suc n = \<ominus> a ⊗ ((\<ominus> (b ⊗ a)) (^) n) ⊗ b"
proof (induct n)
case 0
from a and b and nat_pow_0 [of "a ⊗ b"] show "\<ominus> (a ⊗ b) (^) Suc 0 = \<ominus> a ⊗ \<ominus> (b ⊗ a) (^) (0::nat) ⊗ b" by simp algebra
next
case (Suc n)
assume hypo: "(\<ominus> (a ⊗ b)) (^) Suc n = \<ominus> a ⊗ \<ominus> (b ⊗ a) (^) n ⊗ b"
have "(\<ominus> (a ⊗ b)) (^) Suc (Suc n) = \<ominus> (a ⊗ b) (^) (Suc n) ⊗ \<ominus> (a ⊗ b)" by simp
also from hypo have "… = \<ominus> a ⊗ \<ominus> (b ⊗ a) (^) n ⊗ b ⊗ \<ominus> (a ⊗ b)" by simp
also from sym [OF l_minus [OF a b]] have "… = \<ominus> a ⊗ \<ominus> (b ⊗ a) (^) n ⊗ b ⊗ (\<ominus> a ⊗ b)" by simp
also from sym [OF m_assoc [OF b _ b, of "\<ominus> a"]] and a_inv_closed [OF a] and nat_pow_closed [of "\<ominus> (b ⊗ a)" n]
and a_inv_closed [of "b ⊗ a"] and a b r_minus [OF b a]
have "… = \<ominus> a ⊗ \<ominus> (b ⊗ a) (^) n ⊗ (\<ominus> (b ⊗ a) ⊗ b)" by algebra
also from nat_pow_closed [of "\<ominus> (b ⊗ a)" n] and a_inv_closed [of "b ⊗ a"] and a b
and sym [OF m_assoc[of "(\<ominus> (b ⊗ a)) (^) n" "(\<ominus> (b ⊗ a))" b]]
have "… = \<ominus> a ⊗ (\<ominus> (b ⊗ a) (^) n ⊗ (\<ominus> (b ⊗ a))) ⊗ b" by algebra
also from sym [OF nat_pow_Suc [of "\<ominus> (b ⊗ a)" n]]
have "… = \<ominus> a ⊗ (\<ominus> (b ⊗ a)) (^) (Suc n) ⊗ b" by simp
finally show "\<ominus> (a ⊗ b) (^) Suc (Suc n) = \<ominus> a ⊗ \<ominus> (b ⊗ a) (^) Suc n ⊗ b" by simp
qed
text{*The following comment is already obsolete in the @{text "Isabelle_11-Feb-2007"} repository version*}
text{*Comment: At the moment, the "definition" command is not inherited by locales defined from old ones; in the following lemma,
there would be two ways of recovering the definition of @{term [locale=alpha_beta] β}. The first one would be to
give its long name @{text "local_nilpotent_alpha.β δ"}, and the other way is to use abbreviations.*}
text{*Due to aesthetic reasons, we choose the second solution, while waiting to the "definition" command to be properly inherited*}
text{*@{text "abbreviation (in local_nilpotent_alpha) β == alpha_beta.β R h δ"}*}
text{*The following lemma proves that whenever @{term [locale=local_nilpotent_alpha] "α"} is a local nilpotent term,
so will be @{term [locale=local_nilpotent_alpha] "β"}*}
lemma (in local_nilpotent_alpha) nilp_alpha_nilp_beta: shows "local_nilpotent_term D R β (λx. (LEAST n::nat. (β (^)R n) x = \<one>D))"
proof (unfold local_nilpotent_alpha_def local_nilpotent_term_def local_nilpotent_term_axioms_def, simp, intro conjI)
from prems show "ring_endomorphisms D R" by intro_locales
from beta_in_R show "β ∈ carrier R" by simp
show "∀x∈carrier D. (β (^)R (LEAST n::nat. (β (^)R n) x = \<one>)) x = \<one>"
proof (intro ballI)
fix x assume x_in_D: "x ∈ carrier D"
show "(β (^)R (LEAST n::nat. (β (^)R n) x = \<one>)) x = \<one>"
proof (rule LeastI_ex [of "λn::nat. (β (^)R n) x = \<one>"])
from a_local_nilpot and pert_in_R and ring_R and hom_completion_closed [OF _ x_in_D, of δ D]
have alpha_nilpot: "(α (^)R bound_phi (δ x)) (δ x) = \<one>" by simp
from beta_def have "(β (^)R (Suc (bound_phi (δ x)))) x = ((\<ominus>R (h ⊗R δ)) (^)R (Suc (bound_phi (δ x)))) x" by simp
also from h_in_R and pert_in_R and power_minus_a_b [OF h_in_R pert_in_R, of "bound_phi (δ x)"]
have "… = (\<ominus>R h ⊗R (\<ominus>R (δ ⊗R h) (^)R (bound_phi (δ x))) ⊗R δ) x" by simp
also from alpha_nilpot and alpha_def and ring_R have "… = (\<ominus>R h) \<one>" by simp
also from a_inv_closed [OF h_in_R] and ring_R and hom_completion_one [of D D "\<ominus>R h"] and D_diff_group
have "… = \<one>" by (unfold diff_group_def comm_group_def group_def, simp)
finally have beta_nil: "(β (^)R (Suc (bound_phi (δ x)))) x = \<one>" by simp
from exI [of "λn::nat. (β (^)R n) x = \<one>" "(Suc (bound_phi (δ x)))"] and beta_nil
show "∃n::nat. (β (^)R n) x = \<one>" by simp
qed
qed
qed
lemma (in local_nilpotent_alpha) bound_psi_exists: shows "∃bound_psi. local_nilpotent_term D R β bound_psi"
using nilp_alpha_nilp_beta by iprover
context local_nilpotent_alpha
begin
definition "bound_psi ≡ (λx. (LEAST n::nat. (β (^)R n) x = \<one>D))"
text{*The definition of @{term Ψ} below is equivalent to the one given in the statement of Lemma 2.3.1 in Aransay's memoir*}
definition psi_def: "Ψ ≡ local_nilpotent_term.power_series D R β bound_psi"
end
subsection{*Some properties of the endomorphisms @{term "Φ"}, @{term "Ψ"}, @{term "α"} and @{term "β"}*}
lemma (in local_nilpotent_alpha) local_nilpotent_term_alpha: shows "local_nilpotent_term D R α bound_phi"
using prems by (unfold local_nilpotent_alpha_def local_nilpotent_term_def, simp)
lemma (in local_nilpotent_alpha) local_nilpotent_term_beta: shows "local_nilpotent_term D R β bound_psi"
using prems and nilp_alpha_nilp_beta and bound_psi_def by (unfold local_nilpotent_term_def, simp)
lemma (in local_nilpotent_alpha) phi_x_in_D [simp]: shows "Φ x ∈ carrier D"
using phi_def local_nilpotent_term.power_series_def [OF local_nilpotent_term_alpha, of x]
D.finprod_closed [of "{..bound_phi x}" "(λi::nat. (α(^)Ri) x)"] and finite_nat_iff_bounded [of "{..bound_phi x}"]
and local_nilpotent_term.power_pi_D [OF local_nilpotent_term_alpha, of x "bound_phi x"] by simp
lemma (in local_nilpotent_alpha) phi_in_R [simp]: shows "Φ ∈ carrier R"
using phi_def local_nilpotent_term.power_series_in_R [OF local_nilpotent_term_alpha] by simp
lemma (in local_nilpotent_alpha) phi_in_hom: shows "Φ ∈ hom_completion D D"
using phi_in_R and ring_R by simp
lemma (in local_nilpotent_alpha) psi_in_R [simp]: shows "Ψ ∈ carrier R"
using psi_def local_nilpotent_term.power_series_in_R [OF local_nilpotent_term_beta] by simp
lemma (in local_nilpotent_alpha) psi_in_hom: shows "Ψ ∈ hom_completion D D"
using psi_in_R and ring_R by simp
lemma (in local_nilpotent_alpha) psi_x_in_D [simp]: shows "Ψ x ∈ carrier D"
using psi_def local_nilpotent_term.power_series_def [OF local_nilpotent_term_beta, of x]
D.finprod_closed [of "{..bound_psi x}" "(λi::nat. (α(^)Ri) x)"] and finite_nat_iff_bounded [of "{..bound_psi x}"]
and local_nilpotent_term.power_pi_D [OF local_nilpotent_term_beta, of x "bound_psi x"] by simp
lemma (in local_nilpotent_alpha) h_alpha_eq_beta_h: "h ⊗R α(^)R(i::nat) = β (^)R i ⊗R h"
proof (induct i)
case 0
from h_in_R and R.nat_pow_0 show "h ⊗R α (^)R (0::nat) = β (^)R (0::nat) ⊗R h" by simp
next
case (Suc i)
assume hypo: "h ⊗R α (^)R i = β (^)R i ⊗R h"
from R.nat_pow_mult [OF beta_in_R, of "(1::nat)" i] and R.nat_pow_1 [OF beta_in_R]
have "β (^)R (Suc i) ⊗R h = β ⊗R β (^)R i ⊗R h" by simp
also from hypo and R.m_assoc [OF beta_in_R beta_i_in_R [of i] h_in_R] have "… = β ⊗R (h ⊗R α (^)R i)" by simp
also from sym [OF R.m_assoc [OF beta_in_R h_in_R alpha_i_in_R [of i]]] and beta_def and h_in_R pert_in_R alpha_i_in_R [of i]
have "… = h ⊗R \<ominus>R (δ ⊗R h) ⊗R α (^)R i" by algebra
also from R.m_assoc [OF h_in_R _ alpha_i_in_R [of i], of "\<ominus>R (δ ⊗R h)"] pert_in_R h_in_R
have "… = h ⊗R (\<ominus>R (δ ⊗R h) ⊗R α (^)R i)" by simp
also from alpha_def and sym [OF R.nat_pow_1 [OF alpha_in_R]] and R.nat_pow_mult [OF alpha_in_R, of "(1::nat)" i]
have "… = h ⊗R α (^)R (Suc i)" by simp
finally show "h ⊗R α (^)R Suc i = β (^)R Suc i ⊗R h" by simp
qed
subsection{*Lemmas 2.2.1 to 2.2.6*}
text{*Lemma 2.2.1*}
lemma (in local_nilpotent_alpha) lemma_2_2_1: shows "bound_psi (h x) ≤ bound_phi x"
proof -
from h_alpha_eq_beta_h and ring_R have "(β (^)R bound_phi x) (h x) = (h ((α (^)R bound_phi x) x))" by (auto simp add: expand_fun_eq)
also have "… = h (\<one>)"
proof (cases "x ∈ carrier D")
case True with local_nilpotent_term.a_local_nilpot [OF local_nilpotent_term_alpha] show ?thesis by simp
next
case False from alpha_i_in_R [of "bound_phi x"] and ring_R and completion_closed2 [OF _ False, of "α (^)R bound_phi x" D]
show ?thesis unfolding hom_completion_def by simp
qed
also from hom_completion_one [of D D h] h_in_R ring_R and D_diff_group have "… = \<one>" unfolding diff_group_def comm_group_def group_def by simp
finally have beta_x_h_x_eq_one: "(β (^)R bound_phi x) (h x) = \<one>" by simp
have beta_h_x_h_x_eq_one: "(β (^)R bound_psi (h x)) (h x) = \<one>"
proof (cases "h x ∈ carrier D")
case True with local_nilpotent_term.a_local_nilpot [OF local_nilpotent_term_beta] show ?thesis by simp
next
case False with ring_R and h_in_R
show ?thesis unfolding hom_completion_def completion_fun2_def completion_def hom_def Pi_def by auto
qed
from beta_x_h_x_eq_one and beta_h_x_h_x_eq_one
and local_nilpotent_term.bound_is_least [OF local_nilpotent_term_beta, of "h x"]
and Least_le [of "λi::nat. (β (^)R i) (h x) = \<one>" "bound_phi x"] show ?thesis by simp
qed
text{*Lemma 2.2.3 with endomorphisms applied to elements*}
lemma (in local_nilpotent_alpha) lemma_2_2_3_elements: shows "(h o Φ) x = (Ψ o h) x"
proof -
let ?max = "max (bound_phi x) (bound_psi x)"
from ring_R have "(h o Φ) x = h (Φ x)" by simp
also from phi_def have "… = h (local_nilpotent_term.power_series D R α bound_phi x)" by simp
also from local_nilpotent_term.power_series_extended [OF local_nilpotent_term_alpha, of x ?max]
and le_maxI1 [of "bound_phi x" "bound_psi x"]
have "… = h (\<Otimes>i∈{..?max}. (α (^)R i) x)" by simp
also from local_nilpotent_term.power_series_dist_l [OF local_nilpotent_term_alpha h_in_R, of x ?max] and h_in_R
have "… = (\<Otimes>i∈{..?max}. h ((α (^)R i) x))" by simp
also from h_alpha_eq_beta_h and ring_R have "… = (\<Otimes>i∈{..?max}. ((β (^)R i) (h x)))" by (auto simp add: expand_fun_eq)
also from sym [OF local_nilpotent_term.power_series_extended [OF local_nilpotent_term_beta, of "h x" ?max]]
and lemma_2_2_1 [of x]
have "… = local_nilpotent_term.power_series D R β bound_psi (h x)" by arith
also from psi_def have "… = Ψ (h x)" by simp
also have "… = (Ψ o h) x" by simp
finally show ?thesis by simp
qed
text{*Lemma 2.2.3 with endomorphisms*}
corollary (in local_nilpotent_alpha) lemma_2_2_3: shows "(h o Φ) = (Ψ o h)" using lemma_2_2_3_elements by (simp add: expand_fun_eq)
text{*The following lemma is simple a renaming of the previous one; the idea is to give to the previous result
the name it had before as a premise, to keep the files correspoding to the equational part of the proof working*}
lemma (in local_nilpotent_alpha) psi_h_h_phi: shows "Ψ ⊗R h = h ⊗R Φ" using lemma_2_2_3 and ring_R by simp
lemma (in local_nilpotent_alpha) alpha_delta_eq_delta_beta: shows "α(^)R(i::nat) ⊗R δ = δ ⊗R β (^)R i"
proof (induct i)
case 0
from pert_in_R and R.nat_pow_0 show "α (^)R (0::nat) ⊗R δ = δ ⊗R β (^)R (0::nat)" by simp
next
case (Suc i)
assume hypo: "α (^)R i ⊗R δ = δ ⊗R β (^)R i"
from R.nat_pow_mult [OF alpha_in_R, of "(1::nat)" i] and R.nat_pow_1 [OF alpha_in_R]
have "α (^)R (Suc i) ⊗R δ = α ⊗R α (^)R i ⊗R δ" by simp
also from hypo and R.m_assoc [OF alpha_in_R alpha_i_in_R [of i] pert_in_R] have "… = α ⊗R (δ ⊗R β (^)R i)" by simp
also from sym [OF R.m_assoc [OF alpha_in_R pert_in_R beta_i_in_R [of i]]] and alpha_def and h_in_R pert_in_R beta_i_in_R [of i]
have "… = δ ⊗R \<ominus>R (h ⊗R δ) ⊗R β (^)R i" by algebra
also from R.m_assoc [OF pert_in_R _ beta_i_in_R [of i], of "\<ominus>R (h ⊗R δ)"] pert_in_R h_in_R
have "… = δ ⊗R (\<ominus>R (h ⊗R δ) ⊗R β (^)R i)" by simp
also from beta_def and sym [OF R.nat_pow_1 [OF beta_in_R]] and R.nat_pow_mult [OF beta_in_R, of "(1::nat)" i]
have "… = δ ⊗R β (^)R (Suc i)" by simp
finally show "α (^)R Suc i ⊗R δ = δ ⊗R β (^)R Suc i" by simp
qed
text{*Lemma 2.2.2 in Aransay's memoir*}
lemma (in local_nilpotent_alpha) lemma_2_2_2: shows "bound_phi (δ x) ≤ bound_psi x"
proof -
from alpha_delta_eq_delta_beta and ring_R have "(α (^)R bound_psi x) (δ x) = (δ ((β (^)R bound_psi x) x))" by (auto simp add: expand_fun_eq)
also have "… = δ (\<one>)"
proof (cases "x ∈ carrier D")
case True with local_nilpotent_term.a_local_nilpot [OF local_nilpotent_term_beta] show ?thesis by simp
next
case False from beta_i_in_R [of "bound_psi x"] and ring_R and completion_closed2 [OF _ False, of "β (^)R bound_psi x" D]
show ?thesis unfolding hom_completion_def by simp
qed
also from hom_completion_one [of D D δ] pert_in_R ring_R and D_diff_group have "… = \<one>"
unfolding diff_group_def comm_group_def group_def by simp
finally have alpha_x_pert_x_eq_one: "(α (^)R bound_psi x) (δ x) = \<one>" by simp
have alpha_pert_x_pert_x_eq_one: "(α (^)R bound_phi (δ x)) (δ x) = \<one>"
proof (cases "δ x ∈ carrier D")
case True with local_nilpotent_term.a_local_nilpot [OF local_nilpotent_term_alpha] show ?thesis by simp
next
case False with ring_R and pert_in_R
show ?thesis unfolding hom_completion_def completion_fun2_def completion_def hom_def Pi_def by auto
qed
from alpha_x_pert_x_eq_one and alpha_pert_x_pert_x_eq_one
and local_nilpotent_term.bound_is_least [OF local_nilpotent_term_alpha, of "δ x"]
and Least_le [of "λi::nat. (α (^)R i) (δ x) = \<one>" "bound_psi x"] show ?thesis by simp
qed
text{*Lemma 2.2.4 over endomorphisms applied to generic elements*}
lemma (in local_nilpotent_alpha) lemma_2_2_4_elements: shows "(δ o Ψ) x = (Φ o δ) x"
proof -
let ?max = "max (bound_psi x) (bound_phi x)"
from ring_R have "(δ o Ψ) x = δ (Ψ x)" by simp
also from psi_def have "… = δ (local_nilpotent_term.power_series D R β bound_psi x)" by simp
also from local_nilpotent_term.power_series_extended [OF local_nilpotent_term_beta, of x ?max]
and le_maxI1 [of "bound_psi x" "bound_phi x"]
have "… = δ (\<Otimes>i∈{..?max}. (β (^)R i) x)" by simp
also from local_nilpotent_term.power_series_dist_l [OF local_nilpotent_term_beta pert_in_R, of x ?max] and pert_in_R
have "… = (\<Otimes>i∈{..?max}. δ ((β (^)R i) x))" by simp
also from alpha_delta_eq_delta_beta and ring_R have "… = (\<Otimes>i∈{..?max}. ((α (^)R i) (δ x)))" by (auto simp add: expand_fun_eq)
also from sym [OF local_nilpotent_term.power_series_extended [OF local_nilpotent_term_alpha, of "δ x" ?max]]
and lemma_2_2_2 [of x] have "… = local_nilpotent_term.power_series D R α bound_phi (δ x)" by arith
also from phi_def have "… = (Φ o δ) x" by simp
finally show ?thesis by simp
qed
text{*Lemma 2.2.4 over endomorphisms*}
corollary (in local_nilpotent_alpha) lemma_2_2_4: shows "(δ o Ψ) = (Φ o δ)" using lemma_2_2_4_elements by (simp add: expand_fun_eq)
text{*The following lemma is simple a renaming of the previous one; the idea is to give to the previous result
the name it had before as a premise, to keep the files correspoding to the equational part of the proof working*}
lemma (in local_nilpotent_alpha) delta_psi_phi_delta: shows "δ ⊗R Ψ = Φ ⊗R δ" using lemma_2_2_4 and ring_R by simp
text{*Lemma 2.2.5 over a generic element of the domain*}
lemma (in local_nilpotent_alpha) lemma_2_2_5_elements: shows "Ψ x = (\<one>R \<ominus>R (h ⊗R δ ⊗R Ψ)) x" and "Ψ x = (\<one>R \<ominus>R (h ⊗R Φ ⊗R δ)) x"
and "Ψ x = (\<one>R \<ominus>R (Ψ ⊗R h ⊗R δ)) x"
proof -
from psi_def have "Ψ x = local_nilpotent_term.power_series D R β bound_psi x" by simp
also from local_nilpotent_term.power_series_extended [OF local_nilpotent_term_beta, of x "Suc (bound_psi x)"]
have "… = (\<Otimes>j∈{..Suc (bound_psi x)}. (β (^)R j) x)" by simp
also from local_nilpotent_term.power_series_first_element [OF local_nilpotent_term_beta, of x "Suc (bound_psi x)"]
have "… = (β (^)R (0::nat)) x ⊗ (\<Otimes>j∈{1..Suc (bound_psi x)}. (β (^)R j) x)" by simp
also from local_nilpotent_term.power_series_factor [OF local_nilpotent_term_beta, of x "bound_psi x"]
have "… = (β (^)R (0::nat)) x ⊗ (β (\<Otimes>j∈{..bound_psi x}. (β (^)R j) x))" by simp
also from R.nat_pow_0 [of β] and beta_def and psi_def
and local_nilpotent_term.power_series_def [OF local_nilpotent_term_beta, of x] ring_R
have "… = \<one>R x ⊗ (\<ominus>R (h ⊗R δ) ⊗R Ψ) x" by simp
also have "… = (\<one>R ⊕R (\<ominus>R (h ⊗R δ) ⊗R Ψ)) x"
proof (cases "x ∈ carrier D")
case True with ring_R show ?thesis by simp
next
case False
with ring_R have one_x: "\<one>R x = \<one>" by simp
moreover
from h_in_R pert_in_R and psi_in_R have "(\<ominus>R (h ⊗R δ) ⊗R Ψ) ∈ carrier R" by simp
with False and ring_R and completion_closed2 [of "(\<ominus>R (h ⊗R δ) ⊗R Ψ)" D D x] have h_pert_psi: "(\<ominus>R (h ⊗R δ) ⊗R Ψ) x = \<one>"
by (unfold hom_completion_def, simp)
moreover
from h_in_R pert_in_R and psi_in_R have "\<one>R ⊕R (\<ominus>R (h ⊗R δ) ⊗R Ψ) ∈ carrier R" by simp
with False and ring_R and completion_closed2 [of "(\<ominus>R (h ⊗R δ) ⊗R Ψ)" D D x]
have one_h_pert_psi: "(\<one>R ⊕R \<ominus>R (h ⊗R δ) ⊗R Ψ) x = \<one>" by simp
ultimately show ?thesis by simp
qed
also from R.one_closed and pert_in_R and h_in_R and psi_in_R have "… = (\<one>R \<ominus>R (h ⊗R δ ⊗R Ψ)) x" by algebra
finally show psi_eq: "Ψ x = (\<one>R \<ominus>R (h ⊗R δ ⊗R Ψ)) x" by simp
from lemma_2_2_4 and R.m_assoc [OF h_in_R pert_in_R psi_in_R] and sym [OF R.m_assoc [OF h_in_R phi_in_R pert_in_R]] and ring_R and psi_eq
show psi_eq2: "Ψ x = (\<one>R \<ominus>R (h ⊗R Φ ⊗R δ)) x" by simp
with lemma_2_2_3 and ring_R show "Ψ x = (\<one>R \<ominus>R (Ψ ⊗R h ⊗R δ)) x" by simp
qed
text{*Lemma 2.2.5 in generic terms*}
lemma (in local_nilpotent_alpha) lemma_2_2_5: shows "Ψ = \<one>R \<ominus>R (h ⊗R δ ⊗R Ψ)" and "Ψ = \<one>R \<ominus>R (h ⊗R Φ ⊗R δ)"
and "Ψ = \<one>R \<ominus>R (Ψ ⊗R h ⊗R δ)" using lemma_2_2_5_elements by (simp_all add: expand_fun_eq)
text{*The following lemma is simple a renaming of the previous one; the idea is to give to the previous result
the name it had before as a premise, to keep the proofs correspoding to the equational part of the proof working*}
lemma (in local_nilpotent_alpha) psi_prop: shows "Ψ = \<one>R \<ominus>R (h ⊗R δ ⊗R Ψ)" and "Ψ = \<one>R \<ominus>R (h ⊗R Φ ⊗R δ)"
and "Ψ = \<one>R \<ominus>R (Ψ ⊗R h ⊗R δ)" using lemma_2_2_5 .
text{*Lemma 2.2.6 over a generic element of the domain*}
lemma (in local_nilpotent_alpha) lemma_2_2_6_elements: shows "Φ x = (\<one>R \<ominus>R (δ ⊗R h ⊗R Φ)) x" and "Φ x = (\<one>R \<ominus>R (δ ⊗R Ψ ⊗R h)) x"
and "Φ x = (\<one>R \<ominus>R (Φ ⊗R δ ⊗R h)) x"
proof -
from phi_def have "Φ x = local_nilpotent_term.power_series D R α bound_phi x" by simp
also from local_nilpotent_term.power_series_extended [OF local_nilpotent_term_alpha, of x "Suc (bound_phi x)"]
have "… = (\<Otimes>j∈{..Suc (bound_phi x)}. (α (^)R j) x)" by simp
also from local_nilpotent_term.power_series_first_element [OF local_nilpotent_term_alpha, of x "Suc (bound_phi x)"]
have "… = (α (^)R (0::nat)) x ⊗ (\<Otimes>j∈{1..Suc (bound_phi x)}. (α (^)R j) x)" by simp
also from local_nilpotent_term.power_series_factor [OF local_nilpotent_term_alpha, of x "bound_phi x"]
have "… = (α (^)R (0::nat)) x ⊗ (α (\<Otimes>j∈{..bound_phi x}. (α (^)R j) x))" by simp
also from R.nat_pow_0 [of α] and alpha_def and phi_def and local_nilpotent_term.power_series_def [OF local_nilpotent_term_alpha, of x]
ring_R
have "… = \<one>R x ⊗ (\<ominus>R (δ ⊗R h) ⊗R Φ) x" by simp
also have "… = (\<one>R ⊕R (\<ominus>R (δ ⊗R h) ⊗R Φ)) x"
proof (cases "x ∈ carrier D")
case True with ring_R show ?thesis by simp
next
case False
with ring_R have one_x: "\<one>R x = \<one>" by simp
moreover
from h_in_R pert_in_R and phi_in_R have "(\<ominus>R (δ ⊗R h) ⊗R Φ) ∈ carrier R" by simp
with False and ring_R and completion_closed2 [of "(\<ominus>R (δ ⊗R h) ⊗R Φ)" D D x] have h_pert_psi: "(\<ominus>R (δ ⊗R h) ⊗R Φ) x = \<one>"
unfolding hom_completion_def by simp
moreover
from h_in_R pert_in_R and phi_in_R have "\<one>R ⊕R (\<ominus>R (δ ⊗R h) ⊗R Φ) ∈ carrier R" by simp
with False and ring_R and completion_closed2 [of "(\<ominus>R (δ ⊗R h) ⊗R Φ)" D D x]
have one_h_pert_psi: "(\<one>R ⊕R \<ominus>R (δ ⊗R h) ⊗R Φ) x = \<one>" by simp
ultimately show ?thesis by simp
qed
also from R.one_closed and pert_in_R and h_in_R and phi_in_R have "… = (\<one>R \<ominus>R (δ ⊗R h ⊗R Φ)) x" by algebra
finally show phi_eq: "Φ x = (\<one>R \<ominus>R (δ ⊗R h ⊗R Φ)) x" by simp
from lemma_2_2_3 and R.m_assoc [OF pert_in_R h_in_R phi_in_R] and sym [OF R.m_assoc [OF pert_in_R psi_in_R h_in_R]] and ring_R and phi_eq
show phi_eq2: "Φ x = (\<one>R \<ominus>R (δ ⊗R Ψ ⊗R h)) x" by simp
with lemma_2_2_4 and ring_R show "Φ x = (\<one>R \<ominus>R (Φ ⊗R δ ⊗R h)) x" by simp
qed
text{*Lemma 2.2.6*}
lemma (in local_nilpotent_alpha) lemma_2_2_6: shows "Φ = (\<one>R \<ominus>R (δ ⊗R h ⊗R Φ))" and "Φ = (\<one>R \<ominus>R (δ ⊗R Ψ ⊗R h))"
and "Φ = (\<one>R \<ominus>R (Φ ⊗R δ ⊗R h))" using lemma_2_2_6_elements by (simp_all add: expand_fun_eq)
text{*The following lemma is simple a renaming of the previous one; the idea is to give to the previous result
the name it had before as a premise, to keep the proofs correspoding to the equational part of the proof working*}
lemma (in local_nilpotent_alpha) phi_prop: shows "Φ = \<one>R \<ominus>R (δ ⊗R h ⊗R Φ)" and "Φ = \<one>R \<ominus>R (δ ⊗R Ψ ⊗R h)"
and "Φ = \<one>R \<ominus>R (Φ ⊗R δ ⊗R h)" using lemma_2_2_6 .
end
lemma nat_pow_1:
x ∈ carrier G ==> x (^) 1 = x
lemma a_n_zero_a_m_zero:
bound_funct x ≤ m ==> (a (^)R m) x = \<one>
lemma power_pi:
op (^)R a ∈ {..k} -> carrier R
lemma power_pi_D:
(λi. (a (^)R i) x) ∈ {..k} -> carrier D
lemma finprod_eq_finsum_bound_funct:
(\<Otimes>i∈{..bound_funct x}. (a (^)R i) x) =
finsum R (op (^)R a) {..bound_funct x} x
lemma power_series_closed:
(\<Otimes>i∈{..m}. (a (^)R i) x) ∈ carrier D
lemma power_series_closed2:
(\<Otimes>i∈{..bound_funct x}. (a (^)R i) x) ∈ carrier D
lemma power_series_extended:
bound_funct x ≤ m ==> power_series x = (\<Otimes>i∈{..m}. (a (^)R i) x)
lemma power_series_in_R:
power_series ∈ carrier R
lemma finsum_dist_r:
[| a ∈ carrier R; b ∈ carrier R |]
==> b ⊗ finsum R (op (^) a) {..m} = (\<Oplus>i∈{..m}. b ⊗ a (^) i)
lemma b_power_pi_D:
b ∈ carrier R ==> (λi. b ((a (^)R i) x)) ∈ {..k} -> carrier D
lemma nat_pow_closed_D:
(a (^)R m) x ∈ carrier D
lemma power_series_dist_l:
b ∈ carrier R
==> b (\<Otimes>i∈{..m}. (a (^)R i) x) = (\<Otimes>i∈{..m}. b ((a (^)R i) x))
lemma power_pi_b_D:
b ∈ carrier R ==> (λi. (a (^)R i) (b x)) ∈ {..k} -> carrier D
lemma power_series_dist_r:
b ∈ carrier R
==> (\<Otimes>i∈{..m}. (a (^)R i) (b x)) = (\<Otimes>i∈{..m}. (a (^)R i) (b x))
lemma finprod_singleton:
f ∈ {i} -> carrier G ==> finprod G f {i} = f i
lemma power_series_first_element:
(\<Otimes>i∈{..i}. (a (^)R i) x) =
(a (^)R 0) x ⊗ (\<Otimes>i∈{1..i}. (a (^)R i) x)
lemma power_series_factor:
(\<Otimes>j∈{1..Suc i}. (a (^)R j) x) = a (\<Otimes>j∈{..i}. (a (^)R j) x)
lemma diff_group_pert_is_diff_group:
diff_group
(| carrier = carrier D, mult = op ⊗, one = \<one>,
diff = λx. if x ∈ carrier D then (differ) x ⊗ δ x else \<one> |)
lemma pert_is_hom:
δ ∈ hom_completion D D
lemma diff_group_pert_is_diff_group:
δ ∈ pert D
==> diff_group
(| carrier = carrier D, mult = op ⊗, one = \<one>, diff = differ ⊕R δ |)
lemma pert_in_R:
δ ∈ pert D ==> δ ∈ carrier R
lemma diff_pert_in_R:
δ ∈ pert D ==> differ ⊕R δ ∈ carrier R
lemma pert_in_R:
δ ∈ carrier R
lemma h_in_R:
h ∈ carrier R
lemma alpha_in_R:
α ∈ carrier R
lemma beta_in_R:
β ∈ carrier R
lemma alpha_i_in_R:
α (^)R i ∈ carrier R
lemma beta_i_in_R:
β (^)R i ∈ carrier R
lemma power_minus_a_b:
[| a ∈ carrier R; b ∈ carrier R |]
==> \<ominus> (a ⊗ b) (^) Suc n = \<ominus> a ⊗ \<ominus> (b ⊗ a) (^) n ⊗ b
lemma nilp_alpha_nilp_beta:
local_nilpotent_term D R β (λx. LEAST n. (β (^)R n) x = \<one>)
lemma bound_psi_exists:
∃bound_psi. local_nilpotent_term D R β bound_psi
lemma local_nilpotent_term_alpha:
local_nilpotent_term D R α bound_phi
lemma local_nilpotent_term_beta:
local_nilpotent_term D R β bound_psi
lemma phi_x_in_D:
Φ x ∈ carrier D
lemma phi_in_R:
Φ ∈ carrier R
lemma phi_in_hom:
Φ ∈ hom_completion D D
lemma psi_in_R:
Ψ ∈ carrier R
lemma psi_in_hom:
Ψ ∈ hom_completion D D
lemma psi_x_in_D:
Ψ x ∈ carrier D
lemma h_alpha_eq_beta_h:
h ⊗R α (^)R i = β (^)R i ⊗R h
lemma lemma_2_2_1:
bound_psi (h x) ≤ bound_phi x
lemma lemma_2_2_3_elements:
(h o Φ) x = (Ψ o h) x
corollary lemma_2_2_3:
h o Φ = Ψ o h
lemma psi_h_h_phi:
Ψ ⊗R h = h ⊗R Φ
lemma alpha_delta_eq_delta_beta:
α (^)R i ⊗R δ = δ ⊗R β (^)R i
lemma lemma_2_2_2:
bound_phi (δ x) ≤ bound_psi x
lemma lemma_2_2_4_elements:
(δ o Ψ) x = (Φ o δ) x
corollary lemma_2_2_4:
δ o Ψ = Φ o δ
lemma delta_psi_phi_delta:
δ ⊗R Ψ = Φ ⊗R δ
lemma lemma_2_2_5_elements(1):
Ψ x = (\<one>R \<ominus>R h ⊗R δ ⊗R Ψ) x
and lemma_2_2_5_elements(2):
Ψ x = (\<one>R \<ominus>R h ⊗R Φ ⊗R δ) x
and lemma_2_2_5_elements(3):
Ψ x = (\<one>R \<ominus>R Ψ ⊗R h ⊗R δ) x
lemma lemma_2_2_5(1):
Ψ = \<one>R \<ominus>R h ⊗R δ ⊗R Ψ
and lemma_2_2_5(2):
Ψ = \<one>R \<ominus>R h ⊗R Φ ⊗R δ
and lemma_2_2_5(3):
Ψ = \<one>R \<ominus>R Ψ ⊗R h ⊗R δ
lemma psi_prop(1):
Ψ = \<one>R \<ominus>R h ⊗R δ ⊗R Ψ
and psi_prop(2):
Ψ = \<one>R \<ominus>R h ⊗R Φ ⊗R δ
and psi_prop(3):
Ψ = \<one>R \<ominus>R Ψ ⊗R h ⊗R δ
lemma lemma_2_2_6_elements(1):
Φ x = (\<one>R \<ominus>R δ ⊗R h ⊗R Φ) x
and lemma_2_2_6_elements(2):
Φ x = (\<one>R \<ominus>R δ ⊗R Ψ ⊗R h) x
and lemma_2_2_6_elements(3):
Φ x = (\<one>R \<ominus>R Φ ⊗R δ ⊗R h) x
lemma lemma_2_2_6(1):
Φ = \<one>R \<ominus>R δ ⊗R h ⊗R Φ
and lemma_2_2_6(2):
Φ = \<one>R \<ominus>R δ ⊗R Ψ ⊗R h
and lemma_2_2_6(3):
Φ = \<one>R \<ominus>R Φ ⊗R δ ⊗R h
lemma phi_prop(1):
Φ = \<one>R \<ominus>R δ ⊗R h ⊗R Φ
and phi_prop(2):
Φ = \<one>R \<ominus>R δ ⊗R Ψ ⊗R h
and phi_prop(3):
Φ = \<one>R \<ominus>R Φ ⊗R δ ⊗R h