Theory lemma_2_2_15_local_nilpot

Up to index of Isabelle/HOL/HOL-Algebra/BPL

theory lemma_2_2_15_local_nilpot
imports analytic_part_local
begin

(*  Title:      bpl/lemma_2_2_15_local_nilpot.thy
    ID:         $Id: lemma_2_2_15_local_nilpot.thy $
    Author:     Jesus Aransay
    Comments:   The set of lemmas proving the equational part of the BPL
*)

header{*Lemma 2.2.15 in Aransay's memoir*}

theory lemma_2_2_15_local_nilpot imports analytic_part_local
  begin

text{*We define a locale setting merging the specifications introduced for @{text "lemma 2.2.14"} and also the one created for the
  @{text "local nilpotent term alpha"}*}
text{*A few definitions are also provided in this locale setting*}

locale lemma_2_2_15 = lemma_2_2_14 D R h + local_nilpotent_alpha D R C f g h δ α bound_phi

definition (in lemma_2_2_15)
  h' where "h' == h ⊗R Φ"
definition (in lemma_2_2_15)
  p' where "p' == ((differD) ⊕R δ) ⊗R h' ⊕R h' ⊗R ((differD) ⊕R δ)"
definition (in lemma_2_2_15)
  diff' where "diff' == differ ⊕R δ"
definition (in lemma_2_2_15)
  D' where "D' == (| carrier = carrier D, mult = mult D, one = one D, diff = differ ⊕R δ|)),"
definition (in lemma_2_2_15)
  ker_p' where "ker_p' == kernel (| carrier = carrier D, mult = mult D, one = one D, diff = differ ⊕R δ|)),
  (| carrier = carrier D, mult = mult D, one = one D, diff = differ ⊕R δ|)), p'"
definition (in lemma_2_2_15)
  diff_group_ker_p' where "diff_group_ker_p' == (|carrier = kernel (| carrier = carrier D, mult = mult D, one = one D, diff = differ ⊕R δ|)),
  (| carrier = carrier D, mult = mult D, one = one D, diff = differ ⊕R δ|)), p', mult = mult D,
  one = one D, diff = completion ((|carrier = kernel (| carrier = carrier D, mult = mult D, one = one D, diff = differ ⊕R δ|)),
  (| carrier = carrier D, mult = mult D, one = one D, diff = differ ⊕R δ|)), p', mult = mult D, one = one D, diff = differ ⊕R δ|)),)
  (| carrier = carrier D, mult = mult D, one = one D, diff = differ ⊕R δ|)), (differ ⊕R δ) |)),"
definition (in lemma_2_2_15)
  inc_ker_p' where "inc_ker_p' == (λx. if x ∈ kernel (| carrier = carrier D, mult = mult D, one = one D, diff = differ ⊕R δ|)),
  (| carrier = carrier D, mult = mult D, one = one D, diff = differ ⊕R δ|)),  p' then x else \<one>D')"

lemma (in lemma_2_2_15) h'_in_R [simp]: shows "h' ∈ carrier R"
  using h'_def by simp

lemma (in lemma_2_2_15) pert_in_R [simp]: shows "δ ∈ carrier R"
  using delta_pert and pert_def [of D] by simp

lemma (in lemma_2_2_15) p'_in_R [simp]: shows "p' ∈ carrier R"
  using p'_def and diff_pert_in_R [OF delta_pert] and h'_in_R by simp

lemma (in lemma_2_2_15) diff'_in_R [simp]: shows "diff' ∈ carrier R"
  using diff'_def diff_in_R pert_in_R by simp

text{*The endomorphisms (not the differential endomorphisms) over a differential group happen to be the same ones as
  the homomorphisms over a perturbed version of this differential group*}
text{*In other words, the definition of homomorphism over a differential group is independient of the differential*}
text{*In the case of differential homomorphisms, this is not always true*}

lemma (in ring_endomorphisms) hom_completion_eq: assumes "δ ∈ pert D"
  shows "hom_completion (|carrier = carrier D, mult = mult D, one = one D, diff = differ ⊕R δ|)),
  (|carrier = carrier D, mult = mult D, one = one D, diff = differ ⊕R δ|)), = hom_completion D D"
  using ring_R by (unfold hom_completion_def completion_fun2_def completion_def hom_def expand_fun_eq) (auto)

lemma (in ring_endomorphisms) ring_endomorphisms_pert: assumes delta: "δ ∈ pert D"
  shows "ring_endomorphisms (|carrier = carrier D, mult = mult D, one = one D, diff = differ ⊕R δ|)), R"
  (is "ring_endomorphisms ?D' R")
proof -
  from diff_group_pert_is_diff_group [OF delta] have diff_group_pert: "diff_group ?D'" by simp
  moreover from ring_endomorphisms_def [of D R] and prems have R_ring: "ring R" by (unfold ring_def, simp)
  moreover from ring_R have "R = (|carrier = hom_completion ?D' ?D', mult = op o,
    one = λx. if x ∈ carrier ?D' then id x else \<one>?D',
    zero = λx. if x ∈ carrier ?D' then \<one>?D' else \<one>?D',
    add = λf g x. if x ∈ carrier ?D' then f x ⊗?D'  g x else \<one>?D'|)),"
    proof -
    from ring_R and hom_completion_eq [OF delta] have "carrier R = hom_completion ?D' ?D'" by simp
    moreover from ring_R have "mult R = op o" by simp
    moreover from ring_R have "one R = (λx. if x ∈ carrier ?D' then id x else \<one>?D')" by (simp add: expand_fun_eq)
    moreover from ring_R have "zero R = (λx. if x ∈ carrier ?D' then \<one>?D' else \<one>?D')" by simp
    moreover from ring_R have "add R = (λf g x. if x ∈ carrier ?D' then f x ⊗?D' g x else \<one>?D')" by (simp add: expand_fun_eq)
    ultimately show ?thesis by auto
      (* Another possible proof, a bit more obscure
      apply (unfold ring_endomorphisms_def expand_fun_eq)
      apply (auto simp add: prems)
      apply (unfold hom_completion_def completion_fun2_def completion_def hom_def expand_fun_eq)
      apply (auto simp add: prems)
      *)
  qed
  ultimately show ?thesis by (unfold ring_endomorphisms_def ring_endomorphisms_axioms_def ring_def diff_group_def, simp)
qed

text{*The two following lemmas prove that @{term [locale=lemma_2_2_15] "h' ⊗R h' = \<zero>R"}
  and @{term [locale=lemma_2_2_15] "h' ⊗R diff' ⊗R h' = h'"};
  these are the properties that will allow us to introduce @{thm [locale=lemma_2_2_14] lemma_2_2_14}
  in order to define the reduction needed for @{text "Lemma 2.2.15"}*}

lemma (in lemma_2_2_15) h'_nil: shows "h' ⊗R h' = \<zero>R"
proof -
  from h'_def have "h' ⊗R h' = (h ⊗R Φ) ⊗R (h ⊗R Φ)" by simp
  also from psi_h_h_phi and h_in_R phi_in_R psi_in_R and R.m_assoc [of Ψ h "(h ⊗R Φ)"]
    and R.m_assoc [of h h Φ]
  have "… = Ψ ⊗R (h ⊗R h ⊗R Φ)" by simp
  also from h_nil have "… = \<zero>R" by simp
  finally show ?thesis by simp
qed

lemma (in lemma_2_2_15) h'd'h'_h': shows "h' ⊗R diff' ⊗R h' = h'"
    (*Maybe this simplification process could be tried in another theorem prover, just in order to see if it succeeds faster*)
    (*The equations in the premises are a bit tricky, since they can produce very easily infinite loops*)
proof -
  from h'_def have "h' ⊗R diff' ⊗R h' = (h ⊗R Φ) ⊗R diff' ⊗R (h ⊗R Φ)" by simp
  also from psi_h_h_phi have "… = (Ψ ⊗R h) ⊗R diff' ⊗R (h ⊗R Φ)" by simp
  also from h_in_R phi_in_R psi_in_R diff'_def diff_in_R pert_in_R
  have "… = (Ψ ⊗R (h ⊗R (differD) ⊗R h ⊗R Φ)) ⊕R (Ψ ⊗R h) ⊗R ((δ ⊗R h) ⊗R Φ)" by algebra
  also have "… = (Ψ ⊗R (h ⊗R Φ)) ⊕R (Ψ ⊗R h) ⊗R (\<one>R \<ominus>R Φ)"
  proof -
    from phi_prop have "Φ = \<one>R \<ominus>R δ ⊗R h ⊗R Φ" by simp
    with h_in_R phi_in_R pert_in_R have "\<one>R \<ominus>R Φ = \<one>R \<ominus>R  (\<one>R \<ominus>R δ ⊗R h ⊗R Φ)" by algebra
    with h_in_R phi_in_R pert_in_R have r_h_p: "\<one>R \<ominus>R Φ = δ ⊗R h ⊗R Φ" by algebra
    from hdh_h have l_h_p: "h ⊗R (differD) ⊗R h = h" by simp
    from r_h_p and l_h_p show ?thesis by simp
  qed
  also from h_in_R phi_in_R psi_in_R diff_in_R pert_in_R have "… = Ψ ⊗R h ⊗R Φ ⊕R Ψ ⊗R h \<ominus>R Ψ ⊗R h ⊗R Φ" by algebra (simp)
    (*Here I would expect "by algebra" to finish the work*)
  also from h_in_R phi_in_R psi_in_R diff_in_R pert_in_R have "… = Ψ ⊗R h" by algebra
  also from psi_h_h_phi have "… = h ⊗R Φ" by simp
  also from h'_def have "… = h'" by simp
  finally show ?thesis by simp
qed

text{*The following lemma is an instantiation of @{term [locale=lemma_2_2_14] "lemma_2_2_14"}, where
  @{term [locale=lemma_2_2_15] "D' = (|carrier = carrier D, mult = mult D, one = one D, diff = differ ⊕R δ|)),"}
  @{term [locale=lemma_2_2_15] "R = R"}, and finally @{term [locale=lemma_2_2_15] "h = h ⊗R Φ"}. *}
text{*Therefore, the premises of locale @{text "lemma_2_2_14"} have to be verified *}
text{*It is not neccesary to explicitly prove that @{term [locale=lemma_2_2_15] "diff_group_ker_p'"} is a differential group,
  since it is one of the premises in the definition of reduction*}

lemma (in lemma_2_2_15) lemma_2_2_15: shows "reduction D' diff_group_ker_p' (\<one>R \<ominus>R p') inc_ker_p' h'"
proof -
    (*Point 1) in the proof in the memoir*)
  from diff_group_pert_is_diff_group and delta_pert and D'_def have diff_group_D': "diff_group D'" by simp
  moreover (*This point was omitted in the memoir; actually, it can be considered trivial*)
  from h'_in_R and ring_R and hom_completion_eq [OF delta_pert] and D'_def have "h' ∈ hom_completion D' D'" by simp
  moreover (*Point 2) in the proof in the memoir*)
  from h'_nil have h'_nilpot: "h' ⊗R h' = \<zero>R" by simp
  moreover (*Point 3) in the memoir proof*)
  from h'd'h'_h' have "h' ⊗R diff' ⊗R h' = h'" by simp
  moreover (*This point was omitted in the memoir; it can be seen as trivial in an informal proof*)
  from ring_endomorphisms_pert [OF delta_pert] and D'_def have ring_D': "ring_endomorphisms D' R" by (unfold ring_endomorphisms_def, simp)
      (*With the previous facts, lemma_2_2_14 can be directly applied*)
  ultimately have lemma_2_2_14: "lemma_2_2_14 D' R h'"
    by (unfold lemma_2_2_14_def lemma_2_2_14_axioms_def diff_group_def ring_endomorphisms_def diff'_def D'_def, simp)
  from lemma_2_2_14.p_def [OF lemma_2_2_14] lemma_2_2_14.inc_ker_p_def [OF lemma_2_2_14] lemma_2_2_14.diff_group_ker_p_def [OF lemma_2_2_14]
    lemma_2_2_14.lemma_2_2_14 [OF lemma_2_2_14] show ?thesis
    by (simp add: diff_group_ker_p'_def inc_ker_p'_def inc_ker_p_def p'_def D'_def)
qed

end

lemma h'_in_R:

  h' ∈ carrier R

lemma pert_in_R:

  δ ∈ carrier R

lemma p'_in_R:

  p' ∈ carrier R

lemma diff'_in_R:

  diff' ∈ carrier R

lemma hom_completion_eq:

  δ ∈ pert D
  ==> hom_completion
       (| carrier = carrier D, mult = op ⊗, one = \<one>, diff = differ ⊕R δ,
          ... = () |)
       (| carrier = carrier D, mult = op ⊗, one = \<one>, diff = differ ⊕R δ,
          ... = () |) =
      hom_completion D D

lemma ring_endomorphisms_pert:

  δ ∈ pert D
  ==> ring_endomorphisms
       (| carrier = carrier D, mult = op ⊗, one = \<one>, diff = differ ⊕R δ,
          ... = () |)
       R

lemma h'_nil:

  h'R h' = \<zero>R

lemma h'd'h'_h':

  h'R diff'R h' = h'

lemma lemma_2_2_15:

  reduction D' diff_group_ker_p' (\<one>R \<ominus>R p') inc_ker_p' h'